gpt4 book ai didi

r - 如何使用彩色置信区间带绘制回归原始尺度的回归图?

转载 作者:行者123 更新时间:2023-12-04 10:23:18 24 4
gpt4 key购买 nike

我想从线性模型中绘制线和 95% 置信区间,其中响应已被 logit 转换回数据的原始比例。所以结果应该是一条曲线,包括原始尺度上的置信区间,在 logit 变换尺度上它将是一条直线。见代码:

# Data
dat <- data.frame(c(45,75,14,45,45,55,65,15,3,85),
c(.37, .45, .24, .16, .46, .89, .16, .24, .23, .49))
colnames(dat) <- c("age", "bil.")


# Logit transformation
dat$bb_logit <- log(dat$bil./(1-dat$bil.))

# Model
modelbb <- lm(bb_logit ~ age + I(age^2), data=dat)
summary(modelbb)

# Backtranform
dat$bb_back <- exp(predict.lm(modelbb))/ (1 + exp(predict.lm(modelbb)))

# Plot
plot(dat$age, dat$bb_back)
abline(modelbb)


我在这里尝试的是绘制曲线回归线并添加置信区间。内 ggplot2geom_smooth可以指定线性模型的函​​数,但我找不到绘制来自 predict.lm(my model) 的预测的方法.

我还想知道如何添加一个彩色多边形来表示如下图所示的置信区间。我知道我必须使用函数 polygon和坐标,但我不知道如何。

enter image description here

最佳答案

您可以使用 predict在一个年龄范围内说 1:100 , 指定 interval= CI 的选项。使用 type="l" 绘图将平滑一个漂亮的曲线。然后可以使用 lines 添加置信区间.

p <- predict(modelbb, data.frame(age=1:100), interval="confidence")
# Backtransform
p.tr <- exp(p) / (1 + exp(p))

plot(1:100, p.tr[,1], type="l", ylim=range(p.tr), xlab="age", ylab="bil.")
sapply(2:3, function(i) lines(1:100, p.tr[,i], lty=2))
legend("topleft", legend=c("fit", "95%-CI"), lty=1:2)

产量

enter image description here

编辑

要获得阴影置信带,请使用 polygon .由于您想要两个置信度,您可能需要设置一个 predict每个 ionic 。该行将被 polygon 覆盖s,所以最好做一个空 plot第一次使用 type="n"并绘制 lines在末尾。 (请注意,我还将向您展示自定义轴标签的一些提示。) polygons 的技巧是使用 rev 来回表达值.
p.95 <- predict(modelbb, data.frame(age=1:100), interval="confidence", level=.95)
p.99 <- predict(modelbb, data.frame(age=1:100), interval="confidence", level=.99)
# Backtransform
p.95.tr <- exp(p.95) / (1 + exp(p.95))
p.99.tr <- exp(p.99) / (1 + exp(p.99))

plot(1:100, p.99.tr[,1], type="n", ylim=range(p.99.tr), xlab="Age", ylab="",
main="", yaxt="n")
mtext("Tree biomass production", 3, .5)
mtext("a", 2, 2, at=1.17, xpd=TRUE, las=2, cex=3)
axis(2, (1:5)*.2, labels=FALSE)
mtext((1:5)*2, 2, 1, at=(1:5)*.2, las=2)
mtext(bquote(Production ~(kg~m^-2~year^-1)), 2, 2)
# CIs
polygon(c(1:100, 100:1), c(p.99.tr[,2], rev(p.99.tr[,3])), col=rgb(.5, 1, .2),
border=NA)
polygon(c(1:100, 100:1), c(p.95.tr[,2], rev(p.95.tr[,3])), col=rgb(0, .8, .5),
border=NA)
# fit
lines(1:100, p.99.tr[,1], ylim=range(p.99.tr), lwd=2)
#legend
legend("topleft", legend=c("fit", "99%-CI", "95%-CI"), lty=c(1, NA, NA), lwd=2,
pch=c(NA, 15, 15), bty="n",
col=c("#000000", rgb(.5, 1, .2), rgb(0, .8, .5)))

产量

enter image description here

关于r - 如何使用彩色置信区间带绘制回归原始尺度的回归图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60735895/

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