Ich möchte einen Vektor B für jede der Spalten in einer Matrix A regressieren. Dies ist trivial, wenn keine Daten fehlen. Wenn die Matrix A jedoch fehlende Werte enthält, darf meine Regression für A nur Zeilen enthalten, in denen alle enthalten sind Werte sind vorhanden (das Standardverhalten von na.omit ). Dies führt zu falschen Ergebnissen für Spalten ohne fehlende Daten. Ich kann die Spaltenmatrix B gegen einzelne Spalten der Matrix A regressieren, aber ich habe Tausende von Regressionen zu tun, und dies ist unerschwinglich langsam und unelegant. Die Funktion na.exclude scheint für diesen Fall entwickelt worden zu sein, aber ich kann sie nicht zum Laufen bringen. Was mache ich hier falsch? Verwenden Sie R 2.13 unter OSX, wenn es darauf ankommt.
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')