ichimomo/frasyr

ジャックナイフ法でのF初期値

Closed this issue · 4 comments

do_jacknife_vpa()で計算したときに、ターミナルFが発散することがあります。
ウルメイワシ対馬暖流系群では今年はvpaのp.initを0.7以下にすると最終年のFが発散してしまうため、気づきました。

do_jacknife_vpa()の中では、vpa()でのデフォルト値p.init=0.2で計算しているためではないかと思います。

do_jacknife_vpa() で、inputデータからp.initの値を引き継いでもらえると解決するのではないかと思います。

どうぞよろしくお願いいたします。

KoHMB commented

@YodaMari
対処法まで御指摘頂き、ありがとうございます。
確認してみますので、少々お待ちください

KoHMB commented

@YodaMari
久々にコードを確認したので失念していましたが、関数中ではvpa関数の引数を引き継いで解析しています。

input0 <- res$input

お話の限りだと、推定しているモデルの初期値依存性が高そうなこと、ジャックナイフでFを発散させてしまうその資源量指数は最終年のFの推定への貢献が強いこと考えられます。
それでも初期値変えながら収束まで探索する方がいいのか、そういう傾向が見えればジャックナイフ法としてOKとするのか、ちょっと考えさせてください。

さっそく見ていただき、ありがとうございます。

あると思い込んでいたのですが、
resファイルの中身を見ると、

res$input の中にはp.initの情報が保存されていない?

ような気がします。

確認不足ですみません。

すみません。やっぱり res$input にp.init 入っていました。

だとするとなんで発散してしまうのか…。
インデックスを一つずつ抜いて計算するとそんなに変な値にならないのですが、
もう少し検討してみます。

KoHMB commented

@YodaMari さん
少し手を加えたものをマージしました。いずれも付け焼刃的な対処なので、今の課題に対応できるか分からない点、ご容赦ください。お手数ですが、frasyrを再インストールしなおしてみてください。
大きく2点修正しました。

  • これまで各ジャックナイフモデルの結果のオブジェクトが出ていませんでしたので見えるようにしました
  • ターミナルFの推定値が発散した場合に、初期値を変えて再推定するコードを追加しました

1つ目については、

jk <- do_jackknife_vpa()
jk$res_vpa$`Removed index01`$input$p.init

のようにしてもらえると、フルモデルで与えた初期値と同じ値が入っていることが確認できるかと思います。

2つ目はターミナルFが10より大きくなっていた場合に、①フルモデルのターミナルFを初期値、②与えた初期値の1.5倍の値を初期値、③与えた初期値の0.5倍の値を初期値として、再解析するように作りました。
frasyrのダミーデータも、4番目の指数を除くとターミナルFが大きくなってしまいます。変更した関数をもってしても収束させられなかったので、ちょっと難しいのかなという印象はあります。

ご確認の程おねがいします