#cits
値とセット ID を含む2 列のテーブル (ここでは と呼ばれる) に含まれる、いくつかのセットのジニ係数を計算したいと考えています。ここ (StackExchange クエリ)とここ (StackOverflow の質問といくつかの適切な回答)で説明されている、さまざまなジニ係数の計算を試しています。GROUP BY
両方の例では、1 つのテーブルに対して 1 つの係数のみを計算しますが、節を使用して計算したいと考えています。
テーブルには との#cits
2 つの列がc
ありcid
、それぞれ値とセット ID です。
これが私の現在の試みです(不完全):
select count(c) as numC,
sum(c) as totalC,
(select row_number() over(order by c asc, cid) id, c from #cits) as a
from #cits group by cid
もちろん、numC と totalC の選択はうまく機能しますが、次の行が頭を悩ませています。row_number()
構文が間違っていることはわかりますが、 per c per cidを割り当てる方法がわかりません。
編集:提案に基づいて、次のpartition
ように使用しました:
select cid,sumC = sum(a.id * a.c)
into #srep
from (
select cid,row_number() over (partition by cid order by c asc) id,
c
from #cits
) as a
group by a.cluster_id1
select count(c) as numC,
sum(c) as totalC, b.sumC
into #gtmp
from #cits a
join #srep b
on a.cid = b.cid
group by a.cid,b.sumC
select
gini = 2 * sumC / (totalC * numC) - (numC - 1) / numC
from #gtmp
これはほとんど機能します。結果は得られますが、ジニ係数は 0 から 1 の間である必要があるため、予想外の >1 です。何とも重大な問題。