Data

Search for Best Configuration

M1 <- 1
M2 <- 1000000
Xsum <- numeric(0)
Values_mat <- numeric(0)
for(k in M1:M2){
  set.seed(k)
  N <- nrow(class_roll) 
  class_roll$group <- 
    sample(1:N) %%
    2 %>%
    factor(levels = c(0, 1), labels = c("Red", "Black"))
  Xsum <- c(Xsum, red_and_black(class_roll)$Xsum)
  Values_mat <- rbind(Values_mat, red_and_black(class_roll)$Values)
}
colnames(Values_mat) <- paste0("X", 1:6)
# Values_mat
# pairs(Values_mat)
cor(Values_mat) %>%
  round(4)
##         X1      X2      X3      X4      X5      X6
## X1  1.0000 -0.0051  0.0214  0.0044 -0.0030 -0.0029
## X2 -0.0051  1.0000 -0.0026  0.0013 -0.0041  0.0001
## X3  0.0214 -0.0026  1.0000  0.0029 -0.0014 -0.0031
## X4  0.0044  0.0013  0.0029  1.0000 -0.0029  0.0033
## X5 -0.0030 -0.0041 -0.0014 -0.0029  1.0000 -0.0037
## X6 -0.0029  0.0001 -0.0031  0.0033 -0.0037  1.0000
names(Xsum) <- M1:M2
Xsum %>%
  summary %>%
  round(2) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    3.31   16.44   20.41   21.04   24.96   68.25
Xsum %>%
  sd %>%
  round(2)
## [1] 6.41
Xsum %>%
  `<=`(5) %>%
  which %>%
  `[`(Xsum, .) %>%
  round(2)
##   1900  16384  24646  33185  37083  55344  67299  80874 100233 108774 115137 
##   4.63   4.51   4.88   4.68   4.36   4.04   4.34   4.78   3.31   4.86   3.82 
## 118923 124060 131851 152699 155447 157619 186470 213067 223340 225595 244478 
##   4.37   4.65   4.73   4.38   4.67   4.72   4.79   4.48   3.68   4.99   4.25 
## 253340 255575 270187 274802 275441 281145 283401 287655 319414 321610 324435 
##   4.15   4.93   4.99   4.63   4.48   4.88   4.10   4.25   4.13   3.68   4.26 
## 326385 337292 351139 361306 369784 370282 373869 384228 391026 413053 414754 
##   4.69   4.50   4.09   4.64   3.70   4.46   4.79   4.31   4.31   4.46   4.81 
## 422266 431524 441132 441650 456587 457217 463176 482861 489554 492638 502211 
##   4.63   4.69   4.89   4.63   4.31   4.53   4.70   4.73   4.12   4.91   4.16 
## 504636 504988 509393 509657 516585 516916 526907 527513 529318 548289 554452 
##   4.85   4.30   4.74   4.68   4.51   4.28   4.44   4.93   3.74   4.43   4.41 
## 568354 585241 594445 605087 618265 636580 639558 645885 646680 654583 657844 
##   4.50   3.81   4.78   4.46   4.62   4.96   4.88   4.55   4.53   4.59   3.31 
## 660599 660971 672332 672681 682193 686028 699464 713810 734647 744170 759972 
##   4.23   4.15   4.80   4.46   4.09   4.54   3.99   4.03   4.95   4.96   4.68 
## 776720 784663 808624 809179 811607 815626 816982 833888 840796 846764 880678 
##   3.58   4.86   4.57   4.21   4.64   4.95   4.85   4.99   4.53   4.97   4.64 
## 883771 885118 897421 921431 924497 925634 925874 925909 935059 941709 946958 
##   4.45   4.91   4.63   3.72   4.79   4.87   4.98   4.52   4.93   4.82   4.87 
## 948219 948558 956837 968932 971916 
##   4.52   4.01   4.18   4.09   4.78
Xmin <- names(Xsum[which(Xsum == min(Xsum))])
Xmin
## [1] "657844"

Plot

hist(Xsum, prob = TRUE, nclass = 30, xlim = c(0, 50), ylim = c(0, 0.065))
x <- seq(0, 50, by = 0.1)
lines(x, dchisq(x, df = 21), col = "red")
legend("topright", inset = 0.05, legend = c("Xsum", "Chi-square(21)"), col = c("black", "red"), lty = 1)

plot(density(Xsum), xlim = c(0, 50), main = "Density Estimation of Xsum")
lines(x, dchisq(x, df = 21), col = "red")
legend("topright", inset = 0.05, legend = c("Xsum", "Chi-square(21)"), col = c("black", "red"), lty = 1)

Randomization

set.seed(Xmin)
N <- nrow(class_roll) 
class_roll$group <- 
  sample(1:N) %%
  2 %>%
  factor(levels = c(0, 1), labels = c("Red", "Black"))
red_and_black(class_roll)
## $Values
## [1] 2.086401926 0.008232683 0.000000000 0.015766423 0.805979526 0.390605741
## 
## $Xsum
## [1] 3.306986

학번

class_roll$id_2 <-
  class_roll$id %>%
  ifelse(. <= 2015, "2015", .)
tbl1 <- class_roll %$%
  table(.$group, .$id_2 %>% substr(1, 4)) %>%
  `colnames<-`(c("2015 이전", 2016:2021)) 
tbl1 %>%
  pander
  2015 이전 2016 2017 2018 2019 2020 2021
Red 16 37 33 36 20 64 37
Black 16 31 31 38 15 68 44
X1 <- tbl1 %>%
  chisq.test(simulate.p.value = TRUE) %>%
  `[[`(1)
X1
## X-squared 
##  2.086402

학번 홀짝

tbl2 <- class_roll$id %>%
  as.numeric %>%
  `%%`(2) %>%
  factor(levels = c(1, 0), labels = c("홀", "짝")) %>%
  table(class_roll$group, .) 
tbl2 %>%
  pander
 
Red 120 123
Black 119 124
X2 <- tbl2 %>%
  chisq.test(simulate.p.value = TRUE) %>%
  `[[`(1)
X2
##   X-squared 
## 0.008232683

학적 상태

tbl3 <- class_roll$status %>%
  table(class_roll$group, .) 
tbl3 %>%
  pander
  학생 휴학
Red 239 4
Black 239 4
X3 <- tbl3 %>%
  chisq.test(simulate.p.value = TRUE) %>%
  `[[`(1)
X3
## X-squared 
##         0

e-mail 서비스업체

tbl4 <- class_roll$email %>%
  strsplit("@", fixed = TRUE) %>%
  sapply("[", 2) %>%
  `==`("naver.com") %>%
  ifelse("네이버", "기타서비스") %>%
  factor(levels = c("네이버", "기타서비스")) %>%
  table(class_roll$group, .) 
tbl4 %>%
  pander
  네이버 기타서비스
Red 205 38
Black 206 37
X4 <- tbl4 %>%
  chisq.test(simulate.p.value = TRUE) %>%
  `[[`(1)
X4
##  X-squared 
## 0.01576642

전화번호의 분포

cut_label <- paste(paste0(0:9, "000"), paste0(0:9, "999"), 
                   sep = "~")
tbl5 <- class_roll$cell_no %>%
  substr(start = 8, stop = 11) %>%
  sapply(as.numeric) %>%
  cut(labels = cut_label, 
      breaks = seq(0, 10000, by = 1000)) %>%
  table(class_roll$group, .) 
tbl5 %>%
  pander
  0000~0999 1000~1999 2000~2999 3000~3999 4000~4999 5000~5999 6000~6999 7000~7999 8000~8999 9000~9999
Red 20 23 23 26 30 21 22 29 25 24
Black 21 20 22 27 29 23 20 29 24 28
X5 <- tbl5 %>%
  chisq.test(simulate.p.value = TRUE) %>%
  `[[`(1)
X5
## X-squared 
## 0.8059795

성씨 분포

f_name <- class_roll$name %>%
  substring(first = 1, last = 1) 
tbl6 <- f_name %>%
  `%in%`(c("김", "이", "박")) %>%
  ifelse(f_name, "기타") %>%
  factor(levels = c("김", "이", "박", "기타")) %>%
  table(class_roll$group, .) 
tbl6 %>%
  pander
  기타
Red 46 39 16 142
Black 46 44 15 138
X6 <- tbl6 %>%
  chisq.test(simulate.p.value = TRUE) %>%
  `[[`(1)
X6
## X-squared 
## 0.3906057

Sum of Chi_Squares

Xsum <- X1 + X2 + X3 + X4 + X5 + X6
Xsum
## X-squared 
##  3.306986