我最近听说R中的 predictmeans 包,所以我想对其进行测试。所以我尝试了这个测试数据集和模型:
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
的{{1}}方式的估算值(输出缩写为仅显示估算值):
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
)。
正在发生的事情会导致如此不一致的结果?有补救办法吗?