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

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
Network
Members · Following: 0 · Followed: 16

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

R & Diagram: ก้าวย่างทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป [C]

สร้างแผนภาพอย่าง่ายด้วย R และภาษา dot

จากสงกรานต์ร้อน ๆ ก็มาต่อกันด้วยของร้อนเช่นเดิมครับ

ยังอยู่ในแวดวงของ R

ปัญหามาปัญญามีเขาว่างั้น

ปัญหามาอากู๋มี

คำถามง่าย ๆ ว่า จะสร้างแผนภาพ (Diagram) แบบง่าย ๆ ไม่ซับซ้อนมากนี่ จะใช้โปรแกรมอะไรถึงจะดี ง่าย สวย (พอดูได้ ไม่เริ่ด)

ลองโน่น นี่ นั่น ก็ยังไม่ง่ายแบบโดนใจสักที จะลองของฟรีก็ดูท่าว่ายากสักหน่อย

ลองของไม่ฟรีก็น่าจะไม่ค่อยจะดีแต่หน้าตาที่ได้มาคงเริ่ด เชิด จริงไรจริง

เคี้ยวข้าวไปคิดๆ ไป มือก็จิ้ม ๆ ตามอง ๆ

เอาเป็นว่าลองกลับไปใช้ R ดูว่ามีฟังก์ชันให้ทำบ้างหรือเปล่า

มือไว ใจหา ตาจ้อง ลองคลิก

พบว่ามีฟังก์ชันของ R ที่น่าสนใจสำหรับการสร้างแผนภาพอย่างง่าย ดู ๆ แล้วน่าจะตอบโจทย์ที่ต้องการได้

แผนภาพที่จะสร้างนี้เป็นแผนภาพเส้นทางของการวิเคราะห์องค์ประกอบ

ในบันทึกที่แล้วเราใช้ฟังก์ชัน pathDiagram() ใน package sem แต่การจะใช้ pathDiagram() สร้างแผนภาพได้นั้นต้องผ่านกระบวนการวิเคราะห์ข้อมูลมาก่อน

ในกระบวนการวิเคราะห์ข้อมูลจะสร้างวัตถุใน R (R Object) ที่มี class เป็น model ขึ้น ซึ่ง object ที่มี class เป็น model นี้เองที่เป็น input หรือ source ของข้อมูลให้กับ pathDiagram()

object ที่มี class เป็น model อย่างเช่น เราสร้างสมการถดถอยเชิงเส้นอย่างง่ายขึ้นมา แล้วเก็บผลลัพธ์จากการสร้างสมการเชิงเส้นอย่างง่ายนี้ไว้เป็นวัตถุใน R วัตถุที่ว่านีจะมี class เป็น model

สรุปง่าย ๆ ว่า ถ้าใช้ pathDiagram() ต้องมีข้อมูลที่เป็น class model ก่อนถึงจะสร้าง path diagram ได้

แต่ตอนนี้เรายังไม่ได้วิเคราะห์ข้อมูล ยังไม่มีข้อมูลให้วิเคราะห์ แต่ต้องการสร้างแผนภาพของสมการโครงสร้างขึ้นมาก่อน

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

กลับมาที่เราจะสร้างแผนภาพอย่างง่ายด้วย R

สิ่งที่ต้องการก็คือการติดตั้ง package เพิ่มเติม package ที่ว่าก็คือ DiagrammeR

ความสามารถของ DiagrammeR นั้นสามารถที่จะแปลภาษา dot และนำมาสร้างเป็นแผนภาพ/ กราฟได้

ซึ่งตัวแปลภาษา dot ที่เป็นโปรแกรมฟรีนั้นอย่างเช่น GraphViz

DiagrammeR ใช้ความสามารถของ GraphViz นี่แหละครับในการแปลภาษา dot

อ่านเพิ่มเติมเกี่ยวกับภาษา dot (dot langauge) ได้ที่ wikipedia หรือในเวปของ graphviz

บรรทัดคำสั่งสำหรับติดตั้ง DiagrammeR ใน R console

>install.packages("DiagrammeR", repos="http://mirropr.psu.ac.th/cran", depend=T)

รอให้ติดตั้ง Package เสร็จ

เมื่อติดตั้ง Package DiagrammeR เสร็จแล้ว สิ่งที่เราต้องทำต่อไปก็คือการสร้างชุดคำสั่งที่เป็นภาษา dot สำหรับเป็น input ให้กับ DiagrammeR

เริ่มต้นจากตรงไหน ก็ต้องเริ่มต้นจากแผนภาพของเราว่า เราจะสร้างแผนภาพยังไง หน้าตาของแผนภาพมีอะไรบ้าง เส้นสายของ path ชี้ไปทางไหน อะไรโยงกับอะไร

เอาเป็นว่า ตัวอย่างง่าย ๆ นะครับ

สร้างแผนภาพที่ประกอบไปด้วย A B C โดยที่

A ---> B

B ---> C

c ---> A

โดยทั้ง A B และ C นั้นอยู่ในกรอบสี่เหลี่ยม

สิ่งที่ต้องทำคือแปลงแผนภาพข้างต้นให้เป็นภาษา dot แล้วบันทึกชุดคำสั่งภาษา dot เก็บไว้

ขั้นตอนที่ ๒ คือสั่งให้ DiagrammeR วาดแผนภาพจากชุดคำสั่งที่เราเขียนขึ้น

ผมเขียนชุดคำสั่งของ dot ใน notepad แล้วบันทึกเป็นแฟ้มข้อมูลเก็บไว้ โดยมีบรรทัดคำสั่งเป็น

 

digraph {
node [shape=box];
A -> B
B -> C
C -> A
}

 

เมื่อบันทึกชุดคำสั่ง dot ข้างต้นแล้ว (สมมติว่าบันทึกเก็บไว้ในแฟ้มข้อมูลที่ชื่อ tesdot.dot)

ที่ R console เราสั่งให้ DiagrammeR วาดแผนภาพตามที่เราต้องการ (ที่กำหนดไว้ในแฟ้มข้อมูล testdot.dot)

>library(DiagrammeR)
>grViz("testdot.dot")

ทั้งนี้ต้องให้แฟ้มข้อมูล testdot.dot นั้นอยู่ในโฟลเดอร์เดียวกับไดเรคทอรีทำงานของ R (R Working directory)

R จะเปิดแผนภาพที่วาดด้วย web browser (เช่น IE, Chrome, FF, ..) แต่หาก run R ด้วย RStudio แผนภาพจะถูกวาดแล้วแสดงในส่วนที่เป็น plot panel ครับ

 

หน้าตาที่ได้จะเป็นแบบนี้ครับ

ไม่ยากใช่ไหมครับ

คราวนี้เรามาลองแผนภาพที่ซับซ้อนขึ้นนะครับ โดยที่ผมเขียนชุดคำสั่งของภาษา dot ดังข้างล่างแล้วบันทึกเก็บไว้เป็นแฟ้มข้อมูลชื่อ testdot2.dot แล้วสั่งให้ R วาดแผนภาพ

 

#testdot2.dot

#-------------------------------------

digraph {
  rankdir=LR;

  node [shape = box, fontname ="Comic Sans MS",
    style=filled, fillcolor=yellow]
    Box1; Box2;Box3; income; stress

  node [shape=oval, fixsize=true,
     width=0.9, style=filled, fillcolor=lightgreen,
     color=blue,fontname ="Brush Script Std"]

item1; item2; item3; item4

item2 -> income;
item1 -> stress item4 -> stress item3 -> stress [penwidth=3.0, color=blue];
Box2 -> Box3 [dir=both];
Box1 -> Box2 Box1 -> Box3 ;
Box2 -> income;
income -> stress  [dir=both, color=red];
item4 -> Box1 Box2 -> item1;
item3 -> item4 [label="0.7", style=dotted, fontcolor=red, dir=none];

    subgraph  {

         node [shape=star, style=filled, fillcolor=orange, color=green
                  , fontname="Times New Roman"]
            ab -> bb;
            bb -> cb [dir=none, color=red];
            cb -> db [dir=both];
            ab -> db ab -> cb;
            db -> Box3 [style=dashed, penwidth=3.0, color=magenta];
        }
}

 

สั่งให้ R วาดแผนภาพ

>grViz("testdot2.dot")

จะได้เป็น

 

ผมเพิ่มองค์ประกอบแผนภาพไปอีกนิดครับ โดยบันทึกชุดคำสั่งเป็น testdot3.dot

#testdot3.dot

#-------------------------------------

digraph {
  rankdir=LR;

  node [shape = box, fontname ="Comic Sans MS",
    style=filled, fillcolor=yellow]
    Box1; Box2;Box3; income; stress

  node [shape=oval, fixsize=true,
     width=0.9, style=filled, fillcolor=lightgreen,
     color=blue,fontname ="Brush Script Std"]

item1; item2; item3; item4

item2 -> income;
item1 -> stress item4 -> stress item3 -> stress [penwidth=3.0, color=blue];
Box2 -> Box3 [dir=both];
Box1 -> Box2 Box1 -> Box3 ;
Box2 -> income;
income -> stress  [dir=both, color=red];
item4 -> Box1 Box2 -> item1;
item3 -> item4 [label="0.7", style=dotted, fontcolor=red, dir=none];



   subgraph cluster_0 {
            label="Subgraph A";
            node [shape=polygon, style=filled, fillcolor=pink, color=brown
                    ,sides=5,peripheries=3, fontname="Times New Roman"]
            a -> b;
            b -> c [dir=none, color=red];
            c -> d [dir=both];
            a -> d;
            d -> stress;
    }

    subgraph  {

         node [shape=star, style=filled, fillcolor=orange, color=green
                  , fontname="Times New Roman"]
            ab -> bb;
            bb -> cb [dir=none, color=red];
            cb -> db [dir=both];
            ab -> db ab -> cb;
            db -> Box3 [style=dashed, penwidth=3.0, color=magenta];
        }
}

สั่งให้ grViz วาดแผนภาพอีกครั้ง

>grViz("testdot3.dot")

จะได้เป็น

 

อิอิอิ

 

เราเอง

 

เพลง: กระท่อมปลายนา
ศิลปิน: ชัยชนะ บุญนะโชติ

 

หมวดหมู่บันทึก: เรื่องทั่วไป
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 19 เมษายน 2559 18:27 แก้ไข: 15 สิงหาคม 2562 18:39 [ แจ้งไม่เหมาะสม ]
ดอกไม้
People who like this: Ico24 คนธรรมดา, Ico24 ทดแทน, and 2 others.
People Who Like This
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ไม่มีความเห็น
คุณต้องทำการเข้าระบบก่อนแสดงความเห็น