結塊的標準度量?
我有很多數據,我想做一些看起來很簡單的事情。在這個龐大的數據集中,我對特定元素聚集在一起的程度很感興趣。假設我的數據是這樣的有序集:{A,C,B,D,A,Z,T,C…}。假設我想知道 A 是否傾向於彼此相鄰,而不是隨機(或更均勻地)分佈在整個集合中。這就是我稱之為“叢生”的屬性。
現在,是否有一些簡單的數據“塊狀”測量?也就是說,一些統計數據會告訴我隨機分佈的 As 有多遠?如果沒有一種簡單的方法可以做到這一點,那麼困難的方法是什麼?任何指針都非常感謝!
例如,假設您有一個有序集合,其中每個位置成為字母表中任何小寫字母的概率相同。在這種情況下,我將使有序集包含元素。
# generate a possible sequence of letters s <- sample(x = letters, size = 1000, replace = TRUE)
事實證明,如果有序集合的每個位置在字母表的小寫字母上遵循均勻分佈,那麼相同字母的兩次出現之間的距離遵循具有參數的幾何分佈. 根據這些信息,讓我們計算同一字母連續出現之間的距離。
# find the distance between occurences of the same letters d <- vector(mode = 'list', length = length(unique(letters))) for(i in 1:length(unique(letters))) { d[[i]] <- diff(which(s == letters[i])) } d.flat <- unlist(x = d)
讓我們看一下同一字母出現之間的距離直方圖,並將其與與上述幾何分佈相關的概率質量函數進行比較。
hist(x = d.flat, prob = TRUE, main = 'Histogram of Distances', xlab = 'Distance', ylab = 'Probability') x <- range(d.flat) x <- x[1]:x[2] y <- dgeom(x = x - 1, prob = 1/26) points(x = x, y = y, pch = '.', col = 'red', cex = 2)
紅點代表距離的實際概率質量函數,如果有序集合的每個位置遵循字母上的均勻分佈,直方圖的條代表與有序相關的距離的經驗概率質量函數。放。
希望上面的圖像能夠證明幾何分佈是合適的。
同樣,如果有序集合的每個位置在字母上遵循均勻分佈,我們會期望相同字母出現之間的距離遵循帶有參數的幾何分佈. 那麼距離的預期分佈和差異的經驗分佈有多相似?兩個離散分佈之間的Bhattacharyya 距離是當分佈完全相同並且趨向於隨著分佈變得越來越不同。
就巴塔查亞距離而言,從上面看如何
d.flat
與預期的幾何分佈進行比較?b.dist <- 0 for(i in x) { b.dist <- b.dist + sqrt((sum(d.flat == i) / length(d.flat)) * dgeom(x = i - 1, prob = 1/26)) } b.dist <- -1 * log(x = b.dist)
預期幾何分佈與距離的經驗分佈之間的 Bhattacharyya 距離約為, 這相當接近.
編輯:
而不是簡單地說明上面觀察到的 Bhattacharyya 距離 () 相當接近,我認為這是模擬派上用場的一個很好的例子。現在的問題如下:如果有序集合的每個位置在字母上是一致的,則上面觀察到的 Bhattacharyya 距離與觀察到的典型 Bhattacharyya 距離相比如何?讓我們生成這樣的有序集合,並根據預期的幾何分佈計算它們的每個 Bhattacharyya 距離。
gen.bhat <- function(set, size) { new.seq <- sample(x = set, size = size, replace = TRUE) d <- vector(mode = 'list', length = length(unique(set))) for(i in 1:length(unique(set))) { d[[i]] <- diff(which(new.seq == set[i])) } d.flat <- unlist(x = d) x <- range(d.flat) x <- x[1]:x[2] b.dist <- 0 for(i in x) { b.dist <- b.dist + sqrt((sum(d.flat == i) / length(d.flat)) * dgeom(x = i -1, prob = 1/length(unique(set)))) } b.dist <- -1 * log(x = b.dist) return(b.dist) } dist.bhat <- replicate(n = 10000, expr = gen.bhat(set = letters, size = 1000))
現在我們可以計算觀察到上面觀察到的 Bhattacharyya 距離的概率,或者一個更極端的概率,如果有序集的生成方式使得它的每個位置都遵循字母上的均勻分佈。
p <- ifelse(b.dist <= mean(dist.bhat), sum(dist.bhat <= b.dist) / length(dist.bhat), sum(dist.bhat > b.dist) / length(dist.bhat))
在這種情況下,概率大約為.
為了完整起見,下圖是模擬的 Bhattacharyya 距離的直方圖。我認為重要的是要意識到你永遠不會觀察到 Bhattacharyya 距離因為有序集的長度是有限的。上面,任何兩次出現的字母之間的最大距離最多為.