Dame una idea de cómo recodificar eficientemente una variable categórica (factor) en el conjunto de variables de contraste polinomiales ortogonales.
Para muchos tipos de variables de contraste (por ejemplo, desviación, simple, Helmert, etc.) el pase es:
- Componga la matriz de coeficientes de contraste correspondiente al tipo.
- Invierta o generalice-invierta para obtener la matriz de códigos.
Por ejemplo:
Suppose there is 3-group factor and we want to recode it into a set of deviation contrast variables.
The last group is treated as reference. Then the contrast coefficients matrix L is
Group1 Group2 Group3
var1 2/3 -1/3 -1/3
var2 -1/3 2/3 -1/3
and ginv(L) is then the sought-for coding matrix
var1 var2
Group1 1 0
Group2 0 1
Group3 -1 -1
(We might also use inv(L) instead if we add a row for constant, equal to 1/3, at the head of L.)
¿Existe la misma forma o similar para obtener variables de contraste polinomiales? En caso afirmativo, ¿cómo se vería la matriz C y cómo componerla? Si no, ¿cuál es la forma de calcular las variables de contraste polinomiales de manera eficiente (por ejemplo, por álgebra matricial)?
contrasts
polynomial
ttnphns
fuente
fuente
qr.qy()
estar de acuerdo con los cálculos manuales deqr.Q(qr(X))
seguidoQ%*%z
en mi publicación. Realmente me pregunto si puedo decir algo diferente para responder a su pregunta sin duplicación. Realmente no quiero hacer un mal trabajo ... He leído lo suficiente de tus publicaciones para respetarte mucho ... Si encuentro una manera de expresar el concepto sin código, solo conceptualmente a través del álgebra lineal, Volveré a eso. Sin embargo, me alegra que haya encontrado mi exploración del tema de algún valor. Mis mejores deseos, Toni.Respuestas:
Como continuación de mi publicación anterior sobre este tema , quiero compartir una exploración tentativa (aunque incompleta) de las funciones detrás del álgebra lineal y las funciones R relacionadas. Se supone que esto es un trabajo en progreso.
Parte de la opacidad de las funciones tiene que ver con la forma "compacta" de la descomposición Householder . La idea detrás de la descomposición de Householder es reflejar los vectores a través de un hiperplano determinado por un vector unitario como en el diagrama a continuación, pero seleccionando este plano de manera intencional para proyectar cada vector de columna de la matriz original en el vector de unidad estándar. El vector normalizado norma-2 se puede usar para calcular las diferentes transformaciones de Householder .u A e 1 1 u I - 2QR u A e1 1 u I−2uuTx
La proyección resultante se puede expresar como
El vector representa la diferencia entre los vectores de columna en la matriz que queremos descomponer y los vectores correspondientes a la reflexión a través del subespacio o "espejo" determinado por .v x A y u
El método utilizado por LAPACK libera la necesidad de almacenar la primera entrada en los reflectores Householder al convertirlos en 's. En lugar de normalizar el vector a con , es solo la entrada del primer puño la que se convierte en ; sin embargo, estos nuevos vectores, , todavía pueden usarse como vectores direccionales.1 v u ∥u∥=1 1 w
La belleza del método es que dado que en una descomposición es triangular superior, en realidad podemos aprovechar los elementos en debajo de la diagonal para completarlos con estos reflectores. Afortunadamente, las entradas principales en estos vectores son todas iguales a , evitando un problema en la diagonal "disputada" de la matriz: sabiendo que son todas , no necesitan ser incluidas, y pueden ceder la diagonal a las entradas de .R QR 0 R w 1 1 R
La matriz "compacta QR" en la funciónR
qr()$qr
puede entenderse aproximadamente como la adición de la matriz y la matriz triangular inferior de "almacenamiento" para los reflectores "modificados".La proyección de Householder seguirá teniendo la forma , pero no trabajaremos con ( ), sino con un vector , de los cuales solo se garantiza que la primera entrada sea , yI−2uuTx u ∥x∥=1 w 1
Uno supondría que estaría bien almacenar estos reflectores debajo de la diagonal o excluyendo la primera entrada de , y llamarlo un día. Sin embargo, las cosas nunca son tan fáciles. En cambio, lo que se almacena debajo de la diagonal en es una combinación de y los coeficientes en la transformación Householder expresados como (1), de modo que, definiendo como:w R 1 w tau
qr()$qr
Ahora estamos a un grado de distancia de los vectores , y la primera entrada ya no es , por lo tanto, la salida de deberá incluir la clave para restaurarlos ya que insistimos en excluir la primera entrada de los vectores "reflectores" a encajar todo en . Entonces, ¿estamos viendo los valores en la salida? Bueno, no, eso sería predecible. En cambio, en la salida de (donde se almacena esta clave) encontramos .w 1 τ ρ=∑reflectors22=wTwτ2/2
qr()
qr()$qr
qr()$qraux
Enmarcado en rojo a continuación, vemos los "reflectores" ( ), excluyendo su primera entrada.w/τ
Todo el código está aquí , pero como esta respuesta trata sobre la intersección de la codificación y el álgebra lineal, pegaré la salida para facilitar:
Ahora escribí la función de la
House()
siguiente manera:Comparemos la salida con las funciones integradas de R. Primero la función casera:
a las funciones R:
fuente