控制其他变量后,如何通过事后检验比较因子水平与默认值?含lsmeans包示例问询
嘿,我来帮你拆解这两个关于事后检验的问题,都是线性模型分析里很常见的需求:
问题1:控制其他变量后,检验因子水平与默认值的差异
这类检验本质是控制其他协变量/因子效应后的单样本对比,核心思路是通过自定义对比来验证目标因子水平的边际均值和预设默认值的差异,步骤大概是这样:
- 第一步:先拟合包含所有需要控制的变量的模型(比如普通线性模型
lm(),或者混合效应模型lmer()) - 第二步:用
emmeans(注:原lsmeans包已经被emmeans替代,功能更完善)提取目标因子水平的边际均值——这一步已经自动控制了模型中其他变量的效应 - 第三步:针对提取的边际均值,做与默认值的差异检验,直接获取统计量和p值
问题2:橙子销量示例中的具体检验方法
首先明确:只看置信区间是不够的,置信区间只能做初步判断,但要得到正式的统计检验结果(带p值),必须做针对性的对比检验。下面结合示例具体演示:
假设我们的基础模型是这样的(模拟橙子销量数据的典型设定):
# 拟合包含day和store效应的线性模型 oranges.lm1 <- lm(sales ~ day + store, data = oranges)
场景1:检验第1天的销量是否显著低于10
我们可以用emmeans的test()函数,指定对比的固定值null=10,同时用side="<"指定单侧检验(因为要验证“低于10”的方向):
# 先加载包(未安装的话先运行 install.packages("emmeans")) library(emmeans) # 获取day的边际均值(自动控制store的效应) day_emm <- emmeans(oranges.lm1, ~ day) # 针对第1天做单侧检验,判断是否显著低于10 test(day_emm["1"], null = 10, side = "<")
输出结果里会给出第1天的边际均值、与10的差值、标准误、t统计量和对应的p值——这个p值就是你需要的正式检验结果。如果是双侧检验(比如判断是否与10有差异),去掉side参数即可。
场景2:检验第6家门店第3天的销量是否显著高于10
这时候需要提取store和day交叉水平的边际均值,再做针对性检验:
# 获取store和day交叉组合的边际均值 store_day_emm <- emmeans(oranges.lm1, ~ store * day) # 筛选第6家门店第3天的水平,做单侧检验判断是否高于10 test(store_day_emm["6,3"], null = 10, side = ">")
关于置信区间的补充说明
你提到的查看lsmeans(oranges.lm1, ~ day)的置信区间,只能做初步判断:如果区间完全在10以下,能初步推测均值低于10,但这不是正式的统计检验——它没有给出p值,也无法对多重比较进行校正(如果同时检验多个水平的话)。而用test()函数不仅能得到p值,还可以通过adjust参数添加多重比较校正(比如adjust="bonferroni"),结果更严谨。
内容的提问来源于stack exchange,提问作者KrisAnathema
相关产品推荐
相关产品推荐

