post-线性模型的临时比较
post-hoc comparisons on a linear model
我是 运行 线性模型,想将斜率上的一组点与 0 处的估计值进行比较。我的代码遵循响应 的布局。输出似乎只有一个相同的 p 值。我希望接近 0 的值具有高 p 值,而远离 0 的值具有小 p 值。我绝对没想到在比较中会有相同的 p 值。有什么建议么?
玩具数据集:
library(ggplot2)
library(tidyr)
library(emmeans)
df <- structure(list(Distance = c(0, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9, 9.5),
Mean = c(139, 119.8, 121, 130.4, 115.9, 134.7, 134.7, 122.2, 118.8, 116.9, 114.4,
109.6, 103.9, 113.2, 103.5, 113.3, 122.1, 105.9, 115.2)), row.names = c(NA, -19L),
class = c("tbl_df", "tbl", "data.frame"))
m <- lm(Mean ~ Distance, data = df)
df$Pred <- predict(m)
# data and predictions look ok
ggplot(df) +
geom_point(aes(x = Distance, y = Mean)) +
geom_line(aes(x = Distance, y = Pred))
# create a fake grid for emmeans
fake.df <- data.frame(Distance = 0:10)
# run a treatment vs control, where control is value at 0 and "treatment" are values
# stepping away from 0
emm <- emmeans(m, trt.vs.ctrl1 ~ Distance, data = fake.df,
cov.reduce = FALSE, covnest = TRUE)
emm
在此模型中,Distance
是仅具有线性效应的数值预测变量。因此,任何在两个 Distance
时比较模型估计值的测试都只是对 Distance
趋势斜率的测试,因此所有此类测试都具有相同的 P 值。
附录
这个问题是关于混淆估计和预测是多么容易的线索。
估计是关于参数的;在这个例子中,直线的斜率是一个单一的参数,用所有数据估计,并且在两个距离处估计值的任何比较都等同于测试斜率的显着性。
预测是关于未来数据会发生什么。为了预测这些数据,我们不仅要考虑估计斜率的变化(在这种情况下),还要考虑未来数据中固有的变化(由 RMSE 估计)。如果我们真的相信误差分布是正态的,我们可以得到预测区间如下:
> emm <- emmeans(m, "Distance", at = list(Distance = c(0,2,4,6,8,10)))
> predict(emm, interval = "pred", sigma = sigma(m))
Distance prediction SE df lower.PL upper.PL
0 131 8.61 17 112.5 149
2 126 8.22 17 108.5 143
4 121 8.02 17 104.1 138
6 116 8.02 17 99.3 133
8 111 8.23 17 94.0 129
10 107 8.62 17 88.3 125
Prediction intervals and SEs are based on an error SD of 7.7904
Confidence level used: 0.95
现在,假设我们要比较两个 独立 未来观察值 Y0(取自 Distance = 0
和 Y2(取自 Distance = 2
)。预测Y0 - Y2
估计为 131 - 126 = 5,预测的 SE 为 sqrt(8.61^2 + 8.22^2) = 11.90。因此 Y0 - Y2 将约为 5 +/- 2*11.9,或 ( -18.8, 28.8) - 包含零的区间。
如果我们想比较 Y0
和 Y10
的未来值(取自 Distance = 10
),但是,我们预测 (131 - 107) +/- 2*sqrt( 8.61^2+8.62^2) --> (-0.4, 48.4)。这个间隔仍然包括零,但几乎没有;所以 Y10 小于 Y0 的可能性比 Y2 小于 Y0 的可能性大得多。
我希望这有助于澄清情况。
我是 运行 线性模型,想将斜率上的一组点与 0 处的估计值进行比较。我的代码遵循响应
玩具数据集:
library(ggplot2)
library(tidyr)
library(emmeans)
df <- structure(list(Distance = c(0, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9, 9.5),
Mean = c(139, 119.8, 121, 130.4, 115.9, 134.7, 134.7, 122.2, 118.8, 116.9, 114.4,
109.6, 103.9, 113.2, 103.5, 113.3, 122.1, 105.9, 115.2)), row.names = c(NA, -19L),
class = c("tbl_df", "tbl", "data.frame"))
m <- lm(Mean ~ Distance, data = df)
df$Pred <- predict(m)
# data and predictions look ok
ggplot(df) +
geom_point(aes(x = Distance, y = Mean)) +
geom_line(aes(x = Distance, y = Pred))
# create a fake grid for emmeans
fake.df <- data.frame(Distance = 0:10)
# run a treatment vs control, where control is value at 0 and "treatment" are values
# stepping away from 0
emm <- emmeans(m, trt.vs.ctrl1 ~ Distance, data = fake.df,
cov.reduce = FALSE, covnest = TRUE)
emm
在此模型中,Distance
是仅具有线性效应的数值预测变量。因此,任何在两个 Distance
时比较模型估计值的测试都只是对 Distance
趋势斜率的测试,因此所有此类测试都具有相同的 P 值。
附录
这个问题是关于混淆估计和预测是多么容易的线索。
估计是关于参数的;在这个例子中,直线的斜率是一个单一的参数,用所有数据估计,并且在两个距离处估计值的任何比较都等同于测试斜率的显着性。
预测是关于未来数据会发生什么。为了预测这些数据,我们不仅要考虑估计斜率的变化(在这种情况下),还要考虑未来数据中固有的变化(由 RMSE 估计)。如果我们真的相信误差分布是正态的,我们可以得到预测区间如下:
> emm <- emmeans(m, "Distance", at = list(Distance = c(0,2,4,6,8,10)))
> predict(emm, interval = "pred", sigma = sigma(m))
Distance prediction SE df lower.PL upper.PL
0 131 8.61 17 112.5 149
2 126 8.22 17 108.5 143
4 121 8.02 17 104.1 138
6 116 8.02 17 99.3 133
8 111 8.23 17 94.0 129
10 107 8.62 17 88.3 125
Prediction intervals and SEs are based on an error SD of 7.7904
Confidence level used: 0.95
现在,假设我们要比较两个 独立 未来观察值 Y0(取自 Distance = 0
和 Y2(取自 Distance = 2
)。预测Y0 - Y2
估计为 131 - 126 = 5,预测的 SE 为 sqrt(8.61^2 + 8.22^2) = 11.90。因此 Y0 - Y2 将约为 5 +/- 2*11.9,或 ( -18.8, 28.8) - 包含零的区间。
如果我们想比较 Y0
和 Y10
的未来值(取自 Distance = 10
),但是,我们预测 (131 - 107) +/- 2*sqrt( 8.61^2+8.62^2) --> (-0.4, 48.4)。这个间隔仍然包括零,但几乎没有;所以 Y10 小于 Y0 的可能性比 Y2 小于 Y0 的可能性大得多。
我希望这有助于澄清情况。