You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于LRT的二项式GLMM功效分析实现方案及思路问询

基于LRT的二项式GLMM功效分析实现方案及思路问询

Hi Sahila, 针对你提出的二项式广义线性混合模型(GLMM)结合似然比检验(LRT)的功效分析问题,我整理了一些实用的思路和实现方案,希望能帮到你:

一、关于你的核心思路合理性

  • 你考虑针对模型对比的LRT做模拟功效分析,而非仅针对全模型的参数估计功效,这个思路完全合理,甚至更贴合你的研究假设——毕竟你的核心目标是检验“零模型是否比加入固定效应X的模型拟合更好”,直接模拟LRT的统计效力才是最直接对应你的研究问题的方式,完全不算过度复杂。
  • 补充说明:如果只看全模型的参数估计功效,更多是检验“能否检测到X的效应存在”,和你通过LRT检验模型拟合差异的目标虽有相关性,但并非完全等价,所以你的方向是完全正确的。

二、实现针对LRT的模拟功效分析的方案

1. 使用simr包(推荐,便捷且专业)

simr是专门针对混合模型功效分析的工具包,原生支持通过LRT检验模型对比的功效,操作非常便捷:

  • 核心步骤:
    1. 先构建一个模板模型:可以用你的真实预实验数据,或者根据预期效应量模拟的数据集,拟合出包含目标固定效应的GLMM
    2. 定义要对比的零模型(即移除目标固定效应X的模型)
    3. 调用powerSim()函数直接模拟LRT的功效
  • 示例代码片段:
# 加载所需包
library(simr)
library(lme4)

# 第一步:生成/导入模板数据(这里用模拟的预期数据示例)
set.seed(123) # 设置随机种子保证可重复
dat <- data.frame(
  subject = rep(1:50, each = 2),  # 50个个体,每个个体对应X的2个水平
  X = rep(c("Level1", "Level2"), 50)  # X的二分类水平
)
# 生成线性预测器:截距+X的效应+随机效应
dat$linpred <- -1 + 0.7*(dat$X == "Level2") + rnorm(50)[dat$subject]*sqrt(0.4)
# 生成二项式响应变量
dat$y <- rbinom(nrow(dat), size = 1, prob = plogis(dat$linpred))

# 第二步:拟合包含X的全模型(模板模型)
m_full <- glmer(y ~ X + (1|subject), data = dat, family = binomial)
# 拟合零模型(移除X)
m_null <- update(m_full, . ~ . - X)

# 第三步:模拟LRT的功效
power_result <- powerSim(
  m_full, 
  test = compare(m_null),  # 指定对比的零模型
  nsim = 1000,  # 模拟次数,次数越多结果越稳定
  alpha = 0.05
)
# 查看结果
print(power_result)

2. 手动模拟框架(高度自定义)

如果你需要更灵活的自定义逻辑(比如调整复杂的抽样方案、效应量组合),可以自己编写模拟循环:

  • 核心步骤:
    1. 定义数据生成规则:根据你的预期效应量、随机效应方差等参数,生成符合二项式GLMM结构的模拟数据集
    2. 对每个模拟数据集,分别拟合零模型和包含X的模型
    3. 执行LRT并记录是否显著
    4. 重复N次模拟,计算显著结果的比例即为功效
  • 示例代码片段:
library(lme4)
library(purrr)

# 设置模拟参数
n_sim <- 1000  # 模拟次数
alpha <- 0.05
# 预期模型参数:截距、X的效应、随机效应方差
fixed_params <- c(intercept = -0.8, X_effect = 0.6)
ranef_var <- 0.3
n_subjects <- 60  # 个体数量

# 定义单次模拟函数
single_sim <- function() {
  # 生成模拟数据
  dat <- data.frame(
    subject = rep(1:n_subjects, each = 2),
    X = rep(c("A", "B"), n_subjects)
  )
  # 计算线性预测值
  dat$linpred <- fixed_params["intercept"] + 
    fixed_params["X_effect"]*(dat$X == "B") + 
    rnorm(n_subjects)[dat$subject]*sqrt(ranef_var)
  # 生成二项式响应
  dat$y <- rbinom(nrow(dat), 1, plogis(dat$linpred))
  
  # 拟合模型并做LRT
  m0 <- glmer(y ~ 1 + (1|subject), data = dat, family = binomial)
  m1 <- glmer(y ~ X + (1|subject), data = dat, family = binomial)
  lrt_result <- anova(m0, m1)
  # 返回是否显著
  return(lrt_result$`Pr(>Chisq)`[2] < alpha)
}

# 运行所有模拟并计算功效
power_results <- map_lgl(1:n_sim, ~single_sim())
estimated_power <- mean(power_results)
cat("基于LRT的估计功效:", round(estimated_power, 3), "\n")

三、关于mixedpower的用法讨论

  • mixedpower的核心优势是模拟lme4拟合的GLMM的参数估计功效,但它确实没有直接支持LRT模型对比的功效分析。
  • 如果你的研究假设可以近似转化为“检测X的效应是否存在”,那么它的结果可以作为辅助参考,但和你通过LRT检验模型拟合差异的核心目标并不完全匹配。因此更建议优先采用前面提到的针对LRT的模拟方法。

备注:内容来源于stack exchange,提问作者Sahila

火山引擎 最新活动