2010-02-17 38 views
5

假設我有一個二元離散分佈,即對於i = 1,...,n和j = 1的概率值表P(X = i,Y = j)。 ..m。如何從這樣的分佈生成一個隨機樣本(X_k,Y_k),k = 1,... N?也許有一個現成的R功能,如:給定二元離散分佈的隨機樣本

sample(100,prob=biprob) 

其中biprob是2維矩陣?

一個直觀的方法是採樣如下。假設我們有一個data.frame

dt=data.frame(X=x,Y=y,P=pij) 

其中X和Y來自

expand.grid(x=1:n,y=1:m) 

和伊斯蘭聖戰是P(X = I,Y = j)的。

然後我們得到我們的樣本大小爲N,通過以下方式(XS,YS):

set.seed(1000) 
Xs <- sample(dt$X,size=N,prob=dt$P) 
set.seed(1000) 
Ys <- sample(dt$Y,size=N,prob=dt$P) 

我用set.seed()來模擬 「bivariateness」。直覺上我應該得到類似於我需要的東西。我不確定這是否正確。因此,這個問題:)

另一種方法是使用吉布斯抽樣,邊際分佈很容易計算。

我嘗試了谷歌搜索,但沒有真正相關出現。

回答

7

你快到了。假設你有數據幀dt與x,y和pij值,只需對行進行採樣!

dt <- expand.grid(X=1:3, Y=1:2) 
dt$p <- runif(6) 
dt$p <- dt$p/sum(dt$p) # get fake probabilities 
idx <- sample(1:nrow(dt), size=8, replace=TRUE, prob=dt$p) 
sampled.x <- dt$X[idx] 
sampled.y <- dt$Y[idx] 
+0

再仔細讀這篇文章,這是相同的解決方案,我建議。採樣行可能比組合rmultinom和哪個更清晰。關鍵是要認識到行和列只是符號。 – Tristan

+0

是符號是關鍵。二元離散分佈與單變量離散分佈相同,符號改變。我選擇Anika的答案是正確的,但僅僅因爲代碼更簡單:) Tristan給出了更好的理論解釋。 – mpiktas

+0

+1爲好例子 – andi

7

我不清楚爲什麼你應該關心它是二元的。概率總和爲1,結果是離散的,所以你只是從categorical distribution抽樣。唯一的區別是您使用行和列而不是單個位置對觀察值進行索引。這只是表示法。

在R中,您可以通過重新定型數據和從分類分佈中抽樣來輕鬆地從分銷中抽樣。可以使用rmultinom並使用which來選擇索引,或者如Aniko所示,使用sample對重新整形數據的行進行採樣,從而可以從分類中進行採樣。一些簿記可以照顧你的確切情況。

這裏有一個解決方案:

library(reshape) 

# Reshape data to long format. 
data <- matrix(data = c(.25,.5,.1,.4), nrow=2, ncol=2) 
pmatrix <- melt(data) 

# Sample categorical n times. 
rcat <- function(n, pmatrix) { 
    rows <- which(rmultinom(n,1,pmatrix$value)==1, arr.ind=TRUE)[,'row'] 
    indices <- pmatrix[rows, c('X1','X2')] 
    colnames(indices) <- c('i','j') 
    rownames(indices) <- seq(1,nrow(indices)) 
    return(indices) 
} 

rcat(3,pmatrix) 

這將返回3個隨機從您的矩陣繪製,報告的行和列的ij

i j 
1 1 1 
2 2 2 
3 2 2