2016-07-21 5 views
0

複数のカテゴリのデータセットがあります。私は各カテゴリの新しいdfsにデータをサブセット化することなく、各カテゴリに対して線形回帰を実行したいと思います。私はこのようにしました:カテゴリごとに回帰を実行し、カテゴリ平均の+/- 10%を境界にします。

category = c(rep(c("a","b","c"),100)) 
x = (rep(1:5,60)) 
y = rnorm(300)*5 
df = data.frame(category,x,y) 

models = dlply(df, "category", function(dflm) 
lm(y ~ x, data = dflm)) 

lmcoefs = ldply(models, coef) 

lmcoefsでは、私は今、各カテゴリの係数を格納しています。

私はこれらの回帰を各カテゴリの平均の+/- 50%以内で実行したいと思います。したがって、カテゴリAの平均y値が10の場合、カテゴリーAのy値5と15の間で回帰を実行したいだけです。

これを行う方法はありますかデータセットを分割して個々の回帰を実行することなく、

おかげで、 ドン

答えて

2

は、私はこのようにそれを行うだろうが、おそらく短い方法があります。スクリプトに基づいて

データ

category = c(rep(c("a","b","c"),100)) 
x = (rep(1:5,60)) 
y = rnorm(300,10,3) # I made these positive values 
df = data.frame(category,x,y) 

あなたはすでにその代わりdlply使用する

ddply(df, "category", function(d,perc=0.5){ 
    m=mean(d$y) 
    range.min=m*(1-perc) 
    range.max=m*(1+perc) 
    d=d[d$y< range.max & d$y> range.min ,] 
    coef(lm(y ~ x, data = d)) 
}) 

#result 
category (Intercept)   x 
1  a 10.04912 -0.042292670 
2  b 10.37061 -0.001489721 
3  c 10.04206 0.012238932 

を持っていたし、その後ldply、すぐにddplyですべてを行うことが容易です。

+0

ありがとう、@ウェーブ! 1つの修正 - range.minはm *(1-perc)で、range.maxはm *(1 + perc)にする必要があります –

+0

はい、ありがとうございました。しかし、今修正されました。 – Wave

関連する問題