我想拟合泊松分布,但我想加权一些更重要的值。有没有办法在 R 中使用fitdistr()
或一些等效功能来做到这一点?这是我目前所拥有的:
randoms <- rpois(15,10)
weighting <- seq(1, 100, by=1)
fit <- fitdistr(randoms, "poisson")
我想使用“加权”数据作为强调数据集末尾观察的一种方式。
我想拟合泊松分布,但我想加权一些更重要的值。有没有办法在 R 中使用fitdistr()
或一些等效功能来做到这一点?这是我目前所拥有的:
randoms <- rpois(15,10)
weighting <- seq(1, 100, by=1)
fit <- fitdistr(randoms, "poisson")
我想使用“加权”数据作为强调数据集末尾观察的一种方式。
请注意, 'fitdistr
只做最大似然估计。也就是说,你可以通过写下可能性来自己做。下面是 R 中泊松分布的一个示例。它可以调整为对每个数据的可能性的贡献进行加权/降低权重。
密度(如在 R 中)
可能性
对数似然
的二阶导数:
#------data------
set.seed(730)
sample <- rpois(1000, 10)
#----------------
################################################################################
# Using 'fitdistr' #
################################################################################
library(MASS)
fitdistr(x=sample, densfun="Poisson")
lambda
10.1240000
( 0.1006181)
################################################################################
# writing down the log-likelihood explicitly #
################################################################################
#------minus log-likelihood------
mloglik <- function(lambda2, sample) #lambda2 = log(lambda) in (-\infty, \infty)
{
- sum(sample * lambda2 - exp(lambda2) - log(factorial(sample)))
}
#--------------------------------
#------optimisation------
res <- nlm(f=mloglik, p=1, sample=sample)
#------------------------
#------recover lambda------
lambda <- exp(res$estimate)
round(lambda, 7)
[1] 10.12399
#--------------------------
#------standard error------
#square root of negative inverse second derivative of the log-likelihood
se <- lambda / sqrt(length(sample) * mean(sample))
round(se, 7)
[1] 0.100618
#--------------------------
如果你只是为了泊松分布(你只是在估计一个参数 lambda 的点估计),你可以使用这个glm
函数:
fit2 <- glm(randoms ~ 1, family = poisson(link = "log"),
weights = weighting[1:15])
作为检查,
fit1 <- glm(randoms ~ 1, family = poisson(link = "log"))
all.equal(unname(exp(coef(fit1))), unname(fit$estimate))
# [1] TRUE
另一个检查:
randoms2 <- rep(randoms, weighting[1:15])
fit3 <- glm(randoms2 ~ 1, family = poisson(link = "log"))
all.equal(exp(coef(fit3)), exp(coef(fit2)))
# [1] TRUE
如果你看一下可能性,它唯一同时依赖于 lambda 和 x 的是乘积 lambda^x_i,它是 lambda^{sum x_i}。因此,x 的总和,或等效的样本均值,对于 lambda 来说是一个足够的统计量。
这意味着您通过使用样本均值估计均值来“拟合泊松”。(然后您会查看具有该均值的泊松与您的数据的拟合程度。)
回到 OP 的加权问题,这意味着你计算一个加权平均值,并用它来估计 lambda。