В R, как построить область хвоста нормального распределения, используя ggplot? - PullRequest
2 голосов
/ 29 февраля 2020

Я нашел способ «взломать» ggplot, объединив два графика geom_area для создания нормального распределения с областью хвоста:

library(ggplot2)
mean <-  0
standard_deviation <- 1
Zscore <- -1.35

observation = (Zscore*standard_deviation) + mean
(tail_area <- round(pnorm(observation),2))

ggplot(NULL, aes(c(-5,5))) +
    geom_area(stat = "function", fun = dnorm, fill="sky blue", xlim = c(-5, -1.35)) +
    geom_area(stat = "function", fun = dnorm,  xlim = c(-1.35, 5))

enter image description here

Есть ли подход "не такой хаккейный", использующий ggplot для создания нормальных распределений и выделения областей хвоста, как указано выше?

1 Ответ

5 голосов
/ 29 февраля 2020

Во-первых, мне нравится ваш подход; не уверен, что это менее "хаккейный", но вот еще один вариант использования gghighlight

# Generate data (see comment below)
library(dplyr)
df <- data.frame(x = seq(-5, 5, length.out = 100)) %>% mutate(y = dnorm(x))

# (gg)plot and (gg)highlight
library(ggplot2)
library(gghighlight)
ggplot(df, aes(x, y)) + geom_area(fill = "sky blue") + gghighlight(x < -1.35)

enter image description here

Из того, что я понимаю, gghighlight нужен аргумент data, поэтому он не будет работать с geom_area сам по себе (то есть без data, но с stat = "function") или с stat_function. Вот почему я сначала генерирую данные df.


Обновление

В ответ на ваш комментарий о том, как "выделите область между 1 и -1" ; Вы можете сделать следующее

ggplot(df, aes(x, y)) + geom_area(fill = "sky blue") + gghighlight(abs(x) < 1)

enter image description here

Обновление 2

Чтобы выделить область 1.5 < x < 2.5, просто используйте условный оператор x > 1.5 & x < 2.5

ggplot(df, aes(x, y)) + geom_area(fill = "sky blue") + gghighlight(x > 1.5 & x < 2.5)

enter image description here


Чтобы предупредить потенциал, следуйте вопросам: Этот метод будет работать только для смежных регионов. То есть я не нашел способа выделить x < -2.5 & x > 2.5 в одном выражении gghighlight.

...