calcul du coefficient de Gini en Python/numpy

je suis calcul Coefficient de Gini (similaire à: Python - coefficient de Gini de calcul à l'aide de Numpy) mais j'ai une drôle de résultat. pour une distribution uniforme échantillonnés à partir de np.random.rand(), le coefficient de Gini est de 0,3, mais j'aurais attendu qu'elle soit proche de 0 (égalité parfaite). ce qui ne va pas ici?

def G(v):
    bins = np.linspace(0., 100., 11)
    total = float(np.sum(v))
    yvals = []
    for b in bins:
        bin_vals = v[v <= np.percentile(v, b)]
        bin_fraction = (np.sum(bin_vals) / total) * 100.0
        yvals.append(bin_fraction)
    # perfect equality area
    pe_area = np.trapz(bins, x=bins)
    # lorenz area
    lorenz_area = np.trapz(yvals, x=bins)
    gini_val = (pe_area - lorenz_area) / float(pe_area)
    return bins, yvals, gini_val

v = np.random.rand(500)
bins, result, gini_val = G(v)
plt.figure()
plt.subplot(2, 1, 1)
plt.plot(bins, result, label="observed")
plt.plot(bins, bins, '--', label="perfect eq.")
plt.xlabel("fraction of population")
plt.ylabel("fraction of wealth")
plt.title("GINI: %.4f" %(gini_val))
plt.legend()
plt.subplot(2, 1, 2)
plt.hist(v, bins=20)

pour l'ensemble donné de nombres, le code ci-dessus calcule la fraction du total du secteur de la distribution des valeurs dans chaque centile de la corbeille.

le résultat:

calcul du coefficient de Gini en Python/numpy

des distributions uniformes devraient être à proximité d'une "égalité parfaite" de sorte que la courbe de lorenz de flexion est éteint.

Quelle est la relation entre Gini(v) et G(v)?

OriginalL'auteur mvd | 2016-09-15