Transformaciones de Box Cox para regresión

9

Estoy tratando de ajustar un modelo lineal en algunos datos con solo un predictor (digamos (x, y)). Los datos son tales que para valores pequeños de x, los valores de y se ajustan perfectamente a una línea recta, sin embargo, a medida que aumentan los valores de x, los valores de y se vuelven más volátiles. Aquí hay un ejemplo de tales datos (código R)

y = c(3.2,3.4,3.5,3.8,4.2,5.5,4.5,6.8,7.4,5.9)
x = seq(1,10,1)

Tengo curiosidad por saber si existe alguna transformación de potencia (¿quizás Box Cox?) Que me permita obtener un mejor ajuste para los datos que simplemente hacer un ajuste lineal como se muestra a continuación.

fit = lm(y ~ x)
brócoli
fuente
Según tengo entendido, el propósito de las transformaciones como Box Cox no es obtener un mejor ajuste, sino cumplir con los supuestos del modelo. Eso podría tener un mejor ajuste, un peor ajuste, o no mucho cambio, pero será un ajuste que no viole las suposiciones.
Peter Flom - Restablece a Monica
una transformación no lineal hará que una relación lineal no sea lineal (aunque a veces también puedes transformar x y arreglarlo). Sin embargo, la transformación también puede enderezar una curva y, al mismo tiempo, reducir la heterocedasticidad (aunque no siempre es posible hacer ambas cosas con la misma transformación). Para esos datos, una transformación logarítmica ayuda un poco.
Glen_b -Reinstate Monica
44
Usando los dos valores extremos y medios (quinto) de , el método que se muestra en stats.stackexchange.com/questions/35711/… indica que un logaritmo (transformación Box-Cox con parámetro 0) sería apropiado para linealizar la relación. El uso de los valores primero, sexto y último indica que el recíproco (parámetro -1) sería bueno. Esto sugiere que casi cualquier parámetro entre 0 y -1 podría funcionar. El rango no es sorprendente dado la poca información que hay. Ninguna reexpresión monotónica estabilizará la variación de estos datos. y
whuber

Respuestas:

6

El paquete MASS que viene con su R instalado ya tiene la boxcox()función que puede usar: Después de leer los datos, haga:

library(MASS)
boxcox(y ~ x)

Luego, mire el gráfico que esto produce, que muestra gráficamente un intervalo de confianza del 95% para el parámetro de transformación boxcox. Pero realmente no tiene suficientes datos (n = 10) para hacer esto, el intervalo de confianza resultante va casi de -2 a 2 !, con una estimación de probabilidad máxima de aproximadamente 0 (una transformación logarítmica, como se dijo antes). Si sus datos reales tienen más observaciones, debería intentar esto.

Como han dicho otros, esta transformación realmente está tratando de estabilizar las variaciones. Esto no es realmente obvio desde la teoría, lo que hace es tratar de maximizar una función de probabilidad basada en la distribución normal, que supone una varianza constante. Se podría pensar que maximizar una probabilidad basada en la normalidad trataría de normalizar la distribución de los residuos, pero en la práctica la contribución principal para maximizar la probabilidad proviene de la estabilización de las variaciones. Tal vez esto no sea tan sorprendente, dado que la probabilidad que maximizamos se basa en una familia de distribución normal de varianza constante.

Una vez escribí una demostración basada en slider en XLispStat, que lo demostró claramente.

kjetil b halvorsen
fuente
3

Cuando tiene una relación lineal, pero varianzas desiguales, generalmente necesita transformar tanto x como y para obtener una relación lineal con varianzas iguales (o simplemente use la regresión de mínimos cuadrados ponderados en las variables no transformadas).

El procedimiento AVAS puede usarse para sugerir posibles transformaciones.

Greg Snow
fuente
Eche un vistazo a los datos: tiende monotónicamente para de a , luego oscila sistemáticamente mucho para entre y . Esto implica que ninguna reexpresión monotónica continua de logrará estabilizar las varianzas. Su sugerencia de mínimos cuadrados ponderados parece prometedora a la luz de esta limitación, pero ¿cómo debería uno elegir los pesos? x 1 5 x 5 10 yyx15x510y
Whuber
De acuerdo con @whuber
brócoli
1
Estoy de acuerdo con @whuber para este conjunto de datos específico, simplemente asumí que estos datos se inventaron rápidamente para ilustrar (y, por lo tanto, muestran la falta humana de aleatoriedad / realidad). Mi respuesta es más el consejo general para el caso general de variaciones desiguales.
Greg Snow
Dado que la varianza aumenta con x, ¿lo reduciría un glmmarco con una función de enlace de Poisson?
Roman Luštrik
3
y
1

Bueno, en R podrías probar esto:

library(MASS)
boxcox(y~x)
plot(1/y^2~x) # since the profile likelihood has a maximum near 2

ingrese la descripción de la imagen aquí

Pero realmente depende de lo que quiere decir con "mejor ajuste a los datos"

Glen_b -Reinstate a Monica
fuente
-2

bueno, si todos sus datos para x no son negativos, puede usar la transformación de caja cox ... para estimar el valor ideal del parámetro lambda de la transformación, puede usar matlab ... http://www.mathworks.in/ ayuda / finanzas / boxcox.html

Nuzhi
fuente
1
"Ideal" aquí significa algo diferente a lo solicitado en la pregunta. La pregunta busca estabilizar las variaciones, mientras que la solución de Matlab busca hacerlas lo más cercanas posible a la distribución normal.
whuber