Me gustaría hacer una regresión de un vector B contra cada una de las columnas de una matriz A. Esto es trivial si no hay datos perdidos, pero si la matriz A contiene valores perdidos, entonces mi regresión contra A está restringida a incluir sólo las filas donde todos los valores están presentes (el valor por defecto na.omitir comportamiento). Esto produce resultados incorrectos para las columnas sin datos perdidos. Puedo hacer una regresión de la matriz de columnas B contra columnas individuales de la matriz A, pero tengo que hacer miles de regresiones, y esto es prohibitivamente lento y poco elegante. El na.excluir parece estar diseñada para este caso, pero no consigo que funcione. ¿Qué estoy haciendo mal? Usando R 2.13 en OSX, si importa.
A = matrix(1:20, nrow=10, ncol=2)
B = matrix(1:10, nrow=10, ncol=1)
dim(lm(A~B)$residuals)
# [1] 10 2 (the expected 10 residual values)
# Missing value in first column; now we have 9 residuals
A[1,1] = NA
dim(lm(A~B)$residuals)
#[1] 9 2 (the expected 9 residuals, given na.omit() is the default)
# Call lm with na.exclude; still have 9 residuals
dim(lm(A~B, na.action=na.exclude)$residuals)
#[1] 9 2 (was hoping to get a 10x2 matrix with a missing value here)
A.ex = na.exclude(A)
dim(lm(A.ex~B)$residuals)
# Throws an error because dim(A.ex)==9,2
#Error in model.frame.default(formula = A.ex ~ B, drop.unused.levels = TRUE) :
# variable lengths differ (found for 'B')