4

lm残差を入力データセットにバインドする方法を探しています。メソッドは欠落している残差を追加する必要がNAあり、残差は適切な行に対応している必要があります。

サンプルデータ:

N <- 100 
Nrep <- 5 
X <- runif(N, 0, 10) 
Y <- 6 + 2*X + rnorm(N, 0, 1) 
X[ sample(which(Y < 15), Nrep) ] <- NA
df <- data.frame(X,Y)

residuals(lm(Y ~ X,data=df,na.action=na.omit))

残差はdfにバインドする必要があります。

4

5 に答える 5

8

に変更するだけna.actionですna.exclude

residuals(lm(Y ~ X, data = df, na.action = na.exclude))

na.omitna.exclude両方とも、予測子と基準の両方に関して大文字と小文字を区別して削除します。それらは、エクストラクタがのように機能するresiduals()か、またはfitted()の省略されたケースの出力をNAで埋めるという点でのみ異なりますna.exclude。したがって、入力変数と同じ長さの出力があります。

(これはここで見つかった最良の解決策です)

于 2013-07-31T18:23:07.017 に答える
1

マージまたは結合を使用します。

N <- 100 
Nrep <- 5 
X <- runif(N, 0, 10) 
Y <- 6 + 2*X + rnorm(N, 0, 1) 
X[ sample(which(Y < 15), Nrep) ] <- NA
df <- data.frame(X,Y)

df$id <- rownames(df)

res <- residuals(lm(Y ~ X,data=df,na.action=na.omit))
tmp <- data.frame(res=res)
tmp$id <- names(res)

merge(df,tmp,by="id",sort=FALSE,all.x=TRUE)

順序を維持する必要がある場合。plyrパッケージのjoin()を使用します。

library(plyr) 
join(df,tmp)
于 2012-12-02T19:19:36.023 に答える
0

これはおそらく解決策かもしれませんが、最初に、data.frameにc()は必要ありません

df <- data.frame(X,Y)
df$Res[!is.na(X)]<-residuals(lm(Y ~ X,data=df,na.action=na.omit))
于 2012-12-02T19:15:37.547 に答える
0
"[<-"(df, !is.na(df$X), "res", residuals(lm(Y ~ X,data=df,na.action=na.omit)))

トリックを行います。

于 2012-12-02T19:44:18.773 に答える
0
N <- 100 
Nrep <- 5 
X <- runif(N, 0, 10) 
Y <- 6 + 2*X + rnorm(N, 0, 1) 
X[ sample(which(Y < 15), Nrep) ] <- NA
df <- data.frame(X,Y)

R.all=as.numeric(rep(NA,length(X)))  # numeric vector with missing values
res=residuals(lm(Y ~ X,data=df,na.action=na.omit))  
i=as.numeric(names(res)) # vector locations of non-missing residuals
R.all[i]=res;R.all     # assign residuals to their correct positions.
于 2017-07-19T18:56:06.233 に答える