gpt4 book ai didi

r - qqplot2 中的 LOESS 置信区间过窄

转载 作者:行者123 更新时间:2023-12-04 17:32:41 24 4
gpt4 key购买 nike

在使用 LOESS 平滑时,我无法理解如何在 ggplot2 中计算置信区间。从其他几个线程中,我的理解是 ggplot2 使用基于回归标准误差计算的 t 间隔,即使用实际数据点与 LOESS 线之间的距离。但我认为,根据 ggplot2 产生的置信区间,我一定是弄错了。这是示例代码(在这种情况下实际上是 qplot,但我认为结果应该是相同的):

qplot(Year, Purposivism, data=fig1.dat, geom=c('point', 'smooth'), level=0.99, span=0.5, method='loess', ylab="Term Frequency per Million Words") +
theme_bw() +
theme(text=element_text(family="Century", size=12)) +
expand_limits(y = 0) +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
theme(axis.text.x = element_text(angle = 45, hjust=1))

这是结果图:

Graph

在图表的左侧(例如,1920-1940 年),点紧紧围绕 LOESS 线排列,并且大部分位于置信区间内。但从 1960 年到 1980 年左右,它们无处不在,但置信区间的宽度似乎大致相同。我想我一定是误解了 CI 的工作原理,因为这看起来不直观。

在此先感谢您的帮助!很高兴提供任何其他可能有用的信息。

最佳答案

您可能感到困惑的地方在于置信区间和预测区间之间的差异。 geom_smooth 中使用的置信区间是估计均值的预测置信度。这是衡量观察值的平均值与点估计值的偏差程度。在 predict.lm 中,有一个选项可以添加 interval = "prediction",这将为您提供预测区间。预测区间包含来自 y ~ x %*% beta + epsilon 的误差项的不确定性,而置信区间仅包含来自 y ~ x %*% beta 的固定效应不确定性。我没有研究过 loess 曲线和其他非参数和半参数平滑器的预测区间,但它似乎没有在 ?predict.loess 中实现p>

我们可以说明 geom_smooth 如何通过手动计算来估计置信区间。让我们从使用最无聊的可重现示例开始。 stats 包中的 mtcars(包含在基础 R 中)。

data(mtcars)
fit <- loess(mpg ~ hp, data = mtcars)
preds <- predict(fit, se = TRUE)
names(preds)
#[1] "fit" "se.fit" "residual.scale" "df"

为了计算置信区间,我们使用您正确指定的标准公式。

T <- qt(p = 0.975, df = preds$df)
lwr <- preds$fit - T * preds$se.fit
upr <- preds$fit + T * preds$se.fit

为了创建正确的置信区间图,我将所有必要的信息合并到一个 data.frame 中,同时对输入进行排序,以确保正确的行顺序。

ord <- order(mtcars$hp)
plotData <- data.frame(lwr = lwr[ord],
upr = upr[ord],
fit = preds$fit[ord],
hp = mtcars$hp[ord],
mpg = mtcars$mpg[ord])

最后但同样重要的是,我们只需要创建绘图,并将其与 ggplot2

生成的绘图进行比较
p1 <- ggplot(plotData, aes(x = hp, ymax = upr, ymin = lwr)) + 
#Data points
geom_point(aes(y = mpg)) +
#Line from prediction
geom_line(aes(y = fit)) +
#Points from prediction
geom_point(aes(y = fit)) +
#Confidence interval
geom_ribbon(alpha = 0.3, col = "thistle1") +
labs(title = "manual")
p2 <- ggplot(mtcars, aes(x = hp, y = mpg)) +
geom_point() +
geom_smooth() +
labs(title = "ggplot2")
#Merge plots
library(gridExtra)
grid.arrange(p1, p2, ncol = 1)

现在输出: Image of loess smoother produced by the described code

除了由 ggplot 完成的一些平滑处理,以及为拟合值添加的点外,这很容易看出是相同的。

我希望这清楚了如何计算点置信区间。

关于r - qqplot2 中的 LOESS 置信区间过窄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58041940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com