我在从 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对象中作为结果
提前致谢,
内特
答案 0 :(得分:2)
我遇到了与你相同的问题,我可以看到没有人回复你的帖子。 我并不为我的解决方案感到自豪,它不是很优雅,但它有效
class(testIC) <- "data.frame"
rownames(testIC)
我希望有一天能帮到别人。