将拟合(伽马)分布密度曲线添加到来自库(质量)FitDisr的直方图图中

将拟合(伽马)分布密度曲线添加到来自库(质量)FitDisr的直方图图中,r,plot,gamma-distribution,R,Plot,Gamma Distribution,我想在观测数据的柱状图上绘制一组观测值得出的伽马密度函数。我能够生成gamma拟合的直方图和参数估计。这是针对主数据集中的多个数据子集进行的。如何在循环中创建的每个直方图上绘制伽马密度函数 我目前有: library(MASS) species <- c('acesac', 'acesac', 'acesac', 'acesac', 'acesac', 'acesac', 'polbif', 'polbif', 'polbif', 'polbif', 'polbif', 'polbif

我想在观测数据的柱状图上绘制一组观测值得出的伽马密度函数。我能够生成gamma拟合的直方图和参数估计。这是针对主数据集中的多个数据子集进行的。如何在循环中创建的每个直方图上绘制伽马密度函数

我目前有:

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")
}
我想我应该使用线条,但不确定如何指定它?

我会将libraryMASS添加到您的示例中。您可能希望尝试使用curve并使用add=TRUE执行某些操作。另一种选择是使用LibraryFitDistripPlus,因为它可以直接绘制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")
}

请注意,您可以获得额外的图Q-Q图、经验和理论CFS、p-p图以及免费绘制的密度线。但是,您将无法添加main=i。我相信比我聪明的人可以想出一种快速添加标题或修改FitDistripPlus::plot.fitdist方法的方法-可能值得单独问一个问题。

什么是数据?你能提供一个可复制的例子吗?我很抱歉不能提供一个可复制的例子。Data是我正在使用的完整数据集。矢量子数据$tmean是一组以摄氏度为单位的温度值。请参阅关于提供可复制的示例。您始终可以使用dput。。试试看。它不应该是您的完整数据,它应该是一个小的表示,说明了问题,基于真实数据或模拟数据的子集。我添加了一个数据示例我添加了这条曲线,因为曲线质量已经加载,没有收到任何错误,但是它没有显示曲线?@user3830407我的意思是在你的原始问题中加入libraryMASS,这样它就完全可以复制了。是否确定曲线未打印?尝试复制和粘贴上面的精确代码。使用示例数据集可以很好地绘制曲线,但是,当使用实际数据时,它不会绘制。我必须检查我的数据。。。我能够使用FitDistripPlus获得非常好的绘图集!非常感谢这两种解决方案。@user3830407-可能实际数据不遵循伽马分布。祝你好运,请随意提出更多重复性问题。
library(fitdistrplus)

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