将拟合(伽玛)分布密度曲线添加到库(MASS)fitdistr 中的直方图

Add fitted (gamma) distribution density curve to histogram plot from library(MASS) fitdistr

我想在观察数据的直方图上绘制从一组观察结果得出的伽玛密度函数。我能够生成伽玛拟合的直方图和参数估计值。这是针对主数据集中的多个数据子集完成的。如何在此循环中创建的每个直方图上绘制伽马密度函数?

我目前有:

library(MASS)

species <- c('acesac', 'acesac', 'acesac', 'acesac', 'acesac', 'acesac',
 'polbif', 'polbif', 'polbif', 'polbif', 'polbif', 'polbif')
tmean <- c(2,3,5,6,6,7,5,6,6,6,8,9) 
Data <- data.frame(species, tmean) 

for (i in unique(Data$species)){
  subdata <- subset(Data, species ==i)
  hist(subdata$tmean, main = i)
  dist <- fitdistr(subdata$tmean, "gamma")
}

我想我应该使用 lines(),但是,不确定如何指定它?

我会在您的示例中添加 library(MASS)。您可能想尝试使用 curveadd = TRUE 做一些事情。另一种选择是使用 library(fitdistrplus) 因为它可以直接绘制 dist 的输出;但是,我找不到(快速)更改情节标题的方法。

library(MASS)
species <- c('acesac', 'acesac', 'acesac', 'acesac', 'acesac', 'acesac',
             'polbif', 'polbif', 'polbif', 'polbif', 'polbif', 'polbif')
tmean <- c(2,3,5,6,6,7,5,6,6,6,8,9) 
Data <- data.frame(species, tmean) 

for (i in unique(Data$species)) {
  subdata <- subset(Data, species ==i)
  dist <- fitdistr(subdata$tmean, "gamma")
  hist(subdata$tmean, main = i)
  curve(dgamma(x, shape = dist$estimate[1], rate = dist$estimate[2]), 
        add = TRUE,
        col = "red")
}

根据我对 library(fitdistrplus) 的评论,请参阅以下输出:

library(fitdistrplus)

for (i in unique(Data$species)) {
  subdata <- subset(Data, species ==i)
  dist <- fitdistrplus::fitdist(subdata$tmean, "gamma")
  plot(dist)
}

请注意,您获得了额外的图表(Q-Q 图、经验和理论 CFS 以及 P-P 图)并且绘制了 "free" 的密度线。但是,您失去了添加 main = i 的能力。我敢肯定比我聪明的人可以想出一种快速的方法来添加标题或修改 fitdistrplus::plot.fitdist 方法 - 可能值得提出一个单独的问题。