在数据上绘制正态分布
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
对它们进行正态分布拟合。
# 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 轴的简单方法是什么?
当您想在同一张图上绘制直方图和密度分布时,您需要使用美学 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)
我有一些我想要转换的对数正态数据,然后适合正态分布。这是一个可重现的示例,其中的数据不完全符合对数正态分布,但已经足够接近了:
# 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 轴的简单方法是什么?
当您想在同一张图上绘制直方图和密度分布时,您需要使用美学 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)