从bbmle的ICtab()函数中提取信息

时间:2016-12-12 23:21:25

标签: r

我在从 bbmle 包的 ICtab()功能中提取信息时遇到了一些问题。基本上我要做的是在一系列glm模型上运行此函数,然后将该输出添加到主data.frame对象。但是,虽然我可以从 ICtab()输出中提取$ dqAIC和$ df参数,但我无法找到一种方法来提取行名称本身(即输入的模型的名称)进入ICtab)。这是一个问题,因为 ICtab()输出按$ dqAIC的升序排序 - 因此,我无法使用正确的顺序预先标记列表或data.frame或矩阵,因此$ dqAIC值未提前知道。要解决这个问题, ICtab()对象类似乎无法被强制转换为data.frame或任何其他我可以提取row.names()或任何其他对象的对象类似。

我正在寻找的方法是从 ICtab()函数中提取所有信息,作为一个整体或3个部分(行名称,dqAIC值和df值),然后将其附加到主表以及其他一些信息。

以下是我正在尝试的代码示例以及一些测试数据。

library(bbmle)
library(visreg)
library(splines)
library(foreign)
library(survival)
library(lubridate)

dfun<- function(object) {with(object, sum((weights*residuals^2)[weights>0])/df.residual)}  

test.data.1 <- seq(1, 1000, by = 10)
num.days <- seq(1, 100, by = 1)

disp.global <- glm(test.data.1 ~ num.days, family=poisson(link="log"), na.action=na.exclude)

model.1 <- glm(test.data.1 ~ ns(num.days, df = 3), family=poisson(link="log"), na.action=na.exclude)
model.2 <- glm(test.data.1 ~ ns(num.days, df = 6), family=poisson(link="log"), na.action=na.exclude)

testIC <- ICtab(model.1, model.2, dispersion=dfun(disp.global),type="qAIC")

结果如下:

> testIC
        dqAIC df
model.2 0     7 
model.1 5     4 

我可以提取dqAIC和df值:

> testIC$dqAIC
[1] 0.000000 5.018875
> testIC$df
[1] 7 4

但我无法找到获得“model.2”和“model.1”行名称的方法; row.names(testIC)什么都不返回, rownames(testIC)只返回一个NULL:

> row.names(testIC)
> rownames(testIC)
NULL

据我所知,无法使用 list() as.data.frame()数据更改此输出.frame()或任何其他对象类型来获取这些行名称。

> as.data.frame(testIC)
Error in as.data.frame.default(testIC) : 
  cannot coerce class ""ICtab"" to a data.frame

作为旁注,在 bbmle 包的documentation中,似乎有一个名为 get.mnames()<的函数/ em>应该这样做 - 列出模型名称 - 但是,它似乎不包含在已安装的 bbmle 包中(我的版本与版本匹配)文档,1.0.18):

> ls("package:bbmle")
 [1] "AIC"          "AICc"         "AICctab"      "AICtab"       "anova"        "BICtab"       "call.to.char" "coef"         "confint"      "deviance"    
[11] "formula"      "ICtab"        "logLik"       "mle2"         "namedrop"     "parnames"     "parnames<-"   "plot"         "predict"      "profile"     
[21] "qAIC"         "qAICc"        "relist2"      "residuals"    "sbeta"        "sbetabinom"   "sbinom"       "simulate"     "slice"        "slice1D"     
[31] "slice2D"      "sliceOld"     "snbinom"      "snorm"        "spois"        "stdEr"        "summary"      "update"       "vcov"

任何帮助从ICtab()结果中获取这些行名称的帮助将不胜感激。上面的代码只是一个示例 - 我实际上正在做的是通过ICtab()函数运行多个模型,带有一系列数据集,我想将所有这些信息放在一个data.frame对象中作为结果

提前致谢,

内特

1 个答案:

答案 0 :(得分:2)

我遇到了与你相同的问题,我可以看到没有人回复你的帖子。 我并不为我的解决方案感到自豪,它不是很优雅,但它有效

class(testIC) <- "data.frame"
 rownames(testIC)

我希望有一天能帮到别人。