所以我有这个离散的数据集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)
由于数据是离散的,我决定尝试二项分布或负二项分布以适应这是我遇到麻烦的地方:在这里我尝试定义每个:
fitNB3 <- fitdist(my_dat, discrete = T, distr = "nbinom" ) #NaNs Produced
fitB3 <- fitdist(my_dat, discrete = T, distr = "binom")
我收到两个错误:
fitNB3
似乎在运行,但注意到“NaNs产生” - 任何人都可以让我
知道为什么会这样吗? fitB3
根本不运行并向我提供错误:“start.arg.default中的错误(data10,distr = distname):分发binom的未知起始值。” - 任何人都可以指出为什么这在这里不起作用?我不清楚提供起始编号,因为数据是离散的(我试图在start = 1
函数中使用fitdist
,但我收到另一个错误:“fitdist中的错误(my_dat,discrete = T,distr =“binom”,start = 1):函数mle无法估计参数,错误代码为100“我一直在旋转我的车轮一段时间,但我会对这些错误采取任何反馈。
答案 0 :(得分:2)
不要对离散数据使用hist,因为它不会按照您的想法执行。
将plot(table(my_dat))
与hist(my_dat)
进行比较...然后考虑一下您以前做过多少错误的展示。如果必须使用hist
,请确保指定中断,不要依赖为连续变量设计的默认值。
hist(my_dat)
lines(table(my_dat),col=4,lwd=6,lend=1)
你的两个模型都不适合,因为这两个分布都是从0而不是1开始,并且对于你拥有的值的大小,p(0)不会小得多。
运行代码时,我没有遇到任何适合负二项式的错误。
您在拟合二项式时遇到的问题是需要为参数提供起始值,这些参数称为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更好的估算器,但这超出了这个问题的范围。