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

线性混合效应模型ICC计算报错求助:参数行数不匹配问题

线性混合效应模型(LMM)组内相关系数(ICC)计算报错问题

问题背景

我刚接触线性混合效应模型(LMM),需要报告组内相关系数(ICC)。下载了多个R包尝试计算,但执行代码时失败。

执行代码及报错信息

执行的计算代码:

ICC(DF, missing = T)

出现的错误及警告:

Error in data.frame(x.s, subs = rep(paste("S", 1:n.obs, sep = ""), nj)) :
arguments imply differing number of rows: 898, 2245
In addition: Warning message:
In stack.data.frame(x) : non-vector columns will be ignored

数据示例

DF <- structure(list(ID = c("SR6", "YLG19", "YLG19", "SR5", "SR2", 
"TG5", "FB7", "SR9", "KBU15", "FB5"), sub_group = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("European Bullhead", 
"Salmonids"), class = "factor"), taxa = c("salmo.trutta", "oncorhynchus.mykiss", 
"oncorhynchus.mykiss", "salmo.trutta", "salmo.trutta", "salmo.trutta", 
"cottus.gobio", "cottus.gobio", "cottus.gobio", "cottus.gobio"
), sampling.site = c("oberer.seebach.ritrodat", "ybbs.lunz.grossau", 
"ybbs.lunz.grossau", "oberer.seebach.ritrodat", "oberer.seebach.ritrodat", 
"tagles.unten", "faltlbach", "oberer.seebach.ritrodat", "kothbergbach.unten", 
"faltlbach"), body_weight_g = c(4L, 8L, 8L, 20L, 26L, 42L, 6L, 
10L, 4L, 6L), PUFA = structure(c(3L, 4L, 2L, 3L, 2L, 1L, 3L, 
1L, 4L, 3L), .Label = c("SDA", "EPA", "ARA", "DHA"), class = "factor"), 
    organ = structure(c(2L, 3L, 3L, 3L, 4L, 4L, 4L, 3L, 1L, 3L
    ), .Label = c("Brain", "Eyes", "Liver", "Muscles"), class = "factor"), 
    isotopic_value = c(-36.7301983, -39.5973755, -40.549113, 
    -35.6261828, -36.4038883, -46.085506, -39.0796303, NA, -41.6335499, 
    -41.484535)), row.names = c(289L, 488L, 487L, 280L, 242L, 
367L, 52L, 308L, 189L, 19L), class = "data.frame")

计划拟合的LMM公式

isotopic_value ~ organ + body_weight_g  + (1 | ID)

错误原因

你使用的ICC()函数(多数是psych包中的实现)默认会对数据框内所有列进行处理,它的设计场景是计算评分者信度或重复测量的ICC,而非针对LMM模型的随机效应ICC。你的数据包含多个分类变量(factor)和重复测量结构,函数试图将所有列堆叠处理时,因列类型和行数不匹配触发报错。

解决方案

LMM的ICC是随机效应方差与总方差(随机效应方差+残差方差)的比值,需要基于拟合好的LMM模型计算,而非直接传入原始数据框。以下是两种可行方法:

方法1:使用performance包(推荐)

# 安装并加载所需包
install.packages(c("lme4", "performance"))
library(lme4)
library(performance)

# 先清理缺失值(LMM拟合会自动忽略NA,但提前清理更清晰)
DF_clean <- na.omit(DF)

# 拟合LMM模型
model <- lmer(isotopic_value ~ organ + body_weight_g + (1 | ID), data = DF_clean)

# 计算ICC
icc(model)

方法2:手动计算方差分量

如果不想额外安装包,可以手动提取模型的方差分量计算:

# 加载lme4包并拟合模型
library(lme4)
DF_clean <- na.omit(DF)
model <- lmer(isotopic_value ~ organ + body_weight_g + (1 | ID), data = DF_clean)

# 提取方差分量
var_comp <- VarCorr(model)
var_id <- as.numeric(var_comp$ID)       # ID组的随机效应方差
var_resid <- attr(var_comp, "sc")^2     # 残差方差

# 计算ICC
icc_value <- var_id / (var_id + var_resid)
cat("ICC值:", round(icc_value, 3), "\n")

内容的提问来源于stack exchange,提问作者Nadiine El Nino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:35:20