基于R语言LMest的潜转移分析(LTA)适配评估与协变量效应问询
LMest包潜转移分析(LTA)技术问题解决方案
一、模型适配评估与对比方法
1. 对比模型选择
- 类别数对比:3类模型需与1类(无潜类别)、2类模型依次对比。从最简单的1类模型开始,逐步增加类别数,观察AIC/BIC的下降幅度,当下降趋势明显放缓时,即为合适的类别数。
- 时间齐性检验:
modBasic = 1是约束转移矩阵在时间点间保持一致,属于转移结构的不变性检验,不属于测量不变性范畴(测量不变性是约束项目测量参数在时间点不变,LMest中通过inv=TRUE实现)。
2. 似然比检验(LR)实现
LMest无内置LR功能,手动计算需注意以下要点:
- 确保两个模型是嵌套关系(约束模型是无约束模型的子集),否则LR统计量无效。
- 对数似然值提取:用
logLik(model)获取模型对数似然,计算LR统计量:LR = 2*(LL_unconstrained - LL_constrained) - 自由度为无约束模型与约束模型的参数数量差。若手动计算p值为0,大概率是无约束模型拟合远优于约束模型,或嵌套关系错误。
- 类别数对比时,LR统计量不服从卡方分布,需用LMest的
bootstrap()函数做bootstrap检验:boot_result <- bootstrap(model, B = 1000) ll_boot <- boot_result$loglik p_val <- mean(2*(ll_boot - LL_constrained) >= LR)
3. 补充适配指标
LMest未内置熵、R²等指标,可手动计算:
- 熵:衡量潜类别分类的准确性:
post <- model$post # 个体后验分类概率矩阵 entropy <- 1 - sum(post * log(post)) / (-model$loglik) - McFadden R²:衡量模型解释力:
ll_null <- logLik(null_model) # 仅含截距的基准模型对数似然 r2_mcfadden <- 1 - model$loglik / ll_null - 分类准确率:用
predict(model)获取个体最可能类别,计算与“真实类别”(若有)的匹配率,或计算平均后验概率(值越高分类越准确)。
二、协变量效应解读与显著性检验
1. Ga参数矩阵解读
你的Ga参数是以初始潜类别(时间1的类别)为分层,转移概率的logit值:
logit=1/2/3对应时间1的3个潜类别;每一层的列对应转移到时间2的类别2、3(以类别1为参照组,因此无转移到类别1的参数)。- 以
logit=1层的X1gender系数为例:- 0.2112:性别每增加1单位(假设0=女性,1=男性),从时间1类别1转移到时间2类别2的logit值,比转移到类别1高0.2112;
- 0.7080:性别每增加1单位,从时间1类别1转移到时间2类别3的logit值,比转移到类别1高0.7080。
- 转移概率计算公式:对于从初始类别k转移到时间2类别m(m=2,3)的概率:
$$P(m|k,X) = \frac{\exp(\text{Ga}[k,m-1] \cdot (1 + X1gender))}{1 + \sum_{j=2}^3 \exp(\text{Ga}[k,j-1] \cdot (1 + X1gender))}$$
转移到类别1的概率为 $1 - P(2|k,X) - P(3|k,X)$。
2. 效应显著性检验
LMest无内置p值输出,可通过bootstrap方法获取标准误、置信区间与p值:
# 生成bootstrap样本 boot <- bootstrap(model, B = 1000) # 提取Ga参数的bootstrap样本 ga_boot <- boot$par[, grep("Ga", names(boot$par))] # 提取X1gender的系数位置(需根据实际参数名调整) gender_coef_pos <- c(2,4,6,8,10,12) gender_boot <- ga_boot[, gender_coef_pos] # 计算标准误、z值、p值与置信区间 se <- apply(gender_boot, 2, sd) z <- model$par[gender_coef_pos] / se p_val <- pnorm(abs(z), lower.tail = FALSE) * 2 ci_lower <- apply(gender_boot, 2, quantile, 0.025) ci_upper <- apply(gender_boot, 2, quantile, 0.975)
3. 边际效应计算
边际效应是协变量变化1单位时,转移概率的绝对变化量:
# 定义协变量取值(假设X1gender为0/1编码) x0 <- c(1, 0) # 截距 + X1gender=0 x1 <- c(1, 1) # 截距 + X1gender=1 # 提取Ga参数矩阵 Ga <- model$Ga # 计算每个初始类别下的转移概率变化 marg_effect <- array(0, dim = c(3, 2)) # 3个初始类别,2个转移目标类别 for (k in 1:3) { # X=0时的转移概率 logit0 <- Ga[k,,] %*% x0 prob0 <- exp(logit0) / (1 + sum(exp(logit0))) # X=1时的转移概率 logit1 <- Ga[k,,] %*% x1 prob1 <- exp(logit1) / (1 + sum(exp(logit1))) # 边际效应 marg_effect[k,] <- prob1 - prob0 } # marg_effect的行对应初始类别1/2/3,列对应转移到类别2/3的边际效应
内容的提问来源于stack exchange,提问作者user23546212
相关产品推荐
相关产品推荐

