¿Cómo especificar una matriz de contraste (en R) para la diferencia entre un nivel y un promedio de los otros?

9

Tengo un modelo de regresión que se ve así:

Y=β0+β1X1+β2X2+β3X3+β12X1X2+β13X1X3+β123X1X2X3

... 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:X1X2X3X1X1a,X1b,X1c

  • Si la intersección para el nivel difiere significativamente de la intersección promedio para los niveles y .X1aX1bX1c
  • Si la respuesta de es significativamente diferente entre el nivel y el promedio de los niveles y .X2X1aX1bX1c
  • Si la pendiente de es significativamente diferente entre el nivel y el promedio de los niveles y .X3X1aX1bX1c

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.β1beta1X1bX1cX3=0X2X1a

¿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:

  1. 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.
  2. 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.
  3. 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.
  4. Transponer la matriz usando la t()función.
  5. Use ginv()del MASSpaquete o solve()para obtener el inverso de la matriz transpuesta.
  6. 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.
  7. 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 .
  8. Haga que su matriz sea el nuevo contraste para el factor en cuestión, p. Ej. contrasts(mydata$myfactor)<-mymatrix
  9. Run lm()(y probablemente muchas otras funciones que utilizan fórmulas) como normal en R estándar sin tener que cargar glht, doByo contrasts.

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.

f1r3br4nd
fuente

Respuestas:

5

Esa comparación de uno con la media de todas las variables posteriores es (aparte de la escala), llamada codificación Helmert o contrastes Helmert . El que da es el primer contraste, el otro sería una versión a escala de .(0,1,1)

Lo que R llama codificación helmert, esto se llama 'Helmert inverso'. Son equivalentes hasta un cambio de orden variable.

Glen_b -Reinstate a Monica
fuente
¿El equivalente "hasta un cambio de orden variable" debería ser "dado una inversión del orden de niveles"? Entonces, para obtener el tipo de helmert SAS / SPSS (en comparación con el promedio de los niveles restantes), uno tendría que invertir el orden de los niveles del factor en cuestión, o rev () cada columna y luego rev () cada fila de la matriz devuelto por contra.helmert?
tim
@tim "un cambio de orden variable" no pretende significar " cualquier cambio de orden variable", sino literalmente un cambio de orden variable (es decir, uno en particular).
Glen_b -Reinstate Monica