Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何用彩色置信区间带绘制转换回原始尺度的回归?_R_Plot_Regression_Transformation_Confidence Interval - Fatal编程技术网

R 如何用彩色置信区间带绘制转换回原始尺度的回归?

R 如何用彩色置信区间带绘制转换回原始尺度的回归?,r,plot,regression,transformation,confidence-interval,R,Plot,Regression,Transformation,Confidence Interval,我想从一个线性模型中画出这条线和95%的置信区间,在这个线性模型中,响应已经被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) <

我想从一个线性模型中画出这条线和95%的置信区间,在这个线性模型中,响应已经被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)

#数据

dat您可以在年龄范围内使用
predict
,例如
1:100
,为CI指定
interval=
选项。使用
type=“l”
绘图将平滑一条漂亮的曲线。然后可以使用
添加置信区间

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)
产量

感谢您的回答和建议!这很好。但是,我需要y轴在0和1之间(数据的原始比例)。当我还将年龄更改为0到200之间时,y轴在-30到30之间,我还希望提取模型外部95%CI的预测值,以生成一个可以填充灰色的多边形。@matrivi我忘记了反变换,请参见编辑。对于填充方法,您可能需要查看多边形,例如,请参见以下答案:谢谢!这是我在堆栈溢出中的第一个问题,您的回答非常有用!我已经编辑了我的问题,以指定图形所需的多边形类型。我将继续调查,因为我无法从您建议检查的答案中找出答案。@matrivi通常,在堆栈溢出中,我们会问一个新问题,而不是实质性地更改一个问题,但我有一个例外。请看我的扩展答案。
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)))