두 변수의 관계 분석

요런 본격적인 데이터 분석 방법소개는 처음인데…종종 “데이터분석”카테고리에 글을 정리하고자 한다.

개인적으로는 R언어를 데이터분석에 활용하는것에 대한 정리 차원의 의미가 크다고 말하고 싶다.

 

EDA에서는 크게 네가지 주제를 다루게 된다.

1. resistance의 강조

2. residuals의 계산

3. 자료변수의 re-expression

4. 그래프를 이용한 revelation

아래 예제는 이 네가지를 이용한 간단한 분석을 소개한다.

먼저 데이터가 resistance를 가지게 하기 위해서 두 변수의 선형회귀식을 구하게 되는데, 이를 구하는 과정에서 자료변수의 re-expression을 하게 되고 그래프를 이용해 직접 확인을 해보게 된다. 마지막으로 적절한 선형회귀식을 구하게 되었다면 이를 기반으로 잔차(residuals)을 구해 resistance를 가지고 있는 선형회귀식의 예측에 과도하게 벗어난 outliers를 구하게 된다.

 

outlier는 새로운 발견의 단초를 제공하는 중요한 개념이다. 학문이라면 새로운 이론을 창출하는 첫걸음이 될 수 있고, 마케팅이라면 새로운 고객군을 발굴하는 시작점이 될수도있다.  말콤 글래드웰의 “아웃라이어”라는 책도 있는데, 이 책도 역시 우리 사회의 아웃라이어들을 분석해서 이들의 공통점을 책 한권으로 엮은것이다.

 

이런 일련의 과정을 통해 나온 데이터들을 기반으로 나온 결과는 새로운 발견을 하는 시작점으로 작용할 수 있다.

아래 코드는 R에서 기본으로 제공되는 cars라는 데이터셋을 이용하고 있다.

 

#두 변수와의 관계를 알아보고 이상치를 분석하는 예제 

#아래 cars는 달리는 차의 정지거리를 측정한 데이터 결과이다. 
#speed(mph)와 dist(feet)의 단위를 가지고 있다.

data(cars)

#아래로 볼록한 2차 함수 형태
plot(cars$speed, cars$dist)
z <- lm(dist ~ speed, data = cars)
abline(z)

#따라서 Y는 X^2에 비례할 것이라 예상할 수 있다. 

#이것 말고도 Box-Cox transform의 원리에 따라서 Y^(1/2)와 같은 변환으로 분포의 대칭화와 
#균일화를 이룰 수 있는데, 이렇게 하면 X축과의 비교가 더 쉬워진다. 
#이곳 그래프에서는 1차 함수 형태의 선형의 분포만 보인다면 X와 Y의 관계를 나타내는 단순 plot만으로도 
#이상치 탐지를 할 수 있다.   
#Y축의 변수들 그러니까 정지거리는 오른쪽으로 꼬리가 긴 분포를 이룬다는 것을 알 수 있다.
#믿을 수 없다면 그려보면 된다.
boxplot(cars$dist)
#따라서 sqrt함수를 사용해 dist를 제곱근의 형태로 만들어준다. 
plot(cars$speed, sqrt(cars$dist))
k <- lm(sqrt(dist) ~ speed, data=cars)
abline(k)
summary(k)
#Y절편 제거하기 위해서는 아래와 같이 -1을 입력하면 된다.
#k <- lm(sqrt(dist) ~ speed -1, data=cars)

#그럼 잔차를 분석해 본다. 
cars$residuals <- residuals(k)
stem(cars$residuals)
boxplot(cars$residuals)
cars$fitted <- fitted(k)

#boxplot를 확인해 보면 23번째자료값이 이상이 있음을 알 수 있다. 
#14mph로 달려가는 자동차가 제동거리 80feet라고 기록이 되어 있는데, 실제 예측값은 
predict.lm(k, data.frame(speed=c(14)))^2

#33.53 feet로 예측된다.
#이는 이 레코드가 오염이 되었거나, 자동차의 문제, 
#혹은 운전자가 음주를 한 후 운전을 한게 아닐까 하는 여러 가설을 세워 좀더 살펴볼 수 있을 것이다. 

 

CC BY-NC 4.0 두 변수의 관계 분석 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.