背景:使用glmulti进行多模型推理
glmulti是一个 R 函数/包,用于通用线性模型的自动模型选择,它在给定因变量和一组预测变量的情况下构建所有可能的通用线性模型,通过经典glm函数拟合它们,然后允许进行多模型推理(例如,使用从 AICc、BIC 派生的模型权重)。glmulti在理论上也可以与任何其他函数一起使用,该函数以与glm相同的格式返回系数、模型的对数似然和自由参数的数量(可能还有其他信息?)。
我的目标:具有鲁棒错误的多模型推理
我想使用glmulti对定量因变量的误差进行稳健建模,以防止异常值的影响。
例如,我可以假设线性模型中的误差分布为t 分布而不是正态分布。使用其峰度参数,t 分布可以有重尾,因此对异常值更稳健(与正态分布相比)。
但是,我并不致力于使用 t 分布方法。我对任何能够返回对数似然的方法感到满意,因此可以与glmulti中的多模型方法一起使用。但这意味着,不幸的是,我不能使用 R 中众所周知的稳健线性模型(例如,来自robustbase的lmRob或来自 robustbase 的lmrob ),因为它们不在对数似然框架下运行,因此无法与glmulti一起使用。
问题:我找不到适用于glmulti的稳健回归函数
发现在对数似然框架下运行的唯一稳健的 RI 线性回归函数是heavyLm(来自重包);它在分布时对错误进行建模。不幸的是,heavyLm不适用于glmulti(至少不是开箱即用的),因为它没有用于loglik的 S3 方法(可能还有其他东西)。
为了显示:
library(glmulti)
library(heavy)
使用数据集stackloss
head(stackloss)
正则高斯线性模型:
summary(glm(stack.loss ~ ., data = stackloss))
使用glm的默认高斯链接函数使用glmulti进行多模型推理
stackloss.glmulti <- glmulti(stack.loss ~ ., data = stackloss, level=1, crit=bic)
print(stackloss.glmulti)
plot(stackloss.glmulti)
具有 t 分布误差的线性模型(默认为 df=4)
summary(heavyLm(stack.loss ~ ., data = stackloss))
glmulti调用heavyLm作为拟合函数的多模型推理
stackloss.heavyLm.glmulti <- glmulti(stack.loss ~ .,
data = stackloss, level=1, crit=bic, fitfunction=heavyLm)
给出以下错误:
Initialization...
Error in UseMethod("logLik") :
no applicable method for 'logLik' applied to an object of class "heavyLm".
如果我定义以下函数,
logLik.heavyLm <- function(x){x$logLik}
glmulti 可以得到对数似然,但随后发生下一个错误:
Initialization...
Error in .jcall(molly, "V", "supplyErrorDF",
as.integer(attr(logLik(fitfunc(as.formula(paste(y, :
method supplyErrorDF with signature ([I)V not found
问题:鲁棒线性回归的哪个函数/包适用于 glmulti(即,表现得像 glm)?
可能有一种方法可以定义进一步的函数来让heavyLm与glmulti一起工作,但在开始这段旅程之前,我想问一下是否有人
- 知道一个健壮的线性回归函数,它 (a) 在对数似然框架下运行,并且 (b) 行为类似于glm(因此可以开箱即用地使用glmulti)。
- 得到了heavyLm已经在使用glmulti。
很感谢任何形式的帮助!