复制的

例如

同样地,我有没有办法知道这个模型是收敛的还是失败的?

我的顾问说,如果模型无法收敛,标准误差将无法估计.然而,尽管以下公式未能收敛,但似乎估计出了一个标准误差.

是否有任何良好的指标表明该模型收敛或未能收敛?(注意到警告信息除外)

我使用的是lme4软件包和lmer()函数.

例如,有一个失败的收敛多级模型的例子

library(lme4)
read.table(textConnection("duration season  sites   effect
                          4d    mon s1  7305.91
                          4d    mon s2  856.297
                          4d    mon s3  649.93
                          4d    mon s1  10121.62
                          4d    mon s2  5137.85
                          4d    mon s3  3059.89
                          4d    mon s1  5384.3
                          4d    mon s2  5014.66
                          4d    mon s3  3378.15
                          4d    post    s1  6475.53
                          4d    post    s2  2923.15
                          4d    post    s3  554.05
                          4d    post    s1  7590.8
                          4d    post    s2  3888.01
                          4d    post    s3  600.07
                          4d    post    s1  6717.63
                          4d    post    s2  1542.93
                          4d    post    s3  1001.4
                          4d    pre s1  9290.84
                          4d    pre s2  2199.05
                          4d    pre s3  1149.99
                          4d    pre s1  5864.29
                          4d    pre s2  4847.92
                          4d    pre s3  4172.71
                          4d    pre s1  8419.88
                          4d    pre s2  685.18
                          4d    pre s3  4133.15
                          7d    mon s1  11129.86
                          7d    mon s2  1492.36
                          7d    mon s3  1375
                          7d    mon s1  10927.16
                          7d    mon s2  8131.14
                          7d    mon s3  9610.08
                          7d    mon s1  13732.55
                          7d    mon s2  13314.01
                          7d    mon s3  4075.65
                          7d    post    s1  11770.79
                          7d    post    s2  4254.88
                          7d    post    s3  753.2
                          7d    post    s1  11324.95
                          7d    post    s2  5133.76
                          7d    post    s3  2156.2
                          7d    post    s1  12103.76
                          7d    post    s2  3143.72
                          7d    post    s3  2603.23
                          7d    pre s1  13928.88
                          7d    pre s2  3208.28
                          7d    pre s3  8015.04
                          7d    pre s1  11851.47
                          7d    pre s2  6815.31
                          7d    pre s3  8478.77
                          7d    pre s1  13600.48
                          7d    pre s2  1219.46
                          7d    pre s3  6987.5
                          "),header=T)->dat1

lmer(effect ~ duration + (1+duration|sites) +(1+duration|season),
                                  data=dat1)

这会产生错误

然而,标准误差似乎是可以估计的,尽管它无法收敛.

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: effect ~ duration + (1 + duration | sites) + (1 + duration |      season)
   Data: dat1

REML criterion at convergence: 969

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.0515 -0.6676  0.0075  0.5333  3.2161 

Random effects:
 Groups   Name        Variance Std.Dev. Corr
 sites    (Intercept) 8033602  2834         
          duration7d  1652488  1285     1.00
 season   (Intercept)       0     0         
          duration7d  1175980  1084      NaN
 Residual             5292365  2301         
Number of obs: 54, groups:  sites, 3; season, 3

Fixed effects:
            Estimate Std. Error       df t value Pr(>|t|)  
(Intercept) 4183.896   1695.252    2.008   2.468    0.132  
duration7d  3265.641   1155.357    3.270   2.827    0.060 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
           (Intr)
duration7d 0.520 
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see ?isSingular

(以上数据和代码不是我的模型,

总而言之,我的问题是

  1. 除了注意警告消息外,是否有任何明确的功能或方法来通知此功能是否已聚合或聚合失败

(就像判断奇点一样,Isingular()函数给出了明确的指示)

  1. 当模型无法收敛时,为什么标准误差仍然是估计的?

最终的目标是为了我的模拟研究,我将计算收敛速度.

推荐答案

我的顾问说,如果模型无法收敛,标准误差将无法估计.然而,尽管以下公式未能收敛,但似乎估计出了一个标准误差.

你展示的模型是收敛的.你之所以知道这一点,是因为有这样一条信息:

optimizer (nloptwrap) convergence code: 0 (OK)

如果它没有收敛,你会看到如下警告:

In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
Model failed to converge: degenerate  Hessian with 1 negative eigenvalues

然而,它已经收敛到一个奇异拟合,如下一行所示:

boundary (singular) fit: see ?isSingular

除了注意警告消息外,是否有任何明确的功能或方法来通知此功能是否已聚合或聚合失败

为此,我使用以下帮助函数:

# helper function
# Has the model converged ?

hasConverged <- function (mm) {
  
  if ( !inherits(mm, "merMod")) stop("Error: must pass a lmerMod object")
  
  retval <- NULL
  
  if(is.null(unlist(mm@optinfo$conv$lme4))) {
    retval = 1
  }
  else {
    if (isSingular(mm)) {
      retval = 0
    } else {
      retval = -1
    }
  }
  return(retval)
}

如果模型收敛到normally ie而不是奇异拟合,则返回1,如果收敛到奇异拟合,则返回0,如果未能收敛,则返回-1.另一种方法是根据@SamR的 comments 将警告升级为错误:

通常,如果警告还不够,可以使用选项(warn=2)将警告转化为错误,这意味着操作将结束,因此不应获得任何标准错误或其他输出.只需记住在之后将警告设置回1.

接下来:

当模型无法收敛时,为什么标准误差仍然是估计的?

正如上面提到的,它已经收敛了,而你的顾问在这里是错的:

我的顾问说,如果模型无法收敛,标准误差将无法估计.

如果模型无法收敛,它将输出放弃之前在最后一次迭代中获得的估计.

R相关问答推荐

使用sensemakr和fixest feols模型(R)

无法将传奇添加到cowplot多情节中

R Tidymodels textercipes-使用spacyR进行标记化-如何从生成的标记列表中删除标点符号

Highcharter多次钻取不起作用,使用不同方法

在某些栏和某些条件下,替换dfs列表中的NA

为什么舍入POSIXct会更改能力以匹配等效的POSIXct?

标识R中多个列中缺少的唯一值

如何使用STAT_SUMMARY向ggplot2中的密度图添加垂直线

如何改变x轴比例的列在面

R中边际效应包中Logistic回归的交互作用风险比

基于Key->Value数据帧的基因子集相关性提取

观察器中的inaliateLater的位置

变长向量的矢量化和

使用列中的值来调用函数调用中应使用的其他列

R没有按顺序显示我的有序系数?

基于R中的引用将向量值替换为数据框列的值

具有由向量定义的可变步长的序列

将R中对象的CSV数组转换为JSON数组

将每晚的平均值与每晚的值进行比较,统计是否有效?

使用nls()函数的非线性模型的半正态图