用 R 中的 dlnorm 覆盖数据的密度直方图,ggplot
Overlaying data's density histogram with dlnorm in R, ggplot
我使用的是加拿大的人口普查数据,其中 x 轴为变量 Wage,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()
函数。
如果设置 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"
)
由 reprex package (v2.0.1)
于 2021-08-23 创建
另一种方法是使用 ggh4x::stat_theodensity(distri = "lnorm", colour = "red")
。 (免责声明:我是 ggh4x 的作者)
我使用的是加拿大的人口普查数据,其中 x 轴为变量 Wage,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()
函数。
如果设置 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"
)
由 reprex package (v2.0.1)
于 2021-08-23 创建另一种方法是使用 ggh4x::stat_theodensity(distri = "lnorm", colour = "red")
。 (免责声明:我是 ggh4x 的作者)