如何在 R 中将 x 轴拆分为十分位数并制作 ggplot

How to split x-axis as decile in R and make ggplot

您好,我想知道如何在 R 中将 x 轴拆分为十分位数并制作 ggplot?

我目前有年龄范围数据和二氧化氮污染数据。这两个数据集共享名为 ward 的相同地理参考。我希望将我的人口统计数据绘制成病房数量相等的分位数(总计 298)。

我在 R 中尝试了分位数回归,其中我使用了以下内容:

library(SparseM) 
library(quantreg)
mydata<- read.csv("M:/Desktop10/Test2.csv") 
attach(mydata) 
Y <- cbind(NO2.value)
X <- cbind(age.0.to.4, age..5.to.9, age.10.to.14, age.15.to.19, age.20.to.24, age.25.to.29, age.30.to.44, age.45.to.59, age.60.to.64, age.65.to.74, age.75.to.84, age.85.to.89, age.above.90) 
quantreg.all <- rq(Y ~ X, tau = seq(0.05, 0.95, by = 0.05), data=mydata) 
quantreg.plot <- summary(quantreg.all) 
plot(quantreg.plot) 

但是我得到的不是我期望的,因为y轴不是NO2数据。

附上理想剧情:

非常感谢您的帮助和建议。

如果我理解你的问题,我认为 cut 函数与 quantile 函数相结合将创建十分位数。这是一个假数据的例子。

在下面的代码中,我们使用 cut 函数将数据分成十分位数,并使用 quantile 函数为 cut 设置 breaks 参数.这告诉 cut 将数据分成大小相等的 10 组,从 NO2 的最小值到最大值。

group_by(age) 表示我们为每个 age 组分别创建十分位数。这意味着在给定年龄组的每个十分位内有相同数量的受试者,但每个十分位的 NO2 临界值对于不同的年龄组是不同的。要在整个数据上创建十分位数,只需删除 group_by(age)。这将导致所有年龄组的每个十分位具有相同的 NO2 临界值,但在给定年龄组内,每个十分位的受试者数量将不同。

library(tidyverse)

# Fake data
set.seed(2)
dat = data.frame(NO2=c(runif(600, 0, 10), runif(400, 1, 11)), 
                 age=rep(c("0-10","11-20"), c(600,400)))

# Create decile groups
dat = dat %>% 
  group_by(age) %>% 
  mutate(decile = cut(NO2, breaks=quantile(NO2, probs=seq(0,1,0.1)), 
                      labels=10:1, include.lowest=TRUE),
         decile = fct_rev(decile))

现在我们使用 ggplot2 绘图。 stat_summary 函数 returns 每个 age 组中每个 decile 的平均值。

ggplot(dat, aes(decile, NO2, colour=age, group=age)) +
  stat_summary(fun.y=mean, geom="line") +
  stat_summary(fun.y=mean, geom="point") +
  expand_limits(y=0) +
  theme_bw()