1

国勢調査データからいくつかのサンプリング シミュレーションを実行していますが、2 段階でサンプリングしたいと考えています。

  • まず、各村の 25 世帯をサンプリングします。
  • 次に、各世帯から 1 人をサンプリングします。

私のデータは、村の識別子、世帯の識別子、およびバイナリの病気の状態 ( 0 = healthy1 = diseased) を含む長い形式です。次のコードは、モンテカルロ シミュレーションを実行して、村ごとに 25 人を 3000 回サンプリングし、サンプリングされたマラリア陽性者の数を記録します。

しかし、各村の 25 世帯から 1 人を抽出したいと思います。私はそれを理解することはできません。

ここに私のデータへのリンクがあります:

d = read.table("data.txt", sep=",", header=TRUE)
villages = split(d$malaria, d$villageid)
positives = vector("list", 3000)
for(i in 1:3000) {
    sampled = lapply(villages, sample, 25)
    positives[[i]] = lapply(sampled, sum)
}
4

2 に答える 2

1

これはどう?

replicate(3000, sum(sapply(lapply(villages, sample, 25), sample, 1)))

lapply(villages, sample, 25) -> 177 の村すべての 25 世帯を与える
sapply(., sample, 1) -> 177 の村のそれぞれから、これらの 25 人から 1 人を
抽出する sum(.) -> 標本値の合計を
複製する→同じ機能を3000回繰り返す

于 2013-03-12T22:04:21.467 に答える
0

回避策を見つけました。これは非常に複雑で、データを取得して別のデータセットを作成する必要があります。(R の機能が限られているため、これは Stata で行いました。) まず、データセットを家番号で並べ替え、それを R (d.people) に読み込みます。次に、古いデータセットを番地ごとに折りたたんで新しいデータセットを作成し、それを R (d.house) に読み込みます。サンプリングは 2 段階で行います。まず、人物データセットの各世帯から 1 人をサンプリングします。次に、住宅のデータセットと各世帯から 1 人をサンプリングした結果の出力を組み合わせた後、各村から 25 人の「世帯のサンプリングされた人々」をサンプリングできます。

d.people = read.table("people data", sep=",", header=TRUE)
d.houses = read.table("houses data", sep=",", header=TRUE)

for(i in 1:3000){
    houses = split(d.people$malaria, d.people$house)
    firststage = sapply(houses, sample, 1)
    secondstage = cbind(d.houses, firststage)
    villages = split(secondstage$firststage, secondstage$village)
    sampled = lapply(villages, sample, 25)
    positives[[i]] = lapply(sampled, sum)
    }
于 2013-03-12T22:41:23.170 に答える