如何通过应用r函数从几个回归结果中提取BIC
我已经有几个回归结果,例如, fit1, fit2, fit3
。 我想通过使用apply
函数从回归结果中提取BIC。如何通过应用r函数从几个回归结果中提取BIC
的问题是,当我的代码如下:
fitresult = cbind(fit1, fit2, fit3)
BIC = apply(fitresult, 2, BIC)
它显示错误:
Error in UseMethod("logLik") : no applicable method for 'logLik'
applied to an object of class "list"
我检查,发现class(fitresult[1]) = 'list'
和loglik
无法在 '清单' 类应用。我认为这个错误意味着我不能使用BIC(fitresult[1])
,因为fitresult[1]
不是合适的结果对象。
那么我该如何使用apply函数来使中的每个组件都可以使用apply
函数呢?通过更改每个组件的class
?
TL; DR:的cbind
操作条模型类(例如,类是lm
如果模型对象与所述lm
函数创建)从模型中的对象,但BIC
预计与模型类的对象(如lm
或glm
)。相反,做lapply(list(fit1, fit2, fit3), BIC)
和BIC
将工作。
假设fit1
,fit2
,和fit3
是起因于运行的建模函数(像lm
或glm
),则这些对象是包含模型输出列表对象(例如,运行str(fit1)
。
BIC
正在等待模型对象(例如,如果模型是使用lm
创建的,则输出对象将是类别lm
的列表)。但是,cbind(fit1, fit2, fit3)
的输出具有类别matrix
,a nd每列包含给定模型对象的所有子列表元素(例如,在控制台中输入,class(fitresult)
,fitresult[1, ]
和fitresult[2, ]
并查看会发生什么情况)。然而,的这些列不再附带模型类lm
,因此BIC不知道如何操作它们。例如,如果您使用lm
创建模型,则class(fit1)
将返回lm
。但是在cbind
操作之后。请注意0返回list
。
相反,把这些模型对象转换成一个列表,并使用lapply
每个模型对象上运行BIC
:
lapply(list(fit1, fit2, fit3), BIC)
输出应该是一个列表,其中每个元素是从给定的模型BIC。如果你想输出作为载体,可以这样做:
sapply(list(fit1, fit2, fit3), BIC)
或vapply:'vapply(list(fit1,fit2,fit3),BIC,numeric(1))' – Parfait
请参阅如何创建[最小的可重复的例子(https://stackoverflow.com/a/5963610/8386140),以帮助别人帮你。 – duckmayr