2

所以我有这个离散的数据集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 Produced” - 谁能让我知道为什么会这样?
  2. fitB3根本不运行,并为我提供错误:“start.arg.default 中的错误(data10,distr = distname):分布 binom 的未知起始值。” - 谁能指出为什么这在这里行不通?鉴于数据是离散的,我不清楚是否提供起始编号(我试图start = 1fitdist函数中使用,但我收到另一个错误:“fitdist 错误(my_dat,discrete = T,distr = “binom”,start = 1): mle函数估计参数失败,错误码100"

我已经为此旋转了一段时间,但我会接受有关这些错误的任何反馈。

4

1 回答 1

2
  1. 不要对离散数据使用 hist,因为它不会做你认为它正在做的事情。

    plot(table(my_dat))与……比较hist(my_dat),然后想想你以前做过多少错误的印象。如果必须使用hist,请确保指定中断,不要依赖为连续变量设计的默认值。

    直方图和 plot(table()) 显示明显不同的外观,因为 hist 将 '1' 和 '2' 组合到第一个 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 表现更好的估计器,但这超出了这个问题的范围。

于 2017-11-04T13:47:59.820 回答