如何在R中拟合频率分布?

时间:2013-06-23 17:27:23

标签: r

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

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

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

是否有一个函数可以在频率表上进行相同的拟合?一些事情:

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

谢谢!

3 个答案:

答案 0 :(得分:3)

我知道没有用于将分布拟合到频率表的内置函数。注意,理论上,连续分布不适合表,因为数据是离散的。当然,对于足够大的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"

答案 1 :(得分:0)

为了拟合泊松分布,您只需要样本的均值。然后平均值等于λ,这是泊松分布的唯一参数。例如:

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

几乎等于用于创建样本的λ值(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

答案 2 :(得分:0)

软件包{'Abomasnow': {'types': ['Grass', 'Ice']}, 'Abra': {'types': ['Psychic']}, 'Absol': {'types': ['Dark']}, 'Accelgor': {'types': ['Bug']}, 'Aegislash': {'types': ['Steel', 'Ghost']}, 'Aerodactyl': {'types': ['Rock', 'Flying']}, 'Aggron': {'types': ['Steel']}, 'Aipom': {'types': ['Normal']}, 'Alakazam': {'types': ['Psychic']}, 'Alcremie': {'types': ['Fairy']}, 'Alomomola': {'types': ['Water']}, 'Altaria': {'types': ['Dragon', 'Fairy']}, 'Amaura': {'types': ['Rock', 'Ice']}, 'Ambipom': {'types': ['Normal']}, 'Amoonguss': {'types': ['Grass', 'Poison']}, 'Ampharos': {'types': ['Electric', 'Dragon']}, 'Anorith': {'types': ['Rock', 'Bug']}, . . . . 中的函数fixtmixturegrouped使用按组频率数据来完成其他分布模型的工作。

它可以适合基于“伽玛”,“对数正态”,“偏态正态”和“威布尔”的简单或混合分布模型。

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