Еще одна идея состоит в том, чтобы использовать преимущества имен строк, связанных с фреймом данных, предоставленным в качестве входных данных для lm
.В этом случае остатки должны сохранять имена из исходных данных.Доступ к остаткам из вашего примера даст значение -5.3061303 для test$residuals["4"]
и NA для test$residuals["3"]
.
Однако это не совсем отвечает на ваш вопрос.Один из подходов к выполнению именно того, о чем вы просили, с точки зрения возврата значений NA в остатки, показан ниже:
> D<-data.frame(x=c(NA,2,3,4,5,6),y=c(2.1,3.2,4.9,5,6,7),residual=NA)
> Z<-lm(y~x,data=D)
> D[names(Z$residuals),"residual"]<-Z$residuals
> D
x y residual
1 NA 2.1 NA
2 2 3.2 -0.28
3 3 4.9 0.55
4 4 5.0 -0.22
5 5 6.0 -0.09
6 6 7.0 0.04
Если вы делаете прогнозы, основанные на результатах регрессии, вы можете указать na.action=na.exclude
в lm
.См. Результаты справки для na.omit
для обсуждения.Обратите внимание, что простое указание na.exclude
на самом деле не возвращает значения NA обратно в вектор ошибок.
Как отмечалось в предыдущем ответе, resid
(синоним residuals
) предоставляет универсальную функцию доступа, в которой остатки будут содержать желаемые значения NA, если na.exclude
было указано в lm
.Использование resid
, вероятно, является более общим и понятным подходом.В этом случае код для приведенного выше примера будет изменен на:
> D<-data.frame(x=c(NA,2,3,4,5,6),y=c(2.1,3.2,4.9,5,6,7),residual=NA)
> Z<-lm(y~x,data=D,na.action=na.exclude)
> D$residuals<-residuals(Z)