2022. 10. 3. 16:30ㆍR study/Multivariate Analysis
R 응용 다변량분석 책을 바탕으로 작성되었습니다.
다변량 자료분석에서 첫 번재 장애물은 결측값(missing values)에 대한 처리이다.
대부분의 통계분석 방법은 결측값을 포함하는 케이스를 제외한 뒤 완전한 자료에 대해 분석을 진행한다.
결측 자료의 양이 데이터 셋의 크기에 비해 매우 작은 경우에는 이 방법이 분석의 편의(bias)를 없애기 위한 최선의 전략이 될 수 있다. 그러나 이 방법은 경우에 따라 표본의 수를 크게 줄일 수 있으며, 중요한 정보를 없애게 되어 예측 모형의 성능을 크게 떨어뜨리는 원인으로 작용할 수 있다.
관측된 정보를 최대한 활용하기 위해서는 결측값에 대한 대치(imputation)가 중요하다. 가장 간명한 결측값 대치 방법으로는 각 열별로 평균-대치를 사용하는 것이다. 이 방법은 몇몇 경우에 사용될 수 있으나, 자료에 대해 편의를 가져온다. 예를 들어, 평균-대치는 평균에 변화를 가져오지는 않으나(바람직), 분산을 감소시키는 작용을 한다(바람직하지 않음).
예제 4 : airquality 자료에 대한 결측값 대치 수행
> data("airquality")
> head(airquality)
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
> air <- airquality[,1:4]
> air[51:55, 4] <- NA
> summary(air)
Ozone Solar.R Wind Temp
Min. : 1.00 Min. : 7.0 Min. : 1.700 Min. :56.00
1st Qu.: 18.00 1st Qu.:115.8 1st Qu.: 7.400 1st Qu.:72.00
Median : 31.50 Median :205.0 Median : 9.700 Median :79.00
Mean : 42.13 Mean :185.9 Mean : 9.958 Mean :77.94
3rd Qu.: 63.25 3rd Qu.:258.8 3rd Qu.:11.500 3rd Qu.:85.00
Max. :168.00 Max. :334.0 Max. :20.700 Max. :97.00
NA's :37 NA's :7 NA's :5
{mice} 패키지 : 결측값에 대해 특별히 고안된 분포로터 타당한 자료를 추출하여 이를 대치값으로 사용한다.
> library(mice)
> md.pattern(air)
Wind Temp Solar.R Ozone
110 1 1 1 1 0
31 1 1 1 0 1
5 1 1 0 1 1
2 1 1 0 0 2
1 1 0 1 1 1
4 1 0 1 0 2
0 5 7 37 49

해석 : 결측이 없는 관측값이 106개, Ozone에만 결측이 발생한 관측값이 31개이고, Solar.R에만 결측이 발생한 관측값이 4개임을 알려준다. 맨 오른쪽 열은 몇 개의 변수에서 결측이 발생했는지를, 맨 아래 행은 각 변수에서 발생한 결측값의 수를 나타낸다. 즉, Ozone에서 총 37개의 결측이 발생한다.
{VIM} 패키지 : 결측값의 패턴을 시각화하는데 유용
> library(VIM)
> # aggr() 함수 : 결측(/대치)값에 대한 집계를 제공
> aggr(air, col=c('skyblue', 'red'), numbers=TRUE, sortVars=TRUE,
+ labels=names(air), cex.axis=.7, gap=3,
+ ylab=c("Percentage of missing", "Missing Pattern"))
Variables sorted by number of missings:
Variable Count
Ozone 0.24183007
Solar.R 0.04575163
Temp 0.03267974
Wind 0.00000000

> aggr(air, col=c('skyblue', 'red'), numbers=TRUE, prop=FALSE, sortVars=TRUE,
+ labels=names(air), cex.axis=.7, gap=3,
+ ylab=c("Percentage of missing", "Missing Pattern"))
Variables sorted by number of missings:
Variable Count
Ozone 37
Solar.R 7
Temp 5
Wind 0

> # marginplot : 변수 쌍에 대한 산점도와 함께 결측(/대치)값에 대한 정보를 마진에 그림으로 제공
> marginplot(air[c(1,2)])

두 개의 변수(Solar.R, Ozone) 간의 missing data의 관계를 보여준다.
위의 산점도가 파란색으로만 나타나 있으므로 Solar.R에 대한 비결측값만 있고 다른 색은 없으므로 귀속된 결측 데이터가 없다는 것이다. 이는 결측 데이터가 무작위(MCAR)라는 것을 보여준다. 데이터 분포를 나타내는 상자 그림도 표시가 되는데 예를 들어 결측 데이터가 있는 Solar.R의 중위수는 약 199인 반면 결측 데이터가 없는 Solar.R의 중위수는 약 210이다.
Missing Data의 종류
MCAR(Missing completely at random) : 완전무작위결측
- MCAR은 변수의 종류와 변수의 값과 상관없이 전체에 걸쳐 무작위적으로 나타나는 것으로, 이러한 missing data는 분석에 영향을 주지 않는다. 실제로 MCAR의 경우는 거의 없다.
MAR(Missing at random) : 무작위결측
- 누락된 자료가 특정 변수와 관련되어 일어나지만 그 변수의 값과는 관계가 없는 경우이다. 예를 들어 어떤 설문조사에서 누락된 자료가 특정 변수들에 국한되어 발견되었는데 알고 보니 일부 대상자가 설문지 3페이지에 반대쪽 면이 있는 것을 모르고 채우지 않았을 경우 MAR로 볼 수 있다.
MNAR(Missing at not random) : 비무작위결측
- 누락된 변수의 값과 누락된 이유가 관련이 있는 경우이다. 예를 들어 노인에서 우울증에 대한 설문조사를 했는데 실제로 우울증이 심한 경우는 우울한 기분에 대해 자세히 조사하는 항목을 대답하는 것이 괴로워 일부러 회피하여 누락되는 경우 등이다. 일부 설문에 정치적인 이유로 일부러 대답을 회피하거나 하는 경우도 MNAR로 볼수 있다.
※ 참고
RPubs - Publish Document
rpubs.com
mice 함수는 다변량 자료의 결측값에 대해 다중 대치를 제공한다. 다중 대치(multiple imputation, 이하 MI)은 결측값에 대해 여러 번의 대치를 수행하는 방법으로, 서로 상이한 여러 개의 대치 데이터 셋을 생성한다(보통 5~10개). 이 함수의 method=옵션은 대치의 방법을 지정하며 다음과 같다.
pmm(predictive mean matching) : 수치형 변수의 경우 디폴트
logreg(logistic regression) : 이진 변수에 대한 디폴트
polyreg(Bayesian polytomous regression) : 요인(수준이 3개 이상인) 변수에 대한 디폴트
polr(proportional odds model) : 2개 이상의 순서형 변수에 대한 디폴트
> air.m <- mice(air, m=5, maxit=50, method='pmm', seed=200)
iter imp variable
1 1 Ozone Solar.R Wind Temp
1 2 Ozone Solar.R Wind Temp
1 3 Ozone Solar.R Wind Temp
1 4 Ozone Solar.R Wind Temp
1 5 Ozone Solar.R Wind Temp
2 1 Ozone Solar.R Wind Temp
2 2 Ozone Solar.R Wind Temp
2 3 Ozone Solar.R Wind Temp
m=5는 다중 대치의 수를 5개로 하고 대치 방법으로 PMM 방법을 사용한다. PMM방법은 결측값을 포함하는 각 관측값에 대해 해당 변수에 가장 가까운 예측 평균을 가진 (사용 가능한 값에서) 관측값을 찾는다.
> ls(air.m)
[1] "blocks" "blots" "call" "chainMean" "chainVar" "data"
[7] "date" "formulas" "ignore" "imp" "iteration" "lastSeedValue"
[13] "loggedEvents" "m" "method" "nmis" "post" "predictorMatrix"
[19] "seed" "version" "visitSequence" "where"
> summary(air.m)
Class: mids
Number of multiple imputations: 5
Imputation methods:
Ozone Solar.R Wind Temp
"pmm" "pmm" "pmm" "pmm"
PredictorMatrix:
Ozone Solar.R Wind Temp
Ozone 0 1 1 1
Solar.R 1 0 1 1
Wind 1 1 0 1
Temp 1 1 1 0
'Class:mids'는 multiple imputed data set이라는 별도의 클래스가 생성되었다는 것을 의미한다. 자료는 지정한 대로 5개가 생성되었다. 'Imputation methods'는 변수별로 결측치가 어떤 모형을 통해 추론되었는지를 보여준다.
> air.com <- complete(air.m, 1)
> air.com
Ozone Solar.R Wind Temp
1 41 190 7.4 67
2 36 118 8.0 72
3 12 149 12.6 74
4 18 313 11.5 62
5 1 7 14.3 56
6 28 137 14.9 66
7 23 299 8.6 65
결측값 대치 후의 완비 자료 출력(5개 중 첫 번째 사용)
원 자료와 대치된 자료의 분포를 비교하는 방법
관측된 자료와 함께 다중 대치에 의한 결과를 시각적으로 보여준다.
> xyplot(air.m, Ozone~Wind+Temp+Solar.R, pch=18, cex=1)

(산점도 그림으로써 변수 끼리의 산점도를 나타내는 것 같다. )
> densityplot(air.m)

변수별 밀도함수를 그려준다.
파란색 선은 원자료의 분포이고 붉은색 선은 대체된 자료의 분포입니다. 대체 데이터셋의 수가 5개이므로 붉은 선의 수가 5개가 된다.
> stripplot(air.m, pch=20, cex=1.2)

이 함수는 원자료의 분포와 대체 자료의 분포를 점으로 나타낸다.
'R study > Multivariate Analysis' 카테고리의 다른 글
| SVD를 이용한 이미지 처리 (0) | 2022.10.17 |
|---|