Tengo un modelo de regresión que se ve así:
... o en notación R: y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x1:x2:x3
Digamos que y son variables categóricas y es numérico. La complicación es que tiene tres niveles y en lugar de contrastes estándar, necesito probar:
- Si la intersección para el nivel difiere significativamente de la intersección promedio para los niveles y .
- Si la respuesta de es significativamente diferente entre el nivel y el promedio de los niveles y .
- Si la pendiente de es significativamente diferente entre el nivel y el promedio de los niveles y .
Según esta publicación , parece que la matriz que quiero es ...
2
-1
-1
Entonces yo sí contrasts(mydata$x1)<-t(ginv(cbind(2,-1,-1)))
. La estimación de cambia, pero también lo hacen los demás. Puedo reproducir la nueva estimación de restando los valores pronosticados de los medios del grupo y (cuando y está en su nivel de referencia) del doble del valor de en esos niveles. Pero no puedo confiar en que especifiqué mi matriz de contraste correctamente a menos que también pueda derivar de manera similar los otros coeficientes.
¿Alguien tiene algún consejo sobre cómo entender la relación entre los medios celulares y los contrastes? Gracias. ¿Existe un nombre estándar para este tipo de contraste?
¡Ajá! Según el enlace publicado en la respuesta de Glen_b , la conclusión es que puede convertir CUALQUIER comparación de grupo que quiera en un atributo de contraste de estilo R de la siguiente manera:
- Haz una matriz cuadrada. Las filas representan los niveles de su factor y las columnas representan contrastes. Excepto el primero, que le dice al modelo qué debe representar la intersección.
- Si desea que su intercepción sea la gran media, complete la primera columna con el mismo valor distinto de cero, no importa qué. Si desea que la intersección sea uno de los medios de nivel, coloque un número en esa fila y complete el resto con ceros. Si desea que la intersección sea una media de varios niveles, ponga números en esas filas y ceros en el resto. Si desea que sea una media ponderada, use números diferentes, de lo contrario use el mismo número. Incluso puede poner valores negativos en la columna de intercepción y eso probablemente también significa algo, pero cambia por completo los otros contrastes, por lo que no tengo idea de para qué sirve.
- Complete el resto de las columnas con valores positivos y negativos que indiquen qué niveles desea en comparación con los demás. Olvidé por qué es importante sumar a cero, pero ajuste los valores para que las columnas sumen a cero.
- Transponer la matriz usando la
t()
función. - Use
ginv()
delMASS
paquete osolve()
para obtener el inverso de la matriz transpuesta. - Suelte la primera columna, por ejemplo
mycontrast<-mycontrast[,-1]
. Ahora tiene una matriz apx p-1, pero la información que ingresó para su intercepción se codificó en la matriz como un todo durante el paso 5. - Si desea que las etiquetas en la salida de resumen sean más agradables de leer que
lm()
la salida predeterminada de et al., Asigne un nombre a las columnas de su matriz en consecuencia.(Intercept)
Sin embargo, la intersección siempre se nombrará automáticamente . - Haga que su matriz sea el nuevo contraste para el factor en cuestión, p. Ej.
contrasts(mydata$myfactor)<-mymatrix
- Run
lm()
(y probablemente muchas otras funciones que utilizan fórmulas) como normal en R estándar sin tener que cargarglht
,doBy
ocontrasts
.
Glen_b, gracias y gracias UCLA Statistical Consulting Group. Mi profesor de estadísticas aplicado pasó varios días agitando las manos sobre este tema, y todavía no tenía idea de cómo escribir mi propia matriz de contraste. Y ahora, una hora de lectura y juego con R, y finalmente creo que lo entiendo. Supongo que debería haber aplicado a UCLA en su lugar. O la Universidad de StackExchange.
contra.helmert
?