我想使用ldply()
从GLM模型列表中提取偏差示例数据(来自R base安装):
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
答案 0 :(得分:3)
正如你所说,你很困惑。对于每个型号,您有两个偏差。这两个偏差(......不是它们的总和)的区别在于有趣的统计测量。 (我猜你正在对剩余平方和和模型平方和的加性特性进行类比,但如果是这样的话,那么你就跟着错误的兔子沿着语言类比洞走了。)你需要将差异与a进行比较。具有与零模型和“残差模型”之间的自由度差异相同的自由度的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) )