26  Kỹ thuật kiểm tra missing value NA

Ta có 1 dataset gồm 30 dòng và 6 cột, trong đó có 1 số cột bị missing value. Để kiểm tra nhanh, ta sẽ dùng lệnh summary() tuy nhiên lệnh này không kiểm tra được các cột là character.

dim(df)
[1] 30  6
df
                                   name school student revenue expenditure type
1            RIO GRANDE CITY GRULLA ISD     15    9007   14409       12858 <NA>
2                             KEENE ISD      5    1016   16272       11291 <NA>
3                             BRYAN ISD     25   16005   14613          NA <NA>
4                          GOODRICH ISD      3     244   18543       13730 <NA>
5                       HALE CENTER ISD      3     597   15541          NA <NA>
6                            LAMESA ISD      1    1602   18810          NA <NA>
7      EVOLUTION ACADEMY CHARTER SCHOOL      3     669   12607          NA    I
8                            MALONE ISD      1     153   17031          NA <NA>
9                           RAMIREZ CSD      1      26   22447       17483 <NA>
10     ST MARY'S ACADEMY CHARTER SCHOOL      1     401   13897       13384    I
11                      BLOOMINGTON ISD      5     825   13999       13182 <NA>
12                           LOMETA ISD      2     317   22798          NA <NA>
13 DR M L GARZA-GONZALEZ CHARTER SCHOOL      1     166   14006          NA    I
14                 HARDIN-JEFFERSON ISD      5    2602   11022          NA <NA>
15                ROSCOE COLLEGIATE ISD      4    3076   29616          NA <NA>
16                       WESTPHALIA ISD      1     155   14312          NA <NA>
17                         HEMPHILL ISD      3     901   16550          NA <NA>
18                            MOODY ISD      4     687   15586          NA <NA>
19                          PEWITT CISD      3     866   13718          NA <NA>
20                  CORRIGAN-CAMDEN ISD      3     817   17796       15432 <NA>
21                   PATTON SPRINGS ISD      1      86   29806       25965 <NA>
22                        WINNSBORO ISD      4    1532   21267       11859 <NA>
23                      PAINT CREEK ISD      1      95   29940       22333 <NA>
24                    LIBERTY-EYLAU ISD      4    2131   19971       12415 <NA>
25                     GOOSE CREEK CISD     31   23833   14213       12111 <NA>
26             TEXAS PREPARATORY SCHOOL      2     120   16009       16096    I
27                    TULOSO-MIDWAY ISD      6    3745   15313       10669 <NA>
28                   NUECES CANYON CISD      2     254   16804       15142 <NA>
29                         MISSION CISD     23   13838   15204       12062 <NA>
30                           UNITED ISD     50   39243   12654       11226 <NA>
sapply(df, class)
       name      school     student     revenue expenditure        type 
"character"   "numeric"   "numeric"   "numeric"   "numeric" "character" 
summary(df)
     name               school         student           revenue       expenditure        type          
 Length:30          Min.   : 1.00   Min.   :   26.0   Min.   :11022   Min.   :10669   Length:30         
 Class :character   1st Qu.: 1.25   1st Qu.:  246.5   1st Qu.:14238   1st Qu.:12062   Class :character  
 Mode  :character   Median : 3.00   Median :  821.0   Median :15798   Median :13182   Mode  :character  
                    Mean   : 7.10   Mean   : 4167.0   Mean   :17492   Mean   :14543                     
                    3rd Qu.: 5.00   3rd Qu.: 2484.2   3rd Qu.:18743   3rd Qu.:15432                     
                    Max.   :50.00   Max.   :39243.0   Max.   :29940   Max.   :25965                     
                                                                      NA's   :13                        

Do vậy để kiểm tra nhanh toàn bộ dataset df này có bao nhiêu giá trị missing value ở tất cả các cột (gồm characternumeric) thì ta dùng function md.pattern() trong package mice.

This function is useful for investigating any structure of missing observations in the data.

library(mice)
mice::md.pattern(df, plot = TRUE, rotate.names = TRUE)

   name school student revenue expenditure type   
2     1      1       1       1           1    1  0
15    1      1       1       1           1    0  1
2     1      1       1       1           0    1  1
11    1      1       1       1           0    0  2
      0      0       0       0          13   26 39

Ở đây ta phân tích kỹ các con số từ đồ thị này để đánh giá tình hình missing value trong bộ dữ liệu. Cụ thể:

### số 2 là dataset chỉ còn 2 dòng (hàng) dữ liệu sau khi na.omit() toàn bộ các cột
### nghĩa là lúc này dataset không (số 0) còn cột nào có giá trị missing value

df_clean_all_column <- na.omit(df)

row.names(df_clean_all_column) <- NULL

dim(df_clean_all_column)
[1] 2 6
df_clean_all_column
                              name school student revenue expenditure type
1 ST MARY'S ACADEMY CHARTER SCHOOL      1     401   13897       13384    I
2         TEXAS PREPARATORY SCHOOL      2     120   16009       16096    I
### số 15 là dataset có 15 dòng (hàng) dữ liệu đầy đủ tất cả thông tin (từ cột đầu tiên đến cột expenditure) 
### ngoại trừ cột type (màu đỏ), lúc này toàn bộ giá trị ở cột type là NA.

df_clean_1 <- df[complete.cases(df$name, df$school, df$student, df$revenue, df$expenditure), ]

df_clean_1a <- df_clean_1[is.na(df_clean_1$type), ] 

row.names(df_clean_1a) <- NULL

dim(df_clean_1a) 
[1] 15  6
df_clean_1a
                         name school student revenue expenditure type
1  RIO GRANDE CITY GRULLA ISD     15    9007   14409       12858 <NA>
2                   KEENE ISD      5    1016   16272       11291 <NA>
3                GOODRICH ISD      3     244   18543       13730 <NA>
4                 RAMIREZ CSD      1      26   22447       17483 <NA>
5             BLOOMINGTON ISD      5     825   13999       13182 <NA>
6         CORRIGAN-CAMDEN ISD      3     817   17796       15432 <NA>
7          PATTON SPRINGS ISD      1      86   29806       25965 <NA>
8               WINNSBORO ISD      4    1532   21267       11859 <NA>
9             PAINT CREEK ISD      1      95   29940       22333 <NA>
10          LIBERTY-EYLAU ISD      4    2131   19971       12415 <NA>
11           GOOSE CREEK CISD     31   23833   14213       12111 <NA>
12          TULOSO-MIDWAY ISD      6    3745   15313       10669 <NA>
13         NUECES CANYON CISD      2     254   16804       15142 <NA>
14               MISSION CISD     23   13838   15204       12062 <NA>
15                 UNITED ISD     50   39243   12654       11226 <NA>
### số 2 là dataset có 2 dòng (hàng) dữ liệu đầy đủ tất cả thông tin (từ cột đầu tiên đến cột type) 
### ngoại trừ cột expenditure (màu đỏ), lúc này toàn bộ giá trị ở cột expenditure là NA.

df_clean_2 <- df[complete.cases(df$name, df$school, df$student, df$revenue, df$type), ]

df_clean_2a <- df_clean_2[is.na(df_clean_2$expenditure), ] 

row.names(df_clean_2a) <- NULL

dim(df_clean_2a) 
[1] 2 6
df_clean_2a
                                  name school student revenue expenditure type
1     EVOLUTION ACADEMY CHARTER SCHOOL      3     669   12607          NA    I
2 DR M L GARZA-GONZALEZ CHARTER SCHOOL      1     166   14006          NA    I
### số 11 là dataset có 11 dòng (hàng) dữ liệu đầy đủ tất cả thông tin (từ cột đầu tiên đến cột revenue) 
### ngoại trừ cột expenditure và type (màu đỏ), lúc này toàn bộ giá trị ở cột expenditure và type là NA.

df_clean_3 <- df[complete.cases(df$name, df$school, df$student, df$revenue), ]

df_clean_3a <- df_clean_3[is.na(df_clean_3$type), ] 

df_clean_3b <- df_clean_3a[is.na(df_clean_3a$expenditure), ] 

row.names(df_clean_3b) <- NULL

dim(df_clean_3b) 
[1] 11  6
df_clean_3b
                    name school student revenue expenditure type
1              BRYAN ISD     25   16005   14613          NA <NA>
2        HALE CENTER ISD      3     597   15541          NA <NA>
3             LAMESA ISD      1    1602   18810          NA <NA>
4             MALONE ISD      1     153   17031          NA <NA>
5             LOMETA ISD      2     317   22798          NA <NA>
6   HARDIN-JEFFERSON ISD      5    2602   11022          NA <NA>
7  ROSCOE COLLEGIATE ISD      4    3076   29616          NA <NA>
8         WESTPHALIA ISD      1     155   14312          NA <NA>
9           HEMPHILL ISD      3     901   16550          NA <NA>
10             MOODY ISD      4     687   15586          NA <NA>
11           PEWITT CISD      3     866   13718          NA <NA>