นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
เครือข่าย
สมาชิก · ติดตาม: 0 · ผู้ติดตาม: 16

อ่าน: 457
ความเห็น: 0

semPlot: Plot path diagram for SEM models in R: ก้าวย่างทางเดิน ลืมเลือนคืนวันดั้นด้นไป

R package สำหรับวาด path diagram ของ sem model

หลังจากที่เราสร้างโมเดลโครงสร้างและนำไปเปรียบเทียบกับข้อมูลจริงที่เก็บรวบรวมมา หรือที่เราเรียกว่าการวิเคราะห์องค์ประกอบเชิงยืนยัน (Confirmatory Factor Analysis: CFA)

เราสามารถสร้าง path diagram ของการวิเคราะห์โมเดลโครงสร้างได้ ซึ่งหากเราวิเคราะห์ข้อมูลด้วยโปรแกรม R และใช้ package sem เราสามารถใช้ฟังก์ชัน pathDiagram() ซึ่งเป็นฟังก์ชันใน package sem สำหรับสร้าง path diagram ได้เลย

นอกจากการสร้าง path diagram ด้วยฟังก์ชัน pathDiagram() ใน sem แล้ว ยังมีฟังก์ชันอื่น ๆ สำหรับวาด path diagram ของการวิเคราะห์โมเดลโครงสร้างได้อีก เช่น ฟังก์ชัน semPaths() ที่เป็นฟังก์ชันใน package semPlot

semPaths() นั้นมีตัวเลือกสำหรับปรับแต่งส่วนต่าง ๆ ของ path diagram มากมาย และต้องใช้เวลาในการทำความเข้าใจอยู่พอสมควร

บันทึกนี้เป็นตัวอย่างของการใช้ฟังก์ชัน semPaths() สำหรับการสร้าง path diagram ของการวิเคราะห์โมเดลโครงสร้าง ซึ่งจะไม่พูดถึงในรายละเอียดมากนัก (เพราะยากและยาว)

เริ่มจากการวิเคราะห์โมเดลโครงสร้างก่อนนะครับ และการวิเคราะห์โมเดลโครงสร้างจะใช้ sem package

> library(sem)
> t7 <- read.table("t7.dat", header=T)
> cot7 <- cor(t7)
> ct7 <- cfa(reference.indicators=FALSE, covs=NULL)
1: vp: visperc, cubes, lozenges
2: rd: paragrap, sentence, wordmean
3: rd: vp:
4:
Read 3 items
NOTE: adding 6 variances to the model

> semt7 <- sem(ct7, N=73,S=cot7)

 

เราเก็บผลลัพธ์ของการวิเคราะห์โมเดลโครงสร้างไว้ใน R Object ที่ชื่อ semt7

ซึ่งเมื่อตรวจสอบ class ของ semt7 พบว่า

> class(semt7)
[1] "objectiveML" "sem"

semt7 มี class เป็น objectiveML และ sem

คราวนี้เราจะสร้าง path diagram ของ semt7 ด้วยฟังก์ชัน semPaths() ที่เป็นฟังก์ชันใน package semPlot

ในที่นี้ผมจะแสดงตัวอย่างการใช้ฟังก์ชัน semPaths() เพียงตัวอย่างเดียวนะครับ โดยที่ผมกำหนดตัวเลือกต่าง ๆ หลาย ๆ ตัวเลือก ซึ่งท่านผู้อ่านสามารถนำไปปรับใช้ได้ โดยดูจากตัวอย่างคำสั่ง ไม่ต้องการใช้ตัวเลือกไหนก็ตัดออกไปครับ

 

> library(semPlot)
> semPaths(semt7, whatLabels="est", rotation=2 ,curve=1, layout="tree2" ,nDigits=3, cardinal=T, color=list(man = "gold",lat = "lightgreen", int="orange"), centerLevels=T, edge.label.position= c(rep(0.8,7), rep(0.5,8)), edge.label.cex =0.8, nCharNodes=0, nCharEdges=0, sizeMan=13, sizeMan2=5, fixedStyle= c("red",3), freeStyle= c("blue","solid"), optimizeLatRes=T, rescale=T, label.scale=F, weighted= F, normalize= T, borders= T, border.color= c("magenta"), border.width=3, label.norm = "oooooooooo", label.font=c(2,2), edge.label.font=1, label.cex =1, label.color= c(2:6), bgcontrol=8)

 

ผลที่ได้จากบรรทัดคำสั่งข้างต้นเป็นดังรูปด้านล่างครับ

 

 

มาดูตัวเลือกบางตัวในบรรทัดคำสั่งข้างต้นกันนะครับ

  • whatLabels="est" เป็นการกำหนดว่าจะให้แสดงค่าอะไรสำหรับ edge labels ใน path diagram ในที่นี้กำหนดให้เป็น "est" หรือค่าพารามิเตอร์ที่ได้จากการประมาณค่าของสมการโครงสร้าง ตัวเลือกอื่น ๆ ดูได้จาก help ของฟังก์ชัน
  • layout= "tree2" เป็นการเลือกรูปแบบของ path diagram โดยเลือกใช้รูปแบบ "tree2" หรือโครงสร้างต้นไม้แบบที่ 2 ตัวเลือกอื่น ๆ เป็น tree circle circle2 spring ลองเปลี่ยนดูครับ
  • rotation= 2 เป็นการระบุว่าให้หมุน layout ไปทางไหน หรือจะให้ exogenous variables อยู่ทางไหน ตัวเลือกมี 1-4 ครับ โดยเริ่มจาก บน (top) ซ้าย (left) ล่าง (bottom) ขวา (right) ตัวเลือกนี้จะใช้ได้เมื่อเราเลือก layout เป็น tree หรือ tree2
  • nDigits =3 เป็นการกำหนดจำนวนทศนิยมสำหรับค่าพารามิเตอร์ที่แสดงใน path diagram ค่า default จะเป็น 2
  • cardinal=T เป็นการกำหนดว่าจะให้หัวลูกศรชี้ไปที่ตำแหน่งไหน กำหนดเป็นตำแหน่งไหนบ้างนั้นดูเพิ่มเติมจาก help นะครับ ผมกำหนดเป็น TRUE หรือให้ชี้ไปตรงตำแหน่งกลาง (ดูรูปประกอบ)
  • color=list(man = "gold",lat = "lightgreen", int="orange") กำหนดสีของส่วนต่าง ๆ ในที่นี้กำหนดไว้ 3 ส่วนแต่ใน path diagram มีแค่ 2 ส่วน โดยที่ man= manifest nodes, lat= latent nodes และ int = intercepts และค่าสีที่กำหนดในส่วนนี้จะถูกแทนที่ด้วยการกำหนดสีในตัวเลือกอื่น ๆ ได้อีก
  • centerLevels=T จัดตำแหน่ง labels ให้อยู่กึ่งกลาง
  • edge.label.position= c(rep(0.8,7), rep(0.5,8)) กำหนดตำแหน่ง edge labels ในที่นี้ผมกำหนดตำแหน่งไว้ 7+8= 15 ตำแหน่ง โดยให้ 7 ตำแหน่งแรกมีค่าระยะทางที่คิดเป็น proportion เท่ากับ 0.8 และอีก 8 ตำแหน่งที่เหลือให้มีค่า proportion เป็น 0.5 ค่า default ของทุกตำแหน่งจะเป็น 0.5 หรือเป็นตำแหน่งที่อยู่กึ่งกลาง (ดูรูปประกอบ ส่วนที่เป็นค่าตัวเลขต่าง ๆ)
  • edge.label.cex =0.8 กำหนดขนาดของตัวอักษรของ edge labels ขนาดในที่นี้คือจำนวนเท่าของขนาดจริง
  • nCharNodes=0 กำหนดว่า labels ของ node จะให้ labels ได้กี่ตัวอักษรหรือจะย่อ labels ให้เหลือกี่ตัวอักษร ในที่นี้กำหนดให้เท่ากับ 0 คือไม่ย่อให้ใช้ labels เต็ม
  • nCharEdges=0 กำหนด labels ส่วน edge ความหมายเหมือนกับตัวเลือก nCharNodes
  • sizeMan=13 กำหนดความกว้างของส่วน manifest nodes
  • sizeMan2=5 กำหนดความสูงของส่วน manifest nodes เมื่อกำหนดค่า sizeMan และ sizeMan2 ไม่เท่ากันส่วน manifest nodes ก็จะเป็นรูปสี่เหลี่ยมผืนผ้า และเราสามารถกำหนดรูปร่างของ manifest nodes ได้โดยผ่านทางตัวเลือก shapeMan
  • fixedStyle= c("red",3) กำหนดว่าจะ fix รูปแบบ ในที่นี้กำหนดสีแดง และรูปแบบเส้นเป็นแบบ 3 ดูชนิดของเส้นได้จาก par ของ plot เช่น solid หรือ dashed ดูตัวอย่างจาก path diagram
  • freeStyle= c("blue","solid") กำหนดส่วนที่เป็น free style (สีและรูปแบบเส้น) ดูตัวอย่างจาก path diagram
  • optimizeLatRes=T
  • rescale=T ให้ re-scale ส่วน layout ให้เหมาะสมหรือไม่
  • label.scale=F ให้ re-scale ส่วน labels หรือไม่ ผมกำหนดเป็น FALSE เพื่อไม่ให้ re-scale เพื่อที่จะทำให้ขนาดตัวอักษร ในส่วน manifest และ latent เท่ากัน เนื่องจากขนาดของ man และ lat ต่างกันภ้า re-scale จะทำให้ขนาดตัวอักษรไม่เท่ากัน (การ re-scale ขึ้นกับขนาดของ man หรือ lat ที่เรากำหนด)
  • weighted = F ให้ใช้การ weight กราฟ หรือส่วนต่าง ๆ ของ path diagram หรือไม่ (เช่น ขนาดเส้นลูกศร ใช้สีต่างกัน ... ตามค่าพารามิเตอร์)
  • normalize=T ปรับขนาดส่วนต่าง ๆ ของ path diagram ให้มีขนาดเท่า ๆ กัน
  • borders=T, border.color= c("magenta"), border.width=3 กำหนดให้แสดงกรอบ สีกรอบ และขนาดของกรอบ ส่วน labels
  • label.norm= "oooooooooo" จำนวนตัวอักษรต่ำสุดที่จะให้เริ่มใช้การปรับขนาดตัวอักษรให้เหมาะกับขนาดของ labels ในที่นี้ผมกำหนดว่าถ้า labels มีน้อยกว่าหรือเท่ากับ 10 ก็ไม่ต้องปรับขนาด โดยใช้ตัวอักษร O ไม่ใช่เลข 0 ทั้งนี้เพื่อให้ขนาดตัวอักษรของแต่ละ labels เท่ากัน
  • label.font=c(2,2) กำหนด font ให้กับ labels ส่วนตัวเลข 2 จะหมายถึงอะไร ก็ลองไปหาคำตอบกันดูครับ ที่ลองเปลี่ยนตัวเลขเป็นอย่างอื่น พบว่าตัวอักษรจะเป็นตัวเอียงบ้าง ตัวเข้มบ้าง
  • edge.label.font=1 กำหนด font ให้กับส่วน edge labels
  • edge.label.font=1 ขนาดตัวอักษรของ labels (จำนวนเท่าของขนาดจริง)
  • label.color= c(2:6) กำหนดสีให้กับแต่ละ labels ในที่นี้ผมกำหนดสีจากสีที่ 2 ถึงสีที่ 6 ใน default Palettes ของ R ถ้าจะให้ใช้สีเดียวกันก็กำหนดแค่สีเดียว ถ้าไม่กำหนดค่า default จะเป็นสีดำ จะชื่อสีแทนตัวเลขได้ หรือจะใช้ตัวเลขฐานหกแทนค่าสีก็ได้
  • bgcontrol=8 กำหนดสีพื้นหลังของ path diagram ผมกำหนดให้ใช้สีที่ 8 ใน default Palettes (default Palettes ของ R จะมีสีตั้งแต่ 1-8 คือ "black" "red" "green3" "blue" "cyan" "magenta" "yellow" และ "gray" ตามลำดับ)
  • mar=c(bottom,left,top,right) กำหนดระยะขอบของการ plot diagram ค่า default จะเป็น mar=c(3,3,3,3)
  • width, height เป็นการกำหนดขนาดความกว้างและสูงของ plot area หน่วยเป็นนิ้ว ค่า default จะเป็น 7x7 นิ้ว

 

ทดลองปรับเปลี่ยนกันดูนะครับ

 

อิอิอิ

 

เราเอง

 

เพลง: Cry Me A River
ศิลปิน: Diana Krall

 

Sections: Miscellaneous
License: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
created: 20 April 2016 12:58 Modified: 20 April 2016 16:47 [ Report Abuse ]
ดอกไม้
People who like this: Ico24 คนธรรมดา, Ico24 บิวตี้, and Ico24 โอ๋-อโณ.
People Who Like This
 
Facebook
Twitter
Google

Other Posts By This Blogger

ความเห็น

ไม่มีความเห็น

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 54.198.52.8
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ