14 มี.ค. 2022 เวลา 06:35 • การศึกษา

Structure Equation Model

ปัจจุบันการวิเคราะห์สถิติขั้นสูงที่ยุ่งยากซับซ้อน สามารถทำได้ค่อนข้างสะดวก รวดเร็วและมีความแม่นยำสูง โดยใช้เครื่องมือโปรแกรมสำเร็จรูปที่มีให้เลือกใช้มากมาย อย่างไรก็ตามโปรแกรมสำหรับวิเคราะห์ทางด้านสถิติที่ได้รับความนิยมใช้โดยทั่วไปก็มีราคาค่าลิขสิทธิ์ในการใช้งานค่องข้างสูง และแม้ว่าจะมีรุ่นให้ทดลองใช้ก็จะมีข้อจำกัดต่างๆ กันไป การเลือกใช้โปรแกรมที่มีลิขสิทธิ์แบบ General Public License สามารถใช้งานได้โดยไม่มีค่าใช้จ่าย เช่นโปรแกรม R ก็เป็นทางเลือกที่นักวิจัยส่วนหนึ่งใช้งานอยู่
การวิเคราะห์แบบจำลองสมการโครงสร้าง (Structure Equation Model) ประกอบด้วยแบบจำลอง 2 แบบคือ
1
1. แบบจำลองมาตรวัด เป็นกระบวนการสร้างมาตรวัดตัวแปรที่กำหนดไว้ เป็นตัวแปรที่ต้องการศึกษาซึ่งอาจทำหน้าที่เป็นตัวแปรอิสระ (Independent Variables) หรือตัวแปรตาม (Dependent Variables) ในแต่ละช่วงตอนของกรอบแนวความคิด ตัวแปรแฝงที่ผู้วิจัยสร้างขึ้นมาด้วยตัวชี้วัด จะถูกประมวลด้วยเทคนิคการวิเคราะห์ปัจจัยเชิงยืนยัน (Confirmatory Factor Analysis) ว่าตัวชี้วัดทั้งหมดอธิบายการผันแปรของตัวแปรแฝงได้มากน้อยเพียงใด จากคำนิยามจริง (Real Definition) ที่ระบุว่าตัวแปรแฝงที่สร้างขึ้นมามีองค์ประกอบหรืออะไรบ้าง
ค่าผิดพลาด (Error) เป็นค่าผิดพลาดของรายการที่ใช้ในการจัดเก็บข้อมูลที่จะนำมาสร้างตัวแปร ความผิดพลาดที่เกิดอาจเป็นเพราะคำถามไม่ดีพอ หรือผู้ตอบไม่เข้าใจคำถาม ความคลาดเคลื่อนจึงเกิดขึ้น
1
ค่ารบกวน (Disturbance) เป็นค่าผิดพลาดที่เกิดจากการใช้สมการวิเคราะห์ความสัมพันธ์ระหว่างตัวแปรอิสระได้ไม่ครบถ้วน
2. แบบจำลองโครงสร้าง เป็นแบบจำลองเส้นทางความสัมพันธ์เชิงสาเหตุและผลระหว่างตัวแปรแฝงที่ระบุไว้ในแบบจำลองมาตรวัด โดยปกติจะแสดงเป็นภาพในลักษณะที่คล้ายกับภาพเส้นความสัมพันธ์ (Path Model) เป็นการแสดงเส้นทางระหว่างตัวแปรแฝงด้วยกัน ระหว่างตัวแปรประจักษ์กับตัวแปรแฝง และเส้นทางค่าผิดพลาดของตัวแปรประจักษ์และของตัวแปรแฝง
ตัวแปรที่ใช้ในแบบจำลองการวิจัย แบ่งเป็น 2 ประเภท คือ
  • 1.
    ตัวแปรภายนอก (Exogenous Variables) หมายถึงตัวแปรที่นักวิจัยไม่สนใจศึกษาสาเหตุของตัวแปรเหล่านี้ ตัวแปรสาเหตุของตัวแปรภายนอกจึงไม่ปรากฏในแบบจำลอง
  • 2.
    ตัวแปรภายใน (Endogenous Variables) หมายถึง ตัวแปรที่นักวิจัยสนใจศึกษาว่าได้รับอิทธิพลจากตัวแปรใด สาเหตุของตัวแปรภายในจะแสดงไว้ในแบบจำลองอย่างชัดเจน
1
เมื่อแบ่งประเภทของตัวแปรในแบบจำลองตามลักษณะการวัด จะแบ่งได้เป็น 2 ประเภท คือ
1. ตัวแปรแฝง (Latent or Unobserved Variables) เป็นตัวแปรเชิงสมมติฐาน (Hypothesis Variables) ที่ไม่สามารถวัดได้โดยตรงแต่มีโครงสร้างตามทฤษฎีแสดงผลออกมาในรูปของพฤติกรรมที่สามารถสังเกตได้ ตัวแปรแฝงเป็นตัวแปรที่ปลอดจากความคลาดเคลื่อนในการวัด นักวิจัยศึกษาตัวแปรแฝงโดยการวัดตัวแปรพฤติกรรมที่สังเกตได้แทน และประมาณค่าตัวแปรแฝงได้จากการนำกลุ่มตัวแปรสังเกตได้ที่เป็นตัวบ่งชี้ของตัวแปรแฝงนั้นมาวิเคราะห์องค์ประกอบ (Factor Analysis)
2. ตัวแปรสังเกตได้ (Observed or Manifest Variables) เป็นตัวแปรที่สามารถวัดหรือสังเกตได้โดยใช้เครื่องมือที่สร้างขึ้น
การวิเคราะห์โมเดลสมการโครงสร้าง
กรอบแนวคิดในการวิเคราะห์ความสัมพันธ์การบริหารจัดการทรัพยากรน้ำ
สมมติฐานในการศึกษา
ลักษณะส่วนบุคคล และการบริหาร จัดการของคณะกรรมการกลุ่มผู้ใช้น้ำ ส่งผลกระทบต่อความยั่งยืนในการบริหาร จัดการ แหล่งน้ำของกลุ่มผู้ใช้น้ำ
การกำหนดโครงสร้างของโมเดล (Model Specification)
เป็นการพัฒนาโมเดลสมการโครงสร้างที่เป็นตัวแทนของทฤษฎี ซึ่งนักวิจัยจะต้องศึกษาทบทวนแนวคิด ทฤษฎี และงานวิจัยที่เกี่ยวข้องเพื่อสร้างเป็นสมมติฐานการวิจัยโดยแสดงชุดของความสัมพันธ์ระหว่างตัวแปรต่าง ๆ ในโมเดลอย่างเป็นระบบเชื่อมโยงกัน แล้วสร้างเป็นแผนภาพ (Diagram) ซึ่งประกอบด้วยสัญลักษณ์แทนตัวแปรประเภทต่าง ๆ เช่น ตัวแปรสังเกตได้ (Observed Variable) ตัวแปรแฝง (Latent Variable)
2
โครงสร้างตามกรอบแนวความคิด
การเตรียมข้อมูลในโปรแกรม Excel ตามตัวอย่างนี้ เป็นข้อมูลจากงานวิชาการ “การบริหารจัดการทรัพยากรน้ำ” ซึ่งผู้ตอบแบบสอบถามคือ เกษตรกรกลุ่มผู้ใช้น้ำ จำนวน 186 ตัวอย่าง ประเมินโดยวิธีการให้คะแนนแบบ Likert scale ซึ่งเป็นคะแนน 5 ระดับ มากที่สุด 5 คะแนน มาก 4 คะแนน ปานกลาง 3 คะแนน น้อย 2 คะแนน และน้อยที่สุด 1 คะแนน
1
ตัวแปรอิสระประกอบด้วย การดำเนินงานกิจกรรมของคณะกรรมการ (board) การติดต่อสื่อสารของคณะกรรมการ (comm) ส่วนตัวแปรตามคือ ปัจจัยหรือกิจกรรมที่สนับสนุนให้กลุ่มประสบผลสำเร็จอย่างยั่งยืน 3 ด้านคือ เศรษฐกิจ (econ) สังคม ชุมชน (social) และสิ่งแวดล้อม (env) และข้อมูลลักษณะส่วนบุคคลประกอบด้วย เพศ (gender) อายุ (age) และจำนวนปีการศึกษา (edu)
เตรียมข้อมูลจากไฟล์ Excel
X1 = gender Y1 = econ
X2 = age Y2 = social
X3 = edu Y3 = env
X4 = board
X5 = comm
Load Packages
library(xlsx)
library(lavaan)
library(semPlot)
2
  • ขั้นตอนแรก นำเข้าข้อมูลจากไฟล์ water.xls เข้าสู่โปรแกรม R ด้วยคำสั่ง waterSEM <- read.xlsx("water.xls",sheetIndex = 1, header=TRUE)
3
  • ขั้นตอนที่ 2 กำหนดรูปแบบความสัมพันธ์ของตัวแปร และประมาณค่าด้วยวิธี Maximum likelihood (BFGS maximizer)
2
waterM <- "personF =~ edu + age + gender
manage =~ board + comm
sustain =~ econ + social + env
sustain ~ personF + manage
personF ~~ personF
manage ~~ manage
sustain ~~ sustain"
fit <- sem(waterM, data = waterSEM, optim.method=list("BFGS"))
2
  • ขั้นตอนที่ 3 แสดงผลการประมาณค่า
summary(fit,fit.measures = TRUE,rsquare=TRUE)
anova(fit)
fitmeasures(fit, fit.measures = c("chisq","df","pvalue", "cfi", "rmsea", "srmr"))
2
ผลการประมาณค่า
lavaan 0.6-10 ended normally after 143 iterations
Estimator ML
Optimization method BFGS
Number of model parameters 19
Number of observations 186
 
Model Test User Model:
Test statistic 36.729
Degrees of freedom 17
P-value (Chi-square) 0.004
1
Model Test Baseline Model:
Test statistic 1026.541
Degrees of freedom 28
P-value 0.000
1
User Model versus Baseline Model:
Comparative Fit Index (CFI) 0.980
Tucker-Lewis Index (TLI) 0.967
แสดงผลการประมาณค่าด้วยกราฟ
1
mOutput <- function(mdFit){
print(paste(
"Chisq df ",fitMeasures(fit, "df"),
" =", format(fitMeasures(fit, "chisq"),nsmall=4, digits = 4),
", Pvalue =", format(fitMeasures(fit, "pvalue"), digits = 2),
", RMSEA =", format(fitMeasures(fit, "rmsea"),nsmall=4, digits = 3),
", CFI =", format(fitMeasures(fit, "cfi"), digits = 4),
", SRMR =", format(fitMeasures(fit, "srmr"), digits = 3)
))
}
1
semPaths(fit,what="model", "par",sizeMan = 6.5,style = "lisrel",edge.color="darkblue",label.color="darkgreen",
border.color="green",rotation = 2,nCharNodes = 0,edge.label.cex = 0.9, fade = FALSE)
text(0.02,-1.3,mOutput(mdFit),font=9,cex = 0.65,col="blue")
grid(24, 24, lty = "dotted", lwd = 1, col = "lightgray")
1
ผลการประมาณค่าแบบจำลอง
จากผลการประมาณค่า จะเห็นได้ว่าค่าสถิติของ Model อยู่ในเกณฑ์ที่สามารถยอมรับได้ (ค่าสถิติ RMSEA ยังไม่มากกว่า .08)
  • ขั้นตอนที่ 4 การปรับ Model โดยดูค่าสถิติตัวบ่งชี้ในการปรับ
  • show(mi <- modificationindices(fit, sort = TRUE, maximum.number = 10)) head(mi[mi$op == "~~",],5)
1
Modufication Indices
  • ขั้นตอนที่ 5 ประมาณค่าโมเดลใหม่ โดยเพิ่มเติม age ~~ econ และ comm ~~ econ
1
waterMmi <- "personF =~ edu + age + gender
manage =~ board + comm
sustain =~ econ + social + env
sustain ~ personF + manage
personF ~~ personF
manage ~~ manage
sustain ~~ sustain
age ~~ econ
comm ~~ econ"
fitmi <- sem(waterMmi, data = waterSEM, optim.method=list("BFGS"))
summary(fitmi,fit.measures = TRUE,rsquare=TRUE)
anova(fitmi)
fitmeasures(fitmi, fit.measures = c("chisq","df","pvalue", "cfi", "rmsea", "srmr"))
1
  • ขั้นตอนสุดท้าย แสดงผลการประมาณค่าด้วยกราฟ
MOutput <- function(mdfit){
print(paste(
"Chisq df ",fitMeasures(fitmi, "df"),
" =", format(fitMeasures(fitmi, "chisq"),nsmall=4, digits = 4),
", Pvalue =", format(fitMeasures(fitmi, "pvalue"),nsmall=4, digits = 4),
", RMSEA =", format(fitMeasures(fitmi, "rmsea"),nsmall=4, digits = 3),
", CFI =", format(fitMeasures(fitmi, "cfi"),nsmall=4, digits = 4),
", SRMR =", format(fitMeasures(fitmi, "srmr"),nsmall=4, digits = 3)
))
}
Graph <- semPaths(fitmi,what="est",sizeMan = 6.5,style = "lisrel",rotation = 2,nCharNodes = 0,
edge.label.cex = 0.9,fade = FALSE)
Edgelist <- as.data.frame(Graph$Edgelist)
Labels <- Graph$graphAttributes$Nodes$labels
Curve <- rep(0, nrow(Edgelist))
Curve[Edgelist$from == which(Labels == "econ") & Edgelist$to == which(Labels == "age")] <- Curve[Edgelist$from == which(Labels == "age") & Edgelist$to == which(Labels == "econ")] <- 4
Curve[Edgelist$from == which(Labels == "econ") & Edgelist$to == which(Labels == "comm")] <- Curve[Edgelist$from == which(Labels == "comm") & Edgelist$to == which(Labels == "econ")] <- 4
LoopRotation <- Graph$graphAttributes$Nodes$loopRotation
LoopRotation[Labels == "econ"] <- pi
LoopRotation[Labels == "age"] <- 0
LoopRotation[Labels == "comm"] <- 0
qgraph::qgraph(Graph,edge.color="darkblue",label.color="darkgreen",border.color="green",
curve = Curve, loopRotation = LoopRotation)
text(0.02,-1.3,MOutput(mdfit),font=9,cex = 0.65,col="blue")
grid(24, 24, lty = "dotted", lwd = 1, col = "lightgray")
Fit Model
ต้องการข้อมูลหรือสคริปต์ไฟล์
share link
โฆษณา