1

我希望能够为给定的理论分布绘制箱线图。例如,假设我想为正态分布绘制箱线图。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 方法,但我希望能够根据理论分布绘制箱线图。它对教学很有用,因此学生不必担心他们必须模拟的值的数量,而且输出也不取决于模拟的值的数量。

谢谢,尼古拉

4

3 回答 3

2

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

这是我试图展示随机变量与理论分位数之间的关系。

请注意,我正在使用 进行采样,我还使用geomrnorm绘制数据背后的数据。更改设置将影响透明度。geom_boxplotgeom_jitteralpha

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)")

于 2013-10-05T02:38:30.823 回答
1

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

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

如果您查看代码,graphics::boxplot.default您会看到它调用了一个函数boxplot.stats(在 package 中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)])
于 2013-10-05T03:08:13.153 回答
-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 )
于 2013-10-05T18:16:28.140 回答