问题描述
我想测试观察者对不同极性(正(白色)和负(黑色)对比刺激的反应)的对称性。我将反应时间 (RT) 作为因变量,有四种不同的对比。众所周知,响应时间遵循 Pieron 曲线,其渐近线位于 (1) 观察者阈值 (Inf) 和 (2) 位于 250 和 450 毫秒之间的基本 RT 处。 该知识使我们能够将自变量(有效对比度 EC)的关系线性化为 1/EC^2 (tEC),因此将 RT 与 EC 联系起来的方程变为:
RT = m * tEC + RT0
为了测试对称性,我建立了标准:两个极性中的相同斜率和相同截距意味着对称。 为了获得系数,我制作了一个带有交互作用的线性模型(通过一个虚拟变量编码极性:正或负)。 lm 的输出对我来说很清楚,但有些同事更喜欢与方差分析输出更相似的东西。所以我决定用emmeans来做对比。斜率没问题,但是当计算截距时,问题就开始了。 lm计算的截距和emmeans的输出有很大的不同,结论也不同。在接下来的内容中,我重现了这个例子。 问题有两个:是否可以使用emmeans来解决我的问题?如果没有,是否可以通过其他包(哪个)进行对比?
数据
RT1000 | EC | tEC | 极性 |
---|---|---|---|
596.3564 | -25 | 0.001600 | 否定 |
648.2471 | -20 | 0.002500 | 否定 |
770.7602 | -17 | 0.003460 | 否定 |
831.2971 | -15 | 0.004444 | 否定 |
1311.3331 | 15 | 0.004444 | 正面 |
1173.8942 | 17 | 0.003460 | 正面 |
1113.7240 | 20 | 0.002500 | 正面 |
869.3635 | 25 | 0.001600 | 正面 |
代码
# Model
model <- lm(RT1000 ~ tEC * Polarity,data = Data)
# emmeans
library(emmeans)
# Slopes
m.slopes <- lstrends(model,"Polarity",var="tEC")
# Intercepts
m.intercept <- lsmeans(model,"Polarity")
# Contrasts
pairs(m.slopes)
pairs(m.intercept)
输出
模型任期 | 估计 | 标准错误 | 统计 | p.value |
---|---|---|---|---|
(拦截) | 449.948 | 66.829 | 6.733 | 0.003 |
tEC | 87205.179 | 20992.976 | 4.154 | 0.014 |
PolarityPositive | 230.946 | 94.511 | 2.444 | 0.071 |
tEC:PolarityPositive | 58133.172 | 29688.551 | 1.958 | 0.122 |
极性 | tEC.trend | 东南 | df | lower.CL | upper.CL |
---|---|---|---|---|---|
否定 | 87205.18 | 20992.98 | 4 | 28919.33 | 145491.0 |
正面 | 145338.35 | 20992.98 | 4 | 87052.51 | 203624.2 |
对比 | 估计 | 东南 | df | t.ratio | p.value |
---|---|---|---|---|---|
负 - 正 | -58133.17 | 29688.55 | 4 | -1.958101 | 0.12182 |
极性 | lsmean | 东南 | df | lower.CL | upper.CL |
---|---|---|---|---|---|
否定 | 711.6652 | 22.2867 | 4 | 649.7874 | 773.543 |
正面 | 1117.0787 | 22.2867 | 4 | 1055.2009 | 1178.957 |
对比 | 估计 | 东南 | df | t.ratio | p.value |
---|---|---|---|---|---|
负 - 正 | -405.4135 | 31.51816 | 4 | -12.86285 | 0.000211 |
emmeans 计算的截距与 lm 计算的截距不同。我认为问题在于模型没有为 EC = 0 定义。但我不确定。
解决方法
你所说的拦截不是;它们是 tEC
平均值处的模型预测。如果您想要拦截,请改用:
m.intercept <- lsmeans(model,"Polarity",at = list(tEC = 0))
您可以通过以下方式判断正在使用的参考水平
ref_grid(model) # or str(m.intercept)
请注意,这里拟合的模型由两条斜率不同的线组成;因此,预测之间的差异取决于 tEC
的值。因此,我强烈建议反对测试截距的比较;这些是 tEC
值的预测,如您所说,甚至无法发生。相反,尽量不要像数学家一样,对 tEC
的几个有代表性的值进行比较,例如,
LSMs <- lsmeans(model,at = list(tEC = c(0.001,0.003,0.005)))
pairs(LSMs,by = tEC)
您还可以轻松地将拟合线可视化:
emmip(model,Polarity ~ tEC,cov.reduce = range)