es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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í?

Tags:  , ,

Answer

  1. Avatar for 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)) y solve(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 matriz solve(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.

Comments are closed.