繁体   English   中英

将正态分布绘制到数据上

[英]Plot normal distribution onto data

我有一些要转换的对数正态数据,然后适合正态分布。 这是一个可重现的示例,其数据并非完全对数正态,但足够接近:

# create some lognormal data
dat <- data.frame(x = c(runif(1000, 0, 1), runif(300, 1, 100), runif(100,100,1000)))

我可以通过log10转换这些数据,并使用MASS::fitdistr使它们符合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))

在此处输入图片说明

任何指针,以及验证我是否正确进行操作,都将非常有帮助。

最后, scale_x_log10()我的x轴以scale_x_log10()等显示单位...我应该使用scale_x_log10()吗? 格式化x轴的简单方法是什么?

如果要在同一图形上绘制直方图和密度分布,则需要使用美学y=..density..绘制密度直方图 y=..density..
这是一个例子。 为了清楚起见,我从对数正态分布生成了数据。

set.seed(123)
# Generate data from a log-normal distribution
dat <- data.frame(x=rlnorm(10000))

# Fit normal distribution to log-transformed values
library(MASS)
fit <- fitdistr(log10(dat$x), densfun = "normal")

# Plot density histogram and fitted distribution
ggplot(data = dat) +
  geom_histogram(mapping = aes(x = log10(x), y = ..density..), col="white") +
  stat_function(fun = dnorm, 
      args = list(mean = fit$estimate[1], sd = fit$estimate[2], log = F), 
      color="red", lwd=1)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM