【发布时间】: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