Не удалось сопоставить перехваты через emmeans в R

Я хотел бы проверить симетрию в реакции наблюдателя на контрастные стимулы разной полярности, положительные (белый) и отрицательные (черные). Я взял время реакции (RT) как зависимую переменную по четырем различным контрастам. Известно, что время отклика следует кривой Пьерона, асимптоты которой помещены (1) на пороге наблюдателя (Inf) и (2) на базовом RT, расположенном где-то между 250 и 450 мсек. Эти знания позволяют нам линеаризовать взаимосвязь, преобразуя независимую переменную (эффективный контраст EC) как 1 / EC ^ 2 (tEC), поэтому уравнение, связывающее RT с EC, становится:

RT = m * tEC + RT0

Чтобы проверить симметрию, я установил критерии: одинаковый наклон и одинаковый отрезок в двух полярностях подразумевают симметрию. Чтобы получить коэффициенты, я сделал линейную модель с взаимодействием (кодирование через фиктивную переменную для полярности: положительная или отрицательная). Для меня результат lm ясен, но некоторые коллеги предпочитают что-то более похожее на результат ANOVA. Поэтому я решил использовать emmeans, чтобы создать контраст. С наклоном все в порядке, но при вычислении пересечений начинаются проблемы. Перехваты, вычисленные lm, сильно отличаются от вывода emmeans, и выводы также разные. Ниже я воспроизведу этот пример. Вопрос двоякий: можно ли использовать emmeans для решения моей проблемы? Если нет, можно ли контрастировать с помощью других пакетов (какой)?

Данные

RT1000 EC tEC Polarity
596.3564 -25 0.001600 Negative
648.2471 -20 0.002500 Negative
770.7602 -17 0.003460 Negative
831.2971 -15 0.004444 Negative
1311.3331 15 0.004444 Positive
1173.8942 17 0.003460 Positive
1113.7240 20 0.002500 Positive
869.3635 25 0.001600 Positive

Код

# 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)

Выходы

Modelo
term estimate std.error statistic p.value
(Intercept) 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
Slopes (it is all right)
Polarity tEC.trend SE df lower.CL upper.CL
Negative 87205.18 20992.98 4 28919.33 145491.0
Positive 145338.35 20992.98 4 87052.51 203624.2
contrast estimate SE df t.ratio p.value
Negative - Positive -58133.17 29688.55 4 -1.958101 0.12182
Intercepts (problem)
Polarity lsmean SE df lower.CL upper.CL
Negative 711.6652 22.2867 4 649.7874 773.543
Positive 1117.0787 22.2867 4 1055.2009 1178.957
contrast estimate SE df t.ratio p.value
Negative - Positive -405.4135 31.51816 4 -12.86285 0.000211

Вычисленные перехваты с помощью emmeans отличаются от тех, которые вычисляются с помощью lm. Думаю, проблема в том, что модель не определена для EC = 0. Но я не уверен.


person Tucu    schedule 30.04.2021    source источник


Ответы (1)


То, что вы называете перехватами, не так; это прогнозы модели при среднем значении tEC. Если вам нужны перехваты, используйте вместо этого:

m.intercept <- lsmeans(model, "Polarity", at = list(tEC = 0))

Вы можете узнать, какие контрольные уровни используются, с помощью

ref_grid(model)     # or   str(m.intercept)

Обратите внимание, что установленная здесь модель состоит из двух линий с разными наклонами; следовательно, разница между предсказаниями меняется в зависимости от значения tEC. Таким образом, я настоятельно рекомендую не тестировать сравнение перехватов; это прогнозы для значения tEC, которое, как вы говорите, даже не может произойти. Вместо этого постарайтесь быть менее математиком и проведите сравнения при нескольких репрезентативных значениях tEC, например,

LSMs <- lsmeans(model, "Polarity", at = list(tEC = c(0.001, 0.003, 0.005)))
pairs(LSMs, by = tEC)

Вы также можете легко визуализировать подогнанные линии:

emmip(model, Polarity ~ tEC, cov.reduce = range)
person Russ Lenth    schedule 30.04.2021
comment
Спасибо, Расс. Перед тем, как задать вопрос, я прочитал много ваших сообщений. Действительно информативно .... но решить проблему не удалось. В данном случае точка пересечения с 0 имеет точное значение, поскольку является базовым RT. Остальные пункты, как вы предполагаете, могут быть более проблематичными. - person Tucu; 30.04.2021
comment
Если мой ответ помог, я буду признателен, если вы его приняли. - person Russ Lenth; 01.05.2021