控制分布与多个治疗分布之间的QQ曲线

时间:2020-02-10 17:29:22

标签: r ggplot2

我的数据格式如下:

df = data.frame(data = rnorm(33), group = rep(1:3, times = 10:12))

实际数据有更多行和五个组,但是结构是相同的。我对可视化控制组(在这种情况下为1)与其他使用qq-plots的组之间的数据分布差异感兴趣。我可以通过以下方式制作所需的情节:

par(mfrow = c(1, 2))
qqplot(df$data[df$group == 1], df$data[df$group == 2])
abline(0, 1)
qqplot(df$data[df$group == 1], df$data[df$group == 3])
abline(0, 1)

这只是两个并排的qq图,其中x轴分布来自第1组,y轴来自第2组和第3组。通过清洗该图是可行的,但我宁愿将与geom_qq库中的facet_gridggplot2一起使用。我最接近解决方案的是:

ggplot(data = df, aes(sample = data)) + 
  geom_qq() +
  facet_grid(~group)

但是,这使用x轴的正常分位数,而我想使用对照组的经验分位数(因此第一个面板应该是一条直线)。有一个选项可以更改geom_qq函数中的分布,这似乎很有希望,但是我似乎无法正确定义它。

任何帮助将不胜感激。干杯!

1 个答案:

答案 0 :(得分:0)

事实证明,这没有我想像的那么神秘。发布我的后代答案。事实证明,您可以轻松地计算出坐标并使用geom_point。此解决方案使用pivot_longer中的tidyr

plotSeq = seq(0.001, 0.999, length = 200)

makeQ = function(index, seq = plotSeq){
  quantile(df$data[df$group == index], seq)
}

qqplotData = data.table(controlQ = makeQ(1),
                        `Treatment 1` = makeQ(2),
                        `Treatment 2` = makeQ(3)) %>%
  pivot_longer(2:3, names_to = "Treatment", values_to = "Quantiles")

ggplot(qqplotData, aes(x = controlQ, y = Quantiles)) + 
  geom_step(cex = 2) + 
  geom_abline(slope = 1, intercept = 0) +
  facet_wrap(~Treatment, nrow = 2)