You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

变量缩放后p值为何变化?混合模型技术疑问

问题描述

我用以下代码构建线性混合模型:

m2 <- lmer(SE ~ b95rel*MF*TASK*ROI*side*Run + (1|IDcheck),f)

其中:

  • SE、b95rel、MF为连续变量
  • TASK、ROI、side、Run为分类变量

运行后收到警告:

Warning messages:
1: Some predictor variables are on very different scales: consider rescaling

当我用R的scale()函数缩放b95rel后,模型的p值发生了变化(比如主效应TASK从不显著变为显著);进一步缩放MF后,p值再次变化。

我之前了解到变量缩放不应改变p值,对此感到困惑。可视化显示缩放仅改变轴值,数据相对距离未变,排除了该因素的影响。目前因数据量过大无法提供dput()输出,以下是我的sessionInfo:

> sessionInfo()
R version 4.2.2 (2022-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19044)

Matrix products: default

locale:
[1] LC_COLLATE=English_Canada.utf8  LC_CTYPE=English_Canada.utf8    LC_MONETARY=English_Canada.utf8
[4] LC_NUMERIC=C                    LC_TIME=English_Canada.utf8    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] rstatix_0.7.2   ggpubr_0.6.0    lubridate_1.9.2 forcats_1.0.0   stringr_1.5.0   dplyr_1.1.1    
 [7] purrr_1.0.1     readr_2.1.4     tidyr_1.3.0     tibble_3.2.1    ggplot2_3.4.2   tidyverse_2.0.0
[13] sjmisc_2.8.9    sjPlot_2.8.14   MuMIn_1.47.5    lmerTest_3.1-3  lme4_1.1-32     Matrix_1.5-4   
[19] sjstats_0.18.2  emmeans_1.8.5  

loaded via a namespace (and not attached):
 [1] splines_4.2.2       carData_3.0-5       modelr_0.1.11       datawizard_0.7.1    stats4_4.2.2       
 [6] bayestestR_0.13.1   numDeriv_2016.8-1.1 pillar_1.9.0        backports_1.4.1     lattice_0.20-45    
[11] glue_1.6.2          RColorBrewer_1.1-3  ggsignif_0.6.4      minqa_1.2.5         colorspace_2.1-0   
[16] sandwich_3.0-2      pkgconfig_2.0.3     broom_1.0.4         haven_2.5.2         xtable_1.8-4       
[21] mvtnorm_1.1-3       scales_1.2.1        tzdb_0.3.0          timechange_0.2.0    farver_2.1.1       
[26] generics_0.1.3      car_3.1-2           sjlabelled_1.2.0    TH.data_1.1-1       withr_2.5.0        
[31] cli_3.4.1           effectsize_0.8.3    survival_3.4-0      magrittr_2.0.3      estimability_1.4.1 
[36] fansi_1.0.4         nlme_3.1-160        MASS_7.3-60         tools_4.2.2         hms_1.1.3          
[41] lifecycle_1.0.3     multcomp_1.4-23     munsell_0.5.0       ggeffects_1.2.2     compiler_4.2.2     
[46] rlang_1.1.0         grid_4.2.2          nloptr_2.0.3        parameters_0.20.3   rstudioapi_0.14    
[51] labeling_0.4.2      boot_1.3-28         gtable_0.3.3        codetools_0.2-18    abind_1.4-5        
[56] R6_2.5.1            zoo_1.8-11          knitr_1.42          performance_0.10.3  utf8_1.2.3         
[61] insight_0.19.1      stringi_1.7.12      Rcpp_1.0.10         vctrs_0.6.1         tidyselect_1.2.0   
[66] xfun_0.38           coda_0.19-4    

请问为何缩放变量后p值会发生变化?


原因分析

出现这种情况主要有以下几个核心原因:

  1. 高阶交互项改变了主效应的定义
    你的模型包含b95rel*MF*TASK*ROI*side*Run全阶交互,此时主效应(如TASK)表示的是其他所有变量处于参考水平时的效应。未缩放时,连续变量的参考水平是原始0值;而scale()默认将连续变量中心化到均值为0,这直接改变了主效应的实际含义,对应的p值自然会变化。

  2. 原始模型存在数值不稳定问题
    变量尺度差异极大时,lme4拟合模型可能出现矩阵求逆精度下降、优化算法收敛到局部最优解等数值不稳定情况。缩放后变量尺度趋于一致,拟合过程更稳定,得到的参数估计及p值更可靠——本质是原始模型的估计本身存在偏差,缩放后纠正了这一问题。

  3. lmerTest的p值计算依赖参数估计精度
    你使用lmerTest包通过Satterthwaite或Kenward-Roger方法近似自由度计算p值。当原始模型因尺度问题导致参数标准误不稳定时,这些近似方法得出的p值会有偏差;缩放后参数估计更稳定,标准误计算更准确,p值随之变化。

  4. “缩放不改变p值”的适用范围有限
    你之前了解的结论仅适用于无交互项的线性模型:此时缩放连续变量仅改变系数大小,t值(系数/标准误)保持不变,p值也不变。但加入交互项后,尤其是连续与分类变量的交互,缩放会改变交互项系数,进而影响主效应的检验结果。

内容的提问来源于stack exchange,提问作者Ang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:32:02