大型数据集的 LMER 对象预测均值的置信区间

如何解决大型数据集的 LMER 对象预测均值的置信区间

我想在大型数据集(约 40k 行)上获得线性混合效应模型的预测均值的置信区间 (CI),该数据集本身是更大数据集的子集。然后使用该 CI 来估计另一个使用平均值及其相关 CI 作为输入数据的计算的不确定性。

我设法为完整数据集创建了预测估计和区间,但预测区间与 CI 不同且大得多。除了引导(处理这么多数据需要太多时间)之外,我找不到一种方法可以让我估计 CI - 要么是因为它会抛出错误,要么是因为它只提供计算预测区间。

我最近才搬到 LME,因此我可能已经监督了一些明显的方法。

以下是我目前所做的更详细的工作:

输入数据是保密的,因此很遗憾我不能分享任何摘录。

但一般来说,我们有一个表示事件概率的因变量 (y) 和 2 个分类变量(c1 和 c2)和两个带有一些加权因子 (w1) 的连续变量(x1 和 x2)。数据集中的某些值丢失。数据第一行的摘录可能类似于以下示例:

c1 c2 x1 x2 w1 y
伦敦 1 10 不适用 不适用
伦敦 1 20 不适用 不适用
伦敦 2 10 0.2 0.1
巴黎 1 10 0.2 0.23
巴黎 2 10 0.3 0.3

根据这些输入数据,我将按照以下形式拟合 LMER 模型:

lmer1 <- lme4::lmer( y ~ x1 * poly(x2,5) + ((x1 * poly(x2,5)) | c1),data = df,weights = w1,control = lme4::lmerControl(check.conv.singular = lme4::.makeCC(action = "ignore",tol = 1e-3)))

这会运行几分钟并返回几个警告:

警告信息:1:在 optwrap(optimizer,devfun,getStart(start,rho$pp),lower = rho$lower,: nloptwrap 的收敛代码 5: NLOPT_MAXEVAL_REACHED:优化停止,因为 maxeval(上) 已达成。

2: 在 checkConv(attr(opt,“derivs”),opt$par,ctrl = control$checkConv,: 无法评估缩放梯度

3: 在 checkConv(attr(opt,: 模型未能收敛:退化 Hessian 11个负特征值

我增加了 MAXEVAL 参数,但这仍然无助于摆脱警告,我发现尽管有这些警告,模型仍然适合。因此,我开始应用不同的方法来预测整个数据集的均值和均值的相关 CI。

预测间隔

我开始为完整数据集创建预测区间:

predictions <- merTools::predictInterval(lmer1,newdata = df,which = "full",n.sims = 1000,include.resid.var = FALSE,level=0.95,stat="mean")

但是,如上所述,预测区间与 CI 不同(另见 https://datascienceplus.com/prediction-interval-the-wider-sister-of-confidence-interval/)。

我发现一般的预测函数可以选择将区间设置为“预测”或“置信度”,但这个选项不存在于来自 LMER 对象的预测。而且我找不到另一种从预测间隔切换到 CI 的可能性——尽管我相信绘制的数据应该足以做到这一点。

约束

然后我看到有一个叫做“confint”的函数,但是在运行这个函数时我得到以下错误:

predicition_ci = lme4::confint.merMod(lmer1)

正在计算配置文件置信区间...

zeta(shiftpar,start = opt[seqpar1][-w]) 中的错误:分析 检测到新的、较低的偏差

此外:警告消息:

1: 在 commonArgs(par,fn,control,environment()) 中:maxfun

2: 在 optwrap(optimizer,x@theta,lower = x@lower,calc.derivs = TRUE,: bobyqa 的收敛代码 1: bobyqa -- 超过最大函数评估次数

我找到了这个线程 (Error when estimating CI for GLMM using confint()),它说我需要通过设置不同的配置文件来减少“devtol”参数。但是这样做会导致相同的错误:

lmer1_devtol = profile(lmer1,devtol = 1e-7)

zeta(shiftpar,: bobyqa 的收敛代码 1: bobyqa -- 超过最大函数评估次数

add_ci

我找到了函数“add_ci”,但这又导致了另一个错误:

predictions_ci = ciTools::add_ci(df,lmer1,alpha = 0.05)

levelfun(r,n,allow.new.levels = allow.new.levels) 中的错误:新 在新数据中检测到的水平

然后我像预测函数的描述一样将新的“allow.new.levels”参数设置为TRUE,但这个参数似乎没有被执行:

predictions_ci = ciTools::add_ci(df,alpha = 0.05,allow.new.levels = TRUE)

levelfun(r,allow.new.levels = allow.new.levels) 中的错误:新 在新数据中检测到的水平

诊断

我找到了一种计算 sleepstudy 数据的 CI 间隔的方法,该方法使用带有 diag 的矩阵转换。

Designmat <- model.matrix(as.formula("y ~ x1 * poly(x2,5)")[-2],df)
   predvar <- diag(Designmat %*% vcov(lmer1) %*% t(Designmat)) 
    
#With new data
newdat = df
newdat$pred <- predict(lmer1,newdat,allow.new.levels = TRUE)
    
 Designmat <- model.matrix(formula(lmer1)[-2],newdat)

但是 diag 方法不适用于如此大的数据集。

bootMer

如前所述,使用 bootMer 增强置信区间对这个数据子集花费了太多时间(我在 1 天前开始它并且它仍在运行)。我尝试对 sleepstudy 样本数据进行一些并行处理,但这无法显着提高速度,因此我认为它对我的大型数据集也有同样的效果。

merBoot <- bootMer(lmer1,predict,nsim = 1000,re.form = NA)

其他

我已经通读了所有这些帖子(以及更多),但没有一个可以帮助我在合理的时间内为我的案例获得 CI。但也许我监督了一些事情。

  1. https://stats.stackexchange.com/questions/344012/confidence-intervals-from-bootmer-in-r-and-pros-cons-of-different-interval-type
  2. https://stats.stackexchange.com/questions/117641/how-trustworthy-are-the-confidence-intervals-for-lmer-objects-through-effects-pa
  3. How to get coefficients and their confidence intervals in mixed effects models?
  4. Error when estimating CI for GLMM using confint()
  5. https://stats.stackexchange.com/questions/235018/r-extract-and-plot-confidence-intervals-from-a-lmer-object-using-ggplot
  6. How to get confidence intervals for lmer object?
  7. Confidence intervals for the predicted probabilities from glmer object,error with bootMer
  8. https://rdrr.io/cran/ciTools/man/add_ci.lmerMod.html
  9. Error when estimating Confidence interval in lme4
  10. https://fromthebottomoftheheap.net/2018/12/10/confidence-intervals-for-glms/
  11. https://cran.r-project.org/web/packages/merTools/vignettes/Using_predictInterval.html
  12. https://drewtyre.rbind.io/classes/nres803/week_12/lab_12/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-