找到具有相同(近似)基尼系数的 3 个子样本



假设我有一个N个人的样本和一个随机变量X,它们代表他们的外币年收入。X的示例如下:

15000
11000
9000
4000
4000
3900
3800
3600
3400
1000
900
800
700
700
400
300
300
300
200
100

现在我应该在 3 个"有序"子组中"采样"X20个分量(具有相同数量的分量是不必要的(,以便它们具有(大致(相同的基尼系数。

提醒基尼系数:只需计算每笔收入占总收入的百分比(前p1=1500/(1500+1100+...)p2=1100/(1500+1100+...),...,p20=100/(1500+1100+...)(,然后计算累积%值(c1=0+p1c2=p1+p2,...,c20=p19+p20=1(,然后计算累积(A=(c1+...+c20-0.5)/(20)-0.5(的面积,从而计算基尼G=2*A

这可以通过蛮力轻松完成:将样本一分为三,计算三个样本的基尼系数,并尝试从/移动到中间样本的上部和下部成分,以确定基尼系数的差异是改善还是恶化。但是,手动完成非常耗时(例如在 Excel 上(,尤其是当我有一个非常大的数据集时。

我怀疑有一个更优雅的解决方案。我对PythonR都持开放态度.

其他详细信息输出将如下所示:用于X

1         2         3 
1500      3900       400
1100      3800       300
9000      3600       300
4000      3400       300
1000       200
900       100
800
700
700

对于G,三个子群的实际基尼系数

1         2         3 
0.4      0.41      0.39 

好的,这是R中的一种方法,至少可以自动执行暴力破解。 它尝试 1,000 种不同的总体随机排列,并在基尼系数具有最低标准差时选择一种。 它与您的玩具数据集配合良好且几乎可以立即使用。

library(ineq)
x <-c(1500, 1100, 9000, 4000, 4000, 3900, 3800, 3600, 3400,
1000, 900, 800, 700, 700, 400, 300, 300, 300, 200, 100)
Gini(x)
# 0.534
n <- length(x)

best_sd <- 1
for(i in 1:1000){
grouping <- sample(1:3, n, replace = TRUE)
ginis <- tapply(x, grouping, Gini)
s <- sd(ginis)
if(s < best_sd){
best_sd <- s
best_grouping <- grouping
best_i <- i}
}
best_sd
# 0.000891497
tapply(x, best_grouping, Gini)
#         1         2         3 
# 0.5052780 0.5042017 0.5035088 

它不能保证是最好的,但显然相当接近。 一个更优雅的解决方案会找到在接近时挑选和选择交换哪些点的方法,但这可能会减慢计算速度,并且肯定会花费更多的开发人员时间!

使用包含 100,000 个观测值的更大数据集,在我的笔记本电脑上仍然只需要 12 秒,因此它可以正常扩展。

回答自己的问题不是很礼貌,但我认为值得分享。这是我在R从上面的彼得·埃利斯(Peter Ellis(的回答中汲取灵感所写的。欢迎任何评论/改进意见:

library(ineq)
x <-c(15000, 11000, 9000, 4000, 4000, 3900, 3800, 3600, 3400,
1000, 900, 800, 700, 700, 400, 300, 300, 300, 200, 100)
n <- length(x)
best_sd <- 1
for(d in 2:n-2) for(u in 3:n-2){
g <- c(Gini(x[1:d]), Gini(x[d+1:u]), Gini(x[u+1:n]))
s <- sd(g) 
if(s < best_sd){
best_sd <- s
best_grouping <- c(d,u)
best_g <- g
}
}
best_sd
#[1] 0.005250825
best_grouping
#[1]  9 11
best_g
#[1] 0.3046409 0.3144654 0.3127660

相关内容

  • 没有找到相关文章

最新更新