我正在使用包中的predict.hurdle
函数pscl
来估计在数据集中观察 0、1、2、...、N 个事件的概率。
使用中的示例?predict.hurdle
:
data("bioChemists", package = "pscl")
fm_hp1 <- hurdle(art ~ ., data = bioChemists)
summary(fm_hp1)
head(predict(fm_hp1, newdata = bioChemists, type = "prob"))
# returns a matrix of probabilities too large to show here
该矩阵的每一行都是一个观察值,每一列是该计数的概率,在这种情况下为 0-19。
summary(rowSums(predict(fm_hp1, newdata = bioChemists, type = "prob")))
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.9998 1.0000 1.0000 1.0000 1.0000 1.0000
但是有些行的总和并没有达到应有的 1。但是好吧,他们很接近所以也许这不是问题......
但是,我需要校准截距项。在我的行业中,“校准”是一种可接受的说法,即“更改估计参数”。是的,我知道这在统计上不是一个好主意的原因有很多(故意偏向估计)。但是,我仍然希望代码能够正常工作,并且预测能够遵守概率规则。
# Change the count model intercept
fm_hp1$coefficients$count["(Intercept)"] <- 3
summary(rowSums(predict(fm_hp1, newdata = bioChemists, type = "prob")))
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.001521 0.434300 0.647400 0.602000 0.818400 0.983900
现在我们看到了结果概率的一些主要问题。
我很想通过以下方式以 0-1 的比例简单地重新规范这些实用程序:
old.p <- predict(fm_hp1, newdata = bioChemists, type = "prob")
new.p <- t(apply(X = old.p, MARGIN = 1, FUN = function(x) x/sum(x)))
summary(rowSums(new.p))
但我担心概率总和为 1 的问题的原因意味着这不合适。
我的担心有根据吗?fm_hp1
为了改变截距项但仍然得到正确的概率预测,我是否需要修改另一个元素?