【发布时间】:2017-09-07 07:24:38
【问题描述】:
我有一些想要转换的对数正态数据,然后拟合正态分布。这是一个可重现的示例,其中的数据不完全是对数正态的,但已经足够接近了:
# create some lognormal data
dat <- data.frame(x = c(runif(1000, 0, 1), runif(300, 1, 100), runif(100,100,1000)))
我可以用log10 转换这些数据,并用MASS::fitdistr 拟合它们的正态分布。
# fit normal distribution to log-transformed values
library(MASS)
fit <- fitdistr(log10(dat$x), densfun = "normal")
fit$estimate # mean and SD of the normal distribution
现在我想绘制数据,以及它上面的分布。我通过 log10 转换我的数据,并用stat_function 绘制正态分布,但它不适合数据。
# plot data and distribution
ggplot(data = dat) +
geom_histogram(mapping = aes(x = log10(x))) +
stat_function(fun = dnorm, args = list(mean = fit$estimate[1], sd = fit$estimate[2], log = TRUE))
任何指示以及验证我是否正确进行此操作都会非常有帮助。
最后要让我的 x 轴显示 10、100、1000 等单位...我应该使用 scale_x_log10() 吗?格式化x轴的简单方法是什么?
【问题讨论】:
-
对数(均匀分布)不是对数正态
标签: r ggplot2 normal-distribution