【问题标题】:Extracting information from ICtab() function of bbmle从 bbmle 的 ICtab() 函数中提取信息
【发布时间】:2017-04-27 22:29:30
【问题描述】:

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

我正在寻找的是一种从 ICtab() 函数中提取所有信息的方法,作为一个整体或三个部分(行名、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()data 更改此输出.frame() 或任何其他对象类型来获取这些行名。

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

附带说明,在 bbmle 包的 documentation 中,似乎有一个名为 get.mnames() 应该这样做 - 列出型号名称 - 但是,它似乎没有包含在安装的 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 对象中作为结果。

提前致谢,

内特

【问题讨论】:

    标签: r


    【解决方案1】:

    我遇到了和你一样的问题,我可以看到没有人回复你的帖子。 我对我的解决方案并不感到自豪,它不是很优雅,但它确实有效

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

    我希望有一天它会对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2022-07-18
      • 2017-06-07
      • 2012-07-04
      相关资源
      最近更新 更多