0

ldply() を使用して GLM モデルのリストから逸脱度を抽出したい

サンプルデータ (R ベースのインストールから):

    library(reshape2)
    library(plyr)
    mtcars.1 <- mtcars[, c("am",  "qsec" , "drat")  ]
    mtcars.m <- melt(mtcars.1, id= 1 ) 

    glm.cars <- dlply( mtcars.m ,  .(variable) ,  
    glm,  formula=  am ~ value , family=binomial )  

ここまで来ました:

    ldply(  glm.cars  ,  summarise ,   "Null Deviance" = null.deviance , 
        "Residual Deviance" = deviance , "Deviance"= "??"    )

これにより、次のようになります。

      variable  Null Deviance     Residual Deviance    Deviance
1     qsec      43.22973          41.46512             ??
2     drat      43.22973          21.65003             ??

逸脱がありません!どうやって抽出するの?

では、上記の例の逸脱を抽出するにはどうすればよいでしょうか。

もちろん、 null.deviance + deviance を実行することもできますが、そのように実行したくはありません。私が G 統計をもっとよく知りたいと思ったのはそのためだと思います。抽出、減算、および chisqr の実行の手順を踏んでいると感じています。よりよく学習します。

PS私はそのglm.model $ deviancを見つけるのに非常に混乱していました

4

1 に答える 1

3

あなたが言うように、あなたは混乱しています。モデルごとに2つの逸脱度があります。興味深い統計的尺度であるのは、これら2つの逸脱度(...それらの合計ではない)の違いです。(残差平方和とモデルの二乗和の相加的性質にアナロジーを作成していると思いますが、そうであれば、言語のアナロジーの穴を間違ったウサギをたどりました。)違いを次のように比較する必要があります。ヌルモデルと「残差モデル」の自由度の差と同じ自由度の95%カイ二乗値。モデルでstr(。)を実行すると、リスト出力を下にスクロールして、名前が次のとおりであることを確認できます。

 str(glm(am~qsec, mtcars, family=binomial)  )
 .....
 $ deviance         : num 41.5
 $ aic              : num 45.5
 $ null.deviance    : num 43.2
 .....
 $ df.residual      : int 30
 $ df.null          : int 31
 .....

したがって、dlplyコードはそれらを抽出する必要があり、次に計算null.deviance-devianceしてdf.null -df.residual、おそらくを表示しますqchisq(0.95, df.null-df.residual)。R-Coreによってどのようにパッケージ化されたかを確認したい場合は、以下を参照してください。

 anova( glm(am~qsec, mtcars, family=binomial)  )
于 2013-01-25T16:19:06.800 に答える