Skip to main content Link Search Menu Expand Document (external link)

Missing Value Analysis

เราจะใช้ข้อมูล coronavirus จาก package coronavirus

library(coronavirus)
data("coronavirus")
head(coronavirus)
##         date province country     lat      long      type cases   uid iso2 iso3
## 1 2020-01-22  Alberta  Canada 53.9333 -116.5765 confirmed     0 12401   CA  CAN
## 2 2020-01-23  Alberta  Canada 53.9333 -116.5765 confirmed     0 12401   CA  CAN
## 3 2020-01-24  Alberta  Canada 53.9333 -116.5765 confirmed     0 12401   CA  CAN
## 4 2020-01-25  Alberta  Canada 53.9333 -116.5765 confirmed     0 12401   CA  CAN
## 5 2020-01-26  Alberta  Canada 53.9333 -116.5765 confirmed     0 12401   CA  CAN
## 6 2020-01-27  Alberta  Canada 53.9333 -116.5765 confirmed     0 12401   CA  CAN
##   code3    combined_key population continent_name continent_code
## 1   124 Alberta, Canada    4413146  North America             NA
## 2   124 Alberta, Canada    4413146  North America             NA
## 3   124 Alberta, Canada    4413146  North America             NA
## 4   124 Alberta, Canada    4413146  North America             NA
## 5   124 Alberta, Canada    4413146  North America             NA
## 6   124 Alberta, Canada    4413146  North America             NA

จากการดูข้อมูลคร่าวๆ ค่าสูญหาย (NA) ดันไปอยู่ในจังหวัด (province) ไม่เป็นไรนะ สมมติว่าเราสร้าง missing value เอง

เราจะใช้การ subset ข้อมูลที่ต้องการเพียง date country และจำนวน case

coronavirus <- coronavirus[, c("date", "country", "cases")]
head(coronavirus[coronavirus$cases == 0,]) #เดี๋ยวเราจะให้จำนวนเคสที่เป็น 0 เป็นข้อมูลสูญหาย
##         date country cases
## 1 2020-01-22  Canada     0
## 2 2020-01-23  Canada     0
## 3 2020-01-24  Canada     0
## 4 2020-01-25  Canada     0
## 5 2020-01-26  Canada     0
## 6 2020-01-27  Canada     0
    coronavirus$cases[coronavirus$cases == 0] <- NA #ใส่ข้อมูลสูญหายด้วย NA

    #which(!complete.cases(coronavirus$case), arr.ind = TRUE) #เรียกดูสักหน่อย

เราจะดูข้อมูลทั่วโลกก็อาจจะเยอะไป เราจะ subset ให้เหลือแค่ UK และ Thailand เพื่อความสะดวก ทีนี้ เรามาดู pattern ของข้อมูลสูญหายที่เราใส่เข้าไป

    Covid_th_UK <- coronavirus[coronavirus$country == "United Kingdom" | coronavirus$country == "Thailand", ] #subset
    head(Covid_th_UK)
##           date        country cases
## 632 2020-01-22 United Kingdom    NA
## 633 2020-01-23 United Kingdom    NA
## 634 2020-01-24 United Kingdom    NA
## 635 2020-01-25 United Kingdom    NA
## 636 2020-01-26 United Kingdom    NA
## 637 2020-01-27 United Kingdom    NA

เมื่อได้ data ที่ทำการ subset ให้เหลือแค่ประเทศ UK และ Thailand แล้ว เราจะใช้คำสั่ง md.pattern()จาก package mice ในการดู pattern ของค่าสูญหาย

    library(mice)
## 
## Attaching package: 'mice'

## The following object is masked from 'package:stats':
## 
##     filter

## The following objects are masked from 'package:base':
## 
##     cbind, rbind
    md.pattern(Covid_th_UK)

##       date country cases      
## 5652     1       1     1     0
## 18957    1       1     0     1
##          0       0 18957 18957

เนื่องจากสูญหาย ที่เราใส่ไปมีโอกาสที่จะเป็นแบบ intentionally missed ถ้า dataset ของเรามีขนาดใหญ่พอ เราสามารถที่จะเรียกคำสั่ง na.omit() สำหรับ dataset นั้นได้เลย

    Covid_th_UK_omit <- na.omit(Covid_th_UK)
    md.pattern(Covid_th_UK_omit)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##      date country cases  
## 5652    1       1     1 0
##         0       0     0 0

แมวบอกเราว่าไม่มี missing value แล้ววววว~

อย่างไรก็ตาม หาก dataset มีขนาดเล็กโดยเฉพาะกับจากการเก็บข้อมูลแบบทดลองหรือ survey เล็ก ๆ เราอาจจะไม่สามารถตัดค่าสูญหายไปได้ ในกรณีนี้เราสามารถที่จะดูสัดส่วนของข้อมูลที่ศูนย์หายและแทนค่าข้อมูลที่ศูนย์หายนั้น ๆ โดยวิธีการต่างๆ เช่นการแทนที่ค่าด้วย 1. mean 2. median 3. และ การทำ MLM

ข้ามไปช่วง concept เกี่ยวกับ Missing Data ได้ที่ Missing Data __ Happy Coding ka สามารถกดติดตามและ subscribe ได้ที่ datastist.com