Создание графиков fitdist с помощью ggplot2

Я подогнал к обычному дистрибутиву функцию fitdist из пакета fitdistrplus. Используя denscomp, qqcomp, cdfcomp и ppcomp, мы можем построить histogram against fitted density functions, theoretical quantiles against empirical ones, the empirical cumulative distribution against fitted distribution functions и theoretical probabilities against empirical ones соответственно, как показано ниже.

set.seed(12345)
df <- rnorm(n=10, mean = 0, sd =1)
library(fitdistrplus)
fm1 <-fitdist(data = df, distr = "norm")
summary(fm1)

denscomp(ft = fm1, legendtext = "Normal")

введите здесь описание изображения

qqcomp(ft = fm1, legendtext = "Normal")

введите здесь описание изображения

cdfcomp(ft = fm1, legendtext = "Normal")

введите здесь описание изображения

ppcomp(ft = fm1, legendtext = "Normal")

введите здесь описание изображения

Мне очень интересно сделать эти fitdist графики с ggplot2. MWE ниже:

qplot(df, geom = 'blank') +
  geom_line(aes(y = ..density.., colour = 'Empirical'), stat = 'density') +  
  geom_histogram(aes(y = ..density..), fill = 'gray90', colour = 'gray40') +
  geom_line(stat = 'function', fun = dnorm, 
            args = as.list(fm1$estimate), aes(colour = 'Normal')) +
  scale_colour_manual(name = 'Density', values = c('red', 'blue'))

введите здесь описание изображения

ggplot(data=df, aes(sample = df)) + stat_qq(dist = "norm", dparam = fm1$estimate)

Как я могу начать делать эти fitdist графики с ggplot2?


person MYaseen208    schedule 27.07.2015    source источник
comment
Если бы к этому не была прикреплена награда, я бы проголосовал за закрытие как слишком широкое. Каждый график должен быть отдельным вопросом (хотя вам может не понадобиться спрашивать каждый график, если у вас есть ответ на один или два из них).   -  person Roland    schedule 30.07.2015


Ответы (1)


вы можете использовать что-то вроде этого:

library(ggplot2)

ggplot(dataset, aes(x=variable)) +
geom_histogram(aes(y=..density..),binwidth=.5, colour="black", fill="white") +
stat_function(fun=dnorm, args=list(mean=mean(z), sd=sd(z)), aes(colour =
"gaussian", linetype = "gaussian")) + 
stat_function(fun=dfun, aes(colour = "laplace", linetype = "laplace")) + 
scale_colour_manual('',values=c("gaussian"="red", "laplace"="blue"))+
scale_linetype_manual('',values=c("gaussian"=1,"laplace"=1))

вам просто нужно определить dfun перед запуском графики. В этом примере это распределение Лапласа, но вы можете выбрать любое и добавить еще stat_function, если хотите.

person MLavoie    schedule 30.07.2015