您好我想知道如何将X轴拆分为R中的十分位并制作ggplot?
我目前有年龄范围数据和NO2污染数据。这两个数据集共享名为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数据。
附上理想情节:
非常感谢您的帮助和建议。
答案 0 :(得分:0)
如果我理解你的问题,我认为cut
函数与quantile
函数结合将创建十进制。这是假数据的一个例子。
在下面的代码中,我们使用cut
函数将数据拆分为十进制,我们使用quantile
函数为breaks
设置cut
参数。这告诉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
函数返回每个decile
组中每个age
的均值。
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()