ジャックナイフ法での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の値を引き継いでもらえると解決するのではないかと思います。
どうぞよろしくお願いいたします。
さっそく見ていただき、ありがとうございます。
あると思い込んでいたのですが、
resファイルの中身を見ると、
res$input の中にはp.initの情報が保存されていない?
ような気がします。
確認不足ですみません。
すみません。やっぱり res$input にp.init 入っていました。
だとするとなんで発散してしまうのか…。
インデックスを一つずつ抜いて計算するとそんなに変な値にならないのですが、
もう少し検討してみます。
@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が大きくなってしまいます。変更した関数をもってしても収束させられなかったので、ちょっと難しいのかなという印象はあります。
ご確認の程おねがいします