R:使用fitdistrplus拟合离散数据直方图上的曲线

时间:2017-10-19 16:46:58

标签: r statistics fitdistrplus

所以我有这个离散的数据集my_dat,我试图拟合曲线,以便能够根据my_dat生成随机变量。我在连续数据上使用fitdistrplus取得了巨大成功,但在尝试将其用于离散数据时却有很多错误。

表格设置:

library(fitdistrplus)

my_dat <- c(2,5,3,3,3,1,1,2,4,6,
            3,2,2,8,3,4,3,3,4,4,
            2,1,5,3,1,2,2,4,3,4,
            2,4,1,6,2,3,2,1,2,4,
            5,1,2,3,2)

我首先看一下数据的直方图:

hist(my_dat)

<code>hist(my_dat)</code>

由于数据是离散的,我决定尝试二项分布或负二项分布以适应这是我遇到麻烦的地方:在这里我尝试定义每个:

fitNB3 <- fitdist(my_dat, discrete = T, distr = "nbinom" ) #NaNs Produced
fitB3 <- fitdist(my_dat, discrete = T, distr = "binom")

我收到两个错误:

  1. fitNB3似乎在运行,但注意到“NaNs产生” - 任何人都可以让我 知道为什么会这样吗?
  2. fitB3根本不运行并向我提供错误:“start.arg.default中的错误(data10,distr = distname):分发binom的未知起始值。” - 任何人都可以指出为什么这在这里不起作用?我不清楚提供起始编号,因为数据是离散的(我试图在start = 1函数中使用fitdist,但我收到另一个错误:“fitdist中的错误(my_dat,discrete = T,distr =“binom”,start = 1):函数mle无法估计参数,错误代码为100“
  3. 我一直在旋转我的车轮一段时间,但我会对这些错误采取任何反馈。

1 个答案:

答案 0 :(得分:2)

  1. 不要对离散数据使用hist,因为它不会按照您的想法执行。

    plot(table(my_dat))hist(my_dat)进行比较...然后考虑一下您以前做过多少错误的展示。如果必须使用hist,请确保指定中断,不要依赖为连续变量设计的默认值。

    Histogram and plot(table()) showing distinctly different appearance because hist is combining '1' and '2' into first bin

     hist(my_dat)
     lines(table(my_dat),col=4,lwd=6,lend=1)
    
  2. 你的两个模型都不适合,因为这两个分布都是从0而不是1开始,并且对于你拥有的值的大小,p(0)不会小得多。

  3. 运行代码时,我没有遇到任何适合负二项式的错误。

  4. 您在拟合二项式时遇到的问题是需要为参数提供起始值,这些参数称为size(n)和prob(p),因此 你需要说出类似的话:

    fitdist(my_dat, distr = "binom", start=list(size=15, prob=0.2))
    

    然而,您将遇到一个新问题!优化程序假定参数是连续的,并且将在size上失败。

    另一方面,这可能是一件好事,因为未知 n MLE表现不佳,特别是当 p 很小时。

    通常,使用二项式时,您应该知道 n 。在这种情况下, p 的估计可以如下进行:

    fitdist(my_dat, distr = "binom", fix.arg=list(size=20), start=list(prob=0.15))
    

    但是,使用固定的 n ,最大似然估计在任何情况下都很简单 - 您不需要优化器。

    如果你真的不知道 n ,那么有很多比MLE更好的估算器,但这超出了这个问题的范围。