Я хотел бы регрессировать вектор B против каждого из столбцов в матрице A. Это тривиально, если нет пропущенных данных, но если матрица A содержит пропущенные значения, тогда моя регрессия против A ограничена включением только тех строк, где все значения присутствуют ( поведение na.omit по умолчанию ). Это приводит к неправильным результатам для столбцов без пропущенных данных. Я могу регрессировать матрицу столбцов B относительно отдельных столбцов матрицы A, но у меня есть тысячи регрессий, и это непомерно медленно и не элегантно. Функция na.exclude, похоже, предназначена для этого случая, но я не могу заставить ее работать. Что я здесь не так делаю? Использование R 2.13 на OSX, если это имеет значение.
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')