截距和斜率之间的共线性随时间编码而变化 - 线性混合效应模型

如何解决截距和斜率之间的共线性随时间编码而变化 - 线性混合效应模型

我目前正在尝试运行一个线性混合效应模型来估计压力如何随时间变化(超过 6 个时间点)。我注意到,当为我的样本中的每个人提取应力轨迹的截距和斜率时,这些因素之间存在高度相关性。但是,这似乎会根据时间的编码方式而改变……为什么会发生这种情况的任何解释?您通常如何处理截距和斜率之间的共线性?任何建议将不胜感激。

以下可重现的示例:

#toy data code: https://rpubs.com/mlmcternan/BC-lme
options(width = 100)

library(lme4)
library(nlme)
library(dplyr)
library(kableExtra)
library(psych)
library(car)
library(ggplot2)
library(ggpubr)
library(tidyverse)

set.seed(222)

# simulate data
N <- 150
nobs <- 6
sigma <- 20
sig00 <- 10
b0 <- 80
b1 <- -6

ID = rep(1:N,each = nobs)

# time is coded 0 to 5 here

Time = rep(0:5,150)
dat <- data.frame(ID,Time)
u0 <- rnorm(N,sig00)
dat$u0 <- rep(u0,each=nobs)
dat$err <- rnorm(900,sigma)
dat$Stress <- (b0 + u0)  + b1*dat$Time + dat$err
dat <- dat[,-c(3:4)]

# fit the model
fit1 <- lme(Stress ~ Time,random=~Time|ID,data=dat,correlation=corCAR1(form=~Time|ID),method="ML",na.action=na.exclude,control=list(opt="optim"))

# extract predictions
predictions <- data.frame(coef(fit1))
names(predictions) <- c("Intercept","Slope")

# correlate intercept and slope
cor.test(predictions$Intercept,predictions$Slope,method = "pearson")

# Correlation between Intercept and Slope = 0.8057988 

# plot correlation
plot(predictions$Intercept,main="Scatterplot Example",xlab="Intercept ",ylab="Slope ",pch=19)

# Recode time - 0 represents predicted mean at timepoint 2
dat$Time <-  rep(-1:4,150)

fit1 <- lme(Stress ~ Time,control=list(opt="optim"))

predictions <- data.frame(coef(fit1))
names(predictions) <- c("Intercept","Slope")
cor.test(predictions$Intercept,method = "pearson")
#correlation between intercept and slope = 0.6314682 

plot(predictions$Intercept,pch=19)

解决方法

事实证明这更像是一个统计/数学问题,而不是一个关于编码的问题。无论如何,我认为您的相关性不同的原因在您定义/模拟数据的方式中根深蒂固。

使用意大利面条图查看(两个版本)您的模拟数据:

library(ggplot2)

ggplot(dat,aes(y = Stress,x = Time,colour=as.factor(ID) )) +
  geom_smooth(method=lm,se=FALSE) + theme(legend.position = "none") +
  geom_vline(xintercept=0)

您会看到,每个 ID 的回归线在图的中间(Time == 2.5 附近)比在两端更靠近。这是因为 b1*Time 对于较大的 abs(Time) 值较大。

现在,当您将 Time 的编码方式从 0 - 5 更改为 -1 - 4 时,将 y 轴向右移动,使线条更靠近。由于截距被定义为回归线与 y 轴交叉处的 Stress 值,因此移动 y 轴会使截距更靠近。或者,换句话说,移动 y 轴会改变斜率对截距的影响。

这就是为什么当您有调节器和/或随机斜率时,通常建议将预测变量居中。它使拦截的解释更容易。

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

相关推荐


使用本地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-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res