pscl::predict.障碍概率总和不为 1
pscl::predict.hurdle probabilities do not sum to 1
我正在使用 pscl
包中的 predict.hurdle
函数来估计观察数据集中 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。但是好吧,他们很接近,所以也许这不是问题....
但是,我需要校准截距项。 "Calibration" 在我的行业中是可以接受的说法 "change the estimated parameters"。是的,我知道有很多原因可以解释为什么这在统计上不是一个好主意(故意偏差估计)。但是,我仍然希望代码能够工作并且预测能够遵守概率规则。
# 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
的另一个元素以更改截距项但仍能获得正确的概率预测?
hurdle()
中支持的计数分布都支持 0、1、2、...(直到无穷大)。因此,为了将 exactly 求和为 1,您必须对所有这些整数 0、1、2、...
的概率求和
由于无限多个值在实践中没有用,predict()
方法仅提供有限数量整数的概率,默认为 0、1、2、...、max(y),即,直到观察到的最大响应。对于 bioChemists
数据,这是 0、1、...、19。
因此,通过仅对这些概率求和,您将忽略所有更高计数的概率。通常,这个概率权重很小,正如您的第一个摘要所说明的那样。但是,如果您增加截距,则与原始数据集中的计数相比,您获得更高计数的可能性要大得多(预期增加了大约 10 倍!)。因此,您需要总结更大的支持。您可以通过提供 at
参数来做到这一点:
summary(rowSums(predict(fm_hp1, type = "prob", at = 0:50)))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.001789 1.000000 1.000000 0.994000 1.000000 1.000000
summary(rowSums(predict(fm_hp1, type = "prob", at = 0:100)))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9889 1.0000 1.0000 1.0000 1.0000 1.0000
summary(rowSums(predict(fm_hp1, type = "prob", at = 0:200)))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 1 1 1 1 1
正如上面评论中已经提到的,我怀疑拦截的这种变化在这里真的是一个好策略,但这是一个不同的争论......
我正在使用 pscl
包中的 predict.hurdle
函数来估计观察数据集中 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。但是好吧,他们很接近,所以也许这不是问题....
但是,我需要校准截距项。 "Calibration" 在我的行业中是可以接受的说法 "change the estimated parameters"。是的,我知道有很多原因可以解释为什么这在统计上不是一个好主意(故意偏差估计)。但是,我仍然希望代码能够工作并且预测能够遵守概率规则。
# 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
的另一个元素以更改截距项但仍能获得正确的概率预测?
hurdle()
中支持的计数分布都支持 0、1、2、...(直到无穷大)。因此,为了将 exactly 求和为 1,您必须对所有这些整数 0、1、2、...
由于无限多个值在实践中没有用,predict()
方法仅提供有限数量整数的概率,默认为 0、1、2、...、max(y),即,直到观察到的最大响应。对于 bioChemists
数据,这是 0、1、...、19。
因此,通过仅对这些概率求和,您将忽略所有更高计数的概率。通常,这个概率权重很小,正如您的第一个摘要所说明的那样。但是,如果您增加截距,则与原始数据集中的计数相比,您获得更高计数的可能性要大得多(预期增加了大约 10 倍!)。因此,您需要总结更大的支持。您可以通过提供 at
参数来做到这一点:
summary(rowSums(predict(fm_hp1, type = "prob", at = 0:50)))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.001789 1.000000 1.000000 0.994000 1.000000 1.000000
summary(rowSums(predict(fm_hp1, type = "prob", at = 0:100)))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.9889 1.0000 1.0000 1.0000 1.0000 1.0000
summary(rowSums(predict(fm_hp1, type = "prob", at = 0:200)))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 1 1 1 1 1
正如上面评论中已经提到的,我怀疑拦截的这种变化在这里真的是一个好策略,但这是一个不同的争论......