備忘録 as vet.

日々のアイデア、疑問など備忘録的に書きます。Scienceが好きです。

Rでサンプルサイズと検出力、SDの関係をシミュレーションしてみた

大学院の授業でRを用いたサンプルサイズ(必要症例数)の算出方法のシミュレーションを学んだので、拡張して遊んでみた。

サンプルサイズの求め方はいくつかあるが、一例として

α(有意水準)、β(検出力)、SD(標準偏差)、興味のある効果量の差、を決めることで算出することができる。

通常はα=5%,β=80-90%として、SDは先行研究や手元の自施設データから決めていく事が多い。興味のある効果量の差は臨床的に重要と思われる最小の効果量を定めることで決定していく。

実際にはシミュレーションベースで必要症例数を決定していくことも多いらしい。

ということで症例数とSDを色々変えてみたときのβの変化の様子をシミュレーションで表現してみた。

 

<シチュエーション>

等分散の正規分布のデータを2つ用意。

2群の差を10で固定し、有意水準α=5%としたときの2群の平均値差が0か否か、つまり

H0: 平均値差=0

H1: 平均値差≠0

という仮説検定を考える。この場合はt検定が適用になる。

 

差を10で固定した2つの正規分布に従うデータをランダムに生成するので、当然2群間に差はあるのだが、同じ試行を何百回と繰り返していくと、確率的なゆらぎによって有意差を検出できない状況も生じてくる。

仮に100回検定をした場合に、80回は差を検出できたとき、検出力は80%といえる。

サンプルサイズとデータが従う正規分布標準偏差(データのばらつき)を変えたときに、検出力βがどう変わるのか、をシミュレーションしていく。

 

下準備。

正規分布に従うデータを2個生成し、差が10となるようにする。

上記2群のデータから1000回t検定を繰り返すシミュレーションを実施し、有意水準5%で有意差を検出できた回数/全試行回数からβ(power)を算出するような自作関数を作成。

sim<-
  function(x,y=10){ #x:症例数,y:SD, default=10

set.seed(1)
count<-0
n<-1000

for(i in 1:n){
  a1<-rnorm(x,mean=120,sd=y)
  a2<-rnorm(x,mean=130,sd=y)
  p<-t.test(a1,a2,var.equal=T)$p.value
  p01<-ifelse(p<0.05,1,0)
  count<-count+p01
}

power<-100*(count/n)
return(power)
  
  }

 

次に、症例数、SD(データのばらつき)を変えたときに検出力がどのように変化するのか可視化。今回は症例数を2~50までの範囲で設定。

#症例数と検出力、SDの関連性をグラフ化

res_sd<-function(y){ #y:SD
  
result<-
  matrix(nrow=49,ncol=3,
       dimnames=list(NULL,c("n","power(%)","SD"))
              )

for(x in 2:50){
result[x-1,1]<-x
result[x-1,2]<-sim(x,y)
result[x-1,3]<-y
}

return(result)

}



#SDごとに結果を結合
results<-
  res_sd(1) %>% 
  rbind(
    res_sd(5),res_sd(10),res_sd(20),res_sd(50),res_sd(100)
  )


#結果の図示
results %>% 
  as.data.frame() %>% 
  mutate(SD=as.factor(SD)) %>% 
  ggplot(aes(x=n,y=`power(%)`,color=SD))+
  geom_point()+
  geom_line()

横軸にサンプルサイズ(n)、縦軸に検出力(power)としてSDごとに色分けしてグラフを図示。

  • サンプルサイズが増えるにつれ検出力も増大
  • SDが小さいほうが検出力が上がりやすい

ということがわかる。

概ね予想通りの見た目であったが、想像よりもSDの影響が大きいんだなという印象。

SDが2群の差よりも大きい(SD: 20~)と、検出力を保つためには一気にサンプルサイズがたくさん必要になるっぽい。

簡単なシミュレーションだったが、R codingの良い練習になった。

<論文感想>より良い臨床予測モデルを構築するための7 step

prediction model構築の7 stepを解説したチュートリアル論文

Steyerberg, E. W. & Vergouwe, Y. Towards better clinical prediction models: seven steps for development and an ABCD for validation. Eur. Hear. J. 35, 1925–1931 (2014).

https://academic.oup.com/eurheartj/article/35/29/1925/2293109


GUSTO-1の予測モデル論文(Lee et al., Circulation, 1995)を例に解説する形でわかりやすい

予測モデルの構築や妥当性検証の部分は復習という意味合いが強かったが、GUSTO-1論文を予測モデルの研究デザインの妥当性の観点から振り返ることができて勉強になった

 

<7-steps>

1)要件定義,データ精査

予測すべき研究課題の吟味を行うフェーズ

  1. RQはなにか?
  2. 予測因子について既知のことはなにか?
  3. どのように患者を選択するか?
    GUSTO-1論文ではRCTデータを使っている。組入基準は幅広く、急性心筋梗塞というアウトカムの代表性は保たれていると考えられる
  4. 予測研究において、治療の効果をどう扱うか?
    GUSTO-1論文では、元のデータがRCTであり薬剤治療有無のステータスが存在する。予測研究ではこの治療効果の扱いを考える必要がある。
  5. 予測因子の信頼性と欠測率はどれくらいか?
    GUSTO-1論文ではRCTかつプロトコールがガチッと決まっているため、取得されたデータの信頼性は高い
  6. 興味のあるendpointか?
    Hard endpoint(死亡など)のほうがsoft endpointより好まれる
    Endpointの発生頻度も重要。低いと予測因子の投入数が限られてしまう
2)予測因子coding

連続変数、カテゴリカル変数どちらにするか。

カテゴリカル変数にしたとき、カテゴリをまとめるかどうか(発生頻度、臨床的な解釈を考慮)

解釈可能性も考慮してcodingする。

わかりやすかったのは、年齢という予測因子を考えたとき。
一歳刻みのOR:1.09→1歳年をとるごとに1.09倍リスクが増える という解釈よりも
10歳刻みのOR:2.30→10歳年をとるごとに、2.3倍リスクが増える という解釈のほうが分かりやすい。

3)予測モデル設定

Stepwiseが予測因子の選抜に広く用いられているが、アウトカムの発生頻度が少ないとき、その選抜結果は非常に不安定になり、Overfittingのリスクも高まる。

上記のような統計学的な方法単独ではなく、臨床的な知見に基づいた選抜方法が重要となる

4)予測モデルによる推定

モデル設定が決まったあと、予測因子の効果をどう推定するか。

ロジスティック回帰やCox回帰では最尤推定法がよく使われるが、近年ではoverfittingに対応する目的で罰則付最尤推定やLASSOなどを適用する方法も出てきている。

5)モデル性能評価

後述するvalidationのABCDで詳述

6)validation

内的妥当性、外的妥当性の評価方法。

内的妥当性の評価方法として、k-hold cross-validationや、bootstrappingがよく使われている。

GUSTO-1論文では上記2つとも使用して妥当性を評価している。

外的妥当性は、時間的な外挿(モデル構築よりもさらに近年のデータに絞った評価)や、地域性(別の州、国など)での外挿、時間も地域も全く異なる集団に対する外挿で評価する。

7)結果の図示

回帰モデルの方程式をそのまま表示すると解釈性が悪いので、スコアリングシステムやチャートに落とし込むことが多い。アプリを作成して臨床的可用性を高めることも多い

 

<validationのABCD>

Alpha: calibration, intercept

Beta: calibration, slope

C-statistic: discrimitation

Decision-curve analysis: clinical usefulness

 

予測性能はCalibration、Discriminationの2つの概念で考えることが多い

Calibrationは、アウトカム発生リスク確率の予測性能のことであり、実測されたリスク確率の適合性を評価する。

Alpha(切片)が0、Beta(傾き)が1に近いほど予測がうまくいっていることを示唆する。

 

Discriminationは、アウトカムがHigh riskかlow riskかを識別する性能のことであり、ROC曲線を用いてAUC(=c-statistic)で算出することが多い

 

上記は一般的に論文でも見かけるが、最後にもう一つ、Decision-curve analysisという概念を新しく知ることができて勉強になった。

calibration, discriminationは、いわゆる予測性能としての指標であるが、予測可能な解像度がどれくらい臨床的に有用かというのは上記の指標では推し量ることができない。

臨床的有用性を考えるには、治療のベネフィットとリスク、当該疾病の臨床的重要度、検査のメリット、デメリットなどさまざまな要因のバランスを考える必要がある。

descision-curve analysisは、そのような臨床的な文脈での予測モデルの有用性を考えた解析方法である。

横軸はThreshold: 治療のリスク・ベネフィットの指標[Risk/(Risk+benefit)]、縦軸はNet benefit (NB): 治療により正味どれくらいベネフィットを享受したかの指標 を取っている。

 

       Net benefit=(True positive - w*False Positive)/N 

True positive (TP): 治療を受けるべきHigh riskと予測され、実際に負の転帰を辿った患者

False positive (FP): 治療を受けるべきHigh riskと予測されたが、実際は負の転帰にならなかった患者

w: weight=Risk/Benefit

N: 総患者数

 

という式で示される。TP, FP, Nはgivenな値であるから、実際にはweightとNBの関数になっている。weight=threshold/(1-threshold)であり、threshold、つまり治療のリスクとベネフィットのバランスはclinical settingや患者の意思、状況により変動する変数とみなすことができる。

このNBの概念を使い、全患者が治療を受けたとき(Treat all)、全患者が治療を受けなかったとき(Treat none)という極端な状況と比べて、提案した予測モデルが描く曲線がどういうものかを比較することができる。上記のFigでは、ageだけを予測因子にした予測モデルよりも、full modelのほうが臨床的有用性が高いと考えることができる。さらに、thresholdが2%(つまり、治療のリスクが治療をうけた全体の2%程度しかないと考えられるとき)、すべての患者に治療を適用した場合と、ageの予測モデルを使用して治療適用患者を選別する場合ではNBに違いがないため、threshold2%ではage予測モデルは不要とみなすことができる(コストや手間を無視すれば全員に治療を行って差し支えない)。

この概念は予測モデルを考える上で非常に重要だと考えており、臨床的な価値に直結するものだと思う。

junkな予測モデルが多数開発される中で、臨床で使われる価値のある予測モデルはなにか?というのを考える良いきっかけになった。自分の予測研究でもこのDescision-curve analysisはしっかり取り入れていきたい。

 

<論文感想>無兆候MMVD犬に対するACEiの治療効果を評価したsystematic review, meta analysis

無兆候MMVD犬に対するACEiの治療効果を評価したSR/MR

 

Donati, P. et al. Angiotensin-converting enzyme inhibitors in preclinical myxomatous mitral valve disease in dogs: systematic review and meta-analysis. J. Small Anim. Pr. 63, 362–371 (2022).

https://onlinelibrary.wiley.com/doi/10.1111/jsap.13461

 

<method>
  • 4本のRCTが最終的に採択
  • 心血管関連死亡、うっ血性心不全発症、全死亡、腎臓関連有害事象のアウトカムを統合指標で評価
  • outcome follow upは60日以上の研究のみ採択
  • コクランレビューに則り、RoBで各研究の質、GRADEで最終的な統合結果の確信度を評価

 

<results>
  • うっ血性心不全発症をアウトカムにしたとき、4本の研究全てでlow risk of biasであった
  • うっ血性心不全発症/心臓関連死亡/全死亡において、ACEiはプラセボと比べて有意な効果をもたらさなかった
  • 心拡大がない犬の有害事象についてはACEiでわずかに少ない、という結果
  • 心拡大あり患者におけるうっ血性心不全の発症では結果の信頼度はHIGHであり、それ以外のアウトカムの信頼度はLOWであった
  • GRADE HIGHということは、新規の研究があっても今回の統合結果の信頼性は変わらないだろう、と見込める程度の確信度ということ。 つまり、心拡大がある犬のうっ血性心不全発症については、ACEiはプラセボと比べて有益な効果をもたらすとは言えない、という結果で今後も落ち着く可能性が高い、と著者らは考えている。
  • それ以外のアウトカムについてはGRADEがすべてLOWであり、追加の研究をすることで今回の統合結果の信頼性がかなり高い確率で変化するだろう、という評価。

<感想>
  • ACEiは少なくともStageB2の犬におけるうっ血性心不全の発症抑制の効果は見込めないと考えて差し支えなさそう。 ただし、その評価基準の妥当性はよく考える必要がある
    • 一点目は、GRADEのimprecisionについて、 メタ解析におけるOISやTSAを用いた評価の記載がないこと;
    • 二点目は3RCTしか組み込まれていないので、publication biasを評価することが難しいこと。
  • 以上より、GRADE HIGHと評するに値する判断根拠があったのか、透明性が担保されないので、やや疑問が残る。 全体を通してみると、研究としてまだ知見が足りていないのは心拡大がない状態のMMVD患者(stage B1)であり、このステージに焦点を置いた追加RCTは意味があるかも。
  • 心拡大を起こしているStageB2の犬では、あえてACEiを使う意味はないのかもしれない。

<論文感想>心臓外科手術予後予測モデルのパラメータ更新手法に関する検討

心臓外科手術の予後予測モデルの更新手法についての提案論文

Hickey, G. L. et al. Dynamic Prediction Modeling Approaches for Cardiac Surgery. Circ.: Cardiovasc. Qual. Outcomes 6, 649–658 (2018).

https://www.ahajournals.org/doi/10.1161/CIRCOUTCOMES.111.000012

 

<intro>
  • 心臓外科の予後予測モデルが様々提案されているが、医療の進展とともに予測と現実の結果に乖離が生じ、予測性能が悪化している
  • そのため、予測性能を保つためには予測モデルのupdateが必要になってくる
  • 本研究では最適なmodel updateの方法を検討するために、4つのパラメータ更新方法を比較

<method>
  • 有名な心臓外科手術予後予測モデルの一つであるEuroSCORE modelを使用して、経年的なパラメータの推定値の変動を可視化

    • approach 1: no updating; 元のモデルのまま

    • approach 2: periodic update
      12ヶ月毎 or 24ヶ月毎にmodelのcalibrationを行い、共変量の推定値を更新する

    • approach 3: rolling window
      2年間のデータでmodel calibrationを行い、そのモデルで後半1年間の共変量の推定値を算出(12ヶ月毎更新 or 1ヶ月毎更新)
      例) 2002-2004年(2年間)でモデルフィット→2003-2004年における共変量の推定値として当てはめ→2003-2004年でモデルフィット→・・・繰り返し

    • approach 4: Dynamic Logistic Regression
      ベイジアンモデル。細かい理論は追えていないが、時刻tまでのデータで推定したモデルの推定値を時刻t+1での事前分布とみなして次々更新していく手法っぽい。
      approach3に似ているが、異なる点は、tにおける推定値とt+1における実測値を組み合わせて予測モデルを作成している点。

<results>
  • EuroSCORE(logistic regression model)の各共変量項と切片項の推定値を時間変動を手法ごとに比較している
  • 切片項だけで取り上げるが、年ごとに大きく推定値が変化していることがわかる
  • approach1 (無更新)では変化なしなので横一直線、apporach 2→4とモデルが複雑になっていき、なめらかな推移になっていくが、approach3,4になるとほとんど同じような動き方をしているのがわかる
  • モデル更新手法は、推定の良さ(現実との当てはまりの良さ)と、手法の複雑さのバランスで決めていく必要があるが、これを見るとapproach3の12ヶ月更新verでも十分良さそうな気がする。

 

 
<感想>

予測モデルは賞味期限があり、医学の進歩とともにズレが生じていくのはなんとなくわかっていたが、定量的に可視化してみると、こんなにダイナミックに変動するのか、、と驚いた。

5年前に作ったモデルを使うことに意味はあるの、、?とすら思ってしまう。

予測モデルを作成するときには、最初から更新することを織り込んだモデルにしたほうが良い気がする。

今回の論文では手法ごとの推定値の変動を見ているが、予測性能がどれくらい上がったか、という定量的な議論はしていないので、更新モデルの複雑さと、更新性能の良さのバランスの落とし所まではわからないはず、というのが感想。

<論文感想>急性心筋梗塞に対する抗血栓治療後の短期予後予測モデル

大規模RCTデータを用いて急性心筋梗塞に対する抗血栓治療後の30日死亡の予後予測モデルの構築と性能を評価した研究

Lee, K. L. et al. Predictors of 30-Day Mortality in the Era of Reperfusion for Acute Myocardial Infarction: Results From an International Trial of 41 021 Patients. Circulation 91, 1659–1668 (1995).

https://www.ahajournals.org/doi/10.1161/01.CIR.91.6.1659

 

<method>
  • Design:
    大規模RCT (GUSTO-1)を用いたretropsective study
  • Population:
    ST上昇を伴うacute MI patient (発症から6h以内) between 1990-1993 in GUSTO-1 trial (n=41021)
  • Outcome:
    30day all-cause mortality
  • model:
    logistic multiple regression model
  • 変数:
    • 連続変数はcubic splineで単変量での関連性を図示し線形性を評価し、非線形性ならsplineでつないで評価。
    • 予測変数候補同士の相互作用も評価
    • カテゴリカル変数は、χ二乗検定でOR算出
    • 変数削減は実施していないっぽいが、30日死亡のアウトカムだけで2851人いるので、今回の変数の量であればいわゆる“at least 10 events per variable”は満たしているので無問題。
  • 欠測補完:
    • complete case=92%
    • 多変量回帰による反復的に欠測補完を行っている
      →MICEに類似したものなのかどうか引用文献を深読みできておらず不明。
  • internal validation:
    • 10-fold cross-validation
    • bootstrap
  • 性能評価:
    • discrimination: ROC_AUC
    • calibration: comparing predicted risk and obsearved risk

 

<results>
  • 30d死亡は2851人(7%)
  • 多変量ロジスティク回帰においてもアウトカムと強い関連が認められたのはage, Killip Class(MIの重症度合いと比例)など。詳細はfig2参照。
  • 作成したprediction modelのROC_AUCは0.836と高精度な結果。
    calibration性能も非常に良い当てはまり。
  • internal validationにおいても、ROC_AUCは0.834と高い精度を保持していた。

 

<感想>

大規模RCTのデータを後ろ向きに使用して作成した予測モデル

n=41021とかなりデータサイズが大きいだけでなく、予測モデル構築のプロセスが堅実。

内的妥当性評価でcross-validationとbootstrapping両方で評価しているのは初めて見たが堅い評価方法だなと思う。

 

予測モデルの中では教科書にのるくらい有名な論文であり、ベーシックに着実な手法を取っているだけでなく、なぜその手法を用いたのか?という著者の考えを詳述してあり、とても勉強になった。

最新の予測モデル論文では、ある程度モデル構築の流れが定まっているので、方法の詳細や思考過程は記載がないことが多いため新鮮だった。

おそらく、この論文が最初に手法を打ち出して、その後多くの研究で真似され始めた、みたいな流れがあったんじゃないかと思う。

 

予測因子(リスク因子)として年齢やHR、血圧、梗塞部位などを使用し、χ二乗値やORを算出しているが、それらを予測モデルの性能の一部として扱うだけでなく、医学的な妥当性に踏み込んで考察しているところがとても良かった。

予測研究は因果推論とは区別して考える必要があり、得られる統計量や推定量統計学的な関連の強さの指標に過ぎないが、それでもそこには因果関係が含有されている可能性も踏まえて、生物学的妥当性や機序に一歩踏み込んだ考察がなされると、論文としての面白さが増すなと思った。

Circulationに掲載され教科書に載るくらい有名な論文なのだが、予測研究に必要なポイントを抑えつつ、興味のある統計学的な知見、医学的な知見も整理してバランス良く記述・考察されており、今もなお参考にされている理由がわかった気がする。

<論文感想>体重変動がその後の7年間のCVDリスクにどのような影響を与えるか?

Target trial emulationの手法を用いて、二年間の体重変動がその後の7年間のCVDリスクに及ぼす影響を評価

Katsoulis, M. et al. Weight Change and the Onset of Cardiovascular Diseases: Emulating Trials Using Electronic Health Records. Epidemiology 32, 744–755 (2021).

journals.lww.com

 

最近臨床疫学で注目を浴びているTarget trial emulationの手法を用いて、 健常者の二年間の体重変動がその後の心血管系(CVD)リスクにどのような影響を与えるか調査したretrospectice study

 

retrospectiveのデータベース研究では有るが、TargetとなるRCTを想定し、そのフレームワークに沿った形で研究デザイン構築と解析を行った論文。

RCTの介入群の模倣として、138,567人の対象者を体重増加群(>=3% and <20%)、維持群(within 3%)、減少群(<=3% and <20%)に割付けし、心血管イベントの複合アウトカム(CVD death, myocardial infarction, stroke, hospitalization from CHD, heart failure)のハザードリスク(HR)を解析。

 

非常にデザインが緻密に練られており、Time zero, 各種biasの対処法、感度分析、RCTへの模倣の仕方、論文表現など、疫学の知識を総動員しないと味わえない論文だった。

以前(4月くらい?)にも読んだことが有るのだが、そのときには全く理解できていなかったのだなと再確認。

二年間の体重介入はRCTでは相当難しそうだし、ましてやそのような実験的環境下での結果はReal worldでの効果を反映できてるのか疑問なので、Target trial emulationだからこそ評価できるタイプの因果推論研究なのだと思った。

 

読めば読むほど新しい気づきが得られる良い論文だった。。

1年間臨床疫学の勉強をしてきて、少しは成長できたんだな、と実感することができた。

まだまだ、理解できていなかったと感じることも多く(特にtime-dependent confounder)、この論文を総括的に批判的吟味したり、デザインに仕組まれた著者の思考を読み解くのは時間がかかりそう。また勉強して読み直す予定。

<論文感想>心臓外科の手術死亡の定義の妥当性を評価したretrospective study

心臓外科の手術死亡の定義の妥当性を評価したretrospective study

Chan, P. G. et al. Operative mortality in adult cardiac surgery: is the currently utilized definition justified? J. Thorac. Dis. 13, 5582–5591 (2021).

jtd.amegroups.org

 

 

Society of Thoracic Surgeons (STS)によって定義された手術死亡が、現代社会において、真に手術と関連した死亡を捉えられているのか?妥当性を評価した研究。

単施設において2011-2017の間に行われたCABG, AVR, MVR, MVrなどの心臓外科をreview

  • STSにおける手術死亡の定義:
    1. all deaths occurring during the acute episode of hospitalization in which the operation was performed (this includes patients transferred to other acute facilities), even if after 30-day
    2. deaths occurring after discharge but within 30-day of the procedure, regardless of cause.
  • primary outcome:
    STSで定義された手術死亡(30日以内死亡or同一入院内死亡)のタイミング
  • secondary outcome:
    死亡原因、術後併発症 それぞれの発生率


<results>

  • 11190の心臓外科がindexとして記録
  • そのうち手術死亡は2.2%
  • 手術死亡のうち、83.7%は30d以内かつ入院中死亡
  • 6.9%は30d以内かつ退院後死亡
  • 11.2%は30d overで死亡
  • 手術死亡の99.2%は手術indexに関連した死因だった
    →交通事故などの心臓外科とは関連しない要因による死亡が影響している可能性を考えたが、本結果より、STSの手術死亡の定義は実際の手術に起因した死亡をうまく捉えられていると見なせる、と結論づけている
  • 手術死亡の死因は心原性(38.7%), 腎不全(15.6%), 脳梗塞(13.9%)
  • -術後併発症として、輸血(80.1%), reope (65%), 人工換気の延長(62.2%)

<感想>

手術死亡の定義の妥当性を検証した研究を読むのは初めてだったので新鮮。

手術死亡の妥当性の定義って本当に必要なのだろうか、と思ったが、Discussionの以下の記述でなるほど、と膝を打った。

They also suggested that extending operative mortality to include the post-discharge period, regardless of location, was important to remove any incentive for unethically prolonging the life of a dying patient past the 30-day cutoff or transferring a medically futile patient to another facility to avoid a mortality.

つまり、予後不良の患者を別の医療施設に移動させたりして、手術成績を見かけ上良くする(30日死亡に計上されないようにするため)ようなインセンティブを防ぐために、手術死亡の定義を拡張して、施設によらず退院後も手術死亡に含めるべきだ、という提案。

しかし、Huaらの研究では、そのようなインセンティブの証拠となるような動き(30日以上経過してから死亡率が急激に上昇するような変化)は認められなかった、としている。

確かに競争の熾烈な分野ではそのようなインセンティブは生じ得るよな、、と思った。
勤務獣医師としては、そのような発想自体浮かばなかったが、経営に携わるような地位の医師/獣医師の場合、考え方が変わるのだろうか。恐ろしい話だが。。

でもHuaらの研究をみてちょっと一安心した。


30日死亡が本当に適切なのか?の議論も出ていて、こちらもなるほどな、と感心した。

議論の中では、30日死亡だと施設成績を過小推定してしまう、90日以降で死亡のハザードが頭打ちに達しており、90日死亡の方が1年後転帰を良く反映しているなどの話が出ていた。
先行研究でいつも登場するし、しかもキリが良いから、という理由で適当に30日をcut-offにしてしまっていたことを反省。