Esto no es un error.
Como hemos explorado (ampliamente) en los comentarios, hay dos cosas que suceden. La primera es que las columnas de están obligadas a cumplir con los requisitos de SVD: cada una debe tener una longitud de unidad y ser ortogonal a todas las demás. Visualización de como una variable aleatoria creado a partir de una matriz aleatoria a través de un algoritmo de SVD particular, por lo tanto en cuenta que estos restricciones funcionalmente independientes crear dependencias estadísticas entre las columnas de .UUXk ( k + 1 ) / 2U
Estas dependencias pueden revelarse en mayor o menor medida al estudiar las correlaciones entre los componentes de , pero surge un segundo fenómeno : la solución SVD no es única. Como mínimo, cada columna de se puede negar independientemente, dando al menos soluciones distintas con columnas. Se pueden inducir fuertes correlaciones (superiores a ) cambiando los signos de las columnas de manera apropiada. (Una forma de hacerlo se da en mi primer comentario a la respuesta de Amoeba en este hilo: todos losUT 2 k k 1 / 2 u i i , i = 1 , ... , kU2kk1 / 2tuyo i, i = 1 , ... , ktener el mismo signo, haciéndolos todos negativos o todos positivos con la misma probabilidad.) Por otro lado, todas las correlaciones pueden desaparecer eligiendo los signos al azar, independientemente, con iguales probabilidades. (Doy un ejemplo a continuación en la sección "Editar").
Con cuidado, podemos discernir en parte estos dos fenómenos al leer diagramas de dispersión matriciales de los componentes de . Ciertas características, como la aparición de puntos distribuidos de manera casi uniforme dentro de regiones circulares bien definidas, creen una falta de independencia. Otros, como los diagramas de dispersión que muestran correlaciones claras distintas de cero, obviamente dependen de las elecciones realizadas en el algoritmo, pero tales elecciones son posibles solo debido a la falta de independencia en primer lugar.U
La prueba final de un algoritmo de descomposición como SVD (o Cholesky, LR, LU, etc.) es si hace lo que dice. En esta circunstancia, es suficiente comprobar que cuando SVD devuelve el triple de matrices , que el producto recupera , hasta el error de punto flotante previsto ; que las columnas de y de son ortonormales; y que es diagonal, sus elementos diagonales no son negativos y están dispuestos en orden descendente. He aplicado tales pruebas al algoritmo en( U, D , V)XUD V′UVresvd
R
y nunca lo he encontrado por error. Aunque eso no es una garantía de que sea perfectamente correcto, tal experiencia, que creo que es compartida por muchas personas, sugiere que cualquier error requeriría algún tipo de entrada extraordinaria para manifestarse.
Lo que sigue es un análisis más detallado de los puntos específicos planteados en la pregunta.
Usando R
el svd
procedimiento, primero puede verificar que a medida que aumenta, las correlaciones entre los coeficientes de debilitan, pero aún son distintas de cero. Si simplemente realizara una simulación más grande, descubriría que son significativos. (Cuando , 50000 iteraciones deberían ser suficientes). Al contrario de lo que afirma la pregunta, las correlaciones no "desaparecen por completo".kUk = 3k = 3
En segundo lugar, una mejor manera de estudiar este fenómeno es volver a la cuestión básica de la independencia de los coeficientes. Aunque las correlaciones tienden a ser cercanas a cero en la mayoría de los casos, la falta de independencia es claramente evidente. Esto se hace más evidente mediante el estudio de la distribución multivariada completo de los coeficientes de . La naturaleza de la distribución emerge incluso en pequeñas simulaciones en las que las correlaciones distintas de cero no pueden (todavía) detectarse. Por ejemplo, examine una matriz de diagrama de dispersión de los coeficientes. Para que esto sea factible, configuré el tamaño de cada conjunto de datos simulado en y mantuve , dibujando así realizaciones deU4 4k = 210004 × 2Matriz , creando una matriz . Aquí está su matriz de diagrama de dispersión completa, con las variables enumeradas por sus posiciones dentro de :U1000 × 8U
Escanear la primera columna revela una interesante falta de independencia entre y el otro : observe cómo el cuadrante superior del diagrama de dispersión con está casi vacante, por ejemplo; o examine la nube elíptica con pendiente ascendente que describe la relación y la nube con pendiente descendente para el . Una mirada cercana revela una clara falta de independencia entre casi todos estos coeficientes: muy pocos de ellos parecen remotamente independientes, aunque la mayoría de ellos exhiben una correlación cercana a cero.tu11tuyo jtu21( u11, u22)( u21, u12)
(Nota: la mayoría de las nubes circulares son proyecciones de una hiperesfera creada por la condición de normalización que obliga a la suma de cuadrados de todos los componentes de cada columna a ser la unidad).
Matrices diagrama de dispersión con y patrones similares de exposición: estos fenómenos no se limitan a , ni hacer que dependen del tamaño de cada conjunto de datos simulados: que acaba de obtener más difícil generar y examinar.k = 3k = 4k = 2
Las explicaciones para estos patrones van al algoritmo utilizado para obtener en la descomposición del valor singular, pero sabemos que tales patrones de no independencia deben existir por las propiedades definitorias de : dado que cada columna sucesiva es (geométricamente) ortogonal a la anterior En estos casos, estas condiciones de ortogonalidad imponen dependencias funcionales entre los coeficientes, lo que se traduce en dependencias estadísticas entre las variables aleatorias correspondientes.UUU
Editar
En respuesta a los comentarios, puede valer la pena comentar en qué medida estos fenómenos de dependencia reflejan el algoritmo subyacente (para calcular una SVD) y cuánto son inherentes a la naturaleza del proceso.
Los patrones específicos de correlaciones entre coeficientes dependen en gran medida de elecciones arbitrarias realizadas por el algoritmo SVD, porque la solución no es única: las columnas de siempre pueden multiplicarse independientemente por o . No hay forma intrínseca de elegir el signo. Por lo tanto, cuando dos algoritmos SVD realizan elecciones de signo diferentes (arbitrarias o incluso aleatorias), pueden dar lugar a diferentes patrones de diagramas de dispersión de los . Si desea ver esto, reemplace la función en el código a continuación porU- 11( uyo j, uyo′j′)stat
stat <- function(x) {
i <- sample.int(dim(x)[1]) # Make a random permutation of the rows of x
u <- svd(x[i, ])$u # Perform SVD
as.vector(u[order(i), ]) # Unpermute the rows of u
}
Este primero reordena aleatoriamente las observaciones x
, realiza SVD, luego aplica el orden inverso para u
que coincida con la secuencia de observación original. Debido a que el efecto es formar mezclas de versiones reflejadas y rotadas de los diagramas de dispersión originales, los diagramas de dispersión en la matriz se verán mucho más uniformes. Todas las correlaciones de muestra serán extremadamente cercanas a cero (por construcción: las correlaciones subyacentes son exactamente cero). Sin embargo, la falta de independencia seguirá siendo obvia (en las formas circulares uniformes que aparecen, particularmente entre y ).tui , jtui , j′
La falta de datos en algunos cuadrantes de algunos de los diagramas de dispersión originales (que se muestran en la figura anterior) surge de cómo el R
algoritmo SVD selecciona signos para las columnas.
Nada cambia sobre las conclusiones. Debido a que la segunda columna de es ortogonal a la primera, (considerada como una variable aleatoria multivariada) depende de la primera (también considerada como una variable aleatoria multivariada). No puede hacer que todos los componentes de una columna sean independientes de todos los componentes de la otra; todo lo que puede hacer es mirar los datos de manera que oscurezcan las dependencias, pero la dependencia persistirá.U
Aquí hay un R
código actualizado para manejar los casos y dibujar una porción de la matriz de diagrama de dispersión.k > 2
k <- 2 # Number of variables
p <- 4 # Number of observations
n <- 1e3 # Number of iterations
stat <- function(x) as.vector(svd(x)$u)
Sigma <- diag(1, k, k); Mu <- rep(0, k)
set.seed(17)
sim <- t(replicate(n, stat(MASS::mvrnorm(p, Mu, Sigma))))
colnames(sim) <- as.vector(outer(1:p, 1:k, function(i,j) paste0(i,",",j)))
pairs(sim[, 1:min(11, p*k)], pch=".")