8

この質問は、ggplot2 で qqline を使用して qqplot を作成する方法を示しましたが、答えは、データセット全体を単一のグラフにプロットする場合にのみ機能するようです。

データのサブセットについてこれらのプロットをすばやく比較する方法が必要です。つまり、ファセットのあるグラフで qqlines を使用して qqplots を作成したいと考えています。したがって、次の例では、9 つ​​のプロットすべてに線があり、それぞれに独自の切片と勾配があります。

df1 = data.frame(x = rnorm(1000, 10),
                 y = sample(LETTERS[1:3], 100, replace = TRUE),
                 z = sample(letters[1:3], 100, replace = TRUE))

ggplot(df1, aes(sample = x)) +
  stat_qq() +
  facet_grid(y ~ z)

ファセットデータ

4

2 に答える 2

8

これを試すことができます:

library(plyr)

# create some data
set.seed(123)
df1 <- data.frame(vals = rnorm(1000, 10),
                  y = sample(LETTERS[1:3], 1000, replace = TRUE),
                  z = sample(letters[1:3], 1000, replace = TRUE))

# calculate the normal theoretical quantiles per group
df2 <- ddply(.data = df1, .variables = .(y, z), function(dat){
             q <- qqnorm(dat$vals, plot = FALSE)
             dat$xq <- q$x
             dat
}
)

# plot the sample values against the theoretical quantiles
ggplot(data = df2, aes(x = xq, y = vals)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  xlab("Theoretical") +
  ylab("Sample") +
  facet_grid(y ~ z)

ここに画像の説明を入力

于 2013-10-25T23:25:36.670 に答える
4

正当な理由はdplyrありませんが、これは同じものの(この質問の時点では存在していなかった)バージョンです。ピア レビューと比較のために、データ セットを生成するコードを提供します。これにより、データ セットをさらに詳しく調べることができます。

# create some data
set.seed(123)
df1 <- data.frame(vals = rnorm(10, 10),
                  y = sample(LETTERS[1:3], 1000, replace = TRUE),
                  z = sample(letters[1:3], 1000, replace = TRUE))

#* Henrik's plyr version
library(plyr)
df2 <- plyr::ddply(.data = df1, .variables = .(y, z), function(dat){
             q <- qqnorm(dat$vals, plot = FALSE)
             dat$xq <- q$x
             dat
}
)

detach("package:plyr")


#* The dplyr version
library(dplyr)
qqnorm_data <- function(x){
  Q <- as.data.frame(qqnorm(x, plot = FALSE))
  names(Q) <- c("xq", substitute(x))
  Q
}

df3 <- df1 %>%
  group_by(y, z) %>%
      do(with(., qqnorm_data(vals)))

プロットは、Henrik の同じコードで実行できます。

于 2015-09-02T17:23:24.113 に答える