r - 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
,但结果是相同mod2
的x
(这也是如此mod3
)。
发生了什么会产生如此不一致的结果?有补救措施吗?
解决方案
推荐阅读
- amazon-web-services - 我真的应该为所有数据使用一个 DynamoDB 表吗?
- reactjs - Formik 值为空
- python - 遍历列表的长度
- python - 在谷歌计算引擎上运行 Flask 应用程序需要哪些防火墙规则和实例规范?
- azure-devops - Azure DevOps 发布管道变量嵌套/组合/表达式
- python - 尝试同时对两个数组进行排名
- python - 在 python (ValueError) 中打开 .nml (fortran namelist 文件)
- r - 逐行查找所有列中的 NA 数量,并将数字分配给新变量
- python - 从文本到字典,更新键
- vue.js - Vuex - WebSocket 事件处理