Johnson-Neyman交互图绘制失败:ANCOVA交互项识别报错求助
多水平分类变量ANCOVA的Johnson-Neyman图绘制问题与解决方案
问题背景
构建带交互项的ANCOVA模型:
camomodel <- lm(FID ~ start_dist * pattern, data = camo)
其中pattern为4水平分类变量,模型输出显示存在显著交互项(如start_dist:patternspots、start_dist:patternstripes),但调用interact_plot绘制Johnson-Neyman(JN)区间时触发报错:
Error in `johnson_neyman()`: ! Could not find interaction term in the model, so Johnson-Neyman interval could not be calculated. Backtrace: 1. interactions::johnson_neyman(camomodel, pred = start_dist, modx = pattern)
报错原因
JN分析默认仅支持连续变量×连续变量或连续变量×二分类变量的交互场景。当分类变量存在多水平时,R会将其拆分为多个哑变量,生成多个独立的交互项(如你的模型中是start_dist:patternplain、start_dist:patternspots、start_dist:patternstripes),而非单一的start_dist:pattern交互项,导致johnson_neyman()函数无法识别整体交互项。
解决办法
需对分类变量的水平进行两两对比,分别计算每组对比的JN区间:
方法1:以默认基准水平为参照,逐一对比其他水平
假设pattern的默认基准水平为[基准水平名称](可通过levels(camo$pattern)查看因子水平排序),执行以下代码:
# 对比plain水平与基准水平 interactions::johnson_neyman(camomodel, pred = start_dist, modx = pattern, modx.values = c("[基准水平名称]", "plain")) # 对比spots水平与基准水平 interactions::johnson_neyman(camomodel, pred = start_dist, modx = pattern, modx.values = c("[基准水平名称]", "spots")) # 对比stripes水平与基准水平 interactions::johnson_neyman(camomodel, pred = start_dist, modx = pattern, modx.values = c("[基准水平名称]", "stripes"))
替换[基准水平名称]为实际的基准水平字符串
方法2:对比任意两个非基准水平
若需对比如spots和stripes这类非基准水平,可先重新设定模型的参考水平,再分析:
# 重新设定pattern的参考水平为spots camo$pattern <- relevel(camo$pattern, ref = "spots") # 重新拟合模型 camomodel_new <- lm(FID ~ start_dist * pattern, data = camo) # 分析stripes与spots的交互JN区间 interactions::johnson_neyman(camomodel_new, pred = start_dist, modx = pattern, modx.values = c("spots", "stripes"))
交互效应解读
从模型系数输出可得出以下结论:
- 基准水平(未在系数表中显示的
pattern水平)的FID随start_dist的变化斜率为0.62283,即start_dist每增加1单位,FID平均提升0.62。 patternplain与基准水平的斜率差异为-0.04533,但无统计学显著性(p=0.618),说明两者的FID随start_dist的变化趋势无显著差异。patternspots的斜率比基准水平低0.21434,且显著(p=0.019):start_dist越大,spots水平的FID增长速度越慢于基准水平。patternstripes的斜率比基准水平低0.32816,显著度极高(p<0.001):stripes水平的FID随start_dist的增长速度远慢于基准水平,JN图将直观展示start_dist在哪个区间内,两者的FID差异具有统计学意义。
内容的提问来源于stack exchange,提问作者Cat1
相关产品推荐
相关产品推荐

