将置信区间添加到分位数回归的样条
add confidence interval to splines from quantile regression
我正在使用 quantreg 来拟合分位数回归,并且还添加了一些基于 x 值(分位数)的节点。我现在想绘制这个并且还有置信区间。不知道该怎么做。
这是一个可重现的例子:
#create data
x <- seq(0,100,length.out = 100)
sig <- 0.1 + 0.05*x
b_0 <- 6
b_1 <- 0.1
set.seed(1)
e <- rnorm(100,mean = 0, sd = sig)
y <- b_0 + b_1*x + e
mydata <- data.frame(x,y, age=sample(30:70,100,replace=TRUE), sex=sample(c("Male","Female"),100, replace=TRUE))
#run regression
library(quantreg)
library(splines)
model <- rq(y ~ ns(x, knots=c(25,50,75))+age+sex, tau=0.5, data=mydata )
#plot
sp <- c(25,50,75)
ggplot(mydata, aes(x=x,y=y))+ geom_point()+ geom_quantile(formula=y~ns(x,knots=sp), quantiles=0.5, se=T)
这不显示置信区间??
另外,这个图没有考虑协变量?有办法吗?
您实际上并没有在绘图中使用 model
的结果。所以我不完全确定你要做什么。
您可以使用 predict
获得基于分位数回归模型的预测,包括置信区间,并使用 geom_ribbon
:
绘制这些预测
# Get model-based predictions
pred <- as.data.frame(predict(model, data.frame(x = mydata$x, age = mydata$age, sex = mydata$sex), interval = "confidence"));
pred$x <- mydata$x;
#plot
sp <- c(25,50,75);
ggplot(mydata, aes(x=x,y=y)) +
geom_point() +
geom_line(data = pred, aes(x = x, y = fit)) +
geom_ribbon(data = pred, aes(ymin = lower, ymax = higher, x = x), alpha = 0.4) +
geom_quantile(formula = y ~ ns(x, knots = sp), quantiles = 0.5, se = T);
我正在使用 quantreg 来拟合分位数回归,并且还添加了一些基于 x 值(分位数)的节点。我现在想绘制这个并且还有置信区间。不知道该怎么做。
这是一个可重现的例子:
#create data
x <- seq(0,100,length.out = 100)
sig <- 0.1 + 0.05*x
b_0 <- 6
b_1 <- 0.1
set.seed(1)
e <- rnorm(100,mean = 0, sd = sig)
y <- b_0 + b_1*x + e
mydata <- data.frame(x,y, age=sample(30:70,100,replace=TRUE), sex=sample(c("Male","Female"),100, replace=TRUE))
#run regression
library(quantreg)
library(splines)
model <- rq(y ~ ns(x, knots=c(25,50,75))+age+sex, tau=0.5, data=mydata )
#plot
sp <- c(25,50,75)
ggplot(mydata, aes(x=x,y=y))+ geom_point()+ geom_quantile(formula=y~ns(x,knots=sp), quantiles=0.5, se=T)
这不显示置信区间?? 另外,这个图没有考虑协变量?有办法吗?
您实际上并没有在绘图中使用 model
的结果。所以我不完全确定你要做什么。
您可以使用 predict
获得基于分位数回归模型的预测,包括置信区间,并使用 geom_ribbon
:
# Get model-based predictions
pred <- as.data.frame(predict(model, data.frame(x = mydata$x, age = mydata$age, sex = mydata$sex), interval = "confidence"));
pred$x <- mydata$x;
#plot
sp <- c(25,50,75);
ggplot(mydata, aes(x=x,y=y)) +
geom_point() +
geom_line(data = pred, aes(x = x, y = fit)) +
geom_ribbon(data = pred, aes(ymin = lower, ymax = higher, x = x), alpha = 0.4) +
geom_quantile(formula = y ~ ns(x, knots = sp), quantiles = 0.5, se = T);