2017-08-10 13 views
0

私はデータフレーム内のいくつかの因子レベルにわたってロジスティック回帰モデルを実行しようとしており、ユニークなモデルのパラメータではなく各因子レベルで結果を複製しています。dplyrを使用した因子レベルによる回帰モデル:反復誤差の取得

diamonds$E <- 
    if_else(diamonds$color=='E',1,0) #Make 'E' binary 

fitted_models <- diamonds %>% 
    group_by(clarity) %>%    #Group by clarity 
    do(model=glm(E~price,#regress price on E 
      data=diamonds, 
      family=binomial(link='logit'))) 

fitted_models %>% 
    tidy(model)%>% 
    View #use broom package to look 

私は、この特定の問題を抱えている理由としてこだわっている:私はダイヤモンドのデータセットを使用し、同じコードを実行したときに発生します。

答えて

1

問題はglmコールにあります。 data=diamondsを削除し、data=.に置き換えます。

fitted_models <- diamonds %>% 
    group_by(clarity) %>%    #Group by clarity 
    do(model=glm(E~price,#regress price on E 
       data = ., 
      family=binomial(link='logit'))) 

fitted_models %>% 
    tidy(model) 

あなたが.を使用してグループ化されたデータフレームを参照する必要がdoを使用している時はいつでも。コードが現在読んでいるので、パイプによってdoに渡されたものではなく、グループ化されていない元のフレームを参照しています。たとえば、列Eを呼び出すことはできません。.$Eを使用する必要があります。代わりの解決策は、これがうまくいけば、glm(.$E~.$price)

+0

です。私は約20のIDをモデルで実行したいと思います。これを行うには、データベースを必要な変数だけでフィルタリングして実行するのが最良の方法ですか? – elliot

+0

@elliotおそらく最も簡単です。 dplyr関数 'select()'を使うことができます。別の方法として、数式を別々に書き出して変数に代入し、それを関数内で使用する方法があります。これは、特に式の周りを変更したい場合は、よりきれいになる可能性があります。 –

+0

これらのフォローアップをお願いして申し訳ありませんが、Rに式変数を書き込む私のアプローチは、私のトラックで私を止めました。私はペーストを使ってデータフレームに式を作成しています。 r <-paste( "。$"、colnames(data [-c(1,14,15)])、sep = "")%> %_.vector() ID <-paste(r、collapse = "+")%>%as.vector() 式< - paste( "。$ Promoter.score〜"、ID、sep = "") このエラーが発生しました:if(model)fit $ model < - mf: 引数が論理的であると解釈できません これがなぜ起こるのかについてのご意見はありますか?どうもありがとうございました。 – elliot

関連する問題