Недавно я слышал о пакете Foretmeans в R, поэтому я хотел проверить его. Итак, я попробовал этот тестовый набор данных и модель:
data = data.frame(
blk = LETTERS[rep(1:2, each = 4)],
trt = letters[rep(1:4, each = 2)],
x = c(3.3, 3.3, 1.8, 1.8, 1.5, 1.5, 5.4, 5.4),
y = c(5.9, 5.8, 6.5, 6.7, 4.6, 4.5, 3.8, 3.8))
mod1 = lm(y ~ x + blk + trt, data = data)
Вот оценки trt
средних с использованием predictmeans::predictmeans
(выходные данные строго сокращены, чтобы показать только оценки):
library("predictmeans")
predictmeans(mod1, "trt")
## $`Predicted Means`
## trt
## a b c d
## 5.0846 5.5462 5.0846 5.0846
Кажется любопытным, что три из четырех средств равны. Даже странно, что я получаю разные результаты, если выражаю модель по-разному:
mod2 = lm(y ~ blk + trt + x, data = data)
predictmeans(mod2, "trt")
## $`Predicted Means`
## trt
## a b c d
## 4.825 5.575 5.575 4.825
Здесь у нас все еще есть два разных средства, но картина другая. И это меняется с другой моделью:
mod3 = lm(y ~ trt + blk + x, data = data)
predictmeans(mod3, "trt")
## $`Predicted Means`
## trt
## a b c d
## 5.85 6.60 4.55 3.80
Теперь есть четыре разных способа!
Эффект от установки ковариаты x
также отличается. Если мы не укажем это, predictmeans
будет использовать x = 3
; если я попытаюсь x = 0
, я получу:
predictmeans(mod1, "trt", covariate = c(x = 0))
## $`Predicted Means`
## trt
## a b c d
## 5.6615 6.1231 5.6615 5.6615
predictmeans(mod2, "trt", covariate = c(x = 0))
## $`Predicted Means`
## trt
## a b c d
## 4.825 5.575 5.575 4.825
Я обнаружил, что указание другого значения x
изменяет результаты для mod1
, но результаты идентичны для mod2
независимо от x
(это верно и для mod3
).
Что происходит, что дает такие дико противоречивые результаты? Есть ли лекарство от этого?