首页 > 解决方案 > predictmeans 的估计不一致

问题描述

我最近听说了 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使用方法的估计值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,但结果是相同mod2x(这也是如此mod3)。

发生了什么会产生如此不一致的结果?有补救措施吗?

标签: rlinear-regression

解决方案


推荐阅读