楽しい質問です。@MartijnWeteringsによって指摘されている主要な問題は、フェーズ2でのツリーの数がツリーの総数の一部の測定値にすぎないことです。ただし、木の総数がわかっている場合は、ステージ1の木の数を指定して、ステージ1で観察されたナッツの数のモデルを作成して問題を解決できます。次に、したがって、この回答での私たちの戦略は、最初にステージ2での木の数を推定し、次にステージ1で木の与えられたナッツのモデルを構築することです。
表記と仮定
以下では、木とリスのサンプリングはすべての段階でランダムであると仮定します。うの和を表す全てのナットリスによって収集する相でみましょう。1.木の総数はリス示すフェーズ1レッツにでナット格納されたナットの未観測和を表しますフェーズ2でリスによって収集され、フェーズ2でリス格納された木の数を示します。最後に、が観測された木の部分数を示し、、n1iit1iin2jjt2jjk2jk2j≤t2j
ステージ2の木の数
@MartijnWeteringsによって注記されているように、は常に不明であるフェーズ2 でのツリーの総数と同じかそれ以下です。したがって、私たちの目標は、をできるだけ厳密に推定することになります。幸い、に関する情報があります。フェーズ2のサンプリング設計に応じて、リスがする合計ツリーの1つでリスがキャプチャされる確率があります。したがって、の確率は、パラメーターおよび持つ二項式です。ただし、二項を観察します。木の数k2jt2jt2jt2jpt2jk2jt2jpk2jt2jは、しかし、与えられた二項分布ではありません k2j。その正確な分布については不明だったので、Mathematics-StackExchangeで質問しました。確率質量関数の有用な回答を受け取ったt=t2j と k=k2j そして p与えられる
期待値を持つ
すべての。したがって、とわかっている場合、推定できます。すでに述べたように、確率はサンプリング設計に依存しますが、幸い、データからとして推定できます
よう。P(t;k,p)=(t−1k)pt(1−p)(t−k),t∈{k,...,∞}.
jE(t)=k/pk2jpt^2j=k2j/ppp^=∑jk2j∑it1i
t^2j=k2j/p^
比例仮定の下での推定
しましょう
π=1#S1∑in1it1i
リスが木に残した木の実の平均比率である。リスのナットの合計数の第1の推定値ありますj
n^2j=πt^2j.
フェーズ1でのナッツと木の関係を使用した推定
これは、単純な比例関係以外にとの間に関係があるかもしれないことを考慮に入れていないので、満足できないように見えるかもしれません。たとえば、リスが自由に食べられるナッツの数が多いほど、ツリーあたりのナッツの数が少ないという奇妙な行動をするリスを想像できます。次に、ナットの総数は比例して増加せず、代わりに平らになります。したがって、モデル化することを決定できますntnt
n1i=f(t1i,θ)+ϵi
ここで、はパラメータthetaを持つ非線形関数であり、は測定誤差項です。明らかな選択はfϵi
n1i=θ0+θ1log(t1i)+ϵi
0期待して、通常のIID。モデルは、非線形最小二乗法または最尤法で近似できます。推定量はϵi
n^2j=θ0^+θ1^log(t^2j)
もちろん、他の関数形式を使用したり、柔軟なモデリング手法を使用して、ランダムフォレスト(しゃれた意図)などの関数関係を近似したりできます。
シミュレーション
これは機能しますか?試してみよう。R
以下の考え方でデータをシミュレーションしています。リスが実を集める確率は、与えられ。その後、リスは最初のツリーに到着し、およびナットを非表示にし。ナットで隠れ続けそれがツリーに到達してナットからなくなる。フェーズ1とフェーズ2のどちらで観察するかに関係なく、そうします。ただし、フェーズ1 ではすべてのを観察しますが、フェーズ2サンプルを観察します n+1n∼Poisson(20)h1+1h1∼Poisson(λ)λ∼Γ(60/n,1)1+(h2,...,ht)tht{h1,...,ht}。すでに述べたように、フェーズ2でツリーの単純なランダムサンプルがあると仮定すると、(リスjが訪れたk番目のツリー)が確率(コードではこの切り捨てと呼ぶ)で観察されます。hkjp
現在、フェーズ1で1000匹のリスをサンプリングしています。下のプロットは、ツリーの総数と収集されたナッツの総数の関係を示しています。全体でその関係に減衰があることがます。t
今私はステージ2ででサンプリングし、3つの推定量を検討します。まず、比例の下の推定量。第二に、私は、の条件付き平均使用して推定作成各観察レベルでの推定値としてで。ベンチマークのために、再び観察された各レベルでのの条件付き平均を推定値として使用しますが、現在はフェーズ2 でのツリーの実際の数を使用しています。この推定器は、もちろん実際には利用できません。p=0.5n1t1n2t^2n1t1n2t2
フェーズ1とフェーズ2のそれぞれから1つずつの2つのサンプルと、3つの推定量のそれぞれについて、それぞれ5.61、-0.19、0.24のバイアスに到達します。さらに、次の二乗平均平方根誤差が観察されます。15.3、4.07、3.32。フェーズ2でツリー数を調整して推定した条件付き平均推定量は、フェーズ2で未知の真の木数を使用した推定量とほぼ同じパフォーマンスを示します。残りの誤差は、おそらく少し削減できる分散です。さらに、ノンパラメトリック条件付き平均モデルよりも、が与えられたより良いモデルを使用します。n1t1
これが私が作ったシミュレーション用のデータを作成する関数です。
# A squirrel collects nuts
squirrel_set = function(n, trunc= FALSE){
nuts = rpois(n, 20) + 1
nut_seq = list()
for(i in 1:n){
j = 1
nuts_left = nuts[i]
nuts_hidden = numeric()
# squirrel hides nuts at tree j
while(nuts_left>0){
if(j == 1) {lambda = rgamma(1,60/nuts_left,1) }
if(lambda < 1){ lambda = 1}
nuts_hidden[j] = rpois(1, lambda) + 1
if(nuts_left - nuts_hidden[j] <0){
nuts_hidden[j] = nuts_left
nuts_left = 0
}
else{ nuts_left = nuts_left - nuts_hidden[j] }
j = j+1
}
nut_seq[[i]] = nuts_hidden
}
# Truncated sample
# A squirrel is caught with probability .5 at a tree
# (or a random half of the trees are observed and a squirrel is always caught)
if(trunc == TRUE){
trees = sapply(nut_seq , length)
nut_seq_obs = list()
for(i in 1:length(nut_seq)){
caught = rbinom(trees[i],1,.5)
nut_seq_obs[[i]] = nut_seq[[i]][as.logical(caught)]
}
return( list(nut_seq,nut_seq_obs) )
}
else{
return(nut_seq)
}
}
そしてここで分析に使用されるコード:
set.seed(12345)
n = 1000
# Phase 1
nut_seq1 = squirrel_set(n)
# Phase 2
nut_seq2 = squirrel_set(n, trunc = TRUE)
nut_seq2_true = nut_seq2[[1]]
nut_seq2_trunc = nut_seq2[[2]]
# Trees and nuts at phases 1 and 2
t1 = sapply(nut_seq1,length, simplify = TRUE) # Trees seen at phase 1
k = sapply(nut_seq2_trunc , length) # Trees seen at phase 2
nut_seq2_trunc = nut_seq2_trunc[k>0] # Squirrels with k=0 have avtually not been observed
nut_seq2_true = nut_seq2_true[k>0]
k = k[k>0]
n1 = sapply(nut_seq1,sum, simplify = TRUE) # Trees seen at phase 1
n2 = sapply(nut_seq2_true,sum, simplify = TRUE) # Trees at phase 2 (unobserved)
t2 = sapply(nut_seq2_true,length, simplify = TRUE) # Trees at phase 2 (unobserved)
# Plot
plot( t1, n1, xlab='Trees at phase 1', ylab='Total number of nuts at phase 1')
mnuts = numeric()
for(i in 1:max(t1)){
mnuts[i] = mean(n1[t1 == i])
}
lines( 1:max(t1), mnuts, col=2)
legend("bottomright",lty=1, lwd=2, col='2', legend='Conditional mean')
# Estimators
p = sum(k) / sum(t1) # Estimate of observational probability at phase 2
t2_est = k/p # Estimate of total number of trees for each squirrel at phase 2
n2_prop_est = t2_est * mean(sapply(n1,sum, simplify = TRUE)/t1 ) # proportionality
mnuts = numeric()
for(i in 1:max(t1)){
mnuts[i] = mean(n1[t1 == i]) # Conditional mean at each level of trees at phase 1
}
n2_regest = mnuts[round(t2_est)] # Non-parametric regression estimate of n2
n2_regest_truet2 = mnuts[t2]
# Bias and Variance
mean( n2_prop_est - n2)
sqrt(mean( (n2_prop_est - n2)^2 ))
mean( n2_regest - n2 , na.rm=TRUE)
sqrt(mean( (n2_regest - n2)^2 , na.rm=TRUE))
mean( n2_regest_truet2 - n2 , na.rm=TRUE)
sqrt(mean( (n2_regest_truet2 - n2)^2 , na.rm=TRUE))