有没有一个函数可以用来拟合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"发布于 2017-02-17 04:44:05
对于泊松分布的拟合,你只需要样本的平均值。然后,平均值等于λ,这是泊松分布的唯一参数。示例:
set.seed(1111)
sample<-rpois(n=10000,l=10)
mean(sample)
[1] 10.0191它几乎等于用于创建样本的lambda值(l=10)。较小的差异(0.0191)是由于泊松分布随机值生成器的随机性。随着n的增加,差异将变得越来越小。或者,您可以使用优化方法来拟合分布:
library(fitdistrplus)
fitdist(sample,"pois")
set.seed(1111)
Fitting of the distribution ' pois ' by maximum likelihood
Parameters:
estimate Std. Error
lambda 10.0191 0.03165296但这只是浪费时间。有关拟合频率数据的理论信息,请参阅我的答案here。
发布于 2020-03-22 21:33:56
ForestFit包中的函数fixtmixturegrouped使用每个组的频率数据为其他分布模型执行此工作。
它可以拟合基于“伽玛”、“对数正态”、“倾斜正态”和“威布尔”的简单或混合分布模型。
对于泊松分布,总体平均值是唯一需要的参数。对数据应用一个简单的汇总函数就足够了(正如ntzortzis所建议的那样)
https://stackoverflow.com/questions/17265645
复制相似问题