Distributions

多級分類數據分佈的方差

  • June 29, 2016

我目前正在分析具有各種特徵(例如城市)的大型數據集。我想找到一種衡量標準,它基本上可以說明數據之間的差異有多少。這比簡單地計算不同元素的數量要有用得多。

例如,考慮以下數據:

City
----
Moscow
Moscow
Paris
London
London
London
NYC
NYC
NYC
NYC

我可以看到有 4 個不同的城市,但這並不能告訴我有多少分佈。我想出的一個“公式”是對每個元素的總數據集的分數求和。在這種情況下,它將是(2/10)^2 + (1/10)^2 + (3/10)^2 + (4/10)^2。我對此沒有真正的數學證明,但只是想了一下。

在這種情況下,例如,在具有 10 個元素的集合中,如果 9 個相同,而 1 個不同,則數字將為(9/10)^2 + (1/10)^2。但是,如果是一半一半,那就是(5/10)^2 + (5/10)^2

我想對有哪些類似的公式和研究領域發表意見。通過一些快速的谷歌搜索,我真的找不到任何東西。

我認為您可能想要的是(香農的)。它是這樣計算的:

這代表了一種思考分類變量中信息量的方式。 在R中,我們可以這樣計算:

City = c("Moscow", "Moscow", "Paris", "London", "London", 
        "London", "NYC", "NYC", "NYC", "NYC")
table(City)
# City
# London Moscow NYC Paris 
# 3 2 4 1 
entropy = function(cat.vect){
 px  = table(cat.vect)/length(cat.vect)
 lpx = log(px, base=2)
 ent = -sum(px*lpx)
 return(ent)
}
entropy(City)                                             # [1] 1.846439
entropy(rep(City, 10))                                    # [1] 1.846439
entropy(c(    "Moscow",       "NYC"))                     # [1] 1
entropy(c(    "Moscow",       "NYC", "Paris", "London"))  # [1] 2
entropy(rep(  "Moscow", 100))                             # [1] 0
entropy(c(rep("Moscow",   9), "NYC"))                     # [1] 0.4689956
entropy(c(rep("Moscow",  99), "NYC"))                     # [1] 0.08079314
entropy(c(rep("Moscow",  97), "NYC", "Paris", "London"))  # [1] 0.2419407

由此,我們可以看出向量的長度無關緊要。可能選項的數量(分類變量的“級別”)使其增加。如果只有一種可能性,則值為(盡可能低)。當概率相等時,對於任何給定數量的可能性,該值最大。

從技術上講,有更多可能的選項,它需要更多信息來表示變量,同時最小化錯誤。只有一個選項,您的變量中沒有信息。即使有更多選項,但幾乎所有實際實例都是特定級別,信息也很少;畢竟,你可以猜到“莫斯科”,而且幾乎總是正確的。

your.metric = function(cat.vect){
 px   = table(cat.vect)/length(cat.vect)
 spx2 = sum(px^2)
 return(spx2)
}
your.metric(City)                                             # [1] 0.3
your.metric(rep(City, 10))                                    # [1] 0.3
your.metric(c(    "Moscow",       "NYC"))                     # [1] 0.5
your.metric(c(    "Moscow",       "NYC", "Paris", "London"))  # [1] 0.25
your.metric(rep(  "Moscow", 100))                             # [1] 1
your.metric(c(rep("Moscow",   9), "NYC"))                     # [1] 0.82
your.metric(c(rep("Moscow",  99), "NYC"))                     # [1] 0.9802
your.metric(c(rep("Moscow",  97), "NYC", "Paris", "London"))  # [1] 0.9412

您建議的指標是平方概率的總和。在某些方面,它的行為類似(例如,注意它對變量的長度是不變的),但請注意它隨著級別數的增加或變量變得更加不平衡而減少。它與熵成反比,但單位——增量的大小——不同。您的指標將受和,而熵的範圍從到無窮遠。這是他們的關係圖:

在此處輸入圖像描述

引用自:https://stats.stackexchange.com/questions/221332

comments powered by Disqus