Boxplot在T中的理论分布

时间:2013-10-04 22:58:51

标签: r ggplot2 statistics boxplot

我希望能够为给定的理论分布绘制一个箱线图。例如,假设我想绘制正态分布的箱线图。 R有qnorm方法。所以我可以像这样获得第一,第二和第三四分位数:

quartiles <- qnorm((1:3) / 4)

可以获得四分位数范围:

irq <- quartiles[3] - quartiles[1]
可以获得胡须:

left.whisker <- quartiles[1] - irq * 1.5
right.whisker <- quartiles[3] + irq * 1.5

现在,我该如何创建箱线图?

我知道我可以使用rnorm然后使用方法bixplot但我希望能够根据理论分布绘制boxplot。它对于教学非常有用,因此学生不必担心他们必须模拟的值的数量,并且输出也不会取决于模拟值的数量。

谢谢, 尼古拉

3 个答案:

答案 0 :(得分:2)

如果这用于一个类,我认为绘制理论分位数无法传达分布与现实世界的联系,其中变异无处不在,标准法线只是渐近观察。

这是我尝试显示随机变量与理论分位数的关系。

请注意,我正在使用rnorm进行抽样,我还使用geom_boxplot geom绘制了geom_jitter背后的数据。更改alpha设置会影响透明度。

install.packages("gridExtra"); install.packages("ggplot2")
library(gridExtra); library(ggplot2)

df <- data.frame(list(our_rand_var = rnorm(10000, mean = 0, sd = 1)))

p1 <- ggplot(df, aes(x = our_rand_var)) +
  geom_density(fill = "white") +
  ylab("") +
  xlab("") +
  theme(axis.text = element_text(size = 20),
        axis.title.y = element_blank(),
        axis.text.y = element_blank())

p2 <- ggplot(df, aes(x = "Our Variable", y = our_rand_var)) +
  geom_jitter(alpha = 0.2) +
  geom_boxplot(alpha = 0.9, colour = "red", size = 2) +
  ylab("Standard Deviations") +
  coord_flip() +
  theme(axis.text = element_text(size = 20),
        axis.title.y = element_blank(),
        axis.text.y = element_blank())

grid.arrange(p1, p2, ncol = 1, 
             main = "Standard Normal Distribution (~Z)")

答案 1 :(得分:1)

这是一个相当随机的分布:

set.seed(1)
d1 <- c(rbeta(5,1,1), runif(5))
boxplot(d1)

如果您查看代码,使用graphics::boxplot.default,您会看到它调用函数boxplot.stats(在包grDevices中),您可以调用它来为您提供所需的值一个箱线图。这反过来调用 stats::fivenum和应用于向量x的方法是:

x <- sort(x)
n4 <- floor((length(x) + 3) / 2) / 2
d <- c(1, n4, (length(x) + 1) / 2, length(x) + 1 - n4, length(x))
0.5 * (x[floor(d)] + x[ceiling(d)])

答案 2 :(得分:-1)

bxp函数可用于根据提供的摘要统计信息创建箱线图(boxplot函数调用bxp进行绘图)。因此,您只需创建正确类型的对象并将其传递给bxp

q1 <- qnorm(0.25)
q2 <- qnorm(0.5)
q3 <- qnorm(0.75)

lower <- q1 - 1.5*(q3-q1)
upper <- q3 + 1.5*(q3-q1)

tmp.list <- list( stats=rbind(lower, q1, q2, q3, upper),
    out=numeric(0), group=numeric(0), names='')

bxp( tmp.list )