El libro de John Fox Un compañero de R para la regresión aplicada es un excelente recurso sobre la modelización de la regresión aplicada con R
. El paquete car
que utilizo a lo largo de esta respuesta es el paquete adjunto. El libro también tiene como sitio web con capítulos adicionales.
Transformación de la respuesta (variable dependiente, resultado)
Transformaciones Box-Cox ofrecen una posible vía para elegir una transformación de la respuesta. Después de ajustar su modelo de regresión que contiene variables no transformadas con la R
función lm
puede utilizar la función boxCox
de la car
paquete para estimar λ (es decir, el parámetro de potencia) por máxima verosimilitud. Como su variable dependiente no es estrictamente positiva, las transformaciones Box-Cox no funcionarán y hay que especificar la opción family="yjPower"
para utilizar el Transformaciones Yeo-Johnson (véase el documento original aquí y esto post relacionado ):
boxCox(my.regression.model, family="yjPower", plotit = TRUE)
Esto produce un gráfico como el siguiente:
![Box-Cox lambdaplot]()
La mejor estimación de λ es el valor que maximiza la probabilidad del perfil, que en este ejemplo es de aproximadamente 0,2. Normalmente, la estimación de λ se redondea a un valor familiar que todavía está dentro del intervalo de confianza del 95%, como -1, -1/2, 0, 1/3, 1/2, 1 o 2.
Para transformar su variable dependiente ahora, utilice la función yjPower
de la car
paquete:
depvar.transformed <- yjPower(my.dependent.variable, lambda)
En la función, el lambda
debe ser el redondeado λ que ha encontrado antes de utilizar boxCox
. A continuación, ajuste la regresión de nuevo con la variable dependiente transformada.
Es importante: En lugar de limitarse a realizar una transformación logarítmica de la variable dependiente, debería considerar la posibilidad de ajustar un MLG con un enlace logarítmico. Aquí hay algunas referencias que proporcionan más información: primero , segundo , tercera . Para hacer esto en R
Utilizar glm
:
glm.mod <- glm(y~x1+x2, family=gaussian(link="log"))
donde y
es su variable dependiente y x1
, x2
etc. son sus variables independientes.
Transformaciones de los predictores
Transformaciones de predictores estrictamente positivos puede estimarse por máxima verosimilitud tras la transformación de la variable dependiente. Para ello, utilice la función boxTidwell
de la car
(para el documento original, véase aquí ). Úsalo así: boxTidwell(y~x1+x2, other.x=~x3+x4)
. Lo importante aquí es que la opción other.x
indica los términos de la regresión que son no para ser transformado. Esto sería todas sus variables categóricas. La función produce una salida de la siguiente forma:
boxTidwell(prestige ~ income + education, other.x=~ type + poly(women, 2), data=Prestige)
Score Statistic p-value MLE of lambda
income -4.482406 0.0000074 -0.3476283
education 0.216991 0.8282154 1.2538274
En ese caso, la prueba de puntuación sugiere que la variable income
debe transformarse. Las estimaciones de máxima verosimilitud de λ para income
es -0,348. Esto podría redondearse a -0,5, lo que es análogo a la transformación incomenew=1/√incomeold .
Otro post muy interesante en el sitio sobre la transformación de las variables independientes es este .
Desventajas de las transformaciones
Mientras que las variables dependientes y/o independientes transformadas logarítmicamente pueden ser interpretado con relativa facilidad La interpretación de otras transformaciones más complicadas es menos intuitiva (al menos para mí). ¿Cómo interpretarías, por ejemplo, los coeficientes de regresión después de que las variables dependientes hayan sido transformadas por 1/√y ? Hay bastantes posts en este sitio que tratan exactamente de esa cuestión: primero , segundo , tercera , cuarto . Si utiliza el λ de Box-Cox directamente, sin redondear (por ejemplo λ =-0,382), resulta aún más difícil interpretar los coeficientes de regresión.
Modelización de relaciones no lineales
Dos métodos bastante flexibles para ajustar relaciones no lineales son polinomios fraccionarios y splines . Estos tres documentos ofrecen una muy buena introducción a ambos métodos: Primero , segundo y tercera . También hay toda una libro sobre polinomios fraccionarios y R
. El R
paquete mfp
implementa polinomios fraccionarios multivariables. Esta presentación puede ser informativa respecto a los polinomios fraccionarios. Para ajustar los splines, se puede utilizar la función gam
(modelos aditivos generalizados, véase aquí para una excelente introducción con R
) del paquete mgcv
o las funciones ns
(splines cúbicos naturales) y bs
(B-splines cúbicos) del paquete splines
(ver aquí para ver un ejemplo del uso de estas funciones). Uso de gam
puede especificar qué predictores desea ajustar mediante splines utilizando la opción s()
función:
my.gam <- gam(y~s(x1) + x2, family=gaussian())
aquí, x1
se ajustaría mediante una spline y x2
linealmente como en una regresión lineal normal. Dentro de gam
puede especificar la familia de distribución y la función de enlace como en glm
. Así, para ajustar un modelo con una función de enlace logarítmico, puede especificar la opción family=gaussian(link="log")
en gam
como en glm
.
Echa un vistazo a este puesto del sitio.
4 votos
Hola @zglaa1 y bienvenido. Por qué crees que hay que transformar las variables? El primer paso sería ajustar la regresión con las varibales originales y luego mirar el ajuste (residuos, etc). Los residuos deberían tener una distribución aproximadamente normal, no las variables. Tal vez encuentres este puesto interesante.
0 votos
Gracias por el enlace y la sugerencia. He ejecutado mi regresión y sé que las variables necesitan ser transformadas en base al siguiente gráfico: i.imgur.com/rbmu14M.jpg Puedo ver la insesgadez y la falta de variabilidad constante en los residuos. Además, no son normales.
0 votos
@COOLSerdash He echado un vistazo al enlace. Tengo una formación básica en estadística así que entiendo la discusión. Sin embargo, mi problema es que tengo poca experiencia en la aplicación real de las técnicas que he aprendido por lo que lucho para averiguar qué es exactamente lo que tengo que hacer con mis datos (ya sea en Excel o R) para realizar realmente las transformaciones necesarias.
0 votos
Gracias por el gráfico. Tienes toda la razón al decir que este ajuste no es óptimo. ¿Podría usted por favor producir una matriz de dispersión con el DV y IVs en la regresión? Esto se puede hacer en
R
con el comandopairs(my.data, lower.panel = panel.smooth)
dondemy.data
sería su conjunto de datos.0 votos
@COOLSerdash Aquí tienes - i.imgur.com/k9LFsP4.jpg Verás que hay 5 variables ficticias. Puedo eliminarlas si facilitan la lectura del gráfico de dispersión.
0 votos
Como recomendó @Nick en su respuesta, podrías probar un GLM con un enlace de registro. En
R
Esto se puede lograr escribiendo:my.mod <- glm(WAR~x1+x2, family=gaussian(link = "log"))
dondex1
etc. son sus variables independientes. Por si acaso: las variables categóricas deben codificarse como factores enR
o puede incluirse directamente confactor(x3)
six3
es una variable categórica.2 votos
Un enfoque general de la transformación son Transformaciones Box-Cox . Lo que podrías hacer es lo siguiente 1. Ajustar su modelo de regresión con
lm
utilizando las variables no transformadas. 2. Utilice la funciónboxcox(my.lm.model)
de laMASS
paquete para estimar λ . El comando también produce un gráfico que podría subir para nuestra comodidad.0 votos
@COOLSerdash Aquí está el gráfico de boxcox. Podrías explicar cómo tomar exactamente los datos de la transformación boxcox, específicamente el valor, y utilizarlo para transformar mis datos?
0 votos
¿Qué hace la función Box-Cox del MASS con los valores cero y negativos? Tenga en cuenta que el enlace de Wikipedia sí explica lo que λ es.
0 votos
Me gustaría poder entender ese enlace de Wikipedia. Con respecto a los valores cero y negativos, simplemente los he recodificado como 0,000001. Aunque estoy seguro de que lo odiarás, tengo fuertes razones para creer que esto no tendrá absolutamente ningún impacto en el modelo. Como ha dicho que no le interesan las minucias del béisbol, me abstendré de explicar mis razones.
0 votos
@COOLSerdash Estos son los gráficos de diagnóstico después de ejecutar el GLM con log-link. Se ve mejor, pero todavía hay claramente algunos problemas. i.imgur.com/FjjAdoW.jpg
0 votos
Tienes razón; te recomiendo que no lo hagas. Aparte de no respetar los datos, acabas de crear un montón de valores atípicos masivos en la escala logarítmica. Un valor muy, muy pequeño en lugar de cero es no un cambio conservador; ¡es uno drástico! No pretendo ser ofensivo con el béisbol; simplemente no entiendo su razonamiento. Pero lo que acabas de hacer es estadísticamente desaconsejable, independientemente de la naturaleza de los datos.
0 votos
Voy a editar mi respuesta para ampliar el comentario anterior.
0 votos
Nick - Agradezco tu explicación más completa. Probaré el GLM con log-link utilizando el conjunto de datos original. La función Box-Cox no parece funcionar con valores negativos o ceros (como has insinuado) y no conozco ninguna función alternativa.
0 votos
He probado el GLM con log-link utilizando el conjunto de datos original y he recibido el siguiente error: Error en eval(expr, envir, enclos) : no puede encontrar valores iniciales válidos: por favor especifique algunos Hice algunas búsquedas y encontré el siguiente enlace que menciona este problema - stackoverflow.com/questions/8212063/ - pero no pude averiguar cómo aplicar las sugerencias a mi problema particular. Se agradece cualquier ayuda.
0 votos
No uso R de forma rutinaria, por lo que se necesita la ayuda de alguien acostumbrado al GLM en R.
0 votos
Dado que su primer gráfico de diagnóstico muestra una clara falta de ajuste en la media, los otros gráficos no son especialmente informativos; es difícil separar un problema en esos gráficos del fallo del modelo ya identificado. Los resultados de su GLM sugieren que se utilice un modelo con una función de varianza diferente
0 votos
¿Podría explicar con más detalle lo que quiere decir con una función de varianza diferente?