拟合对数正态分布或泊松分布

时间:2018-03-11 11:39:38

标签: r normal-distribution data-fitting poisson model-fitting

我有一个1096个数字的向量,即测量站中3年内测量的每日平均NOx浓度。 您可以观察图像中的分布类型:

Histogram of NOx concentration

我用这些命令来做直方图:

NOxV<-scan("NOx_Vt15-17.txt")
hist.NOxVt<-hist(NOxV, plot = FALSE, breaks = 24) 
plot(hist.NOxVt, xlab = "[NOx]", ylab = "Frequenze assolute", main = "Istogramma freq. ass. NOx 15-17 Viterbo")
points(hist.NOxVt$mids, hist.NOxVt$counts, col= "red")

我的教授建议我使用Poisson分布拟合直方图 - 注意过渡:离散 - &gt;连续(我不知道这意味着什么) - 或者是“对数正态”分布。

我尝试使用她在课程中给我们的一些命令行进行Poisson拟合,但是在执行了以下代码行之后R给了我一个错误:

  my_poisson = function(params, x){
      exp(-params)*params^x/factorial(x)
  }

  y<-hist.NOxVt$counts/1096;
  x<-hist.NOxVt$mids;
  z <- nls( y ~ exp(-a)*a^x/factorial(x), start=list(a=1) )
  

numericDeriv(form [[3L]],names(ind),env)出错:   评估模型时产生的缺失值或无穷大   另外:有50个或更多警告(使用警告()查看前50个)“

在这个问题之后我无法解决(甚至在互联网上搜索类似的问题)我决定用Lognormal来配合发行版,但我不知道怎么做,因为教授没有向我们解释,我仍然没有足够的R经验来自己解决这个问题。

我很感激有关如何进行对数正态拟合和/或泊松拟合的任何建议或示例。

1 个答案:

答案 0 :(得分:4)

R附带的fitdistr包中有一个内置函数MASS

生成要查看的数据示例(眼球参数以获得与您的图片类似的内容):

set.seed(101)
z <- rlnorm(1096,meanlog=4.5,sdlog=0.8)

拟合(基于统计理由,我不推荐泊松拟合 - 可能适应离散分布,如泊松(或更好,负二项式)来拟合这样的连续数据,但是对数正态分布或伽玛分布是更自然的选择。

library(MASS)
f1 <- fitdistr(z,"lognormal")
f2 <- fitdistr(z,"Gamma")

f1f2个对象在打印时会给出对数正态,meanlog和{{1}的估计系数(sdlogshape对于Gamma而言)和系数的标准误差。

画一张照片(在密度标尺上,而不是计数标度):红色是对数 - 正常,蓝色是伽玛(在这种情况下,日志 - 正常适合更好,因为这是我首先生成“数据”的方式) 。 [rate内容允许在后续R代码中使用系数(with(as.list(coef(...))meanlog等)的名称。 ]

sdlog

enter image description here