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

R语言lcmm包使用postprob函数报错:invalid subscript type 'list'

解决lcmm包中postprob分配类别时的"invalid subscript type 'list'"错误

错误原因

错误出在data$groups <- factor(groups$class[sapply(data$id, function(x) which(groups$id==x))])这一行:sapply返回的结果是列表类型(或嵌套向量),无法直接作为索引提取groups$class的元素。本质是groups存储的是个体水平的分类(每个id仅一行),而data是重复测量的纵向数据(每个id对应多行),循环匹配的逻辑有误。

解决方案

直接用merge函数将个体分类与原始纵向数据匹配,替代循环索引的方式,代码更简洁且避免错误:

data(bmi_long, package = "LCTMtools")
data <- data.frame(bmi_long)

data$id <- as.numeric(data$id)
data$x <- data$age
data$y <- as.numeric(data$bmi)
data <- subset(data, select = c("id", "x", "y"))

# 拟合lcmm模型
m1 <- lcmm(fixed = y ~ x, subject = 'id', data = data)
summary(m1)

# 提取个体水平的id与对应潜在类别
groups <- as.data.frame(m1$pprob[, c("id", "class")])

# 合并类别到原始纵向数据,自动匹配每个id的所有观测行
data <- merge(data, groups, by = "id", all.x = TRUE)
# 将类别转为因子类型
data$class <- factor(data$class)

补充说明

  • m1$pprob是lcmm模型输出的个体水平后验概率数据框,自带id(个体标识)和class(分配的潜在类别)列,直接提取这两列即可,无需通过列索引选取。
  • merge函数通过id列自动匹配,all.x = TRUE确保保留原始数据的所有行,每个重复测量的观测都会对应到所属个体的潜在类别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:37:45