【问题标题】:Quantile regression error with dummy variables in ggplotggplot中带有虚拟变量的分位数回归误差
【发布时间】:2019-12-04 20:49:42
【问题描述】:

所以我正在尝试计算分位数回归并在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 显示错误。

【问题讨论】:

  • 什么错误?我必须安装其中几个包才能运行您的代码。您确定所有这些列都在您的数据框中吗?
  • 我在运行您的代码时没有收到错误消息,除了缺少的my_theme,我已将其注释掉。我无法安装 qre 它不在 CRAN 上,我在其他任何地方都找不到诸如此类的包),但似乎不需要运行 ggplot 代码。
  • 它确实可以运行,但是当您查看 factor(gear4)factor(gear5) 中的 ggplot coefs 时,它们是空的,当在这里使用基本图进行绘图时,它们是 - 这就是我发布问题的原因。

标签: r ggplot2 quantile-regression


【解决方案1】:

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) 输出中产生的全部置信区间。

【讨论】:

  • 很好的答案,谢谢。在类似的情况下,我设法通过手动“修剪”有问题的边缘来使其工作,例如将 tau 从 0.1-0.9 更改为 0.2-0.8
猜你喜欢
  • 2014-12-24
  • 2018-11-16
  • 2020-11-25
  • 2020-07-25
  • 2019-07-22
  • 2021-04-27
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多