No puedo entender el uso de contrastes polinómicos en el ajuste de regresión. En particular, me refiero a una codificación utilizada por R
para expresar una variable de intervalo (variable ordinal con niveles igualmente espaciados), descrita en esta página .
En el ejemplo de esa página , si entendí correctamente, R ajusta un modelo para una variable de intervalo, devolviendo algunos coeficientes que ponderan su tendencia lineal, cuadrática o cúbica. Por lo tanto, el modelo ajustado debe ser:
donde debe tomar los valores 1 , 2 , 3 o 4 de acuerdo con el nivel diferente de la variable de intervalo.
¿Es esto correcto? Y, de ser así, ¿cuál era el propósito de los contrastes polinómicos?
r
regression
contrasts
Pippo
fuente
fuente
contr.poly
en R.Respuestas:
Solo para recapitular (y en caso de que los hipervínculos OP fallen en el futuro), estamos viendo un conjunto de datos
hsb2
como tal:que se puede importar aquí .
Convertimos la variable
read
en variable ordenada / ordinal:Ahora estamos todo listo para ejecutar un solo ANOVA regulares - sí, es R, y que básicamente tienen una variable dependiente continua,
write
y una variable explicativa con múltiples niveles,readcat
. En R podemos usarlm(write ~ readcat, hsb2)
1. Generando la matriz de contraste:
Hay cuatro niveles diferentes para la variable ordenadan−1=3
readcat
, por lo que tendremos contrastes.Primero, vamos por el dinero y echemos un vistazo a la función R incorporada:
Ahora analicemos lo que sucedió debajo del capó:
¿Que paso ahi? el(−1.5)0 (−0.5)0 0.50 1.50 (−1.5)1 (−0.5)1 0.51 1.51 (−1.5)2=2.25 , , 0.5 2 = 0.25 y 1.5 2 = 2.25 ; y el cuarto, ( - 1.5 ) 3 = - 3.375 , ( - 0.5 ) 3 = - 0.125 , 0.5 3 = 0.125 y 1.5 3 = 3.375 .(−0.5)2=0.25 0.52=0.25 1.52=2.25 (−1.5)3=−3.375 (−0.5)3=−0.125 0.53=0.125 1.53=3.375
outer(a, b, "^")
eleva los elementos dea
a los elementos deb
, de modo que la primera columna resulta de las operaciones, , ( - 0.5 ) 0 , 0.5 0 y 1.5 0 ; la segunda columna de ( - 1.5 ) 1 , ( - 0.5 ) 1 , 0.5 1 y 1.5 1 ; el tercero de ( - 1.5 ) 2 = 2.25A continuación, hacemos una descomposición ortonormal de esta matriz y tomamos la representación compacta de Q ( ). Algunas de las funciones internas de las funciones utilizadas en la factorización QR en R utilizadas en esta publicación se explican más aquí .QR
c_Q = qr(X)$qr
... de los cuales solo guardamos la diagonal (R QR
z = c_Q * (row(c_Q) == col(c_Q))
). Lo que se encuentra en la diagonal: solo las entradas "inferiores" de la parte de la descomposición Q R. ¿Sólo? bueno, no ... ¡Resulta que la diagonal de una matriz triangular superior contiene los valores propios de la matriz!A continuación, llamamos a la siguiente función:Q Q Qz
raw = qr.qy(qr(X), z)
cuyo resultado puede replicarse "manualmente" mediante dos operaciones: 1. Convertir la forma compacta de , es decir , en Q , una transformación que se puede lograr con , y 2. Llevar a cabo el multiplicación matricial Q z , como en .qr(X)$qr
Q = qr.Q(qr(X))
Q %*% z
Crucialmente, multiplicar por los valores propios de R no cambia la ortogonalidad de los vectores de la columna constituyente, pero dado que el valor absoluto de los valores propios aparece en orden decreciente desde la parte superior izquierda a la parte inferior derecha, la multiplicación de Q z tenderá a disminuir valores en las columnas polinómicas de orden superior:Q R Qz
Compare los valores en los vectores de columna posteriores (cuadráticos y cúbicos) antes y después de las operaciones de factorización , y con las primeras dos columnas no afectadas.QR
Finalmente llamamos a
(Z <- sweep(raw, 2L, apply(raw, 2L, function(x) sqrt(sum(x^2))), "/", check.margin = FALSE))
convertir la matrizraw
en vectores ortonormales :Esta función simplemente "normaliza" la matriz dividiendo (∑col.x2i−−−−−−−√ (i) (ii) (i)
"/"
) en columna cada elemento por el . Por lo tanto, se puede descomponer en dos pasos:(i), lo que resulta en, que son los denominadores de cada columna en(ii),donde cada elemento de una columna se divide por el valor correspondiente de(i).apply(raw, 2, function(x)sqrt(sum(x^2)))
2 2.236 2 1.341
En este punto, los vectores de columna forman una base ortonormal de , hasta que nos deshacemos de la primera columna, que será la intersección, y hemos reproducido el resultado de :R4
contr.poly(4)
Las columnas de esta matriz son ortonormales , como se puede mostrar porscores - mean 1 2 3
(sum(Z[,3]^2))^(1/4) = 1
yz[,3]%*%z[,4] = 0
, por ejemplo (por cierto, lo mismo ocurre con las filas). Y, cada columna es el resultado de elevar las iniciales , es decir, la media de la potencia 1 , 2 y 3 , respectivamente, es decir , lineal, cuadrática y cúbica .2. ¿Qué contrastes (columnas) contribuyen significativamente a explicar las diferencias entre niveles en la variable explicativa?
Podemos ejecutar el ANOVA y ver el resumen ...
summary(lm(write ~ readcat, hsb2))
... para ver que hay un efecto lineal de
readcat
onwrite
, de modo que los valores originales (en el tercer fragmento de código al comienzo de la publicación) se pueden reproducir como:... o ...
... o mucho mejor ...
Al ser contrastes ortogonales, la suma de sus componentes se suma a cero para a 1 , ⋯ , a t constantes, y el producto punto de cualquiera de los dos es cero. Si pudiéramos visualizarlos, se verían así:∑i=1tai=0 a1,⋯,at
La idea detrás del contraste ortogonal es que las inferencias que podemos extraer (en este caso generar coeficientes mediante una regresión lineal) serán el resultado de aspectos independientes de los datos. Este no sería el caso si simplemente usáramos como contrastes.X0,X1,⋯.Xn
Gráficamente, esto es mucho más fácil de entender. Compare las medias reales por grupos en grandes bloques negros cuadrados con los valores pronosticados, y vea por qué una aproximación de línea recta con una contribución mínima de polinomios cuadráticos y cúbicos (con curvas solo aproximadas con loess) es óptima:
Si, solo por efecto, los coeficientes del ANOVA hubieran sido tan grandes para el contraste lineal para las otras aproximaciones (cuadrática y cúbica), la gráfica sin sentido que sigue representaría más claramente las gráficas polinómicas de cada "contribución":
El codigo esta aqui .
fuente
qr.qy()
función, pero definitivamente intentaré ver si puedo decir algo mínimamente coherente sobre su pregunta tan pronto como tenga algo de tiempo.I will use your example to explain how it works. Using polynomial contrasts with four groups yields following.
Where first equation works for the group of lowest reading scores and the fourth one for the group of best reading scores. we can compare these equations to the one given using normal linear regression (supposingreadi is continous)
Usually instead ofL,Q,C you would have β1,β2,β3 and written at first position. But this writing resembles the one with polynomial contrasts. So numbers in front of L,Q,C are actually instead of readi,read2i,read3i . You can see that coefficients before L have linear trend, before Q quadratic and before C cubic.
Then R estimates parametersμ,L,Q,C and gives you
In that example is significantly non-zero onlyLˆ . So your conclusion could be: We see that the better scoring in writing depends linearly on reading score, but there is no significant quadratic or cubic effect.
fuente