Я хотел бы регрессировать вектор 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')
r
missing-data
linear-model
Дэвид Куигли
источник
источник
Ответы:
Изменить: я неправильно понял ваш вопрос. Есть два аспекта:
а)
na.omit
иna.exclude
оба делают регистром удаления как по предикторам, так и по критериям. Они отличаются только тем, что функции экстрактора, такие какresiduals()
илиfitted()
будут дополнять свой вывод символамиNA
s для пропущенных случаев, иna.exclude
, следовательно, будут иметь ту же длину, что и входные переменные.б) Реальная проблема не в этой разнице между,
na.omit
иna.exclude
, похоже, вы не хотите удалять регистр, который принимает во внимание переменные критерия, как это делают оба.Результаты регрессии зависят от матриц (псевдообратная матрица дизайна , коэффициенты ) и шляпа матрица , подогнанные значения ). Если вы не хотите удалять регистр, вам нужна отдельная матрица для каждого столбца , поэтому нет способа обойти отдельные регрессии для каждого критерия. Вы можете попытаться избежать накладных расходов , выполнив что-то вроде следующего:X+=(X′X)−1X′ X β^=X+Y H=XX+ Y^=HY X Y
lm()
Обратите внимание, что могут быть численно лучшие способы вычисления и , вместо этого вы можете проверить разложение. SVD-подход объясняется здесь на SE . Я не рассчитал вышеупомянутый подход с большими матрицами против фактического использования .X+ H QR Y
lm()
источник
Я могу придумать два пути. Один из них - объединить данные,
na.exclude
а затем снова разделить данные:Другой способ - использовать
data
аргумент и создать формулу.Если вы делаете много регрессии, первый путь должен быть быстрее, так как выполняется меньше фоновой магии. Хотя, если вам нужны только коэффициенты и остатки, я предлагаю использовать
lsfit
, что гораздо быстрее, чемlm
. Второй способ немного приятнее, но на моем ноутбуке при попытке сделать резюме по полученной регрессии выдается ошибка. Я попытаюсь увидеть, является ли это ошибкой.источник
В следующем примере показано, как делать прогнозы и остатки, которые соответствуют исходному кадру данных (используя опцию «na.action = na.exclude» в lm (), чтобы указать, что NA должны быть помещены в векторы остатков и предсказания, где исходный кадр данных имел пропущенные значения. Он также показывает, как указать, должны ли предсказания включать только наблюдения, в которых были выполнены как объясняющие, так и зависимые переменные (т. е. строго в выборочных предсказаниях), или наблюдения, в которых объясняющие переменные были полными, и, следовательно, возможно предсказание Xb ( то есть, включая прогнозирование вне выборки для наблюдений, которые имели полные объясняющие переменные, но в которых отсутствовала зависимая переменная).
Я использую cbind для добавления прогнозируемых и остаточных переменных к исходному набору данных.
источник