我在 R 中使用包 Ineq 来计算基尼系数。通过检查源代码(如下),它在计算 Gini 之前首先对向量 x 进行排序。
示例数据:
example_data = data.frame(SCORE_RANGE = c('100-200','201-300','301-
400','401-500','501-600'),
NUMBER_OF_OBSERVATIONS = c(100,100,100,100,100),
NUMBER_OF_NON_EVENT = c(85,90,95,90,90),
NUMBER_OF_EVENT = c(15,10,5,10,10))
ineq 包中的 Gini 函数源代码:
Gini = function (x, corr = FALSE, na.rm = TRUE)
{
if (!na.rm && any(is.na(x)))
return(NA_real_)
x <- as.numeric(na.omit(x))
n <- length(x)
x <- sort(x)
G <- sum(x * 1L:n)
G <- 2 * G/sum(x) - (n + 1L)
if (corr)
G/(n - 1L)
else G/n
}
我正在为我的信用评分模型执行此操作,并且我已将数据分成相同频率的分数范围,然后按分数排序(从小到大)。
使用 ineq 包中的 Gini 函数将给出0.16。考虑到这种情况并且 ineq 包中的 Gini 函数在计算之前重新排序向量,这是正确的吗?如果不是,那么正确的基尼系数应该是多少?
Gini(example_data$NUMBER_OF_EVENT)