37 votos

Cambiar la escala de una variable a 0-100

He construido un índice de capital social utilizando la técnica PCA. Este índice comprende valores tanto positivos como negativos. Quiero transformar/convertir este índice en una escala de 0 a 100 para que sea fácil de interpretar. Por favor, sugiérame la forma más fácil de hacerlo.

1 votos

0 votos

El función logística utilizado en los modelos logit también puede ser útil. Depende del propósito específico.

2 votos

Escalar los datos existentes a 0-100 tiene riesgos ocultos cuando se aplica a datos futuros (o adicionales). Véase consumerreports.org/cro/cars/ Por ejemplo, donde Consumer Reports escribió "...nos enfrentamos a un dilema: el Tesla obtuvo inicialmente una puntuación de 103 en el sistema de clasificación de Consumer Reports, que por definición no pasa de 100. El coche estableció un nuevo punto de referencia, por lo que tuvimos que hacer cambios en nuestra puntuación para tenerlo en cuenta."

53voto

Uri Puntos 111

Cualquier variable (distribución univariante) v con lo observado min y max (o podrían ser límites potenciales preestablecidos para los valores) pueden ser reescalados para el rango min". a max". por fórmula (max'-min')/(max-min)(v-max)+max' o (max'-min')/(max-min)(v-min)+min' .

26voto

eroijen Puntos 101

Para R también está disponible rescale función de escalas que hace exactamente lo que quieres y lo que describen @AndrewTulloch y @ttnphns:

library(scales)
rescale(c(-10, -9, -5, 2, 6), to = c(0, 100)) ## Use scales:::rescale() if you have several packages loaded using the same function name
[1]   0.00   6.25  31.25  75.00 100.00

8voto

Hertanto Lie Puntos 965

En primer lugar, vamos a obtener algunos datos de ejemplo:

x <- runif(20, -10, 10)

Aquí hay dos funciones que funcionarán en R

rescale <- function(x) (x-min(x))/(max(x) - min(x)) * 100
rescale(x)

O bien, puede utilizar otras transformaciones. Por ejemplo, la transformación logit fue mencionada por @ondrej

plogis(x)*100

o, otras transformaciones:

pnorm(x)*100
pnorm(x, 0, 100) * 100
punif(x, min(x), max(x))*100

6voto

Stuart Puntos 9

Sólo para añadir a la respuesta de ttnphnss, para implementar este proceso en Python (por ejemplo), esta función servirá:

from __future__ import division

def rescale(values, new_min = 0, new_max = 100):
    output = []
    old_min, old_max = min(values), max(values)

    for v in values:
        new_v = (new_max - new_min) / (old_max - old_min) * (v - old_min) + new_min
        output.append(new_v)

    return output

print rescale([1, 2, 3, 4, 5])
# [0.0, 25.0, 50.0, 75.0, 100.0]

0 votos

Gracias, ¿esta fórmula se aplica también a los valores negativos? por ejemplo, si mi variable original va de -10 a 10 .

0 votos

Sí, funciona para todos los valores, por ejemplo, print rescale([-10, -9, -5, 2, 6]) # [0.0, 6.25, 31.25, 75.0, 100.0]

3voto

Aksakal Puntos 11351

Sugiero no vincular el índice al intervalo 0-100, ya que no mejora la interpretación, sino que la dificulta. Si los constituyentes del índice pueden ser negativos, entonces es posible que el índice se vuelva negativo, y refleja mejor lo que sucede con los constituyentes que algún valor bajo en el intervalo 0-100, en mi opinión.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X