将拟合(伽马)分布密度曲线添加到库(MASS)fitdistr

时间:2015-10-09 18:42:51

标签: r plot gamma-distribution

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

我目前有:

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(),但不确定如何指定?

1 个答案:

答案 0 :(得分:0)

我会在您的示例中添加library(MASS)。您可能想尝试使用curve并使用add = 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图),并且为#34; free&#34;绘制密度线。但是,您无法添加main = i。我确信比我聪明的人可以找到一种快速添加标题或修改fitdistrplus::plot.fitdist方法的方法 - 可能值得单独提问。