Как я могу исправить мой вариант стандартного нормального распределения в R? - PullRequest
1 голос
/ 02 октября 2019

Я хотел бы нарисовать такой график стандартного нормального распределения с 100000 попыток:

enter image description here

Я видел этот вопрос также,Но я не видел никаких решений для моей задачи. Поэтому я создал свой вариант, основанный на разных сайтах и ​​книгах. У моего решения не было F(x), которое я хотел бы видеть. Ниже вы можете увидеть мой код:

library(tidyverse)
tibble(x = sort(rnorm(1e5)),
       cumulative = cumsum(abs(x)/sum(abs(x)))/2.5) %>%
  ggplot(aes(x)) + 
  geom_histogram(aes(y = ..density..), bins = 500)+
  geom_density(color = "red")+
  geom_line(aes(y = cumulative), color = "navy")+
  scale_y_continuous(sec.axis = sec_axis(~.*2.5, name = "cumulative density"))

и его внешний вид:

enter image description here

Я не могу понять, как исправитьсиняя линия, а также я не могу понять, почему я должен использовать 2.5 в моем коде. Может быть, мой вариант совершенно неверен? Как я могу нарисовать желаемое распределение?

1 Ответ

1 голос
/ 02 октября 2019

Для этого может быть несколько решений. Это мое усилие, изменившее только одну строку в вашем коде: cumulative = cumsum(abs(5-x)/sum(abs(5-x)))/2.5) %>%

library(tidyverse)
tibble(x = sort(rnorm(1e5)),
       cumulative = cumsum(abs(5-x)/sum(abs(5-x)))/2.5) %>%
  ggplot(aes(x)) + 
  geom_histogram(aes(y = ..density..), bins = 500)+
  geom_density(color = "red")+
  geom_line(aes(y = cumulative), color = "navy")+
  scale_y_continuous(sec.axis = sec_axis(~.*2.5, name = "cumulative density"))

enter image description here О том, почему используйте 2.5, я изо всех сил пытаюсь решить это каждый раз, когда используювторая ось у. Во-первых, давайте посмотрим, как будет выглядеть этот график без 2,5 в cumulative = cumsum(abs(5-x)/sum(abs(5-x)))) %>% и scale_y_continuous(sec.axis = sec_axis(~., name = "cumulative density"))

library(tidyverse)
tibble(x = sort(rnorm(1e5)),
       cumulative = cumsum(abs(5-x)/sum(abs(5-x)))) %>%
  ggplot(aes(x)) + 
  geom_histogram(aes(y = ..density..), bins = 500)+
  geom_density(color = "red")+
  geom_line(aes(y = cumulative), color = "navy")+
  scale_y_continuous(sec.axis = sec_axis(~., name = "cumulative density"))

. Вы получите следующий график enter image description here

Чтобы уменьшить вторую ось y, мы масштабируем вторую y: cumulative = cumsum(abs(5-x)/sum(abs(5-x)))/2.5).

library(tidyverse)
tibble(x = sort(rnorm(1e5)),
       cumulative = cumsum(abs(5-x)/sum(abs(5-x)))/2.5) %>%
  ggplot(aes(x)) + 
  geom_histogram(aes(y = ..density..), bins = 500)+
  geom_density(color = "red")+
  geom_line(aes(y = cumulative), color = "navy")+
  scale_y_continuous(sec.axis = sec_axis(~., name = "cumulative density"))

Мы получаем следующий график:

enter image description here

1 / 2.5 = 0,4. Максимальные значения для обеих осей теперь аналогичны,

Я думаю, ggplot использует эти измененные значения для создания графика, а затем мы помечаем их, умножая эти значения на 2,5 в scale_y_continuous(sec.axis = sec_axis(~.*2.5, name = "cumulative density")).

Извините за длинный ответ. Я не уверен, дал ли я это понять. Другие могут объяснить это лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...