Multi-nomial logistic regression

応答変数(従属変数)が二値変数、例えばある疾患・そうでないで、いくつかの説明変数からそれを推定するモデルを作成したい場合、ロジスティック回帰分析を用いることができます。説明変数は連続変数でも名義変数でも使えます。

応答変数が3つ以上ある場合はMulti-nomial logistic regression analysis多項ロジスティック回帰分析を用いることができます。例えば、診断したい病態が3つあり、各症例で3種類の検査のデータがあるような場合、このデータを解析して、各検査の値に対する係数を算出し、別の症例や検証用の症例のデータに対して、その症例に対する疾患確率を計算することができます。診断したい疾患が3つであれば、それぞれに対する疾患確率の値を3つ得ることができます。実臨床では、ある疾患・そうでないの2つを鑑別することよりも、3つ以上の複数の疾患のどれかを診断するような状況の方がはるかに多いと思います。前者は感度・特異度のパラダイムで処理できますが、後者の場合、感度・特異度の考え方では対処が難しくなります。

想定される疾患・病態が3つ以上あり、検査や診断法が2つ以上あるような場合、Multi-nomial logistic regressionに基づくモデルは役に立つはずです。

Rのパッケージでnnetを用いると、その解析ができます。解析に必要なデータは図1のようなものになります。

図1.Multi-nomial logistic regression用のデータの例。

このようなデータをExcelなどで用意しておきます。なお、ここに示すのは架空のデータです。

nnetはBrian Ripley, William VenablesによるRのパッケージです。 Link

以下Rでスクリプトを実行していきます。変数名は図1のものを用いていますが、実際に図1のデータを解析しているわけではありません。スクリプトと手順を示すのが目的です。それぞれ自分のデータで必要に応じて変数名など変更して実行してください。

#Install packages needed.

packneed=c(“nnet”,”tcltk2″);current=installed.packages();addpack=setdiff(packneed,rownames(current));url=”https://cran.ism.ac.jp/”;if(length(addpack)>0){install.packages(addpack,repos=url)};if(length(addpack)==0){print(“Already installed.”)}

今回取り上げたパッケージ以外に、NeuralNetTools、EffectStars2というパッケージも有用です。今回Multi-nomial logistic regression analysisをnnetパッケージのmultinom()関数で行っていますが、nnetはそれだけでなく、Neural networkを用いる解析もできます。

#Read in packages.

library(nnet)
library(tcltk2)

#Read in data.

train.dat=read.delim(“clipboard”,sep=”\t”,header=TRUE)

#Excelで必要なデータ範囲をコピーしてからRに戻りこのスクリプトを実行します。クリップボードを介して、データが変数train.datに格納されます。Macの場合は、train.dat=read.delim(pipe(“pbpaste”),sep=”\t”,header=TRUE) です。

#Set a reference as a factor variable.

train.dat$Diagnosis = as.factor(train.dat$Diagnosis)
train.dat$Diagnosis = relevel(train.dat$Diagnosis, ref = “D1”)

ベースとなるDiagnosisを設定します。その際に、数値ではなくfactorとして取り扱うので、as.factor()関数を用いています。ref引数で設定するDiagnosisは通常は対照となるような診断・病態です。

#Multi-nomial logistic regression analysis.

multinom_model = multinom(Diagnosis ~ Test1+Test2+Test3, data = train.dat)

診断 ~ 説明変数1 + 説明変数2 + 説明変数3の様にformulaを記述します。

#Show the results: Intercepts, coefficients for explanatory variables.

summary(multinom_model)

#P values for explanatory variables.

z=summary(multinom_model)$coefficients/summary(multinom_model)$standard.errors
P_value=(1-pnorm(abs(z),0,1))*2
P_value

summary()関数ではP値は計算されないので、このようなスクリプトで計算しています。

#Odds ratios for explanatory variables (exponentials of the coefficients).

exp(coef(multinom_model))

#Prediction the diagnosis with explanatory variables for each case with the training data.

(predDiagnosis=predict(multinom_model, newdata=train.dat, type=”probs”))

ここでは、トレーニングに用いたデータに対して、Predictionを行っています。適合度が高いので、正診率は高くなります。

#Prepare the result data to be saved.

results=cbind(train.dat,predDiagnosis)

#Save the result data as a text file (tab-separated).

filnam=tclvalue(tkgetSaveFile(initialfile=”.txt”,filetypes=”{{Text Files} {.txt}} {{All files} *}”));if(filnam!=””){write.table(results,filnam,sep=”\t”,row.names=FALSE,col.names=TRUE)}

ファイル名を設定して任意のフォルダーにテキストファイルとして、元のデータとPredictionの結果を合わせてタブ区切りのテーブルの形式で保存します。

#Calcuating disease probabilities for individual explanatory variable data.
Set data for the case:
an example

Test1=3
Test2=14
Test3=5
case=cbind(Test1,Test2,Test3)
row.names(case)[1]=”case”

任意の検査結果の場合の、診断の推定を行います。

#Output Diagnosis class.

(CasePredicted=predict(multinom_model, newdata = case, type=”class”))

3つの診断の内、疾患確率が一番高いものが出力されます。

#Output probabilities.

(CasePredicted=predict(multinom_model, newdata = case, type=”probs”))

3つの診断のそれぞれの疾患確率が出力されます。

診断のPredictionは上記のpredict()関数を用いてできますが、自分でスクリプトを書いて計算したい場合は以下の様にします。

Multi-nomial logistic regressionの結果、Reference diagnosis以外のDiagnosisに対する切片、係数の値が得られます。これらの値を用いて、各症例の疾患確率を計算します。切片、係数の値は、coef(multinom_model)でデータフレームとして得られます。そこから、必要な切片、係数の値を読み出して、その症例のそれぞれの検査結果の値にそれぞれの対応する係数を掛け算して、総和を求め、さらに切片の値を加算します。得られた値のExponentialを求めます。それを各Diagnosisについて計算し、それらの総和を求め、さらに1を加算します。その値で、各DiagnosisのExponentialの値を割り算すると、各Diagnosisに対する疾患確率が得られます。加算する1はReference diagnosisの切片と係数を0に設定するためで、0のExponentialが1になるためです。

検査が3つ、すなわち、説明変数が3つの場合で、その症例の検査結果がx1, x2, x3でああれば、
診断iについて、yi = ai + b1i*x1 + b2i*x2 + b3i*x3
P(診断i) = exp(yi)/(1 + Σexp(yi))

通常のLogistic regressionの場合は、y = a + b1*x1 + b2*x2 + b3*x3で、
P(診断)=1/(1 + exp(-y)) ですから計算法が違います。

文献
Ciaburro G, Venkateswaran B: Neural Networks with R: Smart models using CNN, RNN, deep learning, and artificial intelligence principles. 2017, Packt Publishing, Birmingham, UK.

Xu J: Modern Applied Regression. 2023, CRC press, Taylor & Francis Group.

Multi-nomial logistic regression with R. R-bloggers.

メタアナリシスについて

アウトライン
・原理とモデル・方法
・レビューにおける位置づけ
・効果推定値
・益と害の評価へ

このようなアウトラインで、2023年5月20日に日本IVR学会で教育講演を行いました。そのスライドをPDFファイルにしました。Link

講演の中で紹介したシステマティックレビューの際に使用できる評価シートのExcel BookにはRのパッケージであるmetafor, “lme4”, “lmtest”, “optimx”, “dfoptim”, “tcltk2”, “forestplot”, “PropCIs”, “msm”を用いる二値変数アウトカム、連続変数アウトカムのメタアナリシス、Diagnostic Test Accuracy (DTA)のbinomial distributionを用いるbivariate modelのメタアナリシスを行うR用のスクリプトを書き込んであります。評価シートに入力したデータをそのままRを用いて解析することが可能です。
Link (右クリックしてダウンロード)

Cochrane RoB 2に従うランダム化比較試験のバイアスリスク評価用ウェブツール Link

メタアナリシス用のさまざまなRのスクリプトを掲載しているuseRs Link

JavaScriptを用いるメタアナリシスのウェブツールMeta-analysis IZ r Link

Minds診療ガイドライン作成マニュアル2020 ver.3.0 Link

DTAのメタアナリシス-useRs

useRsのサイトでは、さまざまなメタアナリシスのためのR用のスクリプトを提供しています。

Rのlme4パッケージのglmer()関数を用いる回帰分析でBivariate modelのDiagnostic Test Accuracy (DTA)診断精度研究のメタアナリシスを二項分布Binomial distributionを用いて行うスクリプトを掲載しました。このページの#3-2. Bivariate modelで二項分布を用いる診断精度(Diagnostic Test Accuracy, DTA)研究のメタアナリシスです。また、DTA研究のバイアスリスク評価には、QUADAS-2が用いられることが多いですが、それに準じた評価シートDTA_sheet.xlsxも用意しました。Rのスクリプトを含んでいます。また、madaを用いるスクリプトを含むシートも含めています。

図1. SORC曲線。

図1のようなSROC曲線のプロットを出力します。感度、特異度のForest plotも作成します。コンソールにはさまざまな解析結果と、感度、特異度と95%信頼区間、その下にI2値が出力されます。それとともに、クリップボードに各研究の有病率、感度、特異度と95%信頼区間を格納するので、Excelなどに貼り付けることができます。

続けて2行目を実行すると、感度、特異度の統合値と95%信頼区間、統合値のDiagnostic Odds Ratio (DOR)、陽性尤度比、陰性尤度比とこれらの95%信頼区間およびI二乗値と、RevManへ渡すことによって、SORC曲線を描くパラメータを出力します。それとともにクリップボードにもこれらの値を格納するので、Excelなどに貼り付けることができます。

メタアナリシスの部分のスクリプトは以下の通りです。

ma_res = glmer(formula=cbind(true, n – true ) ~ 0 + sens + spec + (0+sens + spec|Study_ID), data=Y, family=binomial)

文献:
Whiting PF, Rutjes AW, Westwood ME, Mallett S, Deeks JJ, Reitsma JB, Leeflang MM, Sterne JA, Bossuyt PM; QUADAS-2 Group. QUADAS-2: a revised tool for the quality assessment of diagnostic accuracy studies. Ann Intern Med. 2011 Oct 18;155(8):529-36. doi: 10.7326/0003-4819-155-8-201110180-00009. PMID: 22007046.

Cochrane Handbook for Systematic Reviews of Diagnostic Test Accuracy version 2.0, 2022. Link

DTAのメタアナリシス

Diagnostic Test Accuracy (DTA) 診断精度研究のMeta-analysis (MA)メタアナリシスは介入の効果のメタアナリシスとは異なります。手法が異なるだけでなく、結果の解釈や活用法も異なります。

DTA MAの結果、感度・特異度の統合値と95%信頼区間、陽性尤度比、陰性尤度比、診断オッズ比(Diagnostic Odds Ratio, DOR)、Summary Receiver Operating Characteristic (SROC) curve、およびSROCの曲線下面積(Area under the curve, AUC)などの推定値が得られます。

DTA MAの統計学的モデルとして、Reitsma のBivariate model二変量モデル、階層モデルである Rutter & GatsonisのHierarchical Summary Receiver Operating Characteristic (HSROC)モデルの使用が推奨されています。共変量を用いない場合は二変量モデルとHSROCモデルは数学的に同じものです(Arends LR;Harbord RM) 。

DTA MAに関する書籍としては、Biondi-Zoccai G ed. Diagnostic Meta-Analysis: A Useful Tool for Clinical Decision-Making. Springer, Cham, Switzerlandが包括的な内容で、有用と思います。また、Cochrane Handbook for Systematic Reviews of Diagnostic Test Accuracyは2022年度Version 2が発表されており、包括的な内容で、SAS、R用のスクリプトが具体的に解説されており、有用だと思います。

Reitsma JBのオリジナルの論文では、近似正規分布を用いるため、症例数が少なく、感度・特異度が95%程度に高い場合には、誤差が大きくなることをChu Hらが指摘しており、Cochraneはコクランのシステマティックレビューに使用することは推奨しないとしています。また、ゼロイベントのある場合に0.5を加算して補正する方法もずれを生じます。そのため、広く使用されているRのパッケージであるmadaの使用は推奨できないと述べられています。実際に、Chu Hらの論文でシミュレーションの結果を見ると、症例数が25例以下、感度・特異度が95%以上になると二項分布を用いる場合とずれが大きくなるのは確かですが、Chu HのLetterに対するReitsma JBの返答で述べられているように、多くの場合臨床上の問題を生じるほどではないと考えられます。

Cochrane Handbook for Systematic Reviews of Diagnostic Test AccuracyのAppendix 14では同じ対象者でCTとMRIを施行し、診断能を比較した5つの研究のDTA MAの例が記載されており、Rのlme4パッケージのglmer()関数を用いて、GLMM (Generalized Linear Mixed Effects Model)で二項分布による回帰モデルを用いています。Appendix 12では同じ対象者で二つの診断法を実施したのではなく、別の対象者でそれぞれの診断法の感度・特異度を測定した研究をもとに、二つの診断法の診断能を比較するための解析法が記載されています。こちらは、間接的な比較という表現が使われており、同じ対象者で直接比較した研究も含めて解析できる方法が示されています。

感度のロジットと偽陽性率のロジットを従属変数とし、各研究の感度のロジットと偽陽性率ロジットで回帰モデルを作っています。ロジットはオッズの自然対数、つまりlogit(se)=ln[se/(1-se)],  logit(sp)=ln[sp/(1-sp)], logit(fpr)=-logit(sp)です。

具体的には図1に示すようなデータに対して、回帰分析を行い、ロジットのExponentialでオッズに変換し、さらにオッズ/(1+オッズ)で割合に変換して感度・特異度の値を求めています。図1の例は同一症例でCTとMRIを施行しており、これら二つの検査法の感度・特異度の統計学的な比較が行われています。

図1.二つの診断法の直接比較のためのデータ。

通常、元になるデータは各研究IDとTP, FP, FN, TN (True Positive, False Positive, False Negative, True Negative)の人数のデータと検査法のデータです。それらから、図1の形式のデータフレームを作成し、以下のスクリプトで解析を行います。

###Comparison of sensitivity and specificity between two tests done in the same subjects###
###Random-effects meta-analysis with bivariate model using binomial distribution###
library(lme4)
library(lmtest)
###Y is a data frame as shown in Fig. 1###
(B = glmer(formula=cbind(true, n – true) ~ 0 + seCT + seMRI + spCT + spMRI + (0+sens + spec|Study_ID), data=Y, family=binomial))
(C = glmer(formula=cbind(true, n – true) ~ 0 + sens + spCT + spMRI + (0+sens + spec|Study_ID), data=Y, family=binomial))
###Is there a statistically significant difference in sensitivity between CT and MRI?
lrtest(B,C)


###Is there a statistically significant difference in specificity between CT and MRI?
lrtest(B,D)

実際には各研究IDとTP, FP, FN, TN のデータから図1の形式のデータフレームを作成する部分のスクリプトも必要ですが、ここではlmer()関数の回帰モデルと図1のデータラベルの関係を考えて、回帰分析とメタアナリシスの関係を考えるきっかけになればと思います。

なお、ここでは触れませんでしたが、感度・特異度の統合値と95%信頼区間の計算はCTとMRIについて別々に回帰分析を行った結果から算出します。

文献:
Chu H, Cole SR: Bivariate meta-analysis of sensitivity and specificity with sparse data: a generalized linear mixed model approach. J Clin Epidemiol 2006;59:1331-2 author reply 1332-3. doi: 10.1016/j.jclinepi.2006.06.011 PMID: 17098577

Reitsma JB, Glas AS, Rutjes AW, Scholten RJ, Bossuyt PM, Zwinderman AH: Bivariate analysis of sensitivity and specificity produces informative summary measures in diagnostic reviews. J Clin Epidemiol 2005;58:982-90. doi: 10.1016/j.jclinepi.2005.02.022 PMID: 16168343

Rutter CM, Gatsonis CA: A hierarchical regression approach to meta-analysis of diagnostic test accuracy evaluations. Stat Med 2001;20:2865-84. PMID: 11568945

Harbord RM, Deeks JJ, Egger M, Whiting P, Sterne JA: A unification of models for meta-analysis of diagnostic accuracy studies. Biostatistics 2007;8:239-51. doi: 10.1093/biostatistics/kxl004 PMID: 16698768

Arends LR, Hamza TH, van Houwelingen JC, Heijenbrok-Kal MH, Hunink MG, Stijnen T: Bivariate random effects meta-analysis of ROC curves. Med Decis Making 2008;28:621-38. doi: 10.1177/0272989X08319957 PMID: 18591542