「EBMシステマティックレビュー作成編4:ネットワークメタ分析のため各ソフト・オンラインソフトに入力する前の基本的な考えとRで解析後のデータ書き出しの注意点」の動画の補足データ・「EBMシステマティックレビュー作成編5」のデータも置いてある

動画

「EBMシステマティックレビュー作成編4:ネットワークメタ分析のため各ソフト・オンラインソフトに入力する前の基本的な考えとRで解析後のデータ書き出しの注意点」:


EBMシステマティックレビュー作成編5:ネットワークメタ分析は、各論文からデータを抽出して、並べてソフトをクリックするだけで結果がでるので簡単なことを紹介する動画(解釈・読み方のが難しいです):


動画で説明したエクセルのファイルと、それをpdfとしたもの。

作成編4


動画で使っていたparkinson病でないが、parkinsonのCSVファイルの抜粋(一部変更)

作成編5

動画で使ったデータそのもの

NMAのソフト

NMAのオンラインソフト(平均値で入力可能・入力後にMDとSMDを指定できる)
CINeMA (Confidence in Network Meta-Analysis)
CINeMAの入力フォーマットで
CINeMA への入力として使用できる 4 つの可能なデータ形式の例
MetaInsight

忘れていた!これも注目!
NMAstudio
http://www.nmastudioapp.com/

NMAのソフト(事前に、Arm-based データ を Contrast-based データに変換する。変換時にMDやSMDを指定。その後のメタ分析の時には変更できない)
EZR
R と R Studio

まずここを読んで、Rを導入、パッケージをインストールしましょう。
Doing Meta-Analysis in R
次に、Rに、netmetaなどをインストールしよう
12 ネットワークメタ分析
Arm-based データ ⇒ Contrast-based データの変換のところは必ず目を通しておいて欲しい
Arm-based データ ⇒ Contrast-based

●pairwiseのもと説明
Pairwise
●netmetaのコマンドなどの一覧
Netmeta

動画で行ったこと


Rのプロなら数秒で理解できることを数時間かかって読み解いたので、健忘録化していますが、説明付きです。

●RCTから表を取り出すときにいろいろ行ったが無理だったコマンド(同じ間違いをしないように)


#library (flextable)
#library("tableone")
#library(writexl)
#library(rmarkdown)
#library(knitr)
#library(pandoc)

●ライブラリー取り込みとファイル取り込み


#毎回、最初に取り込むもの
library("metafor")
library(dmetar)
library(netmeta)
#library(dplyr)が不明、dplyrはパイプ(%>%)で結果を渡すのに、なぜか必要で、これがナイトfilterが、最初の1行目のラベルを認識しない
library(dplyr)
library (igraph)

●元データ取り込み(自分で便利な方法で)


parkinson <- read.csv("C:/Users/Hid...hi/Google ドライブ/2016年works/1TMJ2015CPG/0診療ガイドライン/Rでの解析用/parkinson.csv")

●#フィルターをかけて行を減らす


#p0 <- filter(parkinson, G1 == "All3Mopen")
p0 <- filter(parkinson, G1 == "All3Mpain")
p0

●Arm-based を Contrast-basedに変換


#MDにしたい場合は、sm = "MD"としないと、netmetaのところで変わるのではない
p1 <- pairwise(list(Treatment1, Treatment2, Treatment3),
n=list(n1, n2, n3),
mean=list(y1, y2, y3),
sd=list(sd1, sd2, sd3),
data=p0, studlab=Study,
sm = "SMD")
p1

Arm-based を Contrast-basedについて

以下のような文章もあり、両方の違いは、単に形式の違いでないようであります。「現在、ネットワークメタアナリシスで最も広く使用されている方法はコントラストベースであり、各研究でベースライン治療を指定する必要があり、分析は相対的な治療効果(通常は対数オッズ比)のモデリングに焦点を当てています。ただし、絶対リスクなどの母集団平均の治療固有のパラメーターは、外部データ ソースまたは参照治療用の別のモデルがなければ、この方法では推定できません。最近では、アームベースのネットワーク メタ分析手法が提案されており、R パッケージ pcnetmeta は、その実装のためのユーザー フレンドリーな機能を提供します。」
引用:https://www.researchgate.net/publication/319558787_Performing_Arm-Based_Network_Meta-Analysis_in_R_with_the_pcnetmeta_Package

●EZRのための書き出し


write.csv(p1, file ="/Users/Hid...chi/Desktop/exportdata.csv")

追記:EZRでも、R Console画面で、library(netmeta)を行なってからなら、pairwiseの変換できました。パスを通してないので、Windowsは、Cドライブの、EZRDATAのフォルダにcvsファイルが保存されます。
library(netmeta)
p1 <- pairwise(list(T.1, T.2, T.3, T.4),
n=list(N.1, N.2, N.3, N.4),
mean=list(Mean.1, Mean.2, Mean.3, Mean.4),
sd=list(SD.1, SD.2, SD.3, SD.4),
data=Dataset, studlab=Study,
sm = "SMD")
write.csv(p1, file ="exportdata.csv")

●ネットワークメタ分析


#ネットワークメタ分析の本体、SMDの場合は、sm = "SMD"だが、pairwiseと違って表の表記のみなので注意
#reference.group = "Placebo"の行がなければ、アルファベット・数字の小さな治療が参照治療になるようだ
#net1 <- netmeta(p1)だけでも解析するようだ
#seq=c('plac', 'acar', ・・・', 'vild'))で順番を指定できる
#最後にnet1でなく、summary(net1)とすると、もとのデータもでてくる
#表のみを$で取り出そうと試すが、reference.groupに対する表のコマンドのようなものがなかったので無理みたい
#Random効果モデルの例
#動画の式より、TE = TE, seTE = seTE, treat1 = treat1, treat2 = treat2,をはずした。
net1 <- netmeta(p1,
studlab = Study,
sm = "SMD",
fixed = FALSE,
random = TRUE,
reference.group = "Placebo",
details.chkmultiarm = TRUE,
sep.trts = " vs ")
net1

●フォレストプロットの記載


#TEでソートをする
#drop.reference.group = TRUE,と入れると、参照群をなしにする
#leftlabs="Contrast to Placebo",とすると、左上に文字が入る
# xlab="HbA1c difference"とすると、下のバーの真ん中に文字が入る
#自動でグラフ記載なら、forest(net1, pooled='fixed') またはforest(x, pooled='random') だけで良い
forest(net1, pooled='random',
reference.group = "Placebo",
sortvar = TE,
xlim = c(-5, 5),
smlab = paste("Interventions vs. Placebo \n",
"(random)"),
label.left = "Favors Intervention",
label.right = "Favors Placebo")

●パス図 se.randomでもOK


netgraph(net1, thickness='se.fixed'); title('Fixed Effect Model')


●動画でないが、パス図をカラーにする場合


苦手で理由わからずだが、netmetで、TE = TE, seTE = seTE, treat1 = treat1, treat2 = treat2,をはずさないと、n.trtsが数えられずに症例数が合計されないようだ。最低、以下のnetmetaの式でも十分である。
まず、robの列を作る(深刻でない1,深刻2、非常に深刻3)
#参考:https://search.r-project.org/CRAN/refmans/netmeta/html/netmatrix.html
net1 <- netmeta(p1, common = FALSE, ref = "Placebo")
#RoBが最頻値で、以下のマトリックス表を作る
col.rob <- netmatrix(net1, rob, func = "mode", ties.method = "last",
levels = 1:3, labels = c("green", "yellow" , "red"))
col.rob
netgraph(net1, col = col.rob,
plastic = FALSE, thickness = "number.of.studies", multi = FALSE,
number.of.studies = TRUE, col.number.of.studies = "black",
points = TRUE, col.points = "blue",
cex.points = 6 * sqrt(n.trts / max(n.trts)),
labels = paste0(trts, " (n=", n.trts, ")"),
offset = 0.025)

●寄与度マトリックス Contribution


#この関数は、すべてのネットワーク処理比較に対する直接比較の寄与を生成します。出力は行列で、行はネットワーク処理効果を表し、列は直接処理効果の寄与を表します。
#資料にprintとあったが失敗、
#print( net4, random = TRUE, digits = 4, legend = TRUE)
net4 <- netcontrib(net1, random = TRUE)
net4
#なんと表にできた、$でrandomの結果のみを取り出して、それをcsvで書き出す
net5 <- netcontrib(net1, random = TRUE)$random
net5
write.csv(net5, file="contrib.csv")

●動画でないが、出版バイアス・ファンネルプロット

出版バイアス publication biasの説明:
#order. この引数は、仮説とされる出版バイアスメカニズムの順序を指定する。我々は、単にネットワーク内のすべての治療名を提供し、私たちの仮説に従ってそれらをソートする必要がある。たとえば、出版バイアスが「新しい」治療を好むかどうかを検証したい場合、すべての治療名を挿入し、最も古い治療から始めて、最も新しいタイプの介入で終了する。
#pch. これは、ファネルプロットで使用する研究のシンボルを指定するものである。19に設定すると、例えば単純なドットが表示される。
#col. この引数を使用すると、異なる比較を区別するために使用する色を指定することが可能である。ここで指定する色の数は、ファネルプロットにおける ユニーク な比較の数と同じでなければならない。実際には、これは多くの異なる色が必要であることを意味する。 R がプロットに使用できる色の完全なリストは、オンラインで見ることが可能である。
#linreg. TRUE` に設定すると、ファネルプロットの非対称性に対する Egger の検定 (Chapter 9.2.1.2) が行われ、その p値がプロット内に表示される。

実際に行ってみた:
#pch = cがまだ理解できてないがともかくできた
#order = cは、古いものからとした、pch = cは、どうも比較の数が12なので、1-456815-19で12個、col = cも12個に合わせたるとなぜかできる。

funnel(net1,
order = c("Placebo", "TENS", "Stabil-splint", "Massage", "Self-exercise", "CBT", "LLLT"),
pch = c(1:4, 5, 6, 8, 15:19), ,
col = c("blue", "red", "purple", "forestgreen", "grey",
"green", "black", "brown", "orange", "pink",
"khaki", "plum"),
linreg = TRUE)

●動画でないが、ネットワーク メタ分析における直接証拠の割合のプロット


#字が小さくなるのはいまいちだった。https://rdrr.io/github/MathiasHarrer/dmetar/man/direct.evidence.plot.html
#dep = direct.evidence.plot(net1, random=TRUE, comparison.label.size = 1,
numeric.label.size=1, subplot.ratio=c(3,1,1))

d.evidence <- direct.evidence.plot(net1, random=TRUE)
plot(d.evidence)
devidence <-d.evidence $data
write.csv(devidence, file="devidence.csv")
devidence


●動画でないが、リーグテーブル


netleague(net1, random=TRUE, digits=2, seq=ranks)
#CSV出力、ドキュメントに保存される
league00 <- netleague(net1, digits = 2, seq=ranks, bracket = "(", separator = " to ")
write.table(league00$random, file = "league00-random.csv",
row.names = FALSE, col.names = FALSE, sep = ",")


●動画ではないが、ネットワーク推定値を直接証拠と間接証拠の寄与に分割し、ネットワークメタ解析における局所的な矛盾を検定する方法


#nettableのIncoherence P-valueと同じであった
net6 <- netsplit(net1)$compare.random
net6
write.csv(net6, file="netsplit.csv")
#直接間接NMAの比較とのフォレストプロット
netsplit(net1) %>% forest()
#直接比較のみのフォレストプロット
#netsplit(net1) %>% forest( indirect = FALSE, overall = FALSE)

●直接間接NMAの比較


#net2 <- nettable(net1)
#net2
#どうも最初の表題があり、そのために、表と認識されず、中のコマンドで指定、writexl = !missing(path)の例で意味不明だった
#R パッケージwritexlが利用可能である必要があります
#ディスクトップにnettable.xlsxとして保存
#有効桁数(下)2桁とした(MDは1で、SMDは2のが良いかな)、P値は下3桁
#Pathなしだとドキュメントファイルに保存される
nettable(net1, digits = 2, digits.pval = 3, writexl = TRUE, path = "/Users/Hidemichi/Desktop/nettable.xlsx")
#その後net2としても、Rで見られないので、再度計算
net2 <- nettable(net1, digits = 2, digits.pval = 3)
net2
#Network table (random) effects model):の下outcomeとしてyuasa入るだけだnet2 <- nettable(net1, name = "yuasa")

●動画にはないが、総当たりのMDと信頼区間(対角線)


net3 <- netleague(net1, digits = 2, writexl = TRUE, path = "/Users/Hid...ichi/Desktop/nettable.xlsx")
net3 <- netleague(net1, digits = 2)
net3

いいなと思ったら応援しよう!