結(jié)構(gòu)方程模型(SEM)及其R實(shí)現(xiàn)一個(gè)人旅行-的博客-CSDN博客結(jié)構(gòu)方程模型
SEM需要分析人員首先自行建立一個(gè)因子之間的關(guān)系模型,之后使用SEM對該模型進(jìn)行分析,根據(jù)結(jié)果評估模型的效果,之后不斷的對模型進(jìn)行調(diào)整,隨后重復(fù)“調(diào)整-評估”這一循環(huán),直至結(jié)果滿意為止。
首先第一個(gè)痛點(diǎn)就是起始模型的建立,這個(gè)東西就是非常個(gè)性化的東西了,可以說沒什么標(biāo)準(zhǔn),只能由每個(gè)分析人員根據(jù)研究的實(shí)際情況自行摸索。
當(dāng)然也有一些前期的基本工作,比如通過一些相關(guān)性分析、VIF、CCA/RDA等篩選一下用于建模的因子,去除不必要的因子,使得起始模型的建立更簡單一些,也可以通過相關(guān)性結(jié)合研究實(shí)際初步評估一下直接作用和間接作用。
第二個(gè)痛點(diǎn)就是對模型的調(diào)整,每個(gè)因子應(yīng)該放在什么位置,因子之間的關(guān)聯(lián)應(yīng)該怎么改變,這個(gè)東西是真的不知道怎么講,感覺只能是多嘗試。
常規(guī)分析兩個(gè)變量間是否存在關(guān)聯(lián)時(shí),我們會(huì)使用相關(guān)性分析,但是相關(guān)性只能表明兩個(gè)變量存在相互關(guān)系,但無法得出哪個(gè)變量是因?哪個(gè)變量是果?
此外,相關(guān)性分析只是兩個(gè)變量數(shù)量上的相互關(guān)系,而在實(shí)際情況中,有些變量可能不是直接與其它變量發(fā)生相互作用,而是通過第三個(gè)變量間接的與靶標(biāo)變量關(guān)聯(lián)。
結(jié)構(gòu)方程模型(Structural Equation Modeling,SEM)就是一種將兩個(gè)或多個(gè)結(jié)構(gòu)模型聯(lián)合起來,以實(shí)現(xiàn)對多元關(guān)系進(jìn)行建模的統(tǒng)計(jì)框架,其可以解決相關(guān)性分析中無法得到的因果關(guān)系以及區(qū)別直接和間接作用。
image.png
SEM模型匹配
SEM可以分為協(xié)方差SEM和分段SEM
1.協(xié)方差SEM
協(xié)方差SEM假定所有變量均具有正態(tài)分布,即數(shù)據(jù)服從多元正態(tài)分布,同時(shí)該分析還假定所有的變量均為獨(dú)立的。
使用piecewisedSEM包的keeley數(shù)據(jù)作為示例數(shù)據(jù),假定的初始關(guān)系為firesev由age決定,同時(shí)firesev還決定cover,使用lavaan包進(jìn)行協(xié)方差SEM模型匹配。
install.packages("piecewiseSEM")
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)
lavaan 0.6-12 ended normally after 1 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 4
Number of observations 90
Model Test User Model:
Test statistic 3.297
Degrees of freedom 1
P-value (Chi-square) 0.069
Parameter Estimates:
Standard errors Standard
Information Expected
Information saturated (h1) model Structured
Regressions:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
firesev ~
age 0.060 0.012 4.832 0.000 0.060 0.454
cover ~
firesev -0.084 0.018 -4.611 0.000 -0.084 -0.437
Variances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.firesev 2.144 0.320 6.708 0.000 2.144 0.794
.cover 0.081 0.012 6.708 0.000 0.081 0.809
R-Square:
Estimate
firesev 0.206
cover 0.191
keeley_sem <- sem(keeley_formula, data = keeley)
summary(keeley_sem, standardize = T, rsq = T)
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)
2.分段SEM
不同于協(xié)方差SEM,分段SEM使用Fisher‘s C statistic代替卡方檢驗(yàn),但是同樣要求P>0.05。
AIC會(huì)在給定模型的復(fù)雜性與其擬合優(yōu)度之間進(jìn)行權(quán)衡,可以將AIC值視為對應(yīng)了模型的準(zhǔn)確性,AIC值越小的模型表明越有可能準(zhǔn)確地預(yù)測新數(shù)據(jù),AIC小于2時(shí)認(rèn)為模型效果很好。
Structural Equation Model of keeley_psem
Call:
firesev ~ age
cover ~ firesev
AIC BIC
17.180 32.179
---
Tests of directed separation:
Independ.Claim Test.Type DF Crit.Value P.Value
cover ~ age + ... coef 87 -1.8018 0.075
Global goodness-of-fit:
Fisher's C = 5.18 with P-value = 0.075 and on 2 degrees of freedom
---
Coefficients:
Response Predictor Estimate Std.Error DF Crit.Value P.Value Std.Estimate
firesev age 0.0597 0.0125 88 4.7781 0 0.4539 ***
cover firesev -0.0839 0.0184 88 -4.5594 0 -0.4371 ***
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05
---
Individual R-squared:
Response method R.squared
firesev none 0.21
cover none 0.19
