Блочная диаграмма для теоретического распределения в T

Я хотел бы иметь возможность нарисовать коробку для данного теоретического распределения. Например, предположим, что я хочу нарисовать коробку для нормального распределения. 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, но я хотел бы иметь возможность рисовать блок-график на основе теоретического распределения. Это полезно для обучения, так что учащимся не нужно беспокоиться о количестве значений, которые они должны моделировать, а также вывод не будет зависеть от количества моделируемых значений.

Спасибо, Никола


person user2840286    schedule 04.10.2013    source источник
comment
Вы должны выполнить поиск по SO и rhelp.   -  person IRTFM    schedule 05.10.2013


Ответы (3)


Функцию 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 )
person Greg Snow    schedule 05.10.2013
comment
Спасибо. Это именно то, что я искал! - person user2840286; 05.10.2013
comment
Я бы предложил использовать что-то вроде 1-го и 99-го процентилей в качестве концов усов, а не +-1,5 IQR, вышеприведенное подходит для симметричных распределений, но для асимметричных распределений процентили, вероятно, будут более значимыми. - person Greg Snow; 06.10.2013

Если это используется для класса, я думаю, что построение теоретических квантилей не может передать связь распределения с реальным миром, где везде есть вариации, а стандартные нормы наблюдаются только асимптотически.

Это моя попытка показать связь случайной величины с теоретическими квантилями.

Обратите внимание, что я делаю выборку, используя rnorm, я также рисую данные за geom_boxplot, используя геометрию 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)")

person Statwonk    schedule 05.10.2013

Вот довольно случайное распределение:

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)])
person dardisco    schedule 05.10.2013
comment
Я думаю, вы обнаружите, что boxplot.stats звонит fivenum. - person IRTFM; 05.10.2013