2016-06-29 4 views
0

私は1年前に同様の質問をして回答しました。 これはこの投稿に関連しています:how to merge two linear regression prediction models (each per data frame's subset) into one column of the data frame2つの回帰予測モデル(データフレームのサブセット付き)をデータフレーム(1つの列)に戻します。

私はそこで使用されているのと同じデータを使用しますが、新しい列を使用します。 私はデータ作成:条件を区別するために、データの2つのサブセットを使用して、オオカミの

dat = read.table(text = " cats birds wolfs  snakes  trees 
0  3  8   7  2 
1  3  8   7  3 
1  1  2   3  2 
0  1  2   3  1 
0  1  2   3  2 
1  6  1   1  3 
0  6  1   1  1 
1  6  1   1  1 " ,header = TRUE) 

モデル番号を。方程式はサブセットごとに異なります。

f0 = lm(wolfs~snakes,data = dat,subset=dat$cats==0) 
f1 = lm(wolfs~snakes + trees,data = dat,subset=dat$cats==1) 

各サブセットのオオカミの数を予測します。

f0_predict = predict(f0,data = dat,subset=dat$cats==1,type='response') 
f1_predict = predict(f1,data = dat,subset=dat$cats==0,type='response') 

は、次に(再び、2015ポストごとに)私は猫の変数でデータを分割します。

dat.l = split(dat, dat$cats) 
dat.l 

...ここではちょっと難しいです。 2015年の記事では、lapplyを使用して2組の予測をデータセットに添付することを提案しました。しかし、ここでは、回帰方程式が本質的に同じであると仮定したため、回答者の関数は機能しませんでした。ここに私の試みは(それだけで微調整し、オリジナルに近いです)です:

dat.l = lapply(dat.l, function(x){ 
mod = 

ifelse(dat$cats==0,lm(wolfs~snakes,data=x),lm(wolfs~snakes+trees,data=x)) 
       x$full_prediction = predict(mod,data=x,type='response') 
       return(x) 
    }) 
    unsplit(dat.l, dat$cats) 

手順の最後のカップルについての任意のアイデア?私はまだS.O.に比較的新しいです、そしてRとの中間ですので、私がコミュニティが好むように正確に投稿していないならば、穏やかに行ってください。

答えて

0

は、ここでは引用の前のポストのオフに構築し、dplyrソリューションです:

library(dplyr) 

# create a new column defining the lm formula for each level of cats 
dat <- dat %>% mutate(formula = ifelse(cats==0, "wolfs ~ snakes", 
     "wolfs ~ snakes + trees")) 

# build model and find predicted values for each value of cats 
dat <- dat %>% group_by(cats) %>% 
    do({ 
     mod <- lm(as.formula(.$formula[1]), data = .) 
     pred <- predict(mod) 
     data.frame(., pred) 
    }) 

> dat 
Source: local data frame [8 x 7] 
Groups: cats [2] 
    cats birds wolfs snakes trees    formula  pred 
    (int) (int) (int) (int) (int)     (chr)  (dbl) 
1  0  3  8  7  2   wolfs ~ snakes 7.5789474 
2  0  1  2  3  1   wolfs ~ snakes 2.6315789 
3  0  1  2  3  2   wolfs ~ snakes 2.6315789 
4  0  6  1  1  1   wolfs ~ snakes 0.1578947 
5  1  3  8  7  3 wolfs ~ snakes + trees 7.6800000 
6  1  1  2  3  2 wolfs ~ snakes + trees 2.9600000 
7  1  6  1  1  3 wolfs ~ snakes + trees 0.8400000 
8  1  6  1  1  1 wolfs ~ snakes + trees 0.5200000 
+0

うわー - 華麗!私はdplyrが私がそれを理解したら、私の聖なる墓になると思う - ありがとう! – chriseshleman

+0

これは間違いなくクリーニングと分割適用再結合アプリケーションを非常に簡単にします。モデルを要約するのに非常に便利なもう一つのパッケージは箒です。これはdplyrと組み合わせると非常に強力です。参照:https://cran.r-project.org/web/packages/broom/vignettes/broom_and_dplyr.html –

+0

良いもの。私はほうきをチェックします。 – chriseshleman

関連する問題