我希望能够为给定的理论分布绘制一个箱线图。例如,假设我想绘制正态分布的箱线图。 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。它对于教学非常有用,因此学生不必担心他们必须模拟的值的数量,并且输出也不会取决于模拟值的数量。
谢谢, 尼古拉
答案 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 )