이번 포스팅은 로지스틱 회귀분석을 통한 유방암 예측(분류) 포스팅의 세번째 순서로서 '1차 변수 선택 및 목표변수와 설명변수 간 관계 분석' 차례입니다. 



[로지스틱 회귀분석을 통한 유방암 예측(분류) 포스팅 순서]

  1. WDBC(Wisconsin Diagnostic Breast Cancer) dataset 소개 및 분석 목적과 방향 설정
  2. 탐색적 데이터 분석 및 전처리
  3. 1차 변수 선택 및 목표변수와 설명변수 간 관계 분석
  4. 로지스틱 회귀모형 적합 및 모델 평가, 해석



사실, 이번 포스팅도 '2. 탐색적 데이터 분석 및 전처리'에 포함시켜도 되는데요, 두번째 포스팅이 미친듯이 내용이 많고 포스팅이 길어져서 스크롤 압박이 너무 심했던지라 가독성을 위해서 세번째 포스팅으로 분리를 했습니다. 



  (1) t-test 를 통한 1차 변수 선별


진단 결과(악성 M, 양성 B) 그룹별로 설명변수 간의 차이가 존재하는지 t-test 검정을 해보고, p-value가 0.05 를 초과하는 설명변수는 1차 제거하는 것으로 하겠습니다. 


특히 연속형 설명변수 개수가 상당히 많고, 종속변수가 2개의 범주(class)를 가지는 경우 t-test 를 활용해서 1차로 별 효용성이 없는 설명변수를 screening out 하는데 활용할 수 있습니다. 



> # Variable selection (1st round)

> # Multiple t-tests of explanatory variables between diagnosis

> X_names <- names(data.frame(X_3))

> X_names

 [1] "texture_mean"            "smoothness_mean"         "concave.points_mean"    

 [4] "symmetry_mean"           "fractal_dimension_mean"  "texture_se"             

 [7] "perimeter_se"            "smoothness_se"           "compactness_se"         

[10] "concavity_se"            "concave.points_se"       "symmetry_se"            

[13] "fractal_dimension_se"    "area_worst"              "smoothness_worst"       

[16] "symmetry_worst"          "fractal_dimension_worst"

> t.test_p.value_df <- data.frame() # blank data.frame for saving

> for (i in 1:length(X_names)) {

+   t.test_p.value <- t.test(wdbc[,X_names[i]] ~ wdbc$diagnosis, var.equal = TRUE)$p.value

+   

+   t.test_p.value_df[i,1] <- X_names[i]

+   t.test_p.value_df[i,2] <- t.test_p.value

+ }

> colnames(t.test_p.value_df) <- c("x_var_name", "p.value")

> t.test_p.value_df

                x_var_name       p.value

1             texture_mean  4.058636e-25

2          smoothness_mean  1.051850e-18

3      concave.points_mean 7.101150e-116

4            symmetry_mean  5.733384e-16

5   fractal_dimension_mean  7.599368e-01

6               texture_se  8.433320e-01

7             perimeter_se  1.651905e-47

8            smoothness_se  1.102966e-01

9           compactness_se  9.975995e-13

10            concavity_se  8.260176e-10

11       concave.points_se  3.072309e-24

12             symmetry_se  8.766418e-01

13    fractal_dimension_se  6.307355e-02

14              area_worst  2.828848e-97

15        smoothness_worst  6.575144e-26

16          symmetry_worst  2.951121e-25

17 fractal_dimension_worst  2.316432e-15

 



위의 17개 설명변수별 t-test 결과를 좀더 보기에 편하도록 p.value를 기준으로 작은 것부터 큰 순서대로 dplyr 패키지의 arrange() 함수를 사용하여 정렬해보겠습니다. 



> # sorting by p.value in ascending order

> install.packages("dplyr")

> library(dplyr)

> arrange(t.test_p.value_df, p.value)

                x_var_name       p.value

1      concave.points_mean 7.101150e-116

2               area_worst  2.828848e-97

3             perimeter_se  1.651905e-47

4         smoothness_worst  6.575144e-26

5           symmetry_worst  2.951121e-25

6             texture_mean  4.058636e-25

7        concave.points_se  3.072309e-24

8          smoothness_mean  1.051850e-18

9            symmetry_mean  5.733384e-16

10 fractal_dimension_worst  2.316432e-15

11          compactness_se  9.975995e-13

12            concavity_se  8.260176e-10

13    fractal_dimension_se  6.307355e-02

14           smoothness_se  1.102966e-01

15  fractal_dimension_mean  7.599368e-01

16              texture_se  8.433320e-01

17             symmetry_se  8.766418e-01

 



t-test의 p-value가 0.05 보다 큰 값을 가지는 설명변수인 'symmetry_se', 'texture_se', 'fractal_dimension_mean', 'smoothness_se', 'fractal_dimension_se' 의 5개 설명변수는 1차로 제거하고, 나머지 12개 설명변수만 로지스틱 회귀모형 적합하는데 사용하도록 하겠습니다. (말그대로 1차 선별이구요, 나중에 후진소거법으로 추가로 더 변수 선택할 예정입니다)




위의 1차 선별된 12개 설명변수만을 포함한 데이터프레임 X_4를 만들었습니다. 



> # select x_variables only if p.value < 0.05

> t.test_filtered <- t.test_p.value_df$p.value < 0.05

> X_names_filtered <- X_names[t.test_filtered]

> X_4 <- data.frame(X_3[, X_names_filtered])

> str(X_4)

'data.frame': 569 obs. of  12 variables:

 $ texture_mean           : num  -2.072 -0.353 0.456 0.254 -1.151 ...

 $ smoothness_mean        : num  1.567 -0.826 0.941 3.281 0.28 ...

 $ concave.points_mean    : num  2.53 0.548 2.035 1.45 1.427 ...

 $ symmetry_mean          : num  2.21557 0.00139 0.93886 2.86486 -0.00955 ...

 $ perimeter_se           : num  2.831 0.263 0.85 0.286 1.272 ...

 $ compactness_se         : num  1.3157 -0.6923 0.8143 2.7419 -0.0485 ...

 $ concavity_se           : num  0.723 -0.44 0.213 0.819 0.828 ...

 $ concave.points_se      : num  0.66 0.26 1.42 1.11 1.14 ...

 $ area_worst             : num  2 1.89 1.46 -0.55 1.22 ...

 $ smoothness_worst       : num  1.307 -0.375 0.527 3.391 0.22 ...

 $ symmetry_worst         : num  2.748 -0.244 1.151 6.041 -0.868 ...

 $ fractal_dimension_worst: num  1.935 0.281 0.201 4.931 -0.397 ...





  (2) 목표변수와 설명변수 간 관계 분석 (시각화)


(2-1) 박스 그림 (Box Plot)


다음으로 12개 설명변수에 대해서 진단결과(악성: M, 1 vs. 양성: B, 0) 별로 집단을 분리해서 박스 그림(Box Plot)을 그려서 비교를 해보겠습니다. 


그래프로 보기에 편리하도록 표준화한 데이터셋을 p.value 기준으로 변수의 순서를 정렬한 후에 Y값(diagnosis)과 합쳐서 새로운 데이터셋을 만들었습니다. 



> # sorting by p.value in descending order

> # t.test_p.value_df.sorted <- arrange(t.test_p.value_df[t.test_filtered,], p.value)

> # t.test_p.value_df.sorted

> t.test_p.value_df.sorted_2 <- arrange(t.test_p.value_df[t.test_filtered,], desc(p.value))

> t.test_p.value_df.sorted_2

                x_var_name       p.value

1             concavity_se  8.260176e-10

2           compactness_se  9.975995e-13

3  fractal_dimension_worst  2.316432e-15

4            symmetry_mean  5.733384e-16

5          smoothness_mean  1.051850e-18

6        concave.points_se  3.072309e-24

7             texture_mean  4.058636e-25

8           symmetry_worst  2.951121e-25

9         smoothness_worst  6.575144e-26

10            perimeter_se  1.651905e-47

11              area_worst  2.828848e-97

12     concave.points_mean 7.101150e-116

> x_names_sorted <- t.test_p.value_df.sorted_2$x_var_name

> x_names_sorted

 [1] "concavity_se"            "compactness_se"          "fractal_dimension_worst"

 [4] "symmetry_mean"           "smoothness_mean"         "concave.points_se"      

 [7] "texture_mean"            "symmetry_worst"          "smoothness_worst"       

[10] "perimeter_se"            "area_worst"              "concave.points_mean"    

> X_5 <- X_4[x_names_sorted] # rearrange column order for plotting below 

> head(X_5,2)

  concavity_se compactness_se fractal_dimension_worst symmetry_mean smoothness_mean

1    0.7233897      1.3157039               1.9353117   2.215565542       1.5670875

2   -0.4403926     -0.6923171               0.2809428   0.001391139      -0.8262354

  concave.points_se texture_mean symmetry_worst smoothness_worst perimeter_se area_worst

1         0.6602390   -2.0715123      2.7482041        1.3065367    2.8305403   1.999478

2         0.2599334   -0.3533215     -0.2436753       -0.3752817    0.2630955   1.888827

  concave.points_mean

1           2.5302489

2           0.5476623

> #-----

> # combine Y and X

> wdbc_2 <- data.frame(Y, X_5)

> str(wdbc_2)

'data.frame': 569 obs. of  13 variables:

 $ Y                      : num  1 1 1 1 1 1 1 1 1 1 ...

 $ concavity_se           : num  0.723 -0.44 0.213 0.819 0.828 ...

 $ compactness_se         : num  1.3157 -0.6923 0.8143 2.7419 -0.0485 ...

 $ fractal_dimension_worst: num  1.935 0.281 0.201 4.931 -0.397 ...

 $ symmetry_mean          : num  2.21557 0.00139 0.93886 2.86486 -0.00955 ...

 $ smoothness_mean        : num  1.567 -0.826 0.941 3.281 0.28 ...

 $ concave.points_se      : num  0.66 0.26 1.42 1.11 1.14 ...

 $ texture_mean           : num  -2.072 -0.353 0.456 0.254 -1.151 ...

 $ symmetry_worst         : num  2.748 -0.244 1.151 6.041 -0.868 ...

 $ smoothness_worst       : num  1.307 -0.375 0.527 3.391 0.22 ...

 $ perimeter_se           : num  2.831 0.263 0.85 0.286 1.272 ...

 $ area_worst             : num  2 1.89 1.46 -0.55 1.22 ...

 $ concave.points_mean    : num  2.53 0.548 2.035 1.45 1.427 ...

 



그 다음으로 reshape2 패키지의 melt() 함수를 사용해서 데이터를 세로로 길게 재구조화한 다음에, ggplot2패키지의 ggplot() + geom_boxplot() 함수를 사용하여 박스 그림을 그렸습니다. 



> #-----

> # Box plot of X per Y(M, B)

> install.packages("reshape2")

> library(reshape2)

> wdbc_2_melt <- melt(wdbc_2, id.var = "Y")

> install.packages("ggplot2")

> library(ggplot2)

> ggplot(data = wdbc_2_melt[wdbc_2_melt$value < 3,], aes(x=variable, y=value)) + 

+   geom_boxplot(aes(fill=as.factor(Y))) +

+   theme_bw() + # white background

+   coord_flip() # flip the x & y-axis

 





이 박스그림은 위의 t-test 결과 p-value 가 작았던 설명변수 순서대로 위에서 부터 아래로 그려진 것인데요, 역시나 p-value가 작을 수록 박스그림에서 보면 진단결과 Malignant(악성)인 그룹과 Benign(양성) 간의 차이가 크게 나고 있음을 눈으로 재확인할 수 있습니다. 





(2-2) 산점도 그림 (Scatter Plot)


다음으로 p-value가 가장 작게 나왔던 상위 변수들 중에서 일부인 'concave.points_mean', 'area_worst', 'texture_mean'를 조합해서 사용해서 예시로 산점도를 그려보았습니다. 이때 진단결과(악성: 'M', 1, vs. 양성: 'B', 0) 별로 색깔을 다르게 해서 산점도를 그렸습니다. 


아래 예시의 2개 산점도를 봐서는 로지스틱 회귀모형으로 분류모델을 적합해도 잘 될 것으로 예상이 되네요. 



> # scatter plot of x=concave.points_mean, y=area_worst

> ggplot(data=wdbc_2, aes(x=concave.points_mean, y=area_worst, colour=as.factor(Y), alpha=0.5)) +

+   geom_point(shape=19, size=3) +

+   ggtitle("Scatter Plot of concave.points_mean & area_worst by Y")




> ggplot(data=wdbc_2, aes(x=area_worst, y=texture_mean, colour=as.factor(Y), alpha=0.5)) +

+   geom_point(shape=19, size=3) +

+   ggtitle("Scatter Plot of area_worst & texture_mean by Y")




이상으로 세번째 포스팅인 't-test를 활용한 1차 변수 선별 및 목표변수와 설명변수간 관계 (탐색적) 분석'을 마치겠습니다. 


다음번 포스팅은 마지막인 '로지스틱 회귀모형 적합 및 모델 평가, 해석'에 대해서 다루겠습니다. 


이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾸욱 눌러주세요. ^^



Posted by R Friend R_Friend

이번 포스팅부터 4번에 나누어서 로지스틱 회귀분석을 통한 유방암 예측(분류)를 소개하겠습니다. 


보통 통계학 수업 듣다보면 모델링 및 해석에 집중하고 탐색적 데이터 분석이나 데이터 전처리는 언급이 없거나 건너뛰는 경우가 많은데요, 이번 포스팅에서는 가급적이면 실제 데이터 분석을 하는데 있어서 거치게 되는 데이터 로딩, 탐색적 데이터 분석, 전처리, 시각화 등의 절차까지 모두 포함하여 상세하게 설명하려고 노력하겠습니다. 



[로지스틱 회귀분석을 통한 유방암 예측(분류) 포스팅 순서]

  1. WDBC(Wisconsin Diagnostic Breast Cancer) dataset 소개 및 분석 목적과 방향 설정
  2. 탐색적 데이터 분석 및 전처리
  3. 1차 변수 선택 및 목표변수와 설명변수 간 관계 분석
  4. 로지스틱 회귀모형 적합 및 모델 평가, 해석



  (1) WDBC(Wisconsin Diagnostic Breast Cancer) Dataset 소개


이번 분석에 사용할 데이터는 미국 중북부 위스콘신 주 남부 Madson에 있는 Wisconsin 대학병원 Dr.William H. Wolberg 교수님, 컴퓨터 공학과 W.Nick Street 교수님, Olvi L.Mangasarian 교수님이 1995년에 공개한 자료입니다. 

(for more information: https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.names)


가는 주사바늘을 사용하여 낭종(주모니 혹은 내용물이나 멍울)의 세포나 조직을 떼어내서 조직검사한 이미지를 디지털로 변환하여 측정한 30개의 설명변수와, 환자 ID, 진단 결과(악성 M=malignant, 양성 B=benign) 의 변수를 포함하여, 총 32개의 변수로 구성되어 있고, 569명의 환자에 대해 조사한 데이터셋입니다. 


데이터셋이 공개되어 있는 주소는 https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data 입니다. 


* image source: https://pathology.jhu.edu/breast/my-results/types-of-breast-cancer/



외부 공개된 데이터셋을 data.table 패키지의 fread() 함수를 사용해서 불러온 후 R의 DataFrame 객체로 만들어보겠습니다. 



> rm(list=ls()) # clear all

> options(scipen=30)

> # data loading: WDBC (Wisconsin Diagnostic Breast Cancer)

> library(data.table)

data.table 1.11.8  Latest news: r-datatable.com

> library(curl)

> url <- c("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data")

> wdbc <- data.frame(fread(url))

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0  0  121k    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  121k  100  121k    0     0  81060      0  0:00:01  0:00:01 --:--:-- 81060

> str(wdbc)

'data.frame': 569 obs. of  32 variables:

 $ V1 : int  842302 842517 84300903 84348301 84358402 843786 844359 84458202 844981 84501001 ...

 $ V2 : chr  "M" "M" "M" "M" ...

 $ V3 : num  18 20.6 19.7 11.4 20.3 ...

 $ V4 : num  10.4 17.8 21.2 20.4 14.3 ...

 $ V5 : num  122.8 132.9 130 77.6 135.1 ...

 $ V6 : num  1001 1326 1203 386 1297 ...

 $ V7 : num  0.1184 0.0847 0.1096 0.1425 0.1003 ...

 $ V8 : num  0.2776 0.0786 0.1599 0.2839 0.1328 ...

 $ V9 : num  0.3001 0.0869 0.1974 0.2414 0.198 ...

 $ V10: num  0.1471 0.0702 0.1279 0.1052 0.1043 ...

 $ V11: num  0.242 0.181 0.207 0.26 0.181 ...

 $ V12: num  0.0787 0.0567 0.06 0.0974 0.0588 ...

 $ V13: num  1.095 0.543 0.746 0.496 0.757 ...

 $ V14: num  0.905 0.734 0.787 1.156 0.781 ...

 $ V15: num  8.59 3.4 4.58 3.44 5.44 ...

 $ V16: num  153.4 74.1 94 27.2 94.4 ...

 $ V17: num  0.0064 0.00522 0.00615 0.00911 0.01149 ...

 $ V18: num  0.049 0.0131 0.0401 0.0746 0.0246 ...

 $ V19: num  0.0537 0.0186 0.0383 0.0566 0.0569 ...

 $ V20: num  0.0159 0.0134 0.0206 0.0187 0.0188 ...

 $ V21: num  0.03 0.0139 0.0225 0.0596 0.0176 ...

 $ V22: num  0.00619 0.00353 0.00457 0.00921 0.00511 ...

 $ V23: num  25.4 25 23.6 14.9 22.5 ...

 $ V24: num  17.3 23.4 25.5 26.5 16.7 ...

 $ V25: num  184.6 158.8 152.5 98.9 152.2 ...

 $ V26: num  2019 1956 1709 568 1575 ...

 $ V27: num  0.162 0.124 0.144 0.21 0.137 ...

 $ V28: num  0.666 0.187 0.424 0.866 0.205 ...

 $ V29: num  0.712 0.242 0.45 0.687 0.4 ...

 $ V30: num  0.265 0.186 0.243 0.258 0.163 ...

 $ V31: num  0.46 0.275 0.361 0.664 0.236 ...

 $ V32: num  0.1189 0.089 0.0876 0.173 0.0768 ...




V1 은 환자 ID, V2는 진단 결과(악성 M, 양성 B), V3 ~ V32 까지 30개의 설명변수입니다. 설명변수로는 radius, texture, perimeter, area, smoothness, compactness, concavity, concave points, symmetry, fractal dimension 의 10개 지표에 대해서 mean(평균), se(standard error), worst(가장 나쁜 혹은 큰 측정치) 를 각각 측정(즉 10개 지표 * 3개 측정 기준 = 30개 설명변수)한 자료 입니다. 


(data info: https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.names)




colnames() 함수로 변수명을 변경해보겠습니다. 


 

> # column names

> colnames(wdbc) <- c("id", "diagnosis", "radius_mean", "texture_mean", 

+                     "perimeter_mean", "area_mean", "smoothness_mean", "compactness_mean",

+                     "concavity_mean", "concave.points_mean", "symmetry_mean", "fractal_dimension_mean", 

+                     "radius_se", "texture_se", "perimeter_se", "area_se", 

+                     "smoothness_se", "compactness_se", "concavity_se", "concave.points_se", 

+                     "symmetry_se", "fractal_dimension_se", "radius_worst", "texture_worst", 

+                     "perimeter_worst", "area_worst", "smoothness_worst", "compactness_worst", 

+                     "concavity_worst", "concave.points_worst", "symmetry_worst", "fractal_dimension_worst")



str() 함수로 데이터셋 구조와 변수에 대해서 살펴보니 목표변수 diagnosis는 M(악성)과 B(양성) 의 두 개 범주(category)를 가진 범주형 데이터이며, 30개 설명변수는 모두 숫자형(numeric), 연속형 변수입니다. 각 설명변수별로 측정 단위가 다르므로 (길이, 면적 등) 나중에 표준화를 해서 분석하겠습니다. 



str(wdbc)

'data.frame': 569 obs. of  32 variables:

 $ id                     : int  842302 842517 84300903 84348301 84358402 843786 844359 84458202 844981 84501001 ...

 $ diagnosis              : chr  "M" "M" "M" "M" ...

 $ radius_mean            : num  18 20.6 19.7 11.4 20.3 ...

 $ texture_mean           : num  10.4 17.8 21.2 20.4 14.3 ...

 $ perimeter_mean         : num  122.8 132.9 130 77.6 135.1 ...

 $ area_mean              : num  1001 1326 1203 386 1297 ...

 $ smoothness_mean        : num  0.1184 0.0847 0.1096 0.1425 0.1003 ...

 $ compactness_mean       : num  0.2776 0.0786 0.1599 0.2839 0.1328 ...

 $ concavity_mean         : num  0.3001 0.0869 0.1974 0.2414 0.198 ...

 $ concave.points_mean    : num  0.1471 0.0702 0.1279 0.1052 0.1043 ...

 $ symmetry_mean          : num  0.242 0.181 0.207 0.26 0.181 ...

 $ fractal_dimension_mean : num  0.0787 0.0567 0.06 0.0974 0.0588 ...

 $ radius_se              : num  1.095 0.543 0.746 0.496 0.757 ...

 $ texture_se             : num  0.905 0.734 0.787 1.156 0.781 ...

 $ perimeter_se           : num  8.59 3.4 4.58 3.44 5.44 ...

 $ area_se                : num  153.4 74.1 94 27.2 94.4 ...

 $ smoothness_se          : num  0.0064 0.00522 0.00615 0.00911 0.01149 ...

 $ compactness_se         : num  0.049 0.0131 0.0401 0.0746 0.0246 ...

 $ concavity_se           : num  0.0537 0.0186 0.0383 0.0566 0.0569 ...

 $ concave.points_se      : num  0.0159 0.0134 0.0206 0.0187 0.0188 ...

 $ symmetry_se            : num  0.03 0.0139 0.0225 0.0596 0.0176 ...

 $ fractal_dimension_se   : num  0.00619 0.00353 0.00457 0.00921 0.00511 ...

 $ radius_worst           : num  25.4 25 23.6 14.9 22.5 ...

 $ texture_worst          : num  17.3 23.4 25.5 26.5 16.7 ...

 $ perimeter_worst        : num  184.6 158.8 152.5 98.9 152.2 ...

 $ area_worst             : num  2019 1956 1709 568 1575 ...

 $ smoothness_worst       : num  0.162 0.124 0.144 0.21 0.137 ...

 $ compactness_worst      : num  0.666 0.187 0.424 0.866 0.205 ...

 $ concavity_worst        : num  0.712 0.242 0.45 0.687 0.4 ...

 $ concave.points_worst   : num  0.265 0.186 0.243 0.258 0.163 ...

 $ symmetry_worst         : num  0.46 0.275 0.361 0.664 0.236 ...

 $ fractal_dimension_worst: num  0.1189 0.089 0.0876 0.173 0.0768 ...


> head(wdbc, 2)

      id diagnosis radius_mean texture_mean perimeter_mean area_mean smoothness_mean compactness_mean

1 842302         M       17.99        10.38          122.8      1001         0.11840          0.27760

2 842517         M       20.57        17.77          132.9      1326         0.08474          0.07864

  concavity_mean concave.points_mean symmetry_mean fractal_dimension_mean radius_se texture_se

1         0.3001             0.14710        0.2419                0.07871    1.0950     0.9053

2         0.0869             0.07017        0.1812                0.05667    0.5435     0.7339

  perimeter_se area_se smoothness_se compactness_se concavity_se concave.points_se symmetry_se

1        8.589  153.40      0.006399        0.04904      0.05373           0.01587     0.03003

2        3.398   74.08      0.005225        0.01308      0.01860           0.01340     0.01389

  fractal_dimension_se radius_worst texture_worst perimeter_worst area_worst smoothness_worst

1             0.006193        25.38         17.33           184.6       2019           0.1622

2             0.003532        24.99         23.41           158.8       1956           0.1238

  compactness_worst concavity_worst concave.points_worst symmetry_worst fractal_dimension_worst

1            0.6656          0.7119               0.2654         0.4601                 0.11890

2            0.1866          0.2416               0.1860         0.2750                 0.08902

 




  (2) 분석 목적 및 분석 방향 설정


WDBC 데이터셋의 diagnosis 진단 변수는 목표변수(반응변수, 종속변수, Output 변수)로서 2개의 class (악성 Malignant, 양성 Benign)를 가진 범주형 자료로서, 30개의 연속형 설명변수를 사용해서 2개의 class (악성, 양성 여부)를 분류(classification) 하는 문제입니다. 




이진 분류에 사용할 수 있는 분석 알고리즘은 무척 많습니다. 가령, KNN, Naive Bayes, Logistic Regression, SVM, Decision Tree, Random Forest, GBM, Deep Neural Network 등 많습니다. 


다만, 이번 데이터가 의료 데이터인지라 의사 선생님이 진단 결과에 대한 해석과 이해가 용이한 분석 모델이 활용도 측면에서 좋을 것으로 예상하여 로지스틱 회귀모형(Logistic Regression)을 선택하였습니다. 즉, 30개의 설명변수를 사용하여 유방암 악성(Malignant)에 속할 0~1 사이의 확률값을 계산하여 진단하는 분류/예측 모델을 만들어보겠습니다. (당연히 다른 분석 알고리즘도 얼마든지 사용 가능합니다 ^^)


참고로 일반화 선형회귀모형(GLM: Generalized Linear Model)은 반응변수가 정규분포를 따르는 연속형변수가 아닐 경우 & 고정효과 만을 다루는 경우에 사용하는데요, 특히 이항변수를 반응변수로 가지며 Logit link를 사용하는 GLM 이 바로 로지스틱 회귀모형이 되겠습니다. 

(참고: https://en.wikipedia.org/wiki/Generalized_linear_model)


[ 일반화 선형회귀모형 (GLM: Generalized Linear Model) 구분 ]





다음번 포스팅에서는 WDBC 데이터에 대한 탐색적 데이터 분석과 데이터 전처리에 대해서 다루겠습니다. 


많은 도움이 되었기를 바랍니다. 



Posted by R Friend R_Friend