【第2215回】 名谷から六甲(2026年11月4日)
- 今日はまず名谷に出勤してから、会議2つのため六甲に移動し、会議が終わったらフロンティア館のオフィスで暫く仕事をして直帰するつもり。
- THE TIME,で小学生に投資を教えているニュースがあったが、R-4.6.2のコード名"Diversified Portfolio"の出典である映画版Peanutsでは、"Diversified Portfolio"を含めてルーシーのチャーリーへのセリフが小学生らしからぬという違和感が面白かったのに、その仕掛けが通用しない世界になりつつあるのか?
- 同じくTHE TIME,でヒスタミンをELISAなどで使う96穴プレートで測っていたが、以前、公衆衛生実習でキッコーマンバイオケミファのキット(チェックスワブ)で測った班があったなあ。ちなみにヒスタミン食中毒は、食中毒統計では化学物質による食中毒に分類されていて直感に反するので要注意(主に魚の遊離ヒスチジンが細菌によって分解された産物なので、直感的には毒素型細菌性食中毒に分類されそうなものなのに)。
- 名谷で書類を1つプリントしてサインしてからスキャンしてメール添付で送ってから六甲へ移動。専攻会議に出てから食堂で昼飯を食べた。次はGSICSの教授会。
🦋 (list)
【第2214回】 院生相談とか(2026年11月2-3日)
- 月曜は1限に国際保健講義なので、藤田先生のアフリカの母子保健の話を傍聴した。その後、10:30から13:10頃まで院生の相談に応じていた。
- 駒場時代からの友人であるA君からRで区間打ち切りのある生存時間データをコックス回帰する方法について相談を受けたので、少し調べてみた。彼は区間打ち切りデータ(interval censored data)を解析する(icenRegパッケージ)[R](ねこすたっと)を参照し、icenRegパッケージを使おうとしてエラーに見舞われたとのこと。とりあえず手元で動くかどうかを試してみたところ(ただしtidyverseは嫌いなので、tidyverseを使わない書き方[d <- IR_diabetes; d$left <- ifelse(d$left < quantile(d$left, 0.1), 0, d$left); d$right <- ifelse(d$right > quantile(d$right, 0.9), Inf, d$right);]でデータフレームdを作成したが)、core i9マシンだというのにかなり時間は掛かったものの、無事に動いたことから、たぶんパッケージインストール時に依存パッケージを自動的にインストールするdep=TRUEオプションを付けなかったのではないかと思われたので、そのようにアドバイスした。
- 区間打ち切りデータへのコックス回帰は、Rに標準実装されているsurvivalパッケージのcoxph()ではできないのだが(注:カプラン=マイヤ法で生存時間の中央値を推定するsurvfit()や、パラメトリックモデルを当てはめるsurvreg()は区間打ち切りデータも使える)、cranを探ると、何もicenRegに限らず、他にもいくつかパッケージがある。ICsurvパッケージやICcalibパッケージ(論文も出ている)、intccrパッケージが見つかった。それぞれ癖があって既存データに簡単に使うことは難しかったが、もしパッケージ依存以外の理由でicenRegパッケージが動作しないなら、これらを試してみるのも良いかもしれない。あと、SmoothHazardパッケージも使えるかと思ったが、これは加速モデルのようだった。また、元のコックス回帰と違いがあるのかもしれないが、区間打ち切りデータのためのCox-Aalenモデルも、既にcranからは除去されてしまっているが、coxintervalパッケージにcoxaalen()という関数として実装されていた。
- 昔タシンボコ研究で出生分析をしたとき(人口学研究に2000年に研究ノートとして載った)、出生間隔のデータに区間打ち切りが入っていて、当時は東大にいたのでSASで分析した(第1子と第2子の出産間隔の分析だったので、産後無月経期間を考慮したモデルについてはCでコードを書いた)ことがあったので、あれをRでやり直してみるかな。というわけで、BI_TF.Rを書いてみた。
- ちなみに、RのSurv(start, end, (event, )type="right/left/counting/interval/interval2")で区間打ち切りを示すためにはイベントフラグ(event)を3にするが(イベントフラグが3でないレコードについてはendは無視される)、区間の与え方にはtype="interval"とtype="interval2"の2種類がある。前者が(start, end]であって、event=を引数として与えねばならないのに対して、後者では、左側打ち切り(event=2)が(-Inf, end)、右側打ち切り(event=0)が(start, Inf)、正確なイベント発生時(event=1)は(start, end)(注:この時はstart=endのはずだから、[start, end]と書くべきかもしれないが、helpには(t, t)と書かれている)、区間打ち切り(event=3)が(start, end)を示し、type="interval2"の方が役に立つことが多いとわかってきたとhelpに書かれている。なお、無限を示すにはInfでもNAでも良いとのこと。重要なポイントは、type="interval2"の場合、startとendの値から自動的にeventは判定されるので、引数としてeventを与えてはいけない(エラーになる)ということである。
- グローバルヘルス合同大会の宿と交通は確保済みだったが申し込みがまだだった。ランチョンセミナーの申込みが明日締め切りだというメールが届いたので、慌てて参加登録してランチョンセミナーも申し込んだ。誤算だったのは、懇親会が既に定員に達していて申し込めなかったこと。まあ懇親会に出なくても別にいいか。
- 食材が尽きたのでライフに買い物に行き、火曜の昼飯はホタテとアサリの漁師めしで済ませた。
- A君から再びメールがあり、今度はflexsurvパッケージのflexsurvspline()関数を試しているそうだ。Rはできることは多いのだが、パッケージの種類が多すぎ、それぞれ癖があるのが初心者に優しくないところだと思う。できるだけ追加パッケージを使わなくてもできる解析にしておく方が安全なのだが、やりたいことが複雑だとそうもいかないのが辛いところ。
- メールの返事に書いた参考情報をここにも採録しておこう。
- Rの関数のヘルプは、例えばicenRegパッケージに入っているic_sp()関数のヘルプを見たいなら、library(icenReg); ?ic_spで良い。もっと見やすく表示されるサイトがいくつかあって、例えば、ic_sp()を見るには、r-universeや、r-packages.ioの該当ページ(検索もできる)が見やすい。r-universeでic_spを検索したときに見つかったicsp2パッケージのic_sp2()関数は、名前からしてic_sp()の改良版のように思えるし、区間打ち切りデータに対してコックス回帰をするのに良いかもしれない。
- また、統計学的に高度なことをやっているパッケージの多くは数式の丁寧な説明が論文になっているので、それを読んでおく方が良く、icenRegも論文になっている。
- 先人のQ&AがStack ExchangeやStack Overflow(リンク先はともにic_spを検索した結果)に蓄積されているので、それが参考になることも多い。どうしても困った時はr-helpというメーリングリストがあるので、そこで再現可能なコード例を付けて尋ねると、大抵の場合、誰か答えてくれる人がいるのだが、helpを見ればわかるようなことを尋ねると叱られるので要注意(自分が書いた2冊目のR本の1.1.1 フリーソフト利用上の心得に書いた)。
🦋 (list)
【第2213回】 R-4.6.2が出ていた(2026年11月1日)
🦋 (list)
鐵人三國誌:テーマ別リスト | 鐵人三國誌:日付順リスト
▼前【2212】へ(名谷で会議とか学部生の相談とか(2026年10月30-31日))
🦋 = Cite and link each article to post bluesky, if you have logged in bluesky.
Written by Minato Nakazawa, Ph.D. | Notice to cite or link here | [TOP PAGE]