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

如何在R语言effects包的effect函数中自定义变量f3的取值?

自定义effects包中连续变量的取值

嘿,这个问题其实很好解决——effects包的effect()函数自带了自定义变量取值的参数,不用大改代码就能实现你要的效果。我给你具体说明:

核心方法:使用xlevels参数

effect()函数里的xlevels参数可以让你手动指定某个变量的取值,只需要传入一个列表,把要自定义的变量名作为键,你想要的取值向量作为值就行。

修改后的完整代码

# 先构建原始数据和模型(和你的代码一致)
sub <- c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20)
f1 <- c("f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","m","m","m","m","m","m","m","m","m","m","m","m","m","m","m","m","m","m","m","m")
f2 <- c("c1","c1","c1","c1","c1","c1","c1","c1","c1","c1","c2","c2","c2","c2","c2","c2","c2","c2","c2","c2","c1","c1","c1","c1","c1","c1","c1","c1","c1","c1","c2","c2","c2","c2","c2","c2","c2","c2","c2","c2")
f3 <- c(0.03,0.03,0.49,0.49,0.33,0.33,0.20,0.20,0.13,0.13,0.05,0.05,0.47,0.47,0.30,0.30,0.22,0.22,0.15,0.15, 0.03,0.03,0.49,0.49,0.33,0.33,0.20,0.20,0.13,0.13,0.05,0.05,0.47,0.47,0.30,0.30,0.22,0.22,0.15,0.15)
y <- c(0.9,1,98,96,52,49,44,41,12,19,5,5,89,92,65,56,39,38,35,33, 87,83,5,7,55,58,67,61,70,80,88,90,0.8,0.9,55,52,55,58,70,69)
dat <- data.frame(sub=sub, f1=f1, f2=f2, f3=f3, y=y)
m <- lmer(y ~ f1*f2*f3 + (1|sub), data=dat)

library(effects)

# 自定义f3的取值
custom_f3_values <- c(0.04, 0.20, 0.50)
# 在effect()中指定xlevels参数
fit <- effect('f1:f3', m, xlevels = list(f3 = custom_f3_values))
fit_df <- as.data.frame(fit)

# 查看结果的f3列,确认是自定义的取值
head(fit_df)

关键细节说明

  • xlevels是一个列表,你可以同时自定义多个变量的取值,比如如果要调整f1的水平(虽然这里它是分类变量,默认会取所有水平),可以写成xlevels = list(f3 = custom_f3_values, f1 = c("f"))
  • 对于连续变量f3,默认情况下effects包会自动选取5个代表性取值(比如分位数或等间隔值),用xlevels就可以完全覆盖这个默认行为
  • 运行后你会发现fit_df中的f3列完全是你指定的0.04、0.20、0.50,和f1的各个水平组合生成结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:23:21