effects函数使用问题:如何从模型获取指定预测变量的拟合值?
解决effects包effect函数返回非目标预测点的问题
问题原因
effect()函数对连续型预测变量默认会生成5个从最小值到最大值的等距点,而非原始数据中的唯一取值,所以你得到的是0、2、5、8、10这5个点,而非设定的0、1、6、10。
解决方案
方法1:在effect()中指定目标取值
通过xlevels参数明确指定time的目标取值,该方法同时适用于lm和lme4::lmer模型:
# 拟合模型(lm示例,lmer用法一致) model <- lm(y ~ time, data = df) # 指定time的目标取值生成效应 fx <- effect("time", model, xlevels = list(time = c(0, 1, 6, 10))) # 提取目标时间点和对应拟合值 target_time <- fx$x fitted_values <- fx$fit
方法2:直接使用predict()函数(更灵活)
构造包含目标时间点的新数据框,用predict()直接生成拟合值,这是通用方法,完全适配混合模型:
# 构造目标时间点的数据框 new_df <- data.frame(time = c(0, 1, 6, 10)) # 对lm模型预测 predict(model, newdata = new_df) # 对lmer模型预测(仅固定效应,与effect结果一致) # 假设你有混合模型:model_lmer <- lmer(y ~ time + (1|group), data = df) predict(model_lmer, newdata = new_df, re.form = NA) # 如果需要包含随机效应,去掉re.form参数即可
内容的提问来源于stack exchange,提问作者SylvainC
相关产品推荐
相关产品推荐

