簡體   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