是否有可用于拟合R中频率分布的功能?我知道fitdistr
但据我所知它只适用于数据向量(随机样本)。此外,我知道在两种格式之间进行转换是微不足道的,但频率非常大,以至于内存是一个问题。
例如,fitdistr
可以通过以下方式使用:
x<-rpois(100, lambda=10)
fitdistr(x,"poisson")
是否有一个函数可以在频率表上进行相同的拟合?一些事情:
freqt <- as.data.frame(table(x))
fitfreqtable(freqt$x, weights=freqt$Freq, "poisson")
谢谢!
答案 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所建议的那样)