#本程式碼之使用請參考《傻瓜也會跑統計Ⅱ》單元36

#每次執行本程式前，都請先按Ctrl+L，清空R console視窗，再執行程式

#***** 需注意處 *****
#說明：讀檔
dta <- read.csv(file='sem_data.csv', header=T, fileEncoding = 'UTF-8-BOM')

#說明：呼叫SEM所需套件lavaan
library(lavaan)

#***** 需修改處1 *****
#說明：設定測量模型，並將結果指定給一個叫作model的物件
model<- 
'X1=~rom1+rom2+rom3+rom4+rom5
X2=~com1+com2+com3+com4+com5
M=~sat1+sat2+sat3+sat4+sat5+sat6
Y=~wb1+wb2+wb3+wb4

#***** 需修改處2 *****
#說明：設定潛在變項之間的關係
X1~~X2
M~X1+X2
Y~M'

#說明：執行SEM並將結果指定給一個叫作result的物件
result <- sem(model, data=dta, std.ov=T, std.lv=T)

#說明：輸出結果
summary(result, fit.measure=T)

#說明：輸出填注「表格範例36-1」所需資訊
parTable <- standardizedSolution(result,ci=F)
parTable[,4:6] <- round(parTable[,4:6],3)
write.csv(parTable[parTable$op=="=~",],'sem_table.csv')

#計算 AVE 與 construct reliability
#說明：呼叫計算AVE與CR所需套件semTools
library(semTools)
result2<-sem(model, data=dta, std.lv=T)
reliability(result2)

#輸出標準化徑路係數
parTable[parTable$op=="~" ,1:7]

#輸出構念間相關
parTable[(parTable$op=="~~" & parTable$lhs!=parTable$rhs),1:7]

#呈現修模型所需指標
modindices(result)

#說明：呼叫畫SEM圖所需套件semPlot
library(semPlot)

#說明：畫SEM圖
#執行後到資料所在的資料夾，就能找到圖，檔名是sem_plot.png
png('sem_plot.png',width=1920,height=1080)
semPaths(result, whatLabels='std',residual=F,
fixedStyle=c('black',lty=1),
freeStyle=c('black',lty=1),
edge.label.position=.4)
dev.off()
