--- title: "การประเมินลักษณะมนุษย์: ตัวอย่าง R Code สำหรับคาบเรียนที่ 2" author: "สันทัด พรประเสริฐมานิต" output: html_document date: "`r format(Sys.time(), '%d/%m/%Y')`" --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ``` ## การหาความเที่ยง อ่านข้อมูลด้วยคำสั่ง `read.table` แล้วใส่ไฟล์ที่ต้องการอ่านลงไป ในที่นี้คือ `bigfive.csv` ถ้าไม่ใส่ directory ของไฟล์ดังกล่าว ให้ไฟล์ข้อมูลอยู่ใน session ที่ R กำลังวิเคราะห์ข้อมูลอยู่ ตรวจสอบโดยพิมพ์คำสั่ง `getwd()` ลงไป โดยปกติ ถ้าเปิด RStudio จากไฟล์ `\*.R` ใน Folder หนึ่ง session ที่ R วิเคราะห์ข้อมูลอยู่จะเป็น Folder ที่ไฟล์ที่เปิดนั้นอยู่ ดังนั้นสามารถใส่ไฟล์ข้อมูลลงใน Folder นั้นได้เลย ```{r openfile} dat <- read.table("bigfive.csv", sep = ",", header = TRUE) getwd() ``` ใช้คำสั่ง `head` เพื่อคัดเฉพาะแถวแรกๆ ของข้อมูลมาดูว่า ข้อมูลมีลักษณะเป็นอย่างไร ```{r headdat} head(dat) ``` ใช้คำสั่ง `describe` ในแพ๊คเกจ `psych` เพื่อตรวจสอบค่าสถิติพื้นฐานของตัวแปรแต่ละตัวในข้อมูล ```{r describedat} library(psych) describe(dat) ``` หาความสัมพันธ์ระหว่างตัวแปรที่ 1 และ 2 ในข้อมูลด้วยคำสั่ง `cor` ```{r corpair} cor(dat[,1], dat[,2]) ``` สามารถใช้คำสั่ง `cor` เพื่อตรวจสอบความสัมพันธ์ระหว่างตัวแปรทุกตัวในข้อมูลได้ ```{r corall} cor(dat) ``` ลดจำนวนทศนิยมให้เหลือ 3 ตำแหน่งด้วยคำสั่ง `round` ```{r corallround} round(cor(dat), 3) ``` ตัวแปรที่ 1-6 เป็นตัวแปรในด้านการเปิดรับประสบการณ์ (Openness) หาค่าอัลฟ่าของคะแนนรวมจากคะแนนข้อย่อย 6 ข้อด้วยคำสั่ง `alpha` ที่อยู่ในแพ๊คเกจ `psych` ได้ ```{r alpha1} library(psych) alpha(dat[,1:6]) ``` บุคลิกภาพอีก 4 ด้านที่เหลือเป็นดังนี้ - ตัวแปรที่ 7-12 อยู่ในด้านความรับผิดชอบ (Conscientiousness) - ตัวแปรที่ 13-18 อยู่ในด้านการเปิดตัว (Extraversion) - ตัวแปรที่ 19-24 อยู่ในด้านความเข้ากันได้กับผู้อื่น (Agreeableness) - ตัวแปรที่ 25-30 อยู่ในด้านความอ่อนไหวทางอารมณ์ (Neuroticism) บุคลิกภาพอีก 4 ด้านที่เหลือสามารถนำไปหาค่าอัลฟ่าได้ดังนี้ ```{r alpha2} alpha(dat[,7:12]) alpha(dat[,13:18]) alpha(dat[,19:24]) alpha(dat[,25:30]) ``` ผลการวิเคราะห์จากคำสั่ง `alpha` สามารถบันทึกไว้ได้ ในตัวอย่างนี้บันทึกไว้ในชื่อ `out` ลองมาดูว่าผลการวิเคราะห์ที่บันทึกไว้ มีข้อมูลอะไรอยู่ในนั้นบ้างด้วยคำสั่ง `names` ```{r savealpha} out <- alpha(dat[,1:6]) names(out) ``` ในข้อมูลที่บันทึก พบว่า `total` เป็นส่วนที่บันทึกตัวเลขอัลฟ่าอยู่ สามารถดึงออกมาได้ด้วยการเขียนชื่อผลที่บันทึกไว้ ตามด้วย `$` เพื่อบอกว่าจะดึงข้อมูลย่อยในนั้น แล้วตามด้วยชื่อข้อมูลย่อย `total` ```{r shownumalpha} out$total ``` นำอัลฟ่าไปบันทึกไว้ในชื่อ `relia` โดยบันทึกเฉพาะตัวเลขที่ 1 ที่เป็นอัลฟ่า ```{r savenumalpha} relia <- out$total[1] ``` ต่อไป เป็นการสร้างคะแนนรวมของการเปิดรับประสบการณ์ ที่เกิดจากการรวมคะแนน 6 ข้อเข้าด้วยกัน มีวิธีการทำได้หลายวิธี สามารถดึงตัวแปรแต่ละตัวมาบวกกันก็ได้ ใช้คำสั่ง `with` ช่วย เพื่อนำชื่อตัวแปรมาบวกกันโดยตรงก็ได้ หรือใช้คำสั่ง `apply` เพื่อบวกจะบวกข้อมูลคอลัมน์ 1-6 ในแต่ละแถว (หมายเลข 1 ใน argument ที่ 2) ```{r sum} openness <- dat[,1] + dat[,2] + dat[,3] + dat[,4] + dat[,5] + dat[,6] openness <- with(dat, O1 + O2 + O3 + O4 + O5 + O6) openness <- apply(dat[,1:6], 1, sum) ``` ดูค่าสถิติพื้นฐานของ `openness` ที่คำนวณได้ สามารถใช้คำสั่ง `summary` ก็ได้ หรือคำสั่ง `describe` ก็ได้ ผลลัพธ์ที่ได้จะแตกต่างกัน ผลลัพธ์จากคำสั่ง `describe` จะมีข้อมูลที่สมบูรณ์กว่า ```{r describesum} summary(openness) describe(openness) ``` หาความผิดพลาดจากการวัด (Standard Error of Measurement) โดยหาค่าส่วนเบี่ยงเบนมาตรฐานของคะแนนรวมก่อน หลังจากนั้นนำไปเข้าสูตรการคำนวณ ```{r sem} sigmay <- sd(openness) sem <- sigmay * sqrt(1 - relia) ``` หาค่าวิกฤต (Critical Value) โดยอ้างอิงจากโค้งปกติ ในการหาช่วงเชื่อมั่น 95% จะต้องมีพื้นที่ทางซ้ายและขวา ด้านละ 2.5% (0.025) จึงใส่ 0.025 ไปในคำสั่ง `qnorm` เพื่อหาค่า z ที่ตรงกับพื้นที่ทางซ้าย 2.5% จะได้ค่าที่ -1.96 จึงใส่เครื่องหมายลบเข้าไป เพื่อกลับให้เป็นค่าบวก ```{r critvalue} crit <- -qnorm(0.025) ``` หาช่วงเชื่อมั่นของคะแนนที่แท้จริง (True Score) เมื่อคะแนนรวมที่สังเกตได้ (Observed Score) มีค่าเท่ากับ 15 ```{r ci} 15 - crit*sem 15 + crit*sem ```