ggplot中虚拟变量的分位数回归误差
Quantile regression error with dummy variables in ggplot
所以我正在尝试计算分位数回归并在 ggplot
中绘制结果
由于某种原因,在 ggplot
中绘制结果时由于某种原因无法显示虚拟变量
示例 mtcars
数据集的代码如下:
library(dplyr)
library(ggplot2)
library(qre)
library(quantreg)
library(fastDummies)
dataset <- mtcars
dataset <- dummy_cols(dataset, select_columns = "gear")
dataset
rq(data=dataset,
tau= 1:9/10,
formula = hp ~ disp + mpg + qsec + gear_4 + gear_5) %>%
broom::tidy() %>%
#filter(term!="(Intercept)") %>%
ggplot(aes(x=tau,y=estimate))+
geom_point(color="#27408b", size = 3)+
geom_ribbon(aes(ymin=conf.low,ymax=conf.high),alpha=0.25, fill="#27408b")+
geom_line(color="#27408b", size = 1)+
geom_smooth(method= "lm", colour = "red", se = T)+
my_theme +
facet_wrap(~term,scales="free",ncol=2)
QR.2 <- rq(hp ~ disp + mpg + qsec + gear_4 + gear_5, data = dataset, tau = 1:9/10)
plot(summary(QR.2, se = "boot"))
当使用 plot(summary(QR.2, se = "boot"))
绘制结果时一切正常,但由于某种原因使用 ggplot 显示错误。
ggplot 没有为两个 gear
列绘制任何内容,因为至少有一个分位数具有本质上无限大的置信区间。请注意,在下面的输出中,对于 gear
.
的每个级别,至少有一个分位数置信限处于 R 的最大浮点值(1.797693e+308 或 .Machine$double.xmax
)
rq(data=dataset,
tau= 1:9/10,
formula = hp ~ disp + mpg + qsec + gear_4 + gear_5) %>%
broom::tidy() %>%
filter(grepl("gear", term)) %>%
arrange(term) %>%
as.data.frame
term estimate conf.low conf.high tau
1 gear_4 7.725539 -1.070165e+02 1.797693e+308 0.1
2 gear_4 10.295479 -3.168527e+01 1.115851e+02 0.2
3 gear_4 26.146858 -2.800967e+01 4.627397e+01 0.3
4 gear_4 20.403808 -4.757591e+01 4.244444e+01 0.4
5 gear_4 -10.288388 -3.268460e+01 4.338169e+01 0.5
6 gear_4 -7.957834 -2.606588e+01 5.368260e+01 0.6
7 gear_4 -3.902589 -2.287453e+01 6.694520e+01 0.7
8 gear_4 5.087119 -1.295842e+02 9.044733e+01 0.8
9 gear_4 4.097664 -1.797693e+308 1.199334e+02 0.9
10 gear_5 13.464949 -1.797693e+308 1.610157e+02 0.1
11 gear_5 15.969431 -1.797693e+308 9.666875e+01 0.2
12 gear_5 74.974305 -4.802727e+01 1.006461e+02 0.3
13 gear_5 57.885205 -4.215393e+01 9.898391e+01 0.4
14 gear_5 27.118007 -2.715968e+01 9.400573e+01 0.5
15 gear_5 29.105166 -2.732280e+01 1.308410e+02 0.6
16 gear_5 29.568986 -2.064172e+01 1.461912e+02 0.7
17 gear_5 43.932664 -8.733431e+00 1.797693e+308 0.8
18 gear_5 113.512563 1.982236e+01 1.797693e+308 0.9
如果您添加到图表中,例如 + coord_cartesian(ylim=c(-100,200))
,它会强制 y 轴的范围较小,您会看到每个 gear
级别的值出现在图表。
对于 gear_5
和自举置信区间,这实际上也在发生:
summary(QR.2) %>%
map_df(~ .x$coefficients %>%
as.data.frame %>%
rownames_to_column() %>%
mutate(tau = .x$tau)) %>%
filter(grepl("gear", rowname)) %>%
arrange(term)
rowname coefficients lower bd upper bd tau
1 gear_4 7.725539 -3.586683e+01 1.234368e+02 0.1
2 gear_4 10.295479 -1.596869e+01 3.471653e+01 0.2
3 gear_4 26.146858 -2.754952e+01 4.115246e+01 0.3
4 gear_4 20.403808 -2.798206e+01 4.230933e+01 0.4
5 gear_4 -10.288388 -2.440144e+01 4.221202e+01 0.5
6 gear_4 -7.957834 -2.069021e+01 4.198471e+01 0.6
7 gear_4 -3.902589 -1.967830e+01 2.471069e+01 0.7
8 gear_4 5.087119 -9.981679e+01 6.940221e+01 0.8
9 gear_4 4.097664 -2.771170e+02 1.193569e+02 0.9
10 gear_5 13.464949 -1.797693e+308 8.781396e+01 0.1
11 gear_5 15.969431 -1.617983e+01 9.571634e+01 0.2
12 gear_5 74.974305 -4.687321e+01 1.006256e+02 0.3
13 gear_5 57.885205 -2.904531e+01 9.697743e+01 0.4
14 gear_5 27.118007 -2.375592e+01 9.330493e+01 0.5
15 gear_5 29.105166 -2.523643e+01 9.464342e+01 0.6
16 gear_5 29.568986 -5.958817e+00 1.439989e+02 0.7
17 gear_5 43.932664 8.020035e+00 1.293194e+02 0.8
18 gear_5 113.512563 2.597030e+01 1.797693e+308 0.9
用于绘制 summary.rqs
对象的 plot
方法必须对置信带进行一些其他类型的处理或修整,或者它绘制的可能与置信带不同。无论哪种方式,它绘制的都不是 summary(QR.2)
.
输出中产生的置信带的全部范围
所以我正在尝试计算分位数回归并在 ggplot
中绘制结果
由于某种原因,在 ggplot
示例 mtcars
数据集的代码如下:
library(dplyr)
library(ggplot2)
library(qre)
library(quantreg)
library(fastDummies)
dataset <- mtcars
dataset <- dummy_cols(dataset, select_columns = "gear")
dataset
rq(data=dataset,
tau= 1:9/10,
formula = hp ~ disp + mpg + qsec + gear_4 + gear_5) %>%
broom::tidy() %>%
#filter(term!="(Intercept)") %>%
ggplot(aes(x=tau,y=estimate))+
geom_point(color="#27408b", size = 3)+
geom_ribbon(aes(ymin=conf.low,ymax=conf.high),alpha=0.25, fill="#27408b")+
geom_line(color="#27408b", size = 1)+
geom_smooth(method= "lm", colour = "red", se = T)+
my_theme +
facet_wrap(~term,scales="free",ncol=2)
QR.2 <- rq(hp ~ disp + mpg + qsec + gear_4 + gear_5, data = dataset, tau = 1:9/10)
plot(summary(QR.2, se = "boot"))
当使用 plot(summary(QR.2, se = "boot"))
绘制结果时一切正常,但由于某种原因使用 ggplot 显示错误。
ggplot 没有为两个 gear
列绘制任何内容,因为至少有一个分位数具有本质上无限大的置信区间。请注意,在下面的输出中,对于 gear
.
.Machine$double.xmax
)
rq(data=dataset,
tau= 1:9/10,
formula = hp ~ disp + mpg + qsec + gear_4 + gear_5) %>%
broom::tidy() %>%
filter(grepl("gear", term)) %>%
arrange(term) %>%
as.data.frame
term estimate conf.low conf.high tau 1 gear_4 7.725539 -1.070165e+02 1.797693e+308 0.1 2 gear_4 10.295479 -3.168527e+01 1.115851e+02 0.2 3 gear_4 26.146858 -2.800967e+01 4.627397e+01 0.3 4 gear_4 20.403808 -4.757591e+01 4.244444e+01 0.4 5 gear_4 -10.288388 -3.268460e+01 4.338169e+01 0.5 6 gear_4 -7.957834 -2.606588e+01 5.368260e+01 0.6 7 gear_4 -3.902589 -2.287453e+01 6.694520e+01 0.7 8 gear_4 5.087119 -1.295842e+02 9.044733e+01 0.8 9 gear_4 4.097664 -1.797693e+308 1.199334e+02 0.9 10 gear_5 13.464949 -1.797693e+308 1.610157e+02 0.1 11 gear_5 15.969431 -1.797693e+308 9.666875e+01 0.2 12 gear_5 74.974305 -4.802727e+01 1.006461e+02 0.3 13 gear_5 57.885205 -4.215393e+01 9.898391e+01 0.4 14 gear_5 27.118007 -2.715968e+01 9.400573e+01 0.5 15 gear_5 29.105166 -2.732280e+01 1.308410e+02 0.6 16 gear_5 29.568986 -2.064172e+01 1.461912e+02 0.7 17 gear_5 43.932664 -8.733431e+00 1.797693e+308 0.8 18 gear_5 113.512563 1.982236e+01 1.797693e+308 0.9
如果您添加到图表中,例如 + coord_cartesian(ylim=c(-100,200))
,它会强制 y 轴的范围较小,您会看到每个 gear
级别的值出现在图表。
对于 gear_5
和自举置信区间,这实际上也在发生:
summary(QR.2) %>%
map_df(~ .x$coefficients %>%
as.data.frame %>%
rownames_to_column() %>%
mutate(tau = .x$tau)) %>%
filter(grepl("gear", rowname)) %>%
arrange(term)
rowname coefficients lower bd upper bd tau 1 gear_4 7.725539 -3.586683e+01 1.234368e+02 0.1 2 gear_4 10.295479 -1.596869e+01 3.471653e+01 0.2 3 gear_4 26.146858 -2.754952e+01 4.115246e+01 0.3 4 gear_4 20.403808 -2.798206e+01 4.230933e+01 0.4 5 gear_4 -10.288388 -2.440144e+01 4.221202e+01 0.5 6 gear_4 -7.957834 -2.069021e+01 4.198471e+01 0.6 7 gear_4 -3.902589 -1.967830e+01 2.471069e+01 0.7 8 gear_4 5.087119 -9.981679e+01 6.940221e+01 0.8 9 gear_4 4.097664 -2.771170e+02 1.193569e+02 0.9 10 gear_5 13.464949 -1.797693e+308 8.781396e+01 0.1 11 gear_5 15.969431 -1.617983e+01 9.571634e+01 0.2 12 gear_5 74.974305 -4.687321e+01 1.006256e+02 0.3 13 gear_5 57.885205 -2.904531e+01 9.697743e+01 0.4 14 gear_5 27.118007 -2.375592e+01 9.330493e+01 0.5 15 gear_5 29.105166 -2.523643e+01 9.464342e+01 0.6 16 gear_5 29.568986 -5.958817e+00 1.439989e+02 0.7 17 gear_5 43.932664 8.020035e+00 1.293194e+02 0.8 18 gear_5 113.512563 2.597030e+01 1.797693e+308 0.9
用于绘制 summary.rqs
对象的 plot
方法必须对置信带进行一些其他类型的处理或修整,或者它绘制的可能与置信带不同。无论哪种方式,它绘制的都不是 summary(QR.2)
.