想象一下,我們從一些人口中抽取了一個隨機樣本y1, y2, ...,yn
,所以double y[]
和int n
是已知的。我們的人羣中有一些羣體,但我們並不確切知道在某個特定羣體上分配了哪些觀察結果。因此,對於每個yi
,我們引入一個分配變量zi
,告知我們已從中繪製了哪個組yi
。現在我們假設有int k
組,所以zi e {0, .., k-1} for all i
。現在爲我需要迭代我的算法的組進行推理,幾次說50,000或100,000。在每次迭代中,我們將概率地將每個觀察分配給某個組,因此我的分配數組int z[]
將會改變。在這種情況下,要計算每組中的觀察次數,最小值很容易;有效計算每個組和小組的最小值
int nj[k], yj_min[k];
/* initializing the variables at each iteration */
for(j=0; j<k; j++){
nj[j]=0;
yj_min[j]=y[n]; /* y[] are ordered so y[n] is the maximum*/
}
for(i=0; i<n; i++){
nj[z[i]] = nj[z[i]] + 1;
if(yj_min[z[i]]) < y[z[i]]){
yj_min[z[i]] = y[z[i]];
}
}
但如果我們引入對於每個觀測義,將指示從哪個yi
已採樣的子組(以及概率性地取樣)進一步分配變量二。有int m個子組,所以di e {0, .., m-1}
。然後(zi=j, di=s)
指示觀察yi
已經從組j
和子組s
得出。
我該如何計算EFFICIENTLY,因爲我必須在每次迭代中執行此操作,最小yjs_min
高於{i:zi=j, di=s}
?即最小過yi
這樣zi=j
和di=s
與j=0, ..k-1
和s=0,..,m-1
這將是巨大的像做
for(i=0; i<n; i++){
njs[z[i]][d[i]] = njs[z[i]][d[i]] + 1;
if(yjs_min[z[i]][d[i]]) < y[z[i]][d[i]]){
yjs_min[z[i]][d[i]] = y[z[i]][d[i]];
}
}
,但顯然這是不可能的!那麼請有什麼想法?
乾杯, 卡洛斯
您能否提供一些示例數據和輸出,以便我們可以更好地感受您正在嘗試做什麼?謝謝。 – erisco 2011-04-16 19:30:31
根據我的理解,''''''''''''''''''''''''''''值'n'值,所以如何使用'y [z [i]]'? – steabert 2011-04-16 22:29:29