錄組的因果推斷:DAG、傾向評分與FDR敏感性分析)
簡介SmokingGeneExpression 面向生物信息學、統(tǒng)計分析與因果推斷學習者圍繞吸煙對健康肺組織基因表達的短期因果效應提供一套可復現(xiàn)的 R 語言項目材料。壓縮包共 45 個文件約 3.1MB包含 19 個 png 結(jié)果圖、13 個 txt 數(shù)據(jù)/說明、8 個 xlsx 表格、2 個 csv、1 個 pdf 及 R 腳本等覆蓋樣本 PCA、基因表達表、差異基因計數(shù)與輔助數(shù)據(jù)目錄按數(shù)據(jù)、結(jié)果和腳本組織便于按模塊檢索。項目涉及工具變量、傾向得分匹配、DAG 等因果識別思路并結(jié)合 RNA-seq 預處理、質(zhì)量控制、映射計數(shù)和差異表達分析幫助讀者理解從數(shù)據(jù)整理到結(jié)果解釋的完整流程。已有 148 人學習適合作為因果推斷與基因表達分析交叉練習的參考案例也可用于復現(xiàn)實驗、拆解分析步驟和積累 R 語言生物信息學實踐并提升分析復現(xiàn)與結(jié)果解釋的可靠性。1. 相關(guān)性的天花板吸煙與肺組織基因表達之間隔著三重識別難題把吸煙者和非吸煙者的肺組織轉(zhuǎn)錄組并排跑一次差異表達幾乎總能得到一份長長的基因清單。這份資源要把問題往回退一步不問「哪些基因和吸煙同時出現(xiàn)」而問「同一個人的吸煙狀態(tài)被改變表達會往哪邊走」。因果推斷在這里只是換個名字說相關(guān)系數(shù)還不夠它得先證明自己配得上「因果」二字。R 在這條鏈路里也不只是畫圖——從傾向評分到多重檢驗校正整條流程都落在同一套腳本生態(tài)里。值得拆開看是因為這類分析最容易在三個地方悄悄失效混雜沒調(diào)干凈、權(quán)重把樣本量吃光、把一個橫斷面的短期效應講成了終身結(jié)論。2. 把混雜畫成圖DAG、后門準則與「哪些變量碰不得」差異表達分析把「吸煙」當成一個分組標簽因果推斷把它當成一次干預。這個視角切換的代價是你必須先寫下自己的因果假設而不能讓模型自己去猜。DAG 就是這份假設的書面形式哪些箭頭存在、哪些箭頭不存在一旦畫出來調(diào)什么、不調(diào)什么就不再是主觀選擇而是圖上的可計算問題。2.1 潛在結(jié)局與三個識別假設可交換性到底在賭什么潛在結(jié)局框架的寫法很樸素每個樣本有兩個潛在表達值Y1 表示「如果這個人吸煙」Y? 表示「如果這個人不吸煙」我們想看的是 E[Y1] ? E[Y?]。問題在于每個人只能落在其中一個世界里觀測到的永遠只有 Y Y^X。所以估計量能成立靠的是三個假設撐住。第一個是一致性意思是「觀測到的暴露水平」和「潛在結(jié)局上標記的暴露水平」必須對得上。這條在轉(zhuǎn)錄組數(shù)據(jù)里比在臨床試驗里麻煩得多吸煙不是一個良定義的二元處理劑量、年限、最后一支煙到采樣的間隔都會改變暴露的實際含義。常見的做法是把暴露二值化成「采樣前 12 個月內(nèi)是否規(guī)律吸煙」并在方法里把這個窗口寫死。窗口越模糊一致性假設越容易被質(zhì)疑后面所有數(shù)字的可信度也跟著打折。第二個是條件可交換性也就是在給定一組協(xié)變量 Z 之后吸煙組和非吸煙組在潛在結(jié)局上沒有系統(tǒng)差異。這是整套方法里唯一無法用數(shù)據(jù)驗證的假設只能用領(lǐng)域知識和敏感性分析去支撐。我一般會這么理解它不是「證明沒有混雜」而是「聲明我把哪些混雜處理掉了剩下的留給偏倚分析去量化」。第三個是正性即每個協(xié)變量組合下既有人吸煙也有人不吸煙。聽起來是技術(shù)細節(jié)實際是轉(zhuǎn)錄組因果分析里翻車最多的地方如果某一批樣本幾乎全是吸煙者那么這一批里根本不存在可比較的反事實傾向評分會逼近 0 或 1權(quán)重隨之發(fā)散。正性一旦違背再精巧的估計量也救不回來只能縮小目標人群或做限制。還有一個常被忽略的前提是無干擾性即一個人的暴露狀態(tài)不會影響另一個人的表達。在個體層面的組織樣本里這一條基本成立但在同一批處理、同一張芯片上的樣本之間技術(shù)層面的「干擾」是真實存在的這也是批次必須進圖的原因。2.2 后門路徑的枚舉從 DAG 到最小充分調(diào)整集把假設畫成圖之后「該調(diào)什么」就變成一個圖論問題。后門準則說的是調(diào)整集 Z 必須阻斷從暴露到結(jié)局的所有后門路徑同時不能包含暴露的后代。前者防止漏調(diào)后者防止過度控制。這兩個方向的錯誤在轉(zhuǎn)錄組分析里都極其常見。下面是一張最小可用的肺組織轉(zhuǎn)錄組 DAG用 R 里的 dagitty 寫出來library(dagitty) g - dagitty(dag { smoke [exposure] expr [outcome] age - smoke ; age - expr sex - smoke ; sex - expr bmi - smoke ; bmi - expr batch - smoke ; batch - expr purity - smoke ; purity - expr smoke - expr smoke - inflam - expr smoke - cellcomp - expr }) # 枚舉所有滿足后門準則的最小調(diào)整集 adjustmentSets(g, exposure smoke, outcome expr, effect total)這段代碼的價值不在輸出本身而在它逼你把「為什么調(diào)這個變量」說清楚。effect total表示要估計總效應此時inflam炎癥通路活性和cellcomp細胞組成作為中介變量不進調(diào)整集因為它們處在smoke - ... - expr的路徑上。如果你把effect改成directdagitty 會把中介加進調(diào)整集——但那時候你得到的就不再是「吸煙對表達的總影響」而是「扣掉炎癥與細胞組成之后剩下的直接影響」兩者是完全不同的問題報告時必須寫明白。purity組織純度和batch是兩個容易爭議的節(jié)點。組織純度既是樣本處理的產(chǎn)物也會影響可測量的表達譜同時在某些隊列里與吸煙狀態(tài)相關(guān)進調(diào)整集是合理的。批次同理但如果批次與暴露高度共線調(diào)整會撞上正性違背這時候不是「調(diào)不調(diào)」的問題而是這批數(shù)據(jù)不該被用來回答這個問題。我通常會把adjustmentSets()的結(jié)果和領(lǐng)域知識對一遍而不是照單全收。圖是我畫的圖錯了后門準則只會幫我把錯誤執(zhí)行得更徹底。2.3 中介與對撞兩類「看起來該調(diào)、其實不能調(diào)」的變量中介變量是第一個陷阱。吸煙會誘導氣道炎癥炎癥通路活化又會改變一大批基因的表達。如果你把炎癥相關(guān)的通路活性放進調(diào)整集問的就不再是「吸煙會不會改變表達」而是「在不改變炎癥的前提下吸煙會不會改變表達」——這個反事實在現(xiàn)實里幾乎不存在。過度控制偏倚的機制就是這樣你從總效應里切掉了一段真實存在的通路剩下的估計量既不是總效應也不是干凈的直接效應而是一個沒有明確解釋的混合體。這里有一個判斷標準這個變量是不是在暴露發(fā)生之后才被改變的如果是它大概率是中介或者中介的下游默認不該進總效應的調(diào)整集。要做中介分析就得換一套更強的識別假設而不是簡單地在回歸里多加一列。對撞變量是第二個陷阱也是更隱蔽的一個。對撞的意思是某個變量同時被暴露和結(jié)局或結(jié)局的原因影響。按對撞分層會在暴露與結(jié)局之間憑空造出一條關(guān)聯(lián)。舉個具體的場景假設是否進入某項后續(xù)檢查同時受吸煙狀態(tài)和某些基因表達水平影響而你為了「控制數(shù)據(jù)質(zhì)量」只保留了做過這項檢查的樣本。這一步篩選就把對撞條件化了剩下的樣本里吸煙與表達之間會出現(xiàn)一個在真實人群中不存在的關(guān)聯(lián)方向還可能完全反掉。這類偏倚在生信流程里極難察覺因為篩選步驟通常被寫在「數(shù)據(jù)清洗」里沒人會把它和因果結(jié)構(gòu)聯(lián)系起來。還有一類變量介于兩者之間細胞類型組成。吸煙會改變肺組織的細胞構(gòu)成比如免疫細胞浸潤比例上升而不同細胞類型的表達譜差異巨大。所以細胞組成既可能是混雜如果它影響采樣與暴露的關(guān)聯(lián)也可能是中介如果它確實是吸煙導致的下游改變。這個岔路口值得單獨拿出來講后面第 5 章會展開。3. 估計量的取舍傾向評分與 g-computation 在表達矩陣上怎么落地有了調(diào)整集剩下的問題是用什么估計量把它落實。轉(zhuǎn)錄組數(shù)據(jù)有幾個很實際的特征樣本量通常在幾百這個量級協(xié)變量維度不高但彼此相關(guān)結(jié)局維度是兩萬左右。這三條決定了估計量不能照搬流行病學教科書里的默認選項。3.1 傾向評分的直覺每個樣本代表多少人傾向評分 e(Z) P(X 1 | Z) 的定義很直白在給定協(xié)變量的情況下這個人吸煙的概率。它的作用是把一堆協(xié)變量壓縮成一個標量讓「調(diào)整」變成「加權(quán)」。直觀理解是逆概率加權(quán)給每個樣本發(fā)一張票票的權(quán)重表示「這個人在目標人群里代表多少人」。一個吸煙概率只有 0.1 卻實際吸煙的人代表了 10 個像他這樣的人所以權(quán)重要放大到 10 倍。這種加權(quán)在協(xié)變量平衡上很有效但代價是方差。權(quán)重分布的尾部決定了估計量的穩(wěn)定性所以任何一份嚴肅的 IPW 分析都應該報告有效樣本量ESS (Σw)2 / Σw2ESS 掉到原始樣本量的一半以下時估計量的方差會明顯膨脹。我在實際操作里會把 ESS 當成一個硬性診斷指標而不是等結(jié)果跑完再去解釋為什么置信區(qū)間那么寬。傾向評分模型本身也有選擇logistic 回歸簡單、可解釋、系數(shù)能看但對非線性關(guān)系不敏感梯度提升或超級學習器擬合能力更強但容易過擬合在小樣本上反而不穩(wěn)。常見的折中是先用 logistic 回歸加必要的樣條項再用平衡診斷標準化均值差驗證加權(quán)后的協(xié)變量是否真的對齊而不是看模型 AUC 有多高。AUC 高不代表平衡好這一點很多人會搞混。3.2 為什么兩萬個基因只需要一套權(quán)重這是這套分析里最值得講清楚的一個設計點也是計算成本能壓下來的關(guān)鍵。傾向評分模型是 P(X | Z)它只涉及暴露和協(xié)變量完全不碰任何基因的表達值。換句話說無論你分析的是第一個基因還是第一萬個基因暴露模型都是同一個。所以最優(yōu)做法是擬合一次傾向評分得到一組權(quán)重然后在整個表達矩陣上復用。結(jié)局模型則相反E[Y | X, Z] 里 Y 是具體的基因每個基因一個模型必須逐個擬合。這個不對稱性直接決定了流水線的結(jié)構(gòu)環(huán)節(jié)依賴結(jié)局擬合次數(shù)可否復用傾向評分模型否1全矩陣復用逆概率加權(quán)估計否0純加權(quán)計算全矩陣復用g-computation 結(jié)局模型是2 × 基因數(shù)不可復用AIPW 校正項是2 × 基因數(shù)不可復用理解這張表之后很多工程上的取舍就自然了如果樣本量很大、基因很多純 IPW 的加權(quán)均值差計算可以完全向量化成本幾乎可以忽略而 AIPW 因為要給每個基因擬合兩個結(jié)局模型計算量會隨基因數(shù)線性增長。這也是為什么在探索階段大家更愿意先跑 IPW 拿到一個粗篩結(jié)果再對顯著的那部分基因補 AIPW 校正。順帶說一句這個不對稱性還有一個統(tǒng)計上的好處暴露模型只擬合一次意味著權(quán)重只估計一次不會因為基因不同而引入額外的模型選擇變異性。用一個固定的權(quán)重去掃全矩陣至少保證了所有基因是在同一個「偽人群」里比較的。3.3 代碼骨架從 PS 到 AIPW 的最小可運行鏈路下面這段代碼把上面的思路落成一個可以跑通的鏈路。協(xié)變量表cov_df每行一個樣本表達矩陣expr_mat每行一個基因列順序與協(xié)變量表一致。# ---- 1. 暴露模型一次擬合全基因復用 ---- ps_fit - glm(smoke ~ age sex bmi purity batch, family binomial(link logit), data cov_df) cov_df$ps - predict(ps_fit, type response) # 截尾把極端傾向評分壓到 [0.01, 0.99]避免單個樣本權(quán)重爆炸 cov_df$ps_t - pmin(pmax(cov_df$ps, 0.01), 0.99) # ---- 2. 穩(wěn)定化權(quán)重 ---- # 分子用邊際暴露概率防止權(quán)重整體漂移導致方差虛高 p_marg - mean(cov_df$smoke) cov_df$w - ifelse(cov_df$smoke 1, p_marg / cov_df$ps_t, (1 - p_marg) / (1 - cov_df$ps_t)) # 有效樣本量權(quán)重越不均勻ESS 越小方差越大 ess - sum(cov_df$w)^2 / sum(cov_df$w^2) cat(sprintf(n %d, ESS %.1f\n, nrow(cov_df), ess)) # ---- 3. 加權(quán)均值差估計單個基因的 ATE ---- ate_ipw - function(y, x, w) { # y 應先做 log2(CPM 1) 轉(zhuǎn)換并做分位數(shù)標準化 m1 - sum(w[x 1] * y[x 1]) / sum(w[x 1]) m0 - sum(w[x 0] * y[x 0]) / sum(w[x 0]) m1 - m0 } ate_all - apply(expr_mat, 1, ate_ipw, x cov_df$smoke, w cov_df$w)ps_t這一步需要解釋清楚截尾不是「修正」正性違背而是把極端權(quán)重壓下來換取方差穩(wěn)定代價是引入一點點偏倚。閾值取 0.01/0.99 是常見起點實際應該看傾向評分的分布形狀決定如果兩端本來就很稀疏壓到 0.05/0.95 也合理。ate_ipw是加權(quán)均值差本質(zhì)上是 Horvitz-Thompson 型估計量的穩(wěn)定化版本。它的假設是「加權(quán)后兩組可比」但沒有用結(jié)局模型做任何校正所以在協(xié)變量與結(jié)局關(guān)系復雜時會有殘余偏倚。補一個 AIPW 版本可以拿到雙重穩(wěn)健性ate_aipw - function(y, d, ps) { # 結(jié)局模型分別在兩組內(nèi)擬合再對全體樣本做預測 f1 - lm(y ~ age sex bmi purity batch, data d, subset d$smoke 1) f0 - lm(y ~ age sex bmi purity batch, data d, subset d$smoke 0) m1 - predict(f1, newdata d) m0 - predict(f0, newdata d) # 雙重穩(wěn)健結(jié)局模型或傾向評分模型有一個對估計量就一致 mean(m1 - m0 d$smoke * (y - m1) / ps - (1 - d$smoke) * (y - m0) / (1 - ps)) } ate_all_aipw - apply(expr_mat, 1, ate_aipw, d cov_df, ps cov_df$ps_t)AIPW 的公式看著嚇人拆開就三段第一段m1 - m0是 g-computation 的預測差第二段和第三段是殘差校正項用傾向評分的倒數(shù)給殘差加權(quán)。雙重穩(wěn)健的意思是f1/f0設定正確時即使傾向評分模型錯了估計也一致反過來傾向評分對、結(jié)局模型錯估計仍然一致。兩個都錯才會失效這比單靠一種模型實在得多。代價也很明確每個基因要擬合兩個線性模型兩萬個基因就是四萬次擬合。在幾百個樣本的規(guī)模上R 里的lm會慢但能忍受如果基因數(shù)再往上走就得換limma的矩陣化擬合或者speedglm把循環(huán)壓掉。還有一點容易被忽略ps必須和w使用同一個截尾后的版本否則 AIPW 的校正項和加權(quán)項不在同一個尺度上估計量會偏。這類細節(jié)不會報錯只會讓結(jié)果默默錯掉。4. 兩萬個基因同時檢驗FDR、陰性對照與未測混雜的敏感性分析單個基因的因果效應估計出來之后問題并沒有結(jié)束。多重檢驗、殘余混雜、模型設定錯誤這三件事會在規(guī)模效應下同時放大。一份可信的分析必須在這三處都給出交代而不是只報一個 q 值。4.1 BH 校正解決的是規(guī)模不是偏倚兩萬個基因同時檢驗即使全部為零效應按 α 0.05 也會有一千個「顯著」。Benjamini-Hochberg 過程把假發(fā)現(xiàn)率的期望控制在設定水平這是標準做法res$p_value - 2 * pnorm(-abs(res$ate / res$se)) res$q_value - p.adjust(res$p_value, method BH) # 報告時同時給出效應量與校正后顯著性 sig - subset(res, q_value 0.05 abs(ate) 0.2)這里有兩個容易被忽略的點。第一p 值來自漸近正態(tài)近似在 ESS 掉到三位數(shù)時這個近似很不靠譜置換檢驗會更穩(wěn)set.seed(2024) perm_null - replicate(200, { # 打亂暴露標簽保留協(xié)變量與權(quán)重的聯(lián)合結(jié)構(gòu) idx - sample(nrow(cov_df)) ate_ipw(expr_mat[1, ], cov_df$smoke[idx], cov_df$w) })第二也是更根本的BH 控制的是「零假設為真時的誤報比例」它假設你的 p 值本身是有效的。如果因果估計存在系統(tǒng)性偏倚校正后的 q 值只會讓偏倚變得更「顯著」。FDR 處理的是規(guī)模問題不是識別問題這兩件事必須分開看。4.2 陰性對照用「不該有信號」的地方校驗流程陰性對照是這套流程里性價比最高的驗證手段因為它不需要額外的數(shù)據(jù)只需要你事先想清楚「哪里本來就不該有信號」。陰性對照結(jié)局的做法是挑一組已知與吸煙沒有因果關(guān)系的基因比如某些管家基因或者與暴露完全無關(guān)的組織特異性基因跑完整條流水線。如果它們在 q 0.05 上大量顯著說明有殘余混雜或技術(shù)偏倚在推動整個分布這時候主結(jié)果里的信號也要打折扣。這個診斷的說服力很強因為它檢驗的不是「我的方法有沒有檢出真信號」而是「我的方法會不會制造假信號」。陰性對照暴露的思路類似找一個理論上不可能影響基因表達、但在數(shù)據(jù)里可能與表達相關(guān)的變量比如樣本采集的時間編號或者某個隨機分配的技術(shù)參數(shù)。如果它跑出了「顯著效應」幾乎可以肯定流程里混進了虛假關(guān)聯(lián)。我一般會把這組對照放在主分析之前跑。先確認系統(tǒng)是干凈的再看主結(jié)果比事后解釋一堆異常要省力得多。4.3 E-value未測混雜需要多強才能掀翻結(jié)論條件可交換性無法用數(shù)據(jù)驗證但可以量化它有多脆弱。E-value 回答的問題是需要多強的未測混雜與暴露和結(jié)局的關(guān)聯(lián)強度都達到這個水平才能把觀測到的效應完全解釋掉。E-value 越大結(jié)論越穩(wěn)。對連續(xù)結(jié)局需要先把標準化均值差 d 轉(zhuǎn)成近似的風險比evalue_from_d - function(d) { rr - exp(0.91 * abs(d)) # 標準化均值差到風險比的常用近似 if (rr 1) rr - 1 / rr rr sqrt(rr * (rr - 1)) # E-value 閉式解 } res$evalue - evalue_from_d(res$ate / res$sd_resid)解讀方式要小心E-value 只是一個「脆弱性指標」不是「混雜存在的概率」。一個 E-value 為 1.5 的結(jié)論意味著只需要一個中等強度的未測混雜就能翻盤這種結(jié)果在報告里應該被明確標成「不穩(wěn)健」而不是和 E-value 為 4 的結(jié)果混在一起講。0.91這個系數(shù)來自標準化均值差與風險比的近似轉(zhuǎn)換量綱上沒問題但前提是結(jié)局近似正態(tài)表達值做過 log 轉(zhuǎn)換之后這個前提大體成立。把 FDR、陰性對照、E-value 三者放在一起看你會得到一張比「顯著基因列表」信息量大得多的表哪些基因既有統(tǒng)計顯著性又有足夠大的效應量哪些基因的結(jié)論經(jīng)得起中等強度混雜的沖擊。這份表才是這份資源真正值得深挖的部分。5. 排查清單五個把因果結(jié)論做廢的典型現(xiàn)場下面這五條都是我在實際流程里反復遇到的。每一條都按「現(xiàn)象 → 原因 → 解決」寫方便直接對照自己跑出來的結(jié)果。5.1 權(quán)重極端與 ESS 崩塌現(xiàn)象權(quán)重最大值到了幾十某個基因的 ATE 在去掉一兩個樣本后符號翻轉(zhuǎn)置信區(qū)間寬得沒有意義。原因傾向評分的尾部重疊很差。常見誘因是把「吸煙包年數(shù)」這類直接定義暴露的變量塞進暴露模型或者協(xié)變量里有一個與暴露幾乎一一對應的變量比如某個只在吸煙者中采集的樣本批次。這兩種情況都會把 ps 推到 0 或 1 附近。解決先畫兩組傾向評分的疊加密度圖看重疊區(qū)域。然后做兩件事——把權(quán)重截尾到 [0.01, 0.99]報告截尾前后的 ESS 變化如果 ESS 仍然低于樣本量的一半改用重疊權(quán)重overlap weights它把目標人群收縮到「兩組都可能出現(xiàn)」的區(qū)域代價是改變了估計目標需要在方法里寫明。5.2 細胞組成的岔路口現(xiàn)象調(diào)整細胞類型比例之后一批免疫相關(guān)基因的效應幾乎消失而調(diào)整之前它們是全矩陣里最顯著的。原因bulk 組織的表達值是「細胞組成」和「細胞內(nèi)表達」的混合。吸煙會改變肺組織的細胞構(gòu)成所以組成變化既是真實的效應通路也是觀測表達的驅(qū)動因素。把它當混雜調(diào)掉等于把一部分真實效應切走不調(diào)又會把組成差異誤讀成細胞內(nèi)的調(diào)控變化。解決先做去卷積拿到每個樣本的細胞類型比例然后分兩條線報告一條是總效應不調(diào)組成一條是調(diào)整組成后的效應近似「細胞內(nèi)表達變化」。兩條線的差異本身就是信息它告訴你這個基因的效應有多少來自組織構(gòu)成重塑。只報其中一條都是在隱藏關(guān)鍵結(jié)論。5.3 批次與暴露共線現(xiàn)象傾向評分模型里批次變量的系數(shù)很大加入批次后 ESS 從 400 掉到 150一批基因的效應方向整體反轉(zhuǎn)。原因吸煙樣本集中在某幾個批次里。這可能是樣本收集年份不同、也可能是樣本來源不同。此時批次和暴露在數(shù)據(jù)里幾乎不可分正性假設在批次層面被違背。解決先做 batch × smoke 的列聯(lián)表看每個批次里兩組的樣本數(shù)。如果某些批次只有一組調(diào)整解決不了問題只能限制到兩組都有的批次或者把批次作為分層變量做分層估計再合并。硬調(diào)一個共線的協(xié)變量得到的不是「控制」是把暴露的變異也一起控掉了。5.4 選擇性推斷先篩后估現(xiàn)象先在全部基因上做關(guān)聯(lián)篩選再對篩出來的基因做因果估計q 值一片漂亮。原因同一份數(shù)據(jù)被用了兩次——一次用來選基因一次用來做推斷。篩選步驟本身消耗了數(shù)據(jù)里的信息后續(xù)的 p 值不再服從零假設下的均勻分布FDR 控制失效。解決樣本分裂是最直接的辦法一半選基因、一半估效應。樣本量不夠時至少做一次獨立性檢查把數(shù)據(jù)隨機分成兩半各自跑完整的篩選加估計看兩次的顯著基因重合度。重合度低就說明結(jié)果高度依賴具體的篩選路徑。5.5 把「FDR 顯著」當成機制證據(jù)現(xiàn)象報告里寫「吸煙通過某炎癥通路導致這批基因表達改變」。原因主效應顯著只說明暴露和結(jié)局之間有關(guān)聯(lián)完全不涉及中介。要聲稱「通過某通路」需要正式的中介分析而中介分析要求跨世界反事實假設比如「吸煙但通路活性被固定在不吸煙水平」這種情況是否存在橫斷面數(shù)據(jù)幾乎無法滿足。解決把結(jié)論降級。能說的是「這批基因的表達變化與炎癥通路活性變化在方向上一致」不能說「由炎癥通路介導」。真要做中介就得換數(shù)據(jù)設計或者至少用敏感性分析把中介假設的脆弱程度量化出來。6. 短期因果的邊界這份資源能回答什么、不該被拿來回答什么寫到這里有一個判斷需要擺到明面上這套流程估計的是「短期」因果而這個「短期」不是修辭是數(shù)據(jù)結(jié)構(gòu)決定的。暴露是采樣時點的近期吸煙狀態(tài)結(jié)局是同一時點的轉(zhuǎn)錄狀態(tài)兩者之間沒有時間維度。所以它能回答的是「當前吸煙狀態(tài)與當前表達之間的差異在多大程度上不能被已測混雜解釋掉」而不是「吸煙若干年后表達會怎么變」。把能答和不能答列清楚比任何模型細節(jié)都重要問題這套結(jié)構(gòu)能否回答卡在哪當前吸煙與當前表達的差異是否被已測混雜解釋掉能在三個識別假設成立時假設本身無法用數(shù)據(jù)驗證只能靠敏感性分析戒煙若干年后表達能否回到非吸煙水平不能橫斷面沒有隨訪也沒有戒煙時長表達變化有多少來自細胞組成改變部分能需要去卷積且組成變量的中介/混雜身份需逐基因判斷某基因的效應是否由某通路介導不能直接答中介分析需要更強的跨世界假設效應在某個疾病亞組里是否不同通常不能分層后每格樣本量太小交互檢驗功效不足這張表也解釋了為什么第 4 章的敏感性分析值得花那么多篇幅。橫斷面數(shù)據(jù)里條件可交換性永遠是一個聲明而不是一個事實你能做的只是把「這個聲明有多脆弱」量化出來。E-value 和陰性對照不能證明因果但它們能在結(jié)論站不住的時候提前報警。還有一個更微妙的取舍這套流程把「總效應」作為默認目標也就是不調(diào)整中介變量。這個選擇的代價是估計量里混進了細胞組成變化、炎癥通路活化等下游過程效應的生物學解釋會變得模糊好處是它對應一個真實存在、可被干預的問題——「讓人不吸煙表達譜會怎樣變化」。如果改成估計直接效應數(shù)字會更「干凈」但那個反事實在現(xiàn)實里幾乎無法實現(xiàn)。我傾向前者因為它至少對應一個能落地的干預。從那以后我每次跑這類腳本都會先強制走一遍「傾向評分重疊診斷 ESS 陰性對照」三件套再去看主結(jié)果。順序反過來人很容易被漂亮的 q 值帶著走等發(fā)現(xiàn)問題時已經(jīng)寫進結(jié)論了。這份資源的價值也在這里它把這條容易走偏的鏈路固化成了一套可復查的步驟而不是一組可以直接抄的數(shù)字。想動手的人從傾向評分那一段開始對照自己的數(shù)據(jù)改會比從頭搭一遍省很多時間。希望幫到你。本文還有配套的精品資源點擊獲取