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

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

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

#說明：將變項標準化
nums <- unlist(lapply(dta, is.numeric))  
dta[,nums] <- apply(dta[ , nums],2,scale)

#說明：呼叫徑路分析所需套件lavaan
library(lavaan)

#***** 需修改處1 *****
dta$x1w <- dta$x1*dta$w 

#***** 需修改處2 *****
#說明：設定構念之間的關係

model<- 
'y1~x1+w+x1w
 y2~x1+x2'

#說明：執行徑路分析並將結果指定給一個叫作result的物件
result <- sem(model, data=dta)

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

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

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

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

#輸出畫交互作用圖所需數值
estcov <- result@vcov$vcov
npar <- result@Fit@npar
nvar <- dim(dta1)[2]
outdata <- matrix("",max(nvar,npar),npar+5)
outdata[1:nvar,1] <- names(dta1)
outdata[1:nvar,2] <- apply(dta1,2,mean)
outdata[1:nvar,3] <- apply(dta1,2,sd)
outdata[1:npar,6:(npar+5)] <- estcov
outdata[1:npar,5] <- colnames(outdata)[6:(npar+5)]<- names(coef(result)) 
colnames(outdata)[1:5] <- c('var','mean','sd','','par')
write.csv(outdata, file="pa1_table.csv",row.names=F)