Как нарисовать график сравнения нормального и биномиального распределения R? - PullRequest
0 голосов
/ 09 октября 2019

Я должен нарисовать такой тип сюжета, но я не могу понять, как это сделать. У меня есть графики этих функций. Нормальный:

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

и бином:

library(tidyverse)
set.seed(10)
tibble(x = sort(rbinom(1e5,1e5, 0.001))) %>%
  ggplot(aes(x)) + 
  geom_histogram(aes(y = ..density..), bins = 90)+
  geom_density(color = "red")

, и я не могу понять, как сделать сравнение двух из этих функций на одном графике в диапазоне [0,1]. Может быть, я должен изменить свои участки. Но в любом случае я не могу понять, как добавить два графика в определенном диапазоне. Может кто знает как это сделать?

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Я не уверен, что вы хотите получить из такого сравнения. Прежде чем соединить два графика, я думаю, что у вашего кода могут быть некоторые проблемы: 1) ваш cumsum(abs(x)/sum(abs(x))) может быть неправильным, я заменил его на cumsum(abs(10-x)/sum(abs(10-x))). Во-вторых, для биномиального распределения rbinom(1e5,1e5, 0.001) даст вам числа, а не вероятности, я заменил его на rbinom(1e5,1e5, 0.001)/1e5.

library(tidyverse)
df1<-tibble(x = sort(rnorm(1e5)),
       cumulative = cumsum(abs(10-x)/sum(abs(10-x)))/2.5)
df2<-tibble(x1 = sort(rbinom(1e5,1e5, 0.001)/1e5)) 

  ggplot(df1, aes(x=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")) + 
    geom_histogram(data = df2, aes(x = x1, y = ..density..), bins = 90) 

Это приведет к: enter image description here

Вы можете изменить bins для регулировки высоты. Тем не менее, мы должны быть осторожны с интерпретацией разницы между двумя распределениями: одно - это распределение индивидов со средним = 0 и SD = 1 (нормальное распределение), а другое - распределение оценок населения с вероятностью 0,001 иразмер выборки 1е5.

ggplot(df1, aes(x=x)) + 
  geom_histogram(aes(y = ..density..), fill="red", bins = 15)+
  geom_density(color = "red")+
  geom_line(aes(y = cumulative), color = "navy")+
  scale_y_continuous(sec.axis = sec_axis(~.*2.5, name = "cumulative density")) +  
  geom_histogram(data = df2, aes(x = x1, y = ..density..), color = "green", fill="green", bins = 15)

enter image description here

0 голосов
/ 09 октября 2019

Вы можете сохранить ваши данные и просто добавить новый geom_ с новыми данными и новую переменную x на график, снова используя ggplot (). Затем ваш сюжет будет добавлен к предыдущему сюжету. Однако xlim (диапазон) кажется слишком маленьким.

Silke

data1 <- tibble(x = sort(rnorm(1e5)),
                 cumulative = cumsum(abs(x)/sum(abs(x)))/2.5)

                set.seed(10)
data2 <-          tibble(x = sort(rbinom(1e5,1e5, 0.001))) 

ggplot(data = data1, 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")) +
  geom_histogram(data = data2,aes(x = x,y = ..density..), bins = 90)+
  geom_density(color = "green") + xlim(0,1)

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