言+貝葉斯GLMM實(shí)現(xiàn)生態(tài)學(xué)Meta分析全流程)
開(kāi)頭先講清楚一件事生態(tài)學(xué)里的Meta分析尤其是面對(duì)不滿足正態(tài)分布的生物學(xué)響應(yīng)數(shù)據(jù)時(shí)很多人第一反應(yīng)是“取對(duì)數(shù)”“轉(zhuǎn)成響應(yīng)比”然后再套一個(gè)頻率派的隨機(jī)效應(yīng)模型。這套流程用了十幾年本身沒(méi)問(wèn)題但我在實(shí)際項(xiàng)目中越做越覺(jué)得別扭數(shù)據(jù)明明是非正態(tài)的人為轉(zhuǎn)換后效應(yīng)量與方差都變了形多個(gè)研究的異質(zhì)性只能用一個(gè)I2籠統(tǒng)概括審稿人一句“為什么不考慮研究?jī)?nèi)部嵌套結(jié)構(gòu)”就能把你問(wèn)住。后來(lái)我把分析框架切換到貝葉斯廣義線性混合效應(yīng)模型GLMM配合R語(yǔ)言再結(jié)合AI提示詞輔助建模整個(gè)分析流程一下就順了。這篇文章就是一次完整思路的復(fù)盤(pán)。內(nèi)容圍繞“R語(yǔ)言 AI提示詞 貝葉斯 GLMM 生物學(xué)Meta分析”這條主線展開(kāi)適合正在做生態(tài)學(xué)、農(nóng)學(xué)、保護(hù)生物學(xué)等領(lǐng)域數(shù)據(jù)整合的研究生和科研工作者。讀完你能搞清楚貝葉斯GLMM在Meta分析里到底解決什么問(wèn)題、先驗(yàn)怎么選、MCMC收斂怎么看、森林圖怎么畫(huà)以及AI提示詞到底能幫你省多少事。1. 為什么生態(tài)學(xué)Meta分析要選貝葉斯GLMM這條路1.1 傳統(tǒng)Meta分析的三個(gè)“卡脖子”問(wèn)題傳統(tǒng)Meta分析通常走的是“效應(yīng)量倒方差加權(quán)”的路線。比如你要合并多個(gè)野外實(shí)驗(yàn)里“施加氮肥對(duì)植物地上生物量的影響”每個(gè)實(shí)驗(yàn)給出一個(gè)效應(yīng)量Hedges g 或 log響應(yīng)比再用這個(gè)效應(yīng)量的方差倒數(shù)為權(quán)重做加權(quán)平均。聽(tīng)起來(lái)很合理但實(shí)際數(shù)據(jù)一上手問(wèn)題就出來(lái)了。第一個(gè)問(wèn)題是效應(yīng)量的方差經(jīng)常被低估或估不準(zhǔn)。尤其是小型實(shí)驗(yàn)樣本量只有五六個(gè)重復(fù)時(shí)Hedges g 的小樣本校正項(xiàng)會(huì)讓方差變得很不穩(wěn)定而加權(quán)平均對(duì)大方差的研究權(quán)重壓得很低等效于“小樣本研究基本沒(méi)話語(yǔ)權(quán)”這在某些生態(tài)場(chǎng)景下是有爭(zhēng)議的。第二個(gè)問(wèn)題是異質(zhì)性處理太粗糙。傳統(tǒng)隨機(jī)效應(yīng)模型用一個(gè)τ2描述研究間方差但它假設(shè)所有研究是從同一個(gè)正態(tài)分布里抽出來(lái)的“隨機(jī)樣本”??缮鷳B(tài)學(xué)研究之間連響應(yīng)變量的分布類型都可能不同有的測(cè)存活率二項(xiàng)數(shù)據(jù)有的測(cè)個(gè)體數(shù)量計(jì)數(shù)數(shù)據(jù)有的是連續(xù)性狀。硬把所有東西都轉(zhuǎn)換成正態(tài)效應(yīng)量等于把不同尺子的測(cè)量結(jié)果強(qiáng)行化成同一刻度誤差會(huì)層層累積。第三個(gè)問(wèn)題是無(wú)法自然地處理多水平結(jié)構(gòu)。很多Meta分析數(shù)據(jù)其實(shí)是嵌套的同一個(gè)實(shí)驗(yàn)里有多個(gè)樣地同一個(gè)研究團(tuán)隊(duì)在不同年份做了多個(gè)實(shí)驗(yàn)或者同一篇論文里報(bào)告了多個(gè)獨(dú)立實(shí)驗(yàn)。這種結(jié)構(gòu)在傳統(tǒng)Meta分析里只能用“多重比較校正”或者“把每個(gè)實(shí)驗(yàn)當(dāng)成獨(dú)立研究”來(lái)處理前者損失信息后者假重復(fù)。1.2 貝葉斯GLMM如何一舉解決這些問(wèn)題貝葉斯GLMM解決這些問(wèn)題的思路并不復(fù)雜本質(zhì)是把數(shù)據(jù)留在原始尺度上建模。存活率數(shù)據(jù)直接用 family binomial(link logit)不用轉(zhuǎn)換計(jì)數(shù)數(shù)據(jù)用 family poisson 或 negative_binomial連續(xù)數(shù)據(jù)用 gaussian。你不再需要先把每個(gè)研究壓縮成一個(gè)效應(yīng)量而是可以直接用單個(gè)觀測(cè)記錄建分層模型。每一層的不確定性通過(guò)后驗(yàn)分布自動(dòng)傳播小樣本研究的估計(jì)會(huì)自動(dòng)向整體收縮shrinkage這正是貝葉斯分層模型最吸引人的地方。比如你研究“接種菌根真菌對(duì)幼苗存活率的影響”數(shù)據(jù)來(lái)自25個(gè)獨(dú)立研究、每個(gè)研究有處理組和對(duì)照組。傳統(tǒng)方法要先把每組存活率算出來(lái)再轉(zhuǎn)成log odds ratio然后加權(quán)合并。而貝葉斯GLMM直接對(duì)“每株幼苗是否存活”這個(gè)0/1響應(yīng)建模固定效應(yīng)是接種處理隨機(jī)效應(yīng)是研究ID和樣地嵌套logit尺度上的系數(shù)后驗(yàn)就是合并效果。且這個(gè)框架不僅能算總效應(yīng)還能直接得到“第7個(gè)研究的效應(yīng)是否與總體方向一致”這種衍生問(wèn)題。我自己的體會(huì)是貝葉斯GLMM并不是為了炫技而是順著數(shù)據(jù)的真實(shí)生成過(guò)程建模。你承認(rèn)了觀測(cè)之間存在依賴承認(rèn)了不同研究有各自的基線風(fēng)險(xiǎn)剩下的就是讓模型把這些信息合理分配。這種思路一建立你再回去看傳統(tǒng)Meta分析的“轉(zhuǎn)換-加權(quán)-合并”三步走會(huì)明顯感覺(jué)到信息丟失的環(huán)節(jié)太多。1.3 貝葉斯和頻率派GLMM怎么選如果只是想做普通GLMMR里的 lme4 包最快幾行代碼出結(jié)果。但要做Meta分析我強(qiáng)烈建議走貝葉斯。原因有三點(diǎn)第一頻率派GLMM對(duì)隨機(jī)效應(yīng)方差的估計(jì)用的是最大似然而Meta分析的隨機(jī)效應(yīng)方差研究間方差τ2通常樣本量小最大似然容易把τ2估計(jì)成0導(dǎo)致置信區(qū)間過(guò)窄貝葉斯會(huì)通過(guò)先驗(yàn)約束把τ2的后驗(yàn)分布完整估計(jì)出來(lái)區(qū)間更誠(chéng)實(shí)。第二貝葉斯的后驗(yàn)分布可以直接用來(lái)計(jì)算“處理組比對(duì)照組存活率提高5個(gè)百分點(diǎn)”的概率這對(duì)生態(tài)管理決策非常重要。第三審稿人對(duì)貝葉斯結(jié)果的接受度在近五年里明顯上升尤其生態(tài)學(xué)頂刊Bayesian hierarchical model已經(jīng)成了Meta分析的標(biāo)準(zhǔn)高頻詞。2. 建模前的核心思路拆解固定效應(yīng)、隨機(jī)效應(yīng)與先驗(yàn)設(shè)計(jì)2.1 哪些變量進(jìn)固定效應(yīng)哪些進(jìn)隨機(jī)效應(yīng)貝葉斯GLMM的模型公式可以寫(xiě)成這樣響應(yīng)變量 ~ 固定效應(yīng) (1 | 研究ID) (1 | 研究ID:樣地)這里有兩個(gè)隨機(jī)效應(yīng)項(xiàng)(1 | 研究ID)表示不同研究有各自不同的基線水平(1 | 研究ID:樣地)表示同一研究?jī)?nèi)部的樣地間也有隨機(jī)波動(dòng)。生態(tài)學(xué)里野外實(shí)驗(yàn)經(jīng)常存在樣地環(huán)境異質(zhì)性如果你不把這個(gè)層次放進(jìn)去殘差會(huì)被高估固定效應(yīng)的標(biāo)準(zhǔn)誤會(huì)變大。固定效應(yīng)的選擇要克制。Meta分析里最常見(jiàn)的固定效應(yīng)就是處理類別以及你關(guān)心的連續(xù)調(diào)節(jié)變量比如實(shí)驗(yàn)持續(xù)時(shí)間、緯度、年平均溫度。有一個(gè)常見(jiàn)錯(cuò)誤是往模型里塞一大堆調(diào)節(jié)變量美其名曰“探索異質(zhì)性來(lái)源”結(jié)果后驗(yàn)分布越來(lái)越寬每個(gè)變量都“不顯著”。我現(xiàn)在的原則是固定效應(yīng)最多放兩到三個(gè)有明確機(jī)理假設(shè)的變量其余的異質(zhì)性交給隨機(jī)效應(yīng)去吸收。還要考慮隨機(jī)斜率。如果研究數(shù)量足夠多至少10個(gè)以上且你有理由懷疑不同研究里處理效應(yīng)本身也有差異可以擬合(1 處理 | 研究ID)。這個(gè)模型更復(fù)雜但能直接回答“處理效應(yīng)在不同研究之間的波動(dòng)到底有多大”。如果研究數(shù)量少隨機(jī)斜率會(huì)讓MCMC采樣變得非常困難我通常會(huì)在泊松或二項(xiàng)模型里寧可先把隨機(jī)斜率省略也不要去硬擬合一個(gè)不收斂的模型。2.2 先驗(yàn)怎么選從“不知道”到“弱信息”貝葉斯分析的先驗(yàn)選擇往往是新手最困惑的環(huán)節(jié)。先澄清一點(diǎn)先驗(yàn)絕對(duì)不是“拍腦袋”。在生態(tài)學(xué)Meta分析中我們通常對(duì)效應(yīng)量的大小有基本常識(shí)。以二項(xiàng)GLMM為例固定效應(yīng)系數(shù)是在logit尺度上的。如果處理組比對(duì)照組的存活率從50%提高到70%logit尺度上的效應(yīng)量大約是0.85。那我在設(shè)先驗(yàn)的時(shí)候完全可以設(shè)一個(gè)正態(tài)先驗(yàn)Normal(0, 1)表示我相信處理效應(yīng)不大不小95%的置信質(zhì)量落在 exp(±2)≈0.14到7.4的比值比范圍內(nèi)。這算一個(gè)弱信息先驗(yàn)既不強(qiáng)制效應(yīng)必須存在也不會(huì)允許荒謬的極大效應(yīng)。隨機(jī)效應(yīng)方差的先驗(yàn)更關(guān)鍵也更敏感。常用選擇是half-t(3, 0, 1)或exponential(1)。brms包默認(rèn)用的是student_t(3, 0, 2.5)正態(tài)模型和gamma(0.01, 0.01)的歷史版本新版brms在二項(xiàng)模型里對(duì)隨機(jī)效應(yīng)方差會(huì)給出更合理的默認(rèn)先驗(yàn)。但我不建議直接依賴默認(rèn)尤其是當(dāng)研究數(shù)量少、數(shù)據(jù)稀疏時(shí)默認(rèn)先驗(yàn)可能過(guò)度收縮或過(guò)于寬松。保險(xiǎn)做法是做一次先驗(yàn)敏感性分析分別用弱信息先驗(yàn)、稍強(qiáng)先驗(yàn)、無(wú)信息先驗(yàn)擬合同一個(gè)模型比較固定效應(yīng)后驗(yàn)的均值和區(qū)間跨度是否發(fā)生明顯變化。如果變化很大說(shuō)明數(shù)據(jù)本身提供的信息不足研究間方差主要靠先驗(yàn)撐起來(lái)這時(shí)候要慎重下結(jié)論。如果三條鏈的后驗(yàn)估計(jì)幾乎重疊那你的結(jié)果是穩(wěn)健的審稿人問(wèn)先驗(yàn)問(wèn)題時(shí)也有底氣回答。2.3 數(shù)據(jù)格式是成敗關(guān)鍵長(zhǎng)表結(jié)構(gòu)用brms做Meta分析時(shí)數(shù)據(jù)格式必須整理成長(zhǎng)表long format。每條觀測(cè)占一行。展示一個(gè)經(jīng)典結(jié)構(gòu)研究ID樣地處理存活數(shù)總個(gè)體數(shù)年均溫S01P01接種486012.5S01P01對(duì)照315512.5S01P02接種526312.5S01P02對(duì)照345812.5注意這里不是把25個(gè)研究各壓縮成一行而是每個(gè)樣地的處理組和對(duì)照組各占一行。如果你的原始論文沒(méi)有報(bào)告樣地層面數(shù)據(jù)只報(bào)告了每個(gè)研究的總存活數(shù)和總個(gè)體數(shù)那結(jié)構(gòu)就變成研究ID處理存活數(shù)總個(gè)體數(shù)S01接種100123S01對(duì)照65113這種粒度也可以擬合只是隨機(jī)效應(yīng)只有研究一層。整理數(shù)據(jù)時(shí)務(wù)必檢查基線是否可比如果某個(gè)研究的對(duì)照組存活率是99%而另一個(gè)對(duì)照組是20%模型會(huì)把差異吸收到研究隨機(jī)截距里這沒(méi)問(wèn)題但解釋時(shí)要小心不要把它處理成數(shù)據(jù)錯(cuò)誤。3. 基于R語(yǔ)言brms的實(shí)操全流程3.1 環(huán)境準(zhǔn)備和包安裝我平時(shí)用R語(yǔ)言做貝葉斯建?;静焕@開(kāi)brms包。brms的優(yōu)勢(shì)是它把Stan的底層MCMC采樣包裝成了類似lme4的公式語(yǔ)法上手快又保留了貝葉斯建模的全部靈活性。安裝方式如下install.packages(brms) install.packages(cmdstanr, repos c(https://mc-stan.org/r-packages/, getOption(repos)))安裝完成后建議設(shè)置brms使用cmdstanr作為后端。這里有個(gè)性能上的原因默認(rèn)的rstan在Windows下經(jīng)常遇到Rtools配置問(wèn)題而且采樣速度比cmdstanr慢。配置方式library(brms) library(cmdstanr) set_cmdstan_path() # 如果已經(jīng)下載過(guò)cmdstan會(huì)自動(dòng)找到如果你還在猶豫要不要裝cmdstan我直接說(shuō)結(jié)論建模稍具規(guī)模研究數(shù)量20個(gè)以上、觀測(cè)500行以上cmdstanr的采樣速度優(yōu)勢(shì)就很明顯了。同時(shí)也建議安裝tidyverse和tidybayes前者處理數(shù)據(jù)后者處理后驗(yàn)分布的可視化。3.2 用模擬數(shù)據(jù)過(guò)一遍全流程為了讓你能直接跑通流程我用R語(yǔ)言自己造了一份模擬數(shù)據(jù)。設(shè)定背景25個(gè)研究研究?jī)?nèi)各有4個(gè)樣地每個(gè)樣地有處理組和對(duì)照組觀測(cè)變量是“幼苗存活數(shù)/總個(gè)體數(shù)”。處理組真實(shí)效應(yīng)在logit尺度上約為0.6研究間存在隨機(jī)截距波動(dòng)。代碼如下set.seed(2024) n_study - 25 study_id - rep(sprintf(S%02d, 1:n_study), each 8) plot_id - rep(sprintf(P%02d, 1:4), times 2 * n_study) treatment - rep(rep(c(inoculated, control), each 4), n_study) study_intercept - rnorm(n_study, 0, 0.8) # 研究間基線差異 logit_p - 0.6 * (treatment inoculated) study_intercept rnorm(n_study * 8, 0, 0.4) total - sample(40:80, n_study * 8, replace TRUE) surv - rbinom(n_study * 8, total, plogis(logit_p)) meta_data - data.frame(study_id, plot_id, treatment, total, surv)這里行業(yè)的做法是在擬合模型前先做探索性數(shù)據(jù)分析畫(huà)一個(gè)各研究處理組與對(duì)照組的存活率對(duì)比圖。如果發(fā)現(xiàn)某個(gè)研究處理組或?qū)φ战M出現(xiàn)0%或100%的極端值二項(xiàng)模型依然能處理不用特意去除。但如果某研究的樣本量只有10株且存活率是0先序說(shuō)的建議是用Beta-Binomial或者給數(shù)據(jù)加一層觀測(cè)級(jí)隨機(jī)效用來(lái)吸收過(guò)度離散。我們這里先用標(biāo)準(zhǔn)二項(xiàng)模型。3.3 模型擬合核心代碼逐行解讀接下來(lái)擬合貝葉斯GLMM。模型設(shè)置如下bayes_glmm - brm( surv | trials(total) ~ treatment (1 | study_id) (1 | study_id:plot_id), data meta_data, family binomial(link logit), prior c( prior(normal(0, 1), class b), prior(normal(0, 1.5), class Intercept), prior(exponential(1), class sd) ), chains 4, cores 4, iter 4000, warmup 1000, seed 123, backend cmdstanr )逐項(xiàng)解釋一下我的設(shè)計(jì)邏輯。surv | trials(total)是brms處理二項(xiàng)數(shù)據(jù)的標(biāo)準(zhǔn)語(yǔ)法表示存活數(shù)surv來(lái)自total次嘗試等價(jià)于每個(gè)觀測(cè)是一個(gè)成功概率為p的二項(xiàng)樣本。family binomial(link logit)選擇logit鏈接函數(shù)這是二項(xiàng)GLMM的默認(rèn)鏈接好處是系數(shù)可以在比值比odds ratio尺度上解釋這是Meta分析報(bào)告里最常見(jiàn)的效應(yīng)量之一。prior(normal(0, 1), class b)是給所有固定效應(yīng)系數(shù)設(shè)的弱信息先驗(yàn)。class b指固定效應(yīng)不包含截距。截距單獨(dú)設(shè)normal(0, 1.5)因?yàn)閘ogit尺度的截距代表對(duì)照組在所有隨機(jī)效應(yīng)為0時(shí)的平均存活概率如果對(duì)照組存活率在50%左右logit在0附近這個(gè)先驗(yàn)非常合理。prior(exponential(1), class sd)是給所有隨機(jī)效應(yīng)標(biāo)準(zhǔn)差設(shè)的先驗(yàn)。exponential(1)的眾數(shù)是0中位數(shù)約0.69均值1在生態(tài)學(xué)數(shù)據(jù)里它允許研究間有中等程度的異質(zhì)性又不至于讓方差跑飛。如果你擔(dān)心過(guò)于束縛可以換成half_t(3, 0, 1)。我兩個(gè)都試過(guò)對(duì)一般生態(tài)Meta數(shù)據(jù)結(jié)果差異很小。chains 4, iter 4000, warmup 1000表示4條MCMC鏈每條迭代4000次其中前1000次作為預(yù)熱丟棄實(shí)際每條鏈保留3000個(gè)后驗(yàn)樣本總共有12000個(gè)后驗(yàn)樣本用于推斷。這個(gè)配置對(duì)大多數(shù)生態(tài)數(shù)據(jù)足夠了。如果遇到Rhat不收斂我一般先加iter到8000而不是盲目增加鏈數(shù)。3.4 AI提示詞怎么幫你“少掉一半頭發(fā)”整個(gè)教程寫(xiě)到這里我必須專門(mén)拿出一節(jié)講AI提示詞。因?yàn)楝F(xiàn)在做R語(yǔ)言分析寫(xiě)代碼本身已經(jīng)不是最大的門(mén)檻最大的門(mén)檻是“你知不知道模型該怎么設(shè)、結(jié)果該怎么解釋”。AI在這里能幫你省大量查文檔時(shí)間但前提是你得會(huì)提問(wèn)。我日常用的提問(wèn)方式分三類。第一類是幫你生成代碼和排查報(bào)錯(cuò)這類提示詞要給出完整背景不能只甩一句“幫我跑一個(gè)GLMM”。我推薦這個(gè)模板我有一份生態(tài)學(xué)Meta分析數(shù)據(jù)包含25個(gè)獨(dú)立研究每個(gè)研究有多個(gè)樣地?cái)?shù)據(jù)處理是按處理組和對(duì)照組的二項(xiàng)計(jì)數(shù)數(shù)據(jù)存活數(shù)/總數(shù)。我想用R的brms包擬合貝葉斯廣義線性混合效應(yīng)模型固定效應(yīng)是處理類型隨機(jī)效應(yīng)是研究ID和研究ID內(nèi)的樣地嵌套。請(qǐng)幫我寫(xiě)出完整的brms模型擬合代碼包括先驗(yàn)設(shè)置和收斂診斷檢查并解釋每一步的作用。這個(gè)提示詞里包含了數(shù)據(jù)處理方式、模型層級(jí)、使用的包、想要的輸出層級(jí)。AI給的答案基本可以直接用。如果是排查報(bào)錯(cuò)把完整的報(bào)錯(cuò)信息復(fù)制進(jìn)去再附上你的模型代碼和數(shù)據(jù)結(jié)構(gòu)描述即可。第二類是幫你設(shè)計(jì)模型公式和選擇先驗(yàn)。舉一個(gè)我實(shí)際用過(guò)的提示詞我正在做關(guān)于菌根真菌接種對(duì)植物存活率影響的Meta分析。數(shù)據(jù)是二項(xiàng)計(jì)數(shù)。我想用貝葉斯GLMM建模研究數(shù)量有25個(gè)每個(gè)研究最多有4個(gè)樣地。問(wèn)題是有些研究樣本量很小我擔(dān)心隨機(jī)效應(yīng)方差估計(jì)不穩(wěn)。請(qǐng)從統(tǒng)計(jì)角度分析我應(yīng)該用什么樣的先驗(yàn)設(shè)置來(lái)避免過(guò)度收縮隨機(jī)截距和隨機(jī)斜率哪個(gè)更適合這個(gè)場(chǎng)景如果研究間基線差異很大是否應(yīng)該考慮為處理效應(yīng)設(shè)置隨機(jī)斜率這種開(kāi)放式問(wèn)題讓AI把“為什么”講透。我的經(jīng)驗(yàn)是回答里如果出現(xiàn)了你不理解的術(shù)語(yǔ)就繼續(xù)追問(wèn)比如“l(fā)kj先驗(yàn)是什么意思為什么你會(huì)推薦它”。每次追問(wèn)都是在補(bǔ)你自己的知識(shí)盲區(qū)。第三類是幫你解讀結(jié)果、寫(xiě)結(jié)果段落。跑完模型之后AI能根據(jù)brms的輸出生成一份結(jié)果解釋草稿。提示詞可以是我跑了一個(gè)貝葉斯二項(xiàng)GLMM固定效應(yīng)是處理類型隨機(jī)效應(yīng)是研究ID和樣地嵌套?,F(xiàn)在brms給了這些參數(shù)的后驗(yàn)估計(jì)和Rhat值處理系數(shù)后驗(yàn)均值0.5895%可信區(qū)間0.12到1.04Rhat全部小于1.01ESS大于1000。請(qǐng)幫我解讀這個(gè)結(jié)果在比值比尺度上的含義并寫(xiě)出適合論文結(jié)果部分的段落要求解釋固定效應(yīng)時(shí)結(jié)合生態(tài)學(xué)背景。這個(gè)用法我特別推崇因?yàn)樗话袮I當(dāng)“寫(xiě)手”而是當(dāng)“統(tǒng)計(jì)理解助手”。你拿到結(jié)果后自己得判斷是否合理AI只是幫你把數(shù)據(jù)語(yǔ)言翻譯成論文語(yǔ)言。3.5 收斂診斷別急著看結(jié)果先看三條鏈模型跑完后第一步不是看固定效應(yīng)而是看收斂診斷。直接用summary(bayes_glmm) plot(bayes_glmm, variable ^b_, regex TRUE)summary會(huì)給出每個(gè)參數(shù)的Rhat值和ESS。Rhat要小于1.01ESS有效樣本量至少在400以上。如果Rhat超標(biāo)最常見(jiàn)的解決辦法是增大iter或者重新參數(shù)化。brms對(duì)二項(xiàng)模型默認(rèn)使用非中心化參數(shù)化通常收斂問(wèn)題不大。另一個(gè)必做檢查是后驗(yàn)預(yù)測(cè)檢驗(yàn)。二項(xiàng)模型里我習(xí)慣于用tidybayes抽取后驗(yàn)預(yù)測(cè)分布把這個(gè)分布和原始數(shù)據(jù)對(duì)比library(tidybayes) pred_draws - add_predicted_draws(meta_data, bayes_glmm) ggplot(pred_draws, aes(x .prediction, group .draw)) geom_density(alpha 0.1) geom_vline(aes(xintercept surv), data meta_data, color red, lwd 0.8)如果紅色豎線觀測(cè)值落在預(yù)測(cè)分布覆蓋范圍內(nèi)說(shuō)明模型對(duì)數(shù)據(jù)的擬合沒(méi)問(wèn)題。如果大量觀測(cè)在分布尾部之外很可能模型有過(guò)度離散此時(shí)考慮換成beta_binomial族或者加觀測(cè)級(jí)隨機(jī)效應(yīng)。實(shí)戰(zhàn)中我遇到最多的是后者加一個(gè)(1 | obs)隨機(jī)效應(yīng)幾乎能解決所有離散問(wèn)題代價(jià)是要多估一個(gè)方差參數(shù)。4. 結(jié)果解讀效應(yīng)量、后驗(yàn)分布與森林圖4.1 后驗(yàn)分布怎么讀別再只看P值當(dāng)你完成收斂診斷后固定效應(yīng)處理系數(shù)的后驗(yàn)分布會(huì)像下面這樣library(tidybayes) treatment_draws - bayes_glmm %% gather_draws(b_treatmentinoculated) %% mutate(odds_ratio exp(.value)) treatment_draws %% median_hdi(odds_ratio, .width 0.95)這串代碼把處理組與對(duì)照組相比的logit系數(shù)后驗(yàn)轉(zhuǎn)換成了比值比結(jié)果就是“接種菌根真菌的幼苗存活比值比的中位數(shù)和95%最高密度區(qū)間”。舉個(gè)例子后驗(yàn)中位數(shù)0.82HDI區(qū)間0.15到1.52意思是處理組的存活幾率平均是對(duì)照組的2.27倍但區(qū)間跨度較大。你完全可以在此基礎(chǔ)上計(jì)算“P(處理效應(yīng) 0)”treatment_draws %% summarise(p_positive mean(.value 0))這個(gè)概率比頻率派的P值更直觀。在生態(tài)決策里P(效應(yīng)0)0.98和P(效應(yīng)0)0.83的含義完全不同前者是相當(dāng)確定的增益后者只是有趨勢(shì)。我建議在論文里報(bào)告這個(gè)概率很多審稿人看到這個(gè)數(shù)字會(huì)覺(jué)得你的分析更貼近管理需求。4.2 異質(zhì)性怎么報(bào)告τ和I2的貝葉斯等價(jià)物Meta分析里繞不開(kāi)異質(zhì)性。傳統(tǒng)的I2統(tǒng)計(jì)學(xué)上等價(jià)于研究間方差τ2占總體方差的比例。在貝葉斯模型里你可以從隨機(jī)效應(yīng)標(biāo)準(zhǔn)差的后驗(yàn)分布中直接獲得τ值var_draws - bayes_glmm %% gather_draws(sd_study_id__Intercept) %% summarise(median_tau median(.value), hdi_low hdi(.value)[1], hdi_high hdi(.value)[2])注意這里的標(biāo)準(zhǔn)差是在logit尺度上的。一個(gè)τ的后驗(yàn)中位數(shù)在0.7左右意味著研究間logit基線水平的典型波動(dòng)較大對(duì)應(yīng)到存活率不同研究的對(duì)照組存活率可能從20%到80%跨度。這個(gè)信息在結(jié)果部分必須交代因?yàn)樗苯佑绊懽x者對(duì)合并效應(yīng)量可外推性的判斷。如果τ的后驗(yàn)區(qū)間嚴(yán)重偏大且包含很大值說(shuō)明研究間異質(zhì)性高你的合并效應(yīng)只是一個(gè)平均值不同生態(tài)情境下效應(yīng)大小可能差別很大。這里給個(gè)表格幫助理解異質(zhì)性程度對(duì)應(yīng)的τ值在二項(xiàng)模型里的視覺(jué)感受τ值logit尺度異質(zhì)性程度對(duì)結(jié)論的影響0~0.3低合并效應(yīng)代表性好0.3~0.6中等需報(bào)告區(qū)間謹(jǐn)慎外推0.6高強(qiáng)烈建議做亞組或調(diào)節(jié)變量分析4.3 用ggplot畫(huà)出貝葉斯森林圖Meta分析的標(biāo)配輸出是森林圖。用brms和tidybayes可以很方便地畫(huà)出包含后驗(yàn)區(qū)間和隨機(jī)效應(yīng)收縮估計(jì)的森林圖。我這里提供一個(gè)簡(jiǎn)版study_effects - bayes_glmm %% spread_draws(r_study_id[study, Intercept]) %% mutate(study_effect exp(Intercept)) study_summary - study_effects %% median_hdi(study_effect, .width 0.95) %% arrange(study_effect) overall_draws - bayes_glmm %% gather_draws(b_treatmentinoculated) %% summarise(median median(exp(.value)), low hdi(exp(.value))[1], high hdi(exp(.value))[2]) ggplot(study_summary, aes(x study_effect, y reorder(study, study_effect))) geom_pointinterval(interval_size_range c(0.5, 1.5)) geom_vline(xintercept 1, linetype dashed) geom_vline(xintercept overall_draws$median, color red, size 1) labs(x 存活比值比 (處理 / 對(duì)照), y 研究ID)這個(gè)圖的含義要解釋清楚每個(gè)點(diǎn)是一個(gè)研究?jī)?nèi)部的隨機(jī)收縮估計(jì)線段是95%區(qū)間紅色豎線是合并效應(yīng)的中位數(shù)。正因?yàn)橛昧素惾~斯分層模型那些樣本量極小的研究會(huì)明顯向整體收縮——這在傳統(tǒng)固定效應(yīng)Meta分析里很難自然體現(xiàn)出來(lái)。這張圖一放審稿人對(duì)分析方法的質(zhì)疑立刻減少一大半。5. 常見(jiàn)陷阱與排查從模型警告到審稿意見(jiàn)5.1 收斂失敗的三種經(jīng)典表現(xiàn)與解法貝葉斯GLMM最常見(jiàn)的坑就是MCMC不收斂。第一種表現(xiàn)是Rhat明顯大于1.05通常在隨機(jī)效應(yīng)方差參數(shù)上出現(xiàn)。這最常見(jiàn)于研究數(shù)量太少少于10個(gè)或者某個(gè)隨機(jī)效應(yīng)分組只有極少數(shù)觀測(cè)。解決辦法是給研究ID設(shè)置更強(qiáng)的先驗(yàn)或者簡(jiǎn)化隨機(jī)效應(yīng)結(jié)構(gòu)比如去掉嵌套層次只保留(1 | study_id)。第二種表現(xiàn)是有效樣本量ESS很低后驗(yàn)分布出現(xiàn)明顯的“鋸齒狀”軌跡。這種情況一般是對(duì)強(qiáng)相關(guān)的參數(shù)同時(shí)采樣導(dǎo)致的比如截距和隨機(jī)效應(yīng)方差高度相關(guān)。brms自動(dòng)采用非中心化參數(shù)化已經(jīng)緩解了這個(gè)問(wèn)題但如果還在可以試試把預(yù)測(cè)變量中心化或者對(duì)連續(xù)調(diào)節(jié)變量做標(biāo)準(zhǔn)化處理。生態(tài)學(xué)Meta分析里我常把年份和溫度中心化效果立竿見(jiàn)影。第三種表現(xiàn)比較隱蔽Rhat全部達(dá)標(biāo)、ESS也正常但固定效應(yīng)后驗(yàn)區(qū)間異常寬甚至跨越好幾個(gè)數(shù)量級(jí)。這往往是數(shù)據(jù)分離complete separation現(xiàn)象——某個(gè)處理組里所有研究全部成功或全部失敗。遇到這個(gè)情況要么換family beta_binomial要么給固定效應(yīng)加上更強(qiáng)的先驗(yàn)比如normal(0, 0.5)。普通GP回歸的收縮先驗(yàn)如正則化馬蹄先驗(yàn)也能用但brms里設(shè)起來(lái)稍微復(fù)雜新手先用前兩種方案。5.2 先驗(yàn)敏感性分析怎么做才不會(huì)被審稿人懟審稿人最常問(wèn)的一句是“你的結(jié)果對(duì)先驗(yàn)選擇敏感嗎”如果你答不上來(lái)輕則被要求補(bǔ)分析重則被質(zhì)疑結(jié)果穩(wěn)健性。提前做敏感性分析是對(duì)的但做法有講究。我的做法是固定模型結(jié)構(gòu)不變只換三組先驗(yàn)方案固定效應(yīng)先驗(yàn)隨機(jī)效應(yīng)SD先驗(yàn)預(yù)期影響A主分析Normal(0, 1)Exponential(1)主結(jié)果B寬先驗(yàn)Normal(0, 5)half_t(3, 0, 2.5)檢驗(yàn)數(shù)據(jù)信息量C窄先驗(yàn)Normal(0, 0.5)Exponential(2)檢驗(yàn)先驗(yàn)主導(dǎo)D無(wú)信息Normal(0, 100)Uniform(0, 10)極端對(duì)比跑完四組后把處理系數(shù)的后驗(yàn)中位數(shù)和95%區(qū)間放到一個(gè)表里對(duì)比。如果A和B和D的結(jié)果基本一致說(shuō)明數(shù)據(jù)信息壓過(guò)了先驗(yàn)如果C方案下結(jié)果明顯向0收縮說(shuō)明你的研究數(shù)量不足以支持精確估計(jì)但這本身也是一個(gè)結(jié)論。寫(xiě)論文時(shí)我很誠(chéng)實(shí)在方法部分明確說(shuō)“我們進(jìn)行了先驗(yàn)敏感性分析結(jié)果顯示固定效應(yīng)后驗(yàn)估計(jì)在各先驗(yàn)方案間差異小于X%表明結(jié)果對(duì)先驗(yàn)選擇不敏感”。這里必須提醒一個(gè)常見(jiàn)的邏輯陷阱不要為了“證明穩(wěn)健”而故意選一個(gè)跟主分析結(jié)果一致的無(wú)信息先驗(yàn)然后宣布穩(wěn)健。真正的敏感性分析是去測(cè)試先驗(yàn)范圍對(duì)結(jié)論的影響不是尋找支持自己結(jié)論的先驗(yàn)組合。5.3 論文里該怎么報(bào)告貝葉斯GLMM的Meta分析最后聊報(bào)告規(guī)范。生態(tài)學(xué)期刊對(duì)貝葉斯分析的報(bào)告要求越來(lái)越細(xì)一份完備的方法描述至少包含以下內(nèi)容模型公式必須完整寫(xiě)出。不能用“我們使用了貝葉斯GLMM”一句話帶過(guò)要把固定效應(yīng)、隨機(jī)效應(yīng)、分布族和鏈接函數(shù)全部寫(xiě)清楚比如“存活數(shù)以二項(xiàng)分布建模logit鏈接固定效應(yīng)為接種處理隨機(jī)效應(yīng)為研究ID和樣地嵌套以允許不同研究和樣地具有不同基線存活率”。先驗(yàn)必須報(bào)告。把每個(gè)參數(shù)類別的先驗(yàn)寫(xiě)在方法部分并說(shuō)明選擇理由。如果有先驗(yàn)敏感性分析放在補(bǔ)充材料或結(jié)果末尾。MCMC采樣細(xì)節(jié)必須報(bào)告。包括鏈數(shù)、迭代數(shù)、預(yù)熱數(shù)、Rhat診斷和有效樣本量。這些是評(píng)審人默認(rèn)重點(diǎn)審查的內(nèi)容。收斂診斷和相關(guān)圖形建議放進(jìn)補(bǔ)充材料。主文給森林圖和關(guān)鍵后驗(yàn)參數(shù)即可。效應(yīng)量報(bào)告要雙尺度。模型本身是在logit尺度上擬合的但讀者更習(xí)慣看概率或比值比。我寫(xiě)結(jié)果時(shí)固定效應(yīng)系數(shù)報(bào)logit尺度的中位數(shù)和95%區(qū)間再在同一句或同一表里給出轉(zhuǎn)換后的比值比或概率增幅。這個(gè)習(xí)慣是從幾次審稿意見(jiàn)里學(xué)來(lái)的審稿人特別喜歡“實(shí)際效應(yīng)大小”這種表述。最后再分享一點(diǎn)我自己的操作習(xí)慣做生態(tài)學(xué)Meta分析這五年我逐漸把流程固定成一套“模板化”操作先畫(huà)數(shù)據(jù)地圖哪些研究有樣地嵌套、哪些有多個(gè)處理組再?zèng)Q定隨機(jī)效應(yīng)層級(jí)然后寫(xiě)AI提示詞讓AI把初版代碼和結(jié)果解釋生成出來(lái)我再逐項(xiàng)檢查模型的統(tǒng)計(jì)意義和生態(tài)意義。檢查時(shí)我會(huì)特別留意一個(gè)點(diǎn)如果模型給出的研究間方差τ特別大我會(huì)單獨(dú)把那幾個(gè)極端研究拎出來(lái)看原始論文而不是直接當(dāng)成“異質(zhì)性”糊弄過(guò)去。每次這么做都能發(fā)現(xiàn)一兩篇論文里數(shù)據(jù)提取錯(cuò)誤這是純統(tǒng)計(jì)流程難以察覺(jué)的。AI提示詞工具改變了我們寫(xiě)代碼的方式但沒(méi)改變統(tǒng)計(jì)分析的本質(zhì)你得先搞明白自己的數(shù)據(jù)是怎么產(chǎn)生的、研究設(shè)計(jì)是怎么嵌套的、生態(tài)學(xué)假設(shè)是什么模型代碼只是最后一步。把這篇文章里的流程多跑幾遍你會(huì)發(fā)現(xiàn)在生物學(xué)Meta分析里貝葉斯GLMM既沒(méi)有想象中那么神秘也沒(méi)有想象中那么難落地。祝你的下次分析少遇幾次不收斂。