有没有一个函数可以用来拟合R中的频率分布?我知道fitdistr,但据我所知,它只适用于数据向量(随机样本)。此外,我知道两种格式之间的转换是微不足道的,但频率太大了,内存是一个问题。
例如,fitdistr可以按以下方式使用:
x<-rpois(100, lambda=10)
fitdistr(x,"poisson")有没有一个函数可以在频率表上做同样的拟合?大致是这样的:
freqt <- as.data.frame(table(x))
fitfreqtable(freqt$x, weights=freqt$Freq, "poisson")谢谢!
发布于 2013-06-24 09:26:28
据我所知,没有内置的函数可以将分布拟合到频率表中。请注意,从理论上讲,连续分布不适合表,因为数据是离散的。当然,对于足够大的N和足够精细的网格,这可以忽略不计。
如果您知道自己感兴趣的密度,则可以使用optim或任何其他优化器构建自己的模型拟合函数。我为伽马分布做了这个here (对于那个特定的数据集来说,这是一个很糟糕的假设,但没关系)。
下面重现的代码。
negll <- function(par, x, y)
{
shape <- par[1]
rate <- par[2]
mu <- dgamma(x, shape, rate) * sum(y)
-2 * sum(dpois(y, mu, log=TRUE))
}
optim(c(1, 1), negll, x=seq_along(g$count), y=g$count, method="L-BFGS-B", lower=c(.001, .001))
$par
[1] 0.73034879 0.00698288
$value
[1] 62983.18
$counts
function gradient
32 32
$convergence
[1] 0
$message
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"https://stackoverflow.com/questions/17265645
复制相似问题