Наложение гистограммы плотности данных с dlnorm в R, ggplot

#r #ggplot2 #statistics #statsmodels

Вопрос:

Я использую данные переписи населения Канады с переменными заработной платой по оси x и плотностью по оси y. Я пытаюсь наложить график, который я создал, на нормальное распределение журнала dlnorm , но я не уверен, что использовать в качестве значений параметров meanlog и sdlog. Я пробовал использовать mean(data$Wages) и sd(data$Wages) , а также принимать натуральный логарифм обоих и т. Д. Ничто не дает мне график, отдаленно похожий на гистограмму плотности, которую я сгенерировал.

Это потому, что мои данные не соответствуют логу? Как я могу найти правильные параметры meanlog и sdlog?

Это мой код:

 inc_plot <- data_adults %>%
  ggplot(aes(x=Wages))  
  geom_histogram(aes(y=..density..),  bins=100,fill="transparent", colour="black") 
  scale_x_continuous(labels=scales::comma)  
  stat_function(fun = dlnorm,
      args = list(meanlog = 48637.91, sdlog = 62459.15),
      col = "red")

inc_plot
 

Текущие параметры задаются с помощью вышеупомянутых mean() функций и sd() функций.

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

Ответ №1:

Если вы установите meanlog = mean(log(your_data)) и аналогично sdlog = sd(log(your_data)) , плотность должна приблизиться к гистограмме.

 library(ggplot2)


df <- data.frame(x = rlnorm(1e4))

ggplot(df, aes(x))  
  geom_histogram(
    aes(y = after_stat(density)),
    bins = 100, fill = "transparent", colour = "black"
  )  
  stat_function(
    fun = dlnorm,
    args = list(meanlog = mean(log(df$x)), sdlog = sd(log(df$x))),
    colour = "red"
  )
 

Создано 2021-08-23 с помощью пакета reprex (версия 2.0.1)

Альтернативой было бы использовать ggh4x::stat_theodensity(distri = "lnorm", colour = "red") . (отказ от ответственности: Я автор ggh4x)

Комментарии:

1. Ты прав, это сработало! Я не уверен, почему вычисление констант вручную и их ввод не сработали. Большое вам спасибо!