霞と側杖を食らう

ほしいものです。なにかいただけるとしあわせです。[https://www.amazon.jp/hz/wishlist/ls/2EIEFTV4IKSIJ?ref_=wl_share]

説明記事

■ 自己の説明

●  学んできたこと

・疫学、統計学、経済学。MPPとMPH。

・プログラミング言語:RとSAS。ほんのすこしpython。

● 資格

・統計検定1級、日本酒検定2級、さんま焼き師、花火鑑賞士

■ 記事の説明

● タグの説明 (この説明記事には全てのタグを付けてある)

・学習記録:何かしら学んだことで記録すべきと思ったものを記録している。

・千文字語:千文字前後で何かしら書き留めたくなったことを記録している。

・衝動遊戯:衝動的に遊び感覚で作りたくなったものを記録している。

・八百万覚書:学習記録とまでは行かないが忘れたくないTipsを記録している。

・後日譚々:何かしらの後日にそのことについての追憶を記録している。

・R:プログラミング言語のRを使ったものに付けている。

 

● 代表的記事をいくつか(気に入っているやつ)

好きなモデルは?と問われたならば - 霞と側杖を食らう

リリーフ運用指標MRTRの作成の学習記録その1 - 霞と側杖を食らう

Immortal time biasに対する統計解析手法のシミュレーションの学習記録その1 - 霞と側杖を食らう

LaLonde(1986)とその周辺の学習記録 - 霞と側杖を食らう

Jリーグコンペの後日譚々 - 霞と側杖を食らう

 

■ 過去の制作物

● 公開中のスライド

・トピックモデルで1週間の献立をレコメンドする

speakerdeck.com

・バドミントン 戦略シミュレーション分析

speakerdeck.com

・野球のリリーフ指標MRTRの開発をやってみた

speakerdeck.com

Bradley-Terryモデルによる戦闘力推定 - Speaker Deck

医学論文を探そう ~{easyPubMed}パッケージの紹介~ / Introduction to easyPubMed - Speaker Deck

確率分布の紹介 - Speaker Deck

フェアな比較を崩すもの ~交絡と効果修飾~ / Confounding EffectModification - Speaker Deck

・第1回 クイズ大会 問題

speakerdeck.com

第1回 クイズ大会 解答 - Speaker Deck

スクリーニング評価の注意点 - Speaker Deck

 

■ おしまい

科学ジャーナルの歴史の学習と将来の妄想

論文掲載のために100万円が必要だという話がTwitterで話題になっていた。学術雑誌の論文掲載費用の高額化は今に始まった問題ではなく、定期的に盛り上がっているように思う。掲載費用の問題に加えて、購読費用の問題も、無償の査読の問題もある。学術雑誌が価値の中心となっているアカデミックな世界の文化は、どこか歪なバランスの上に辛うじて成り立っているように見える。あるべき姿ではないと考えられているが、一向に快方に進んでいるようには思えない。理想の姿と実現方法がまだ誰も分かっていないのかもしれない。私は、研究者として生きているわけではないが、アカデミックな世界の周辺で暮らしている。学術雑誌は今後、どうなっていくのか、どうあるべきなのかを考える上で、学術出版の文化がどのような道を辿ってきたのかを知っておいた方が良いと考え、以下の3冊を読んでみた。

 

・有田正規『学術出版の来た道』

https://amzn.to/4vWMvEG

学会やアカデミーによる出版から始まり、戦後の60年代から、エルゼビアやシュプリンガーのような商業出版が躍進し、学術誌ランキングの登場、論文の掲載料や購読料の高騰の背景など、これまでの学術出版の歴史が分かりやすく書かれていて良かった。主に以下の2点で学びがあった。一つは、戦後の国家予算の科学への投入やドイツの出版制限という時代背景の中、商魂たくましいマクスウェルが利益追求型のビジネスモデルを確立したという点であり、もう一つは、論文が氾濫し過剰な競争が生じている現代の科学において、インパクトファクターを考案したガーフィールドと、オープンアクセスを商業化に導いたトラッチの二人が、少なからぬ役割を果たしていたという点である。全体を通して、節々に著者の感情が噴出しているのも面白かった。


・アレックス・シザール (著), 柴田和宏 (翻訳)『科学ジャーナルの成立』

https://amzn.to/4ealAi3

科学ジャーナルがいかにして今の形や認識になったかを扱っている。つまり、学術誌中心主義や査読制度が、17世紀の科学革命の黎明期から続く、自然かつ普遍的なシステムの帰結であるという認識は神話であるとし、19世紀の西ヨーロッパ(主に英仏)を舞台に、学術誌がいかにして科学的権威の座を確立し、科学的なオーサーシップがいかに構築されたかを描いている。時期としては『学術出版の来た道』の前半の時代を詳細に議論している。17世紀に『ジュルナル・デ・サヴァン』や『フィロソフィカル・トランザクションズ』はあったが、現在のものとは全く異なっており、科学の中心はアカデミーや学協会だった。次第にジャーナルがこれらの団体の会合の情報を公開するようになる。ジャーナルの方へ重心が移っていく中で、オーサーシップや査読、第一発見者の特定などの仕組みが成立していく。目録の果たした役割も大きい。政治や社会、技術の影響を受けながら、変遷を経て、19世紀に、現在の認識のような科学ジャーナルが成立していく。

印象に残った話をいくつかメモしておく。ジャン=バティスト・ビオは、論文が短い要約として断片化して発表されるようになると、証拠や論理が十分に伝わらなくなり、読者が結果的に著者の権威のみを信じて評価するようになると心配していたという話。フランソワ・アラゴは、海王星の発見などをめぐる一連の論争を経て、公的な誌面に刻まれた印刷物の日付こそが第一発見者の基準であるというルールを確立したという話。チャールズ・バベッジは、当時の王立協会を論文出版数で批判し、自ら論文を執筆する者こそが科学者であるというオーサーシップの概念を定着させ、論文を厳密に選別する必要性が生まれ、結果として査読制度の原型が導入される契機となったという話。アンリ・ポアンカレが、必要な論文へのアクセスの悪さから数学研究で苦労し、自ら索引カードを用いた文献情報サービスの構築プロジェクトに取り組んでいたという話。


・ピエール・アルベール (著), 斎藤 かぐみ (翻訳)『新聞・雑誌の歴史』

https://amzn.to/3QvY0mb

科学ジャーナルの成立』を読んでいて、学術雑誌でない雑誌はどうであったか気になって読んでみた。17世紀以降の時代区分ごとに、主に英仏米独(フランスがメイン)での定期刊行物の歴史が書かれている。変化の要因は技術(印刷技術、電信、写真)、政治(検閲、認可制、印紙税、プロパガンダ)、経済(購読料や広告)、社会(大衆、識字率、鉄道)などがあり、その変化も追っている。訳者あとがきにもあるが、淡々と説明や記載があり、読み物というよりは資料的な性格(固有名詞の羅列多い)が強い。通信の技術や会社に関心が湧いたので『ヴィクトリア朝時代のインターネット』を読みたい。検閲ついてにも興味が出たので、今後、何か読みたい。

 

全体を通じて、現在の学術雑誌の在り様は、社会、政治、戦争、経済、技術といった複合的な要因の影響を受けながら、長い時間をかけて、形作られたものだということがよく分かった。現在の形式は決して当たり前のものではない。あるべき姿を想定して、それを実現していく試みは有意義だと思う。ただし、現在のシステムでは、ジャーナルへの出版数を稼がないと科学者として立ち位置を得られないし、上手く得られた立ち位置はシステムを壊してしまうと手放すことにもつながりうるので、変革も難しいのかもしれない。そもそも、科学や学術雑誌の理想形がどのようなものかを思い描くことも難しい。

 

上に書いてきた話とはまた別に、AIが科学の世界を変えようとしている。AIが論文を読んで、書く。場合によってはAIが査読する。そんな世界が近づいている。今後、科学や学術雑誌の形態や認識はどう変わるのだろうか。

現在は、人間が研究を計画して、実行し、論文を書いて、ジャーナルに合わせてフォーマットを調整して提出する(受理されるまで、この修正は繰り返される)。AIを活用していけるならば、人間は研究計画を立て(計画を練るのに使った資料も全て記録し)、情報やデータを記録する。これらのインプットは保管し、公開範囲は制限できるようにする。実行は全てAIに任せる。実行ログに加えて、実行段階において生じた必要な意思決定も全て記録する。計画段階でintroductionは出来上がるので、methodとresultは全てAIに任せる(ここは独自性は要らないように思う)。disucussionは人間とAIで協働して、その時点で考えうる考察を全て記載する(保留事項や限界点も記録)。アウトプットはジャーナルの一形式に仕上げる必要はなく、読者の好きな形でAIに生成させる。読者の水準や要求に合わせてアウトプットを生成させればいい。文章でも音声でも動画でも出力できる。このような体制にできないだろうか。ジャーナル別になるというよりは、計画段階で高水準に達していればアクセプトであり、もっと統一的な科学の総体が保管されるようにならないだろうか。研究者として生きているわけではないが、そんなことを妄想している。

 

 

【追記】

以前書いた関連する記事もリンクを貼っておく。

 

・科学哲学とその周辺に関する学習記録

科学ジャーナルの成立』とも関連し、それより前の時代の重要な文献として、 『リヴァイアサンと空気ポンプ―ホッブズ、ボイル、実験的生活―』があり、それについて読んだときのメモが少し書いてるある。

moratoriamuo.hatenablog.com


・読書空間と出版印刷と鯖江の眼鏡

出版印刷や読書について関心を持っていた時期があり、それについて書いた記事がある。『読書国民の誕生 近代日本の活字メディアと読書文化』や『日本印刷文化史』を読んでいた。

moratoriamuo.hatenablog.com

 

・文字禍福は糾える縄の如し

moratoriamuo.hatenablog.com

チ。-地球の運動について-』や『DR.STONE』を読んで、文字について書いている。

 

【追記終了】

日本酒検定2級の学習記録

【学習動機】

3年前に日本酒検定3級を取得した。

moratoriamuo.hatenablog.com

試験勉強をする余裕がなかったので、3年の時を経てしまったが、少し余裕ができたので勉強して受験することにした。無事、合格できたので、その学習記録をここに記す。

また、AIで練習問題を作成したものに加えて、今回受験して記憶している問題を元に追加で作成した出題範囲の要点を合わせたものを有料記事(リンク)として販売しています。この記事の学習内容の末尾の方にもリンクがあります。ご興味がございましたら、ご覧いただければ幸いです。


【学習内容】

やったことをそれぞれ書いていく。

■ 『日本酒の基』を読む

日本酒の基

・『日本酒の基』

https://amzn.to/4evPbm4

3級受験時点で、この本は既に購入して多少読んでいたが、読んだのは3年前なので、ざっと読み返した。過去問演習をしながら、対応する箇所を確認して、知識の補強をしていった。

 

■ 過去問演習

・公式の検定問題例

https://ssi-sake.jp/nihonsyu-kentei/

2級の問題は13問程度あるので、チェックした。

 

・JQOSの日本酒検定の過去問題

https://jqos.jp/minkan/nihonshukentei/kakomon/qa2

ランダムで10個ずつ出題される形式。何度か試してチェックしたが、当然、問題の重複は出てくる。重複なしで40問くらい種類があると思う。

 

無料で確認できるものは確認したが、これで合格できるのか(受験料7100円を失うのが)不安だったので、amazonのKindle本にも課金してみた。

 

・Kindle本の『日本酒検定2級 頻出問題集』

https://amzn.to/4cmdiCA

150問あるが、重複もあり、だいたい120問くらいか。過去問を集めて作っていると思われるので、JQOSの日本酒検定の過去問題とも被りは多い。問題を解きながら、知識の再確認するのに使用した。誤字脱字が散見されるのは気になった。誤字脱字の仕方的に、AIツールか何かで文字起こししたのかもしれない。問題を解きながら、テキスト等を確認すればいいので、このKindle本を買った意味はあった。

 

・Kindle本の『日本酒検定2級 重要ポイント集』

https://amzn.to/4tTJGC6

上のKindle本と同じところから出ているもの。よく出てくるところがまとめられている。こちらも誤字脱字が散見される。こちらは体裁もあまり綺麗とは言えない。ある程度勉強した上で、最後の確認程度に使ってもいいかもしれないくらいのものだと思う。

 

・AIツールを使って練習問題を作成

日本酒の基』の重要そうな箇所を文書化して、AIツールで問題を作成して練習した。

AIで作成した問題に加えて、今回受験して記憶している問題を元に追加で作成した出題範囲の要点を合わせたものを有料記事として販売します。これまである過去問には無かった問題に関する要点も扱っています。もしよければ、学習の参考としてご購入いただけるとうれしいです。

moratoriamuo.hatenablog.com

 

【学習予定】

上に書いた感じで学習したら、2級は取得できた。得点は82%だった。次は余裕ができたら、準1級の取得を目指す。これまではCBTで受験できたが、準1級から会場受験のみなので、時期次第にはなると思う。

 

日本酒検定2級の要点集と練習問題

■ はじめに

日本酒検定2級を受験し、無事に合格できた。その学習記録については以下の記事に書いた。

moratoriamuo.hatenablog.com

 

勉強をしていて、参考になる試験情報が少なかったので、自分で練習問題を作成したりもしたが、本番の試験は自分が対策していなかった箇所からも出たりして少し焦ったので、自分が受けた試験情報を出題情報として追加的にまとめてみた。

 

本記事のコンテンツは以下の通りです。

 

■ 要点集:
2026年4月に日本酒検定の受験をした上で、その際の出題の要点を追加的にまとめました。約2000文字です。

 

要点集の一部
 
 
■ 練習問題:
AIツールで練習問題を作成した。テキストの重要ポイントを主に参考にしている。一応、100問あります。試験の傾向に完璧に合っているわけではないですが、アクセスできる問題をやり尽くした人向けです。
 

練習問題の一部

 

 

本記事は、筆者の知識・経験・調査に基づいて作成した情報提供コンテンツです。
正確性・完全性を保証するものではなく、内容に誤りが含まれる可能性があります。
本記事の利用によって生じた、いかなる損害についても、筆者は責任を負いかねます。

 

以下、有料部分となります。

この続きを読むには
購入して全文を読む

違星日記

『プロジェクト・ヘイル・メアリー』を劇場で観た。映画として非常に完成度が高く、原作の魅力を別の形で再構成した快作だった。バディムービーとしての魅力、コメディーとシリアスのメリハリ、映像にマッチしていた劇伴、登場キャラクターの名演。これらのクオリティが高かったが、個人的にとりわけ印象に残ったのは、贈り物としてパスされたシリンダーをキャッチするシーンであった。タイトルのプロジェクト名がアメフト由来なこともあり、ダイナミックなキャッチにする映像化になっていたのだと思う。

原作小説の『プロジェクト・ヘイル・メアリー』は4年前に読んだ。多くの人がこの本をオススメしてくるが、事前情報なしで読むべきと口を揃えているので、何も調べずに読むことにしたし、実際、その読み方が大正解だった。原作では、何も分からない状態から、トライ&エラーを繰り返しながら、ロジックの積み上げで状況を理解していくというプロセスを読者が追体験できる構造が見事なのだ。分からない状態の、孤独な苦しい蓄積があるからこそ、その後の物語のドライブが効いてくる。この構造は小説という表現媒体と抜群に嚙み合っていた。小説は、言葉の連なりであり、前から順番に辿って、情報を受け取っていく。受け取る速度は読み手に任されるし、分からなくなったら、前に立ち戻ることもできる。時間の制約の面でも、映画のように2時間程度で終わらせる必要もがない。小説の『プロジェクト・ヘイル・メアリー』で絶賛される本質的なエクスペリエンスは、小説という表現媒体だからこそ成立していたのだ。

『プロジェクト・ヘイル・メアリー』という作品の本質的な体験を最大化するなら、やはり、何も知らない状態で小説から入るというのが最適だろう。小説版は、物語構造と媒体特性が抜群に噛み合っており、その強度は他の形式では代替しにくい。とはいえ、小説という媒体は読者に一定の負荷を要求する。とりわけ、SFは設定や専門用語の関係で、読み進めるには集中力を要する。実際、私は7人に小説を勧めたが、5人は大絶賛だった一方で、2人は途中で挫折してしまった。読書習慣やジャンルとの距離感は人それぞれで、誰もが同じように小説を楽しめるわけではない。その点、映画は視覚と音響によって情報を同時に提示でき、受け手の負担を大きく下げてくれる。小説でつまずいた人でも、映画なら『プロジェクト・ヘイル・メアリー』の魅力に触れられる可能性は高い。そういう意味で、そうした人たちには映画版を積極的に勧めていきたいと思う。ただ、心のどこかに小さな葛藤が残るのも事実ではある。

 

昨期、『違国日記』のアニメが放映されていた。原作の漫画が好きだったので、アニメも観た。牛尾憲輔の担当する音楽や、槙生を演じる沢城みゆきの声の表現されるキラーフレーズによって、原作の言葉がより直接的に届いて、アニメならではの良さが活かされているように感じた。一方、原作の『違国日記』には独特な読後感があった。人間関係の揺らぎや価値観の衝突、自己の形成といったテーマが、コマの間や余白の使い方によって繊細に表現されている。作中の会話は、読者が楽に読み取るための描き方じゃなくて、登場人物たちの自然を切り取るような描き方がされている感覚があった。そこからのズームインでの畳みかけやリフレインの構造も独自で、普段読む漫画と一味違っていた。このあたりの表現の特徴を、漫画からアニメに翻案する際の工夫は、構成・脚本を担当した喜安浩平のインタビュー記事(アニメ『違国日記』は朝&槙生の成長にどう向き合ったのか 喜安浩平が明かす脚色術)に書かれている。今後も媒体の違いが生む印象の揺らぎに注目していきたい。

 

最後に一つ、最近読んで強く刺さった本(漫画)を紹介して締めたい。『香山哲のプロジェクト発酵記』である。

この本は、人間生活における挑戦や取り組みは、大なり小なりあれど、プロジェクトであり、その計画の仕方について、次の漫画連載の準備を例に言語化している。漫画という媒体で、漫画づくりそのものを描くという構造が面白く、創作のプロセスがそのまま作品のテーマと響き合っており、静かに効いてくる良さがあった。

多様性と、その要求の暴力性と、醜いアヒルの子の定理

「多様性のある環境にいたことはありますか?」

転職活動をしていて、このような質問を投げかけられた。質問の意図としては、価値観の異なる人と共に過ごして、相手の価値観をリスペクトしつつ、意見が衝突した際は上手く擦り合わせることができるのかを問いたいのだろうということは理解できる。しかし、この質問に対する回答を事前に想定していなかったのと、その意図に応えるドンピシャなエピソードが思い浮かばず、スムーズな受け答えができなかった。そういうわけで、面接が終わった後、多様性について少し考えることになった。

組織にとって多様性が重要という点については同意する。その重要性の理屈としてはいくつか考えられる。異なる経験、知識、価値観があると、イノベーションが生まれやすくなる。視点が単一方向のみになって集団浅慮に陥り危険な意思決定をしてしまうリスクを防ぐことができる。多様な顧客のニーズに適応させられる可能性が高まる。多様性を維持するために心理的安全性を確保することで、組織のパフォーマンスを向上させる。多様性が組織にもたらすメリットは認識しているので、多様性を重視する姿勢も理解できている。

多様性のある環境にいた経験を求めることは、ある種の暴力性があるのではないかとも感じ始めた。その根拠は、マジョリティの側に偏った非対称性にある。具体的には、以下の2つの視点が挙げられる。まず一点は、組織の多様性の要請は、マジョリティ側の自己補完という性質が強いということだ。現在、多くの組織や集団が多様性の確保を推進しているが、この推進力はマジョリティ側から発生しているように思われる。つまり、自分たちの組織の脆弱性を補うために、マジョリティがマイノリティを組織に取り込もうとしている権力勾配のように見えるのだ。とはいえ、この点については、マイノリティ側も多様性が促進されることで、恩恵を受けることができるので、もしかしたら大きな問題ではないかもしれない。

もう一つの視点は、多様性を経験として主体的に獲得し、それを自身の物語として消費する過程において、マジョリティ側が圧倒的に有利な立場にあるという点だ。マイノリティと異なり、マジョリティは、自らの意思で多様性のある環境にアクセスし、そこで摩擦に苦悩したとしても、元の安全な立場に帰ることができる。そして、その葛藤を、多様性の経験値として整理し、語りやすいエピソードと変換するプロセスもスムーズに行える。マジョリティの優位性を感じずにはいられないのだ。

さて、多様性という言葉を何度も使ってきたが、そもそも、多様性とは何なのか。異なる属性として一般的に想定されるものは、性別・ジェンダー、人種・民族、障害の有無などだろうか(もっと見えない部分の属性もあるが)。たとえば、インターナショナルスクールに通っていた人は多様性のある環境で育ったと言えるのだろうか。一般的にはそうなのかもしれないが、斜に構えた見方をしてしまえるなら、そういう学校に通える富裕層が集まっているだけではないのかと考えてしまう。ここで思い出されるのは、渡辺慧の『認識とパタン』で書かれていた、「醜いアヒルの子の定理」だ。この定理は、醜いアヒルの子と普通のアヒルの子の類似性は、普通の二匹のアヒルの子の類似性と同じになるというものだ。醜いアヒルの子と普通のアヒルの子を分類できるのは、それらを分類できるような属性・特徴に着目しているからであり、そこには主観的な価値判断が乗っかっているということを示唆している。とするならば、多様性を標榜するとき、掲げる主体の価値観から逃げることはできないだろう。

以上のようなことを諸々考えていたら、多様性を認め、尊重するという善意的な姿勢の裏に隠れて潜む暴力性が視界にちらつくようになってしまった。この構造的な非対称性を回避することは困難なので、「多様性」のある環境に身を置くか、それに似た経験を記憶から引っ張り出して、その葛藤を自分のエピソードとして編み直す必要があるだろう。そもそも、多様性だとか、DEI(diversity, equity, and inclusion)という概念や議論について、私はまだよく知らない。今後は少し漁ってみたい。ちゅ、多様性。

条件付きロジスティック回帰モデルに関する学習記録その1

【学習動機】

以前, ケースコントロール研究のケースとコントロールの比について書いた. 

moratoriamuo.hatenablog.com

そのとき, 条件付きロジスティック回帰モデル(Conditional Logistic Regression Model)について, もう少し理解が必要だと感じた. 条件付きロジスティック回帰モデルのことをまだよく分かっていないので, この機会に色々試しつつ, 学んでいく.
今回は, サンプルデータとシミュレーションデータでモデルのあてはめの動きの雰囲気を掴む.

【学習内容】

マッチド・ケースコントロール研究(疫学), パネルデータの固定効果モデル(計量経済学)のような問題設定で, アウトカムが二値の場合, 通常のロジスティック回帰では, マッチングによって生じる層(ペア)ごとのnuisance parameter(局外母数)が存在するため, 漸近性の条件が満足されず, 推定量にバイアスが生じることが知られている. このあたりがどうなっているのかを学んでいきたい.

この記事では, まず, サンプルデータのinfertデータセットで, 通常のロジスティック回帰と条件付きロジスティック回帰を比較する. その後に, シミュレーションデータを生成して, そのデータセットで比較を行う.

使用するパッケージの読み込み

library(tidyverse)
library(survival)
library(broom)

infertデータセット

infertデータセットは, 過去の流産や人工妊娠中絶が, その後の不妊に影響するかどうかを調査したマッチド・ケースコントロール研究のデータ.

1人のケース(不妊患者)に対して, 年齢(age), 教育歴(education), 出産回数(parity)をマッチングさせたコントロールを原則2人選出(※74番の層のみコントロールは1人).

変数の定義

  • education: 教育歴 (0 = 0-5年, 1 = 6-11年, 2 = 12年以上)

  • age: 年齢 (ケースの年齢にマッチ)

  • parity: 出産回数

  • induced: 過去の人工妊娠中絶の回数 (0 = 0回, 1 = 1回, 2 = 2回以上)

  • case: ケース/コントロールのステータス (1 = ケース, 0 = コントロール)

  • spontaneous: 過去の自然流産の回数 (0 = 0回, 1 = 1回, 2 = 2回以上)

  • stratum: 層(マッチングされたセット)の番号 (1-63)

  • pooled.stratum: プールされた層の番号 (1-83)

データの確認

head(infert)
##   education age parity induced case spontaneous stratum pooled.stratum
## 1    0-5yrs  26      6       1    1           2       1              3
## 2    0-5yrs  42      1       1    1           0       2              1
## 3    0-5yrs  39      6       2    1           0       3              4
## 4    0-5yrs  34      4       2    1           0       4              2
## 5   6-11yrs  35      3       1    1           1       5             32
## 6   6-11yrs  36      4       2    1           1       6             36
summary(infert)
##    education        age            parity         induced      
##  0-5yrs : 12   Min.   :21.00   Min.   :1.000   Min.   :0.0000  
##  6-11yrs:120   1st Qu.:28.00   1st Qu.:1.000   1st Qu.:0.0000  
##  12+ yrs:116   Median :31.00   Median :2.000   Median :0.0000  
##                Mean   :31.50   Mean   :2.093   Mean   :0.5726  
##                3rd Qu.:35.25   3rd Qu.:3.000   3rd Qu.:1.0000  
##                Max.   :44.00   Max.   :6.000   Max.   :2.0000  
##       case         spontaneous        stratum      pooled.stratum 
##  Min.   :0.0000   Min.   :0.0000   Min.   : 1.00   Min.   : 1.00  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:21.00   1st Qu.:19.00  
##  Median :0.0000   Median :0.0000   Median :42.00   Median :36.00  
##  Mean   :0.3347   Mean   :0.5766   Mean   :41.87   Mean   :33.58  
##  3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:62.25   3rd Qu.:48.25  
##  Max.   :1.0000   Max.   :2.0000   Max.   :83.00   Max.   :63.00
table(infert$parity)
## 
##  1  2  3  4  5  6 
## 99 81 36 18  6  8
table(infert$induced)
## 
##   0   1   2 
## 143  68  37
table(infert$case)
## 
##   0   1 
## 165  83
table(infert$spontaneous)
## 
##   0   1   2 
## 141  71  36

自然流産(spontaneous)と人工妊娠中絶(induced)が不妊(case)に与える影響を, 3つの異なるモデルで比較.

Model 1: 通常のロジスティック回帰(未調整) マッチングの構造(層)を完全に無視して解析するモデル.

model1 <- glm(case ~ spontaneous + induced, data = infert, family = binomial())
#summary(model1)

Model 2: 層(ペアID)をダミー変数として投入した通常のロジスティック回帰

model2 <- glm(case ~ spontaneous + induced + factor(stratum),
              data = infert, family = binomial())
#summary(model2)

Model 3: 条件付きロジスティック回帰 マッチングの構造をモデル化. survival パッケージの clogit() 関数を使用し, strata() で層の変数を指定.

model3 <- clogit(case ~ spontaneous + induced + strata(stratum), data = infert)
#summary(model3)

spontaneous と induced の推定値(対数オッズ比)と標準誤差を比較.

res <- bind_rows(
  tidy(model1) %>% filter(term %in% c("spontaneous","induced")) %>% mutate(model = "1. Unadjusted"),
  tidy(model2) %>% filter(term %in% c("spontaneous","induced")) %>% mutate(model = "2. Dummy Adjusted"),
  tidy(model3) %>% filter(term %in% c("spontaneous","induced")) %>% mutate(model = "3. Conditional")
) %>%
  select(model, term, estimate, std.error, p.value) %>%
  mutate(
    estimate = round(estimate, 2),
    std.error = round(std.error, 2),
    p.value = round(p.value, 4)
  )

res
## # A tibble: 6 × 5
##   model             term        estimate std.error p.value
##   <chr>             <chr>          <dbl>     <dbl>   <dbl>
## 1 1. Unadjusted     spontaneous     1.2       0.21  0     
## 2 1. Unadjusted     induced         0.42      0.21  0.042 
## 3 2. Dummy Adjusted spontaneous     3.23      0.46  0     
## 4 2. Dummy Adjusted induced         2.19      0.46  0     
## 5 3. Conditional    spontaneous     1.99      0.35  0     
## 6 3. Conditional    induced         1.41      0.36  0.0001

3つ目の条件付きロジスティック回帰の結果と他の結果は異なっている.

シミュレーションデータ

サンプルデータだと, 上手く推定できているのか分からないので, シミュレーションデータを生成して動きを確認する.
ここでは, 1対1マッチングで500ペア作って, 上と同様, 3つのモデルをあてはめる. 曝露Xの係数パラメータの真の値は1としている.

set.seed(2026) 
n_pairs <- 500       # 1対1マッチングのペア数(層の数)
true_beta <- 1.0     # 曝露Xの真の対数オッズ比

# データを格納する空のデータフレーム
sim_data <- tibble()

# 1. マッチド・ケースコントロールデータの生成
for (i in 1:n_pairs) {
  # 層(ペア)ごとに固有のベースラインリスク(alpha_i)を設定
  alpha_i <- rnorm(1, mean = 0, sd = 1.5)
  
  valid_pair <- FALSE
  while(!valid_pair) {
    # 曝露Xの生成: 層の特性(alpha_i)と相関
    X <- alpha_i * 0.5 + rnorm(2, mean = 0, sd = 1)
    
    # 真のロジスティックモデルに従ってアウトカムYを生成
    logit_p <- alpha_i + true_beta * X
    p <- exp(logit_p) / (1 + exp(logit_p))
    Y <- rbinom(2, size = 1, prob = p)
    # ここでアウトカムを2人分生成している
    # 1人がケース(Y=1), 1人がコントロール(Y=0)になったらペアとして採用
    if (sum(Y) == 1) {
      sim_data <- bind_rows(sim_data, tibble(
        stratum = i,
        alpha = alpha_i, # 観測されない背景因子
        X = X,
        Y = Y
      ))
      valid_pair <- TRUE
    }
  }
}

# 2. 3つのモデルによる推定の比較

# Model 1: 通常のロジスティック回帰(未調整)
model1 <- glm(Y ~ X, data = sim_data, family = binomial())

# Model 2: 層(ペアID)をダミー変数として投入した通常のロジスティック回帰
model2 <- glm(Y ~ X + factor(stratum), data = sim_data, family = binomial())

# Model 3: 条件付きロジスティック回帰 
model3 <- clogit(Y ~ X + strata(stratum), data = sim_data)

# 3. 結果の抽出と表示 (曝露Xの係数のみを比較)

res <- bind_rows(
  tidy(model1) %>% filter(term == "X") %>% mutate(model = "1. Unadjusted"),
  tidy(model2) %>% filter(term == "X") %>% mutate(model = "2. Dummy Adjusted"),
  tidy(model3) %>% filter(term == "X") %>% mutate(model = "3. Conditional")
) %>%
  select(model, estimate, std.error) %>%
  mutate(
    estimate = round(estimate, 2),
    std.error = round(std.error, 2),
    true_beta = true_beta)

res
## # A tibble: 3 × 4
##   model             estimate std.error true_beta
##   <chr>                <dbl>     <dbl>     <dbl>
## 1 1. Unadjusted         0.81      0.07         1
## 2 2. Dummy Adjusted     1.97      0.13         1
## 3 3. Conditional        0.98      0.09         1

ダミー変数で調整したものは, 真の値の2倍近い値になってしまっている. これはIncidence Parameter Problemで, 2倍になることは, Chamberlain (1980)のSection 2に載っている. 数理を理解したわけではないので, このあたりは次回以降学びたい.

1:Mのマッチングだと(M+1)/M倍となる?(パネルデータでT時点のデータなら, T/(T-1)倍になる?). このあたりについても次回以降で確認したい.

参考文献(関連していると思われるからメモしているだけのものも含む)

  • 藤井良宜『カテゴリカルデータ解析 (Rで学ぶデータサイエンス 1)』 

    https://amzn.to/4dfxJ4U

  • 丹後俊郎・松井茂之『医学統計学ハンドブック』

    https://amzn.to/41jOPrf

  • Neyman and Scott (1948) “Consistent Estimates Based on Partially Consistent Observations”

  • Andersen (1970) “Asymptotic Properties of Conditional Maximum-Likelihood Estimators”

  • Chamberlain (1980) “Analysis of covariance with qualitative data.”

  • Breslow (1981) “Odds ratio estimators when the data are sparse.”

  • Lancaster (2000) “The incidental parameter problem since 1948”

【学習予定】

まだまだよく分かっていないので次回以降, 色々試したい. シミュレーションデータの生成を関数化して, 実験を増やしたい. 条件付きロジスティック回帰が実際どう計算されているかも確認したい.