Encontré esta ecuación aquí para calcular una matriz de covarianza de cualquier cantidad de variables utilizando álgebra de matrices. $$\frac1{N} (X - 1\bar{x})^T(X - 1\bar{x}^T) $$ Para una matriz dada $X$ con muestras $N$. El siguiente código en SAS lo he encontrado en el enlace anterior.
ONES = J(N, 1, 1);
meanvec = (1/N)*t(X)*ONES;
mean_matrix = ONES*t(meanvec);
cov_matrix = (1/n) * t(X- mean_matrix) * (x - mean_matrix);
Sin embargo, no tengo SAS en mi estación de trabajo, así que convertí esto a R que es casi idéntico.
ONES <- matrix(1, nrow=N, ncol=1)
meanvec <- (1/N) * t(X) %*% ONES
mean_matrix <- ONES %*% t(meanvec)
cov_matrix <- (1/N) * t(X - mean_matrix) %*% (X - mean_matrix)
Ahora, aquí es donde tengo problemas. Tomemos esta matriz de muestra $X$
X
[,1] [,2] [,3]
[1,] 90 60 90
[2,] 90 90 30
[3,] 60 60 60
[4,] 60 60 90
[5,] 30 30 30
Si ejecuto el código anterior obtengo la siguiente matriz de covarianza.
cov_matrix
[,1] [,2] [,3]
[1,] 504 360 180
[2,] 360 360 0
[3,] 180 0 720
Pero cuando ejecuto la función cov
del paquete stats
obtengo
cov(X)
[,1] [,2] [,3]
[1,] 630 450 225
[2,] 450 450 0
[3,] 225 0 900
que son las covarianzas por pares entre columnas (verificado por cov(X[,1], X[,1])
. Lamento si me estoy perdiendo algún concepto matemático básico aquí, ¿pero cuál es la diferencia aquí? ¿Por qué veo que 'devuelve una matriz de covarianza' de dos cosas que devuelven 'tipos' diferentes de matrices de covarianza?
Esto es estrictamente un concepto de aprendizaje para mí, así que agradecería cualquier información adicional que puedas proporcionar para ayudarme a entender estas diferencias.