結果方程模型(SEM)的理論和基本實現過程
寫在前面
之前有人點名希望寫一個SEM,其實之前我並沒有實際做過SEM,當時也沒有多考慮就答應了,但是查了一些資料之後我就後悔了
這個東西實在是很不好理解,也非常的麻煩,全程都需要手動進行,並且需要實際的分析人員對於研究的內容和分析的演算法都非常瞭解。
這裡要
特別感謝一下“生信小白魚”
,在幾個關鍵的位置都是在與小白魚討論之後才得以確認。
基本流程
其實單獨的做一個SEM的分析並不難,有很多的R包都可以實現,這個SEM的困難之處在於它不像其它的分析,輸入資料之後得到一個結果就完事了。
SEM需要分析人員首先
自行建立一個因子之間的關係模型
,之後使用SEM對該模型進行分析,根據結果評估模型的效果,之後
不斷的對模型進行調整
,隨後重複“調整-評估”這一迴圈,直至結果滿意為止。
瞭解了這個基本的過程之後,我就覺得我寫的這篇推文應該是解決不了SEM分析的痛點了。
首先
第一個痛點就是起始模型的建立
,這個東西就是非常個性化的東西了,可以說沒什麼標準,只能由每個分析人員根據研究的實際情況自行摸索。
當然也有一些前期的基本工作,比如透過一些相關性分析、VIF、CCA/RDA等篩選一下用於建模的因子,去除不必要的因子,使得起始模型的建立更簡單一些,也可以透過相關性結合研究實際初步評估一下直接作用和間接作用。
第二個痛點就是對模型的調整
,每個因子應該放在什麼位置,因子之間的關聯應該怎麼改變,這個東西是真的不知道怎麼講,感覺只能是多嘗試。
這兩個痛點大體上更多的是憑藉研究人員的經驗,因人而異、因時而異、因專案而異,所以下面的內容我只會介紹一下SEM的基本原理,以及單個SEM模型分析的結果意義。
當然沒有經驗的人也可以用“窮盡法”,把所有的可能性都試一遍,最後選擇結果最好的,最好不要進行這樣的嘗試。
我個人覺得只有在特定的專案中,或者是在其它分析結果都不好的時候,我才會考慮使用SEM進行分析,不然我可能壓根都不會做這個東西,實在是
很費時間還不一定能得到滿意的結果,特別是對於因子資料很多的研究
。
在微生物群落研究中,SEM的目的也是探索對微生物群落形成或變化其主要作用的影響因子,用ggcor做個Mantel和環境因子相關性的組合圖也挺香的吧~~
結構方程模型
常規分析兩個變數間是否存在關聯時,我們會使用相關性分析,但是相關性只能表明兩個變數存在相互關係,但無法得出
哪個變數是因?哪個變數是果?
此外,相關性分析只是兩個變數數量上的相互關係,而在實際情況中,有些變數可能不是直接與其它變數發生相互作用,而是透過第三個變數間接的與靶標變數關聯。
結構方程模型(Structural Equation Modeling,SEM)
就是一種將兩個或多個結構模型聯合起來,以實現對多元關係進行建模的統計框架,其可以解決相關性分析中無法得到的
因果關係以及區別直接和間接作用
。
結構方程模型的原理
SEM是資料分析的一種特殊形式,從一個指定了多變數間(假定的)相互關係的模型開始,變數間的關係被形式化為一組方程,用於測試這些變數並量化它們之間的關係。
SEM的本質是分析兩個變數的協方差。
方差
很好理解,方差估計一個變數中個體分佈偏離其平均值的情況。
協方差
就是兩個變數協同情況下的偏離情況,兩個變數的變化規律越協同一致,則其協方差的數值越大。
對於一系列變數,我們可以得到一個方差-協方差矩陣,在矩陣中對角線為變數的方差,其餘部分為變數的協方差,這個矩陣稱為oberseved方差-協方差矩陣。
之後透過最大擬然法建立的SEM模型對這個矩陣進行估計,得到一個model-estimated方差-協方差矩陣,最後將兩個矩陣結合得到最終的global oberseved方差-協方差矩陣。
在此過程中我們要
評估model-estimated的矩陣與observed矩陣的匹配情況,就是Goodness-of-fit
。
SEM的路徑係數
SEM的核心問題就是得到變數之間的迴歸係數
(通常是線性迴歸),從而推斷變數之間的依賴關係。
因為不同變數的數值不同,因此導致不同變數之間的協方差不在同一個水平上,也就無法比較,所以在比較變數間的協方差之前,需要對變數進行標準化,也就是
Z轉換
,將所有變數均轉換為均值為零,方差為1的變數,
使得不同變數之間的協方差在同一個數量級,因而能夠進行相互間的比較
。
當對變數進行
Z轉化之後,線性迴歸係數就與相關係數相等了
。
而如果
不進行標準化,線性迴歸係數等於兩個變數的協方差與解釋變數方差的商
,此時就與相關係數不相等了。
⚠️是否一定需要進行標準化,以及標準化的使用情況我沒研究明白。
路徑係數的8條規則:
如果兩個變數之間只有相互關係而沒有作用方向(沒有箭頭),稱之為外源性變數,此時可以使用雙向箭頭來表示兩個變數相關;
如果兩個變數之間只被一條路徑連線,那麼這條路徑的係數為迴歸係數;
如果兩個變數之間是間接聯絡路徑,則整個路徑的係數為路徑中每一個直接路徑係數的乘積;
當一個變數被多個路徑連線時,每一個路徑的係數都是偏回歸係數;
有箭頭指向的變數稱為內源性變數,箭頭的R2為解釋變數對這些內源性變數變化的解釋比例;
兩個內源性變數未分析的相關性就是其偏相關性;
一個變數對另一個變數的總的影響是其直接和間接影響的和;
模型的總效應與其總的相關性相等。
SEM模型匹配
SEM可以分為協方差SEM和分段SEM,在正常的分析中可以選擇其中之一進行,但我目前看到的一些好的文章均是兩種模型都做。
本文使用R語言的lavann包和piecewisedSEM包講解一下SEM模型的分析命令。
協方差SEM
協方差SEM
假定所有變數均具有
正態分佈
,即資料服從多元正態分佈,同時該分析還假定所有的變數均為
獨立的
。
使用piecewisedSEM包的keeley資料作為示例資料,假定的初始關係為firesev由age決定,同時firesev還決定cover,使用lavaan包進行協方差SEM模型匹配。
library(devtools)
install_github(“jslefche/piecewiseSEM@devel”,build_vignette=F)
install。packages(“lavaan”)
library(lavaan)
library(piecewiseSEM)
data(keeley)
keeley_formula <- ‘
firesev ~ age
cover ~ firesev
’
keeley_sem <- sem(keeley_formula, data = keeley)
summary(keeley_sem, standardize = T, rsq = T)
結果一般要求
Chi-square的p-value大於0.05
。
Regressions中的Estimate即為每一條路徑的R2,P(>|z|)為迴歸分析的顯著性p值。
分段SEM
分段SEM中,每組關係都是獨立估計的,此過程將整體關係分解為與每個響應對應的簡單或多回歸,分別對每個響應進行評估,最後合併以生成有關全域性SEM的推論。
keeley_psem <- psem(
lm(firesev ~ age, data = keeley),
lm(cover ~ firesev, data = keeley),
data = keeley)
keeley_psem
fisherC(keeley_psem)
## Fisher。C df P。Value
## 1 5。18 2 0。075
AIC(keeley_psem)
## [1] 17。18
BIC(keeley_psem)
## [1] 32。179
summary(keeley_psem, 。progressBar = FALSE)
不同於協方差SEM,分段SEM使用
Fisher‘s C statistic
代替卡方檢驗,但是同樣要求
P>0.05
。
AIC會在給定模型的複雜性與其擬合優度之間進行權衡,可以將
AIC值視為對應了模型的準確性,AIC值越小的模型表明越有可能準確地預測新資料,AIC小於2時認為模型效果很好
。
參考資料:https://jslefche。github。io/sem_book/
10000+:菌群分析 寶寶與貓狗 梅毒狂想曲 提DNA發Nature Cell專刊 腸道指揮大腦
系列教程:微生物組入門 Biostar 微生物組 宏基因組
專業技能:學術圖表 高分文章 生信寶典 不可或缺的人
一文讀懂:宏基因組 寄生蟲益處 進化樹
必備技能:提問 搜尋 Endnote
文獻閱讀 熱心腸 SemanticScholar Geenmedical
擴增子分析:圖表解讀 分析流程 統計繪圖
16S功能預測 PICRUSt FAPROTAX Bugbase Tax4Fun
線上工具:16S預測培養基 生信繪圖
科研經驗:雲筆記 雲協作 公眾號
程式設計模板: Shell R Perl
生物科普: 腸道細菌 人體上的生命 生命大躍進 細胞暗戰 人體奧秘
學習16S擴增子、宏基因組科研思路和分析實戰,關注“宏基因組”