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 faltan datos, pero si la matriz A contiene valores faltantes, entonces mi regresión contra A está limitada a incluir solo filas donde todos los valores están presentes (el comportamiento predeterminado na.omit ). Esto produce resultados incorrectos para columnas sin datos faltantes. Puedo hacer una regresión de la matriz de columna B contra columnas individuales de la matriz A, pero tengo miles de regresiones que hacer, y esto es prohibitivamente lento y poco elegante. La función na.exclude parece estar diseñada para este caso, pero no puedo hacer que funcione. ¿Qué estoy haciendo mal aquí? Usando R 2.13 en OSX, si es importante.
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')