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

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

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

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

#***** 需修改處 *****
#說明：設定因素模型，並將結果指定給一個叫作model的物件
model <- 
'X1 =~ rom1+rom2+rom3+rom4+rom5
 X2 =~ com1+com2+com3+com4+com5'

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

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

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

#說明：呼叫計算AVE與CR所需套件semTools
library(semTools)

#說明：計算 AVE 與 construct reliability
result2<-sem(model, data=dta, std.lv=T)
reliability(result2)

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

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

#說明：畫CFA圖
#執行後到資料所在的資料夾，就能找到圖，檔名是cfa_plot.png
png('cfa_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()