4

是否有可用于拟合 R 中的频率分布的函数?我知道,fitdistr但据我所知,它仅适用于数据向量(随机样本)。另外,我知道这两种格式之间的转换是微不足道的,但频率如此之大以至于内存是一个问题。

例如,fitdistr可以使用以下方式:

x<-rpois(100, lambda=10)
fitdistr(x,"poisson")

是否有一个函数可以在频率表上进行相同的拟合?类似的东西:

freqt <- as.data.frame(table(x))
fitfreqtable(freqt$x, weights=freqt$Freq, "poisson")

谢谢!

4

3 回答 3

4

我知道没有用于将分布拟合到频率表的内置函数。请注意,理论上,连续分布不适用于表格,因为数据是离散的。当然,对于足够大的 N 和足够精细的网格,这可以忽略不计。

optim如果您知道您感兴趣的密度,您可以使用或任何其他优化器构建您自己的模型拟合函数。我在这里为伽马分布做了这个(这对于该特定数据集来说是一个糟糕的假设,但没关系)。

代码转载如下。

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"
于 2013-06-24T01:26:28.183 回答
0

For fitting a Poisson distribution, you only need the mean of your sample. Then the mean equals the lambda, which is the only parameter of the Poisson distribution. Example:

set.seed(1111)
sample<-rpois(n=10000,l=10)
mean(sample)
[1] 10.0191

which is almost equal to the lambda value put for creating the sample (l=10). The small difference (0.0191) is due to the randomness of the Poisson distribution random value generator. As you increase n the difference will get smaller. Alternatively, you can fit the distribution using an optimization method:

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

but it's only a waste of time. For theoritical information on fitting frequency data, you can see my answer here.

于 2017-02-16T20:44:05.413 回答
0

fixtmixturegrouped包中的函数ForestFit使用按组的频率数据为其他分布模型完成工作。

它可以拟合基于“gamma”、“log-normal”、“skew-normal”和“weibull”的简单或混合分布模型。

对于泊松分布,总体均值是唯一需要的参数。对您的数据应用一个简单的汇总函数就足够了(正如 ntzortzis 所建议的那样)

于 2020-03-22T13:33:55.857 回答