R:使用fitdistrplus来拟合离散数据直方图上的曲线
问题描述:
所以我有这个离散数据集合my_dat
,我试图拟合曲线以便能够根据my_dat
生成随机变量。我在连续数据上使用fitdistrplus
取得了巨大成功,但尝试将其用于离散数据时出现了许多错误。R:使用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
似乎运行,但指出,“公司生产的NaN” - 任何人都可以让我 知道为什么是这样? -
fitB3
根本没有运行,并提供给我以下错误:“start.arg.default(data10,distr = distname)中的错误:分发binom的未知起始值。” - 任何人都可以指出为什么这不起作用?我不清楚提供起始数字,因为数据是离散的(我试图在fitdist
函数中使用start = 1
,但我收到另一个错误:“fitdist中的错误(my_dat,discrete = T,distr =”binom“,start = 1 ):该函数MLE未能估计参数,错误代码100"
我一直在纺纱我的车轮上这一段时间,但我会采取对这些错误的任何反馈
答
-
。
-
请勿在离散数据上使用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
上失败。在另一方面,这可能是一件好事,因为未知ň MLE不是很乖,特别是当p小。
通常,对于二项式,预计您会知道n。在这种情况下,p估计可以做如下:
fitdist(my_dat, distr = "binom", fix.arg=list(size=20), start=list(prob=0.15))
然而,随着固定ñ,最大似然估计是在任何情况下简单 - 你不需要为一个优化。
如果你真的不知道n,有很多比MLE更好的估计值,但这不在这个问题的范围之内。