【发布时间】:2011-05-21 07:52:08
【问题描述】:
假设我们从某个人群中抽取了一个随机样本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 引入一个进一步的分配变量 di,它将指示对 yi 进行抽样的子组(以及概率抽样)。有 int m 个子组,所以 di e {0, .., m-1}。然后(zi=j, di=s) 表示观察yi 已从组j 和子组s 中抽取。
我如何才能有效地计算,因为我必须在每次迭代中都这样做,最小的 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]];
}
}
但显然这是不可能的!!!那么请有什么想法?
干杯, 卡洛斯
【问题讨论】:
-
您能否提供一些示例数据和输出,以便我们更好地了解您正在尝试做什么?谢谢。
-
据我了解,有
n值y和k值z,那你怎么用y[z[i]]呢?
标签: c