我正在进行逻辑回归,并希望与 AIC 和 BIC 一起计算伪 R2 值以进行模型评估。我选择了 Efron 的伪 R2,因为它计算简单,并且与适当的 R2 值相似。当我运行一系列逻辑回归时,它会产生一个负值。但是,通常说伪 R2 值介于 0 和 1 之间(此处为示例)。我计算错了什么,或者这个 0 到 1 的范围对于 Efron 的伪 R2 是错误的吗?
我用于 Efron 的伪 R2 的方程是:
在哪里:
- 是一个由 1 和 0 组成的数组,表示数据中的真实结果标签
- 是一个由 1 和 0 组成的数组,表示作为逻辑回归结果的预测结果标签
- 是 y 的算术平均值计算为并等价于或 1 结果的概率
从等式来看,这似乎是由于三个原因发生的:(1)因为样本量大(n = 4,000),(2)逻辑回归的相对不准确,以及(3)p的值(均值 y = ) 接近 0.5。大样本量加上频繁的错误会炸毁分子,并且 p 接近 0.5 会缩小分母。事实上,当我计算我的数据子集(大约前 100 行)的值时,我收到一个正的伪 R2。
但是,再次讨论伪 R2 始终在 0 和 1 之间。似乎有两种可能性:(1)这个范围是一个简化,并且坏模型可能是负数(就像传统的 R2 ) 或 (2) 我的理解有问题。
有关实现的更多信息,尽管我相信我的实现正确地反映了上面的等式:我正在使用python sklearn
实现,它的推理指标有限,所以我正在编写函数来计算伪 R2 值。我根据上面的公式编写了函数,并确认该站点的另一个函数返回相同的值,这使我相信这是度量的特征,而不是方程式的错误实现。