モデリングでの出力変数の部分測定の使用


7

私の質問は次のとおりです。トレーニングセットで部分的に測定された出力データをどのように使用できますか?これは曖昧なので、風変わりな話で具体化します。

リスにはナッツがありますが、いくつですか?

セットアップ

森にはリスのセットと木のセットがあります。リス はナットがあります。リスは、1本の木または森の中のさまざまな木にナッツを保管します。特定のリスがリスの重量と頬の容量などの入力機能から収集したナッツの数を予測したいと思います。STsiSniN

研究フェーズ1:

リスのサブセットを監視しました。彼らの測定値(体重と頬の容量)を取り、数えました

  1. 彼らが集めたナッツの数と
  2. 彼らがそれらを保管した何本の木

(例:リス#55は1つのツリーに5つのナッツ、別のツリーに10つのナッツ、別のツリーに500つのナッツ[3つのツリーは不明です]を保存しました)

研究フェーズ2:

木のサブセットを監視しました。リスが私たちの木の1つに到着したら、IDを付け(後で研究サブセットの別の木に行ったかどうかを知るため)、それらを測定し(体重と頬の容量)、落とした木の実の数を数えました。これにより、リスのサブセットの部分的なナットコレクションが測定されました。

(たとえば、ツリー#23では、リス#99から10個、リス#88から50個、ツリー#24では50個のナッツを収集しました...)

(重要な注意:リスIDはフェーズ間で保持されません。)

質問

フェーズ2のリスのナットの総数をモデル化するとします。モデリングの結果を増やすために、それらの部分ナット測定をどのように使用できますか?

さらに、部分的に測定された出力をトレーニングセットにどのように導入できますか?


フェーズ2で彼らが捕獲した木の数を知っていますか?
tomka 2018年

2
そして、フェーズ1では、彼らが収集したナッツの総数だけを知っていますか?それとも、ツリーごとにこれを知っていますか?(例リス1は、ツリー1、ツリー2から3つのナッツ、及び木3~10 nutesから5個のナットを収集した。squrrel 2(異なる)ツリー1など。から7個のナットを収集した
tomka

フェーズ2のツリーのサブセットは全体のどの部分ですか(この部分が大きい場合、ナッツのサブセットをその部分で割った値に基づいてリスが収集したナッツの総数を合理的に見積もることができます)
Sextus Empiricus

具体的に説明してください。フェーズ1または2、あるいはその両方で各ツリーに格納されているナッツの数を知っていますか。
tomka 2018年

1
興味深い質問です。偶然にも、私がこのリンクをクリックした瞬間、リスは私の庭に散らばったナッツを食べに来ました!フェーズ1が進行中...
user20160 2018年

回答:


3

楽しい質問です。@MartijnWeteringsによって指摘されている主要な問題は、フェーズ2でのツリーの数がツリーの総数の一部の測定値にすぎないことです。ただし、木の総数がわかっている場合は、ステージ1の木の数を指定して、ステージ1で観察されたナッツの数のモデルを作成して問題を解決できます。次に、したがって、この回答での私たちの戦略は、最初にステージ2での木の数を推定し、次にステージ1で木の与えられたナッツのモデルを構築することです。

表記と仮定

以下では、木とリスのサンプリングはすべての段階でランダムであると仮定します。うの和を表す全てのナットリスによって収集する相でみましょう。1.木の総数はリス示すフェーズ1レッツにでナット格納されたナットの未観測和を表しますフェーズ2でリスによって収集され、フェーズ2でリス格納された木の数を示します。最後に、が観測された木の部分数を示し、、n1iit1iin2jjt2jjk2jk2jt2j

ステージ2の木の数

@MartijnWeteringsによって注記されているように、は常に不明であるフェーズ2 でのツリーの総数と同じかそれ以下です。したがって、私たちの目標は、をできるだけ厳密に推定することになります。幸い、に関する情報があります。フェーズ2のサンプリング設計に応じて、リスがする合計ツリーの1つでリスがキャプチャされる確率があります。したがって、の確率は、パラメーターおよび持つ二項式です。ただし、二項を観察します。木の数k2jt2jt2jt2jpt2jk2jt2jpk2jt2jは、しかし、与えられた二項分布ではありません k2j。その正確な分布については不明だったので、Mathematics-StackExchangeで質問しました。確率質量関数の有用な回答を受け取ったt=t2jk=k2j そして p与えられる 期待値を持つ すべての。したがって、とわかっている場合、推定できます。すでに述べたように、確率はサンプリング設計に依存しますが、幸い、データからとして推定できます よう。

P(t;k,p)=(t1k)pt(1p)(tk),t{k,...,}.
jE(t)=k/pk2jpt^2j=k2j/pp
p^=jk2jit1i
t^2j=k2j/p^

比例仮定の下での推定

しましょう

π=1#S1in1it1i

リスが木に残した木の実の平均比率である。リスのナットの合計数の第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+1nPoisson(20)h1+1h1Poisson(λ)λΓ(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))

2
これは非常に上手に書かれた回答であり、フェーズ1を使用してと間の関係を取得するのがな方法です。しかし、問題はそれほど簡単には解けません。フェーズ2 のは別のものです。これは、サブセットからの測定に基づいています。運が良ければ、ナッツの総数と木の1本あたりのナッツの数の間には明確な関係があります。この「ツリーあたりのナッツの数」は、フェーズ2で合理的に推定できるためn1it1it2i
Sextus Empiricus

あなたの思いやりと駄洒落は高く評価されています、そして私は木の実の数と木の数の関係を見つけるという考えも好きです。@MartijnWeteringsは正しいです。Squirrel jは、少なくともt2jの木にナッツを保管しました。廃止予定のドラフトでこれに対処しているようですが、「フェーズ1は、同じ数以上の木の実を保管しているリスでのみ確認できました」と表示されます。このアイデアは本当にクールだと思います!ナット全体の測定を使用して、部分的なナットの測定をシミュレーションしているようです。これは私の考えが進んでいたところです。
colorlace 2018年

@timwizありがとう。あなたとMartijnWeteringsは正しいですが、これは依然として回帰/ tnモデリングアプローチの問題です。リスが木で見た場合、リスが木を訪問した確率を見積もることができると信じているので、私はそれを修正する方法を考えています。廃止予定のアイデアについては、確かにそうです。私はまず回帰アプローチを修正しようと試み、次にこの考えについて考え続けます。T2t2j
tomka 2018年

1
@timwizフェーズ2で不明な数のツリーを考慮に入れるように回答を完全に修正しました。そのパフォーマンスを示すシミュレーションを追加しました。ここに示されていない作業で、この回答の以前のバージョンで取り上げたブートストラップ推定器も確認しました。ただし、この推定量は、私が報告する推定量よりもパフォーマンスが悪かったため、ここでは説明しません(回答はすでにかなり長く、関連する結果を報告したいと思っていました)。
tomka 2018年

@timwiz回答または未解決の質問に欠けているものはありますか?
tomka 2018年

2

フェーズ1では、リスの動作をナッツの総数に関連付けるモデルを作成できます。

フェーズ2では、フェーズ1とまったく同じ完全な情報を観察しません。たとえば、特定のリスが使用しているツリーの総数はわかりません。しかし、スクワエルの動作の一部、つまり、木の1本あたりのナッツの数の分布からのサンプルを観察します。これから、分布を推定でき、分布を記述するパラメーターをモデルに入力できます。

  • したがって、フェーズ1では、リスが保管するナッツの総数と、リスのツリーごとのナッツの分布を関連付けるモデルを作成します。これをどのように正確にモデル化するかは難しいです。

    いくつかのメカニズムモデルを作成できると思う場合は、探索分析とリスの動作に関する事前の洞察から始めて、有用なモデルについてのアイデアを得ることができます。私はこの答えでこれを行うためのデータと生物学的知識が不足しています(1つの明白な方向は、ツリーごとのナッツの増加が全体でより多くのナッツにも関連するかどうかを確認することであり、おそらくこれはリスの重量といくつかのより複雑な関係を持つでしょう頬や、木の1枚あたりのナッツのばらつきが大きいなどのその他の要因は、リスが使用している木の総数の指標も示すのに役立つ場合があります)

  • フェーズ2では、フェーズ1で作成されたモデルで予測を行うために必要なパラメーターの推定を行います。木の1本あたりのナッツの数の分布を表すパラメーターは、で測定されたサンプルから推定できます。木のサブセット。

    簡単な方法は、ツリーIDを無視し、リスごとのデータを使用して分布パラメーターを推定し、フェーズ1からモデルにそれらを配置することです。

    より正確なモデルでは、ツリーIDをランダムな要素として扱い、リスに特化した行動をより正確に推定できます。木をランダムな因子として扱うには、木がどのようにランダムな因子になることができるかを知る必要があります。これに基づいて推測を行うことができますが、データからこれを学習することもできます(最初にいくつかの探索的分析を行い、リスとツリーに格納されている木の実とナットの数の相関関係を確認します。この効果が独立しているかどうか、または一部の木が特定のタイプのリスを引き付ける前に、定量的なものを思いつく。フェーズ1ではツリーIDに関連する情報を観察しませんが、フェーズ2では観察し、そのデータを使用できます。

つまり、一言で言えば。単純なアプローチよりも定量的な何かを実際に実行する前に、いくつかの探索的分析が必要だと思います(単純はフェーズ2でツリーIDを無視し、フェーズ1で係数が学習されるモデルの入力として単純な分布パラメーターのみを使用します) 。


さらに、部分的に測定された出力をトレーニングセットにどのように導入できますか?

特定のリスのツリーあたりのナッツの分布を説明するパラメーターを使用して1でモデルを作成する場合、フェーズ2でそれらの数を合理的に推定することが可能でなければならず、エラーがモデルに影響しないことを考慮する必要があります過度に。たとえば、平均と分散(またはその他の単純な統計)はフェーズ2のサンプルから合理的に推定できます(サンプルが小さすぎないと想定)。ただし、高次モーメントはそうではない場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.