gpt4 book ai didi

r - 在ggplot2中使用geom_stat/geom_smooth时在置信区间上下查找点

转载 作者:行者123 更新时间:2023-12-04 16:24:15 25 4
gpt4 key购买 nike

我有一个散点图,我想知道如何找到置信区间线上方和下方的基因?

enter image description here

编辑:可重现的例子:

library(ggplot2)
#dummy data
df <- mtcars[,c("mpg","cyl")]

#plot
ggplot(df,aes(mpg,cyl)) +
geom_point() +
geom_smooth()

enter image description here

最佳答案

我不得不深入了解 github repo ,但我终于明白了。为了做到这一点,您需要知道如何 stat_smooth 作品。在这种特定情况下,loess调用函数来进行平滑(可以使用以下相同的过程构建不同的平滑函数):

因此,使用 loess在这种情况下,我们会这样做:

#data
df <- mtcars[,c("mpg","cyl"), with=FALSE]
#run loess model
cars.lo <- loess(cyl ~ mpg, df)

然后我不得不阅读 this以便在 stat_smooth 中查看内部预测是如何进行的.显然 hadley 使用了 predictdf对于我们的案例,函数(未导出到命名空间)如下:
predictdf.loess <- function(model, xseq, se, level) {
pred <- stats::predict(model, newdata = data.frame(x = xseq), se = se)

if (se) {
y = pred$fit
ci <- pred$se.fit * stats::qt(level / 2 + .5, pred$df)
ymin = y - ci
ymax = y + ci
data.frame(x = xseq, y, ymin, ymax, se = pred$se.fit)
} else {
data.frame(x = xseq, y = as.vector(pred))
}
}

阅读以上内容后,我能够使用以下方法创建自己的预测数据框:
#get the predictions i.e. the fit and se.fit vectors
pred <- predict(cars.lo, se=TRUE)
#create a data.frame from those
df2 <- data.frame(mpg=df$mpg, fit=pred$fit, se.fit=pred$se.fit * qt(0.95 / 2 + .5, pred$df))

看着 predictdf.loess我们可以看到置信区间的上边界被创建为 pred$fit + pred$se.fit * qt(0.95 / 2 + .5, pred$df)下边界为 pred$fit - pred$se.fit * qt(0.95 / 2 + .5, pred$df) .

使用这些,我们可以为这些边界之上或之下的点创建一个标志:
#make the flag
outerpoints <- +(df$cyl > df2$fit + df2$se.fit | df$cyl < df2$fit - df2$se.fit)
#add flag to original data frame
df$outer <- outerpoints
df$outer column 可能是 OP 正在寻找的(如果它在边界之外,则取值为 1,否则取值为 0),但只是为了它,我将其绘制在下面。

注意 +上面的函数仅用于此处将逻辑标志转换为数字。

现在,如果我们这样绘制:
ggplot(df,aes(mpg,cyl)) +
geom_point(aes(colour=factor(outer))) +
geom_smooth()

我们实际上可以看到置信区间内外的点。

输出:

enter image description here

附言对于任何对上下边界感兴趣的人,它们都是这样创建的(推测:虽然阴影区域可能是用 geom_ribbon 创建的 - 或类似的东西 - 这使它们更圆更漂亮):
#upper boundary
ggplot(df,aes(mpg,cyl)) +
geom_point(aes(colour=factor(outer))) +
geom_smooth() +
geom_line(data=df2, aes(mpg , fit + se.fit , group=1), colour='red')

#lower boundary
ggplot(df,aes(mpg,cyl)) +
geom_point(aes(colour=factor(outer))) +
geom_smooth() +
geom_line(data=df2, aes(mpg , fit - se.fit , group=1), colour='red')

关于r - 在ggplot2中使用geom_stat/geom_smooth时在置信区间上下查找点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33082901/

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