#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. Ты прав, это сработало! Я не уверен, почему вычисление констант вручную и их ввод не сработали. Большое вам спасибо!