r语言中trifit怎么用_R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题...

mod

# Y = logit variable

# X = continuous variable

# Condition = values A and B, dummy coded; the design is repeated

#            so all participants go through both Conditions

# subject = random effects for different subjects

summary(model)

Random effects:

Groups  Name            Variance Std.Dev. Corr

subject (Intercept)      0.85052  0.9222

X                0.08427  0.2903  -1.00

ConditionB      0.54367  0.7373  -0.37  0.37

X:ConditionB    0.14812  0.3849    0.26 -0.26 -0.56

Number of obs: 39401, groups:  subject, 219

Fixed effects:

Estimate Std. Error z value Pr(>|z|)

(Intercept)      2.49686    0.06909  36.14  < 2e-16 ***

X                -1.03854    0.03812  -27.24  < 2e-16 ***

ConditionB      -0.19707    0.06382  -3.09  0.00202 **

X:ConditionB      0.22809    0.05356    4.26 2.06e-05 ***

在这里,我们观察到奇异拟合,因为截距和x随机效应之间的相关性是-1。处理该模型的一种方法是删除高阶随机效应(例如X:ConditionB),并查看在测试奇异性时是否有区别另一种是使用贝叶斯方法,例如blme软件包以避免奇异性。

我之所以这样问,是因为使用第一个或第二个会导致不同的结果-在第一种情况下,我将删除X:ConditionB随机效应,并且无法估计X和X:ConditionB随机效应之间的相关性。另一方面,使用blme允许我保留X:ConditionB并估计给定的相关性。

通常有以下几种解决办法:

当获得奇异拟合时,这通常表明模型过度拟合-也就是说,随机效应结构太复杂而无法由数据支持,这自然导致建议删除随机效应中最复杂的部分结构(通常是随机斜率)。这种方法的好处在于,它生成了一个更加简约的模型,但并没有过度拟合

如果希望使用最大随机效应结构来拟合模型,并且lme4获得奇异拟合,那么在贝叶斯框架中拟合相同的模型可能很好地通过检查迹线图以及各种参数的好坏来告知lme4为什么会出现问题估计收敛。采用贝叶斯方法的优点是,这样做可能会发现原始模型的问题。 (数据不支持最大随机效应结构的原因),或者可能揭示lme4无法拟合模型的原因。

简而言之,以上两种方法都有其优点。

那将需要通过删除条款来修改模型。但是,在lmer中,当估计随机效应方差非常接近零并且(非常宽松地)数据不足以拖动时,也可以在非常简单的模型中触发该警告(或“边界(奇异)拟合”警告)。估计远离零起始值。

两种方法的正式答案大致相似。删除估计为零的字词。但是有时候,可以忽略不计的方差是合理的,但是希望将其保留在模型中。例如,因为正在故意寻找可能存在较小差异的区间,或者可能正在进行多个类似实验,并且希望始终提取所有差异,可以通过lmerControl禁止显示这些警告,可以将其设置为不使用相关测试。例如,可以包括

control=glmerControl(check.conv.singular = .makeCC(action = "ignore",  tol = 1e-4))

这保留了默认公差(makeCC需要),但是抑制了奇异拟合测试。 (默认值为action =“ warning”,它将运行测试并发出警告)。

lmerfit

(1 + I(x/10) | s), data = d)

并且还可以使用nlme :: lme(),即

lmefit

random = ~ x| s)

要么

lmefit

random = ~ I(x/10) | s)

并且还可能将优化算法更改为lme()中的最优化;

或者

library(GLMMadaptive)

model4

data = data,

family = binomial(link="logit"))

library(glmmTMB)

model4

data = data,

family = binomial(link = "logit"))

参考文献:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值