Error de falta de conformidad en la multiplicación de una matriz por un escalar
No puedo ver por qué estoy obteniendo un error de no conformidad en lo siguiente:
data(mtcars)
x <- as.matrix(subset(mtcars, select = -c(disp)))
x <- cbind(x,rep(1, times = nrow(x)))
y <- as.matrix(mtcars$disp)
beta <- solve(t(x) %*% x) %*% t(x) %*% y
ehat <- y - x %*% beta
Var_OLS = ((1/(nrow(x) - ncol(x))) * (t(ehat) %*% ehat)) * (solve(t(x) %*% x))
El término ((1/(nrow(x) - ncol(x))) * (t(ehat) %*% ehat))
es un escalar. Y (solve(t(x) %*% x))
funciona bien por sí solo. ¿Qué está pasando aquí?
davy.ai
El error de no conformidad probablemente ocurre porque la multiplicación de estas dos matrices (
((1/(nrow(x) - ncol(x))) * (t(ehat) %*% ehat))
ysolve(t(x) %*% x)
) intenta crear una matriz que no cumple las reglas de la multiplicación de matrices.Específicamente, la primera matriz
((1/(nrow(x) - ncol(x))) * (t(ehat) %*% ehat))
es una matriz de 1×1 (ya que es un escalar), y la segunda matrizsolve(t(x) %*% x)
es una matriz de kxk, donde k es el número de columnas en x. Estas dos matrices solo se pueden multiplicar si el número de columnas en la primera matriz coincide con el número de filas en la segunda matriz.En este caso, debido a que la primera matriz es un escalar, se puede multiplicar directamente por la segunda matriz sin usar el operador
%*%
. Por lo tanto, la expresión para Var_OLS se puede simplificar de la siguiente manera:Var_OLS = ((1/(nrow(x) - ncol(x))) * t(ehat) %*% ehat) * solve(t(x) %*% x)
Esto preserva la multiplicación escalar y permite que las matrices cumplan las reglas de la multiplicación de matrices.