如何在混合模型公式中仅纳入特定因子水平?
解决方案
错误原因
你创建的x1-x4是独立的data.frame,并未合并到建模用的MotherPExp数据框中,模型找不到这些变量才会报错;同时"PPP*PCP"是字符串,不能直接作为交互项使用,交互项需要基于实际变量构建。
针对需求的两种解决方式
根据你想仅用特定处理组数据建模或在全数据中仅纳入特定处理组作为自变量的不同需求,提供两种方案:
方案1:仅使用特定处理组的子集数据建模
如果只需要包含PCP、PPP、CCP、CPP的样本进行建模,先筛选数据再拟合模型:
# 筛选目标处理组数据 filtered_data <- MotherPExp[MotherPExp$TREATMENT %in% c("PCP", "PPP", "CCP", "CPP"), ] # 拟合混合模型 fit <- glmer(Proportion_S ~ TREATMENT + (1|HOUR), control = glmerControl(optimizer = "bobyqa"), data = filtered_data, family = poisson)
如果需要指定特定交互项(比如PPP与PCP的交互),先在原数据中生成对应虚拟变量:
# 在原数据中创建虚拟变量(标记是否属于目标处理组) MotherPExp$PCP <- as.integer(MotherPExp$TREATMENT == "PCP") MotherPExp$PPP <- as.integer(MotherPExp$TREATMENT == "PPP") MotherPExp$CCP <- as.integer(MotherPExp$TREATMENT == "CCP") # 拟合包含交互项的模型 fit <- glmer(Proportion_S ~ PCP*PPP + CCP + (1|HOUR), control = glmerControl(optimizer = "bobyqa"), data = MotherPExp, family = poisson)
方案2:在全数据中仅纳入特定处理组的效应
如果要保留全部样本,但只让模型估计PCP、PPP、CCP、CPP相对于参照组(比如CCC)的效应,可以通过修改因子对比实现:
# 指定TREATMENT的对比矩阵,仅保留目标处理组的效应估计 target_levels <- c("PCP", "PPP", "CCP", "CPP") contrasts(MotherPExp$TREATMENT) <- contr.treatment(levels(MotherPExp$TREATMENT), base = which(levels(MotherPExp$TREATMENT) == "CCC"))[, target_levels] # 拟合模型 fit <- glmer(Proportion_S ~ TREATMENT + (1|HOUR), control = glmerControl(optimizer = "bobyqa"), data = MotherPExp, family = poisson)
内容的提问来源于stack exchange,提问作者Tanvi Gurjar
相关产品推荐
相关产品推荐

