mpg 데이터에서 추출한 정형 데이터(displ-hwy 산점도)를 선형회귀분석 해보았다.
(참고: displ = displacement 배기량, hwy = highway 고속도로, 여기서는 고속도로 연비)

아래는 코드


==========R==========

rm(list=ls())

library("ggplot2")

#mpg데이터를 등록
mpg <- ggplot2::mpg
#구조 확인
str(mpg)
#구조에 tbl_df, tbl, data.frame 가 있으니까 as.data.frame으로 data.frame형태로 바꿔준다.
mpgdata <- as.data.frame(mpg)
#데이터 프레임이 되었는지 확인.
str(mpgdata)

#혹시 모를 결측치를 대비하기 위해서 NA가 존재하는지 확인
checkna <- is.na(mpgdata)
table(checkna)

#구하고자 하는 데이터가 어떤 형태인지 확인.
#여기서는 산점도 그래프를 해석할 것이다.
ggplot(data = mpg, aes(x = displ, y = hwy))+geom_point()

#데이터 분석을 원활하게 하기 위해서 
#final이라는 새로운 객체를 생성하여 
#displ, hwy 컬럼만 넣어준다.
final <- mpgdata[,c(3,9)]
#데이터 및 structure 확인
final
str(final)

#final 자료에서 상관분석(correlation Analysis)를 해본다.
finalcor <- cor(final)
finalcor

# 일반적으로 상관분석 결과값을 이렇게 해석한다.
# -1: 매우 강력과한 음의 상관.
# -0.5: 강한 음의 상관.
# -0.2: 약한 음의 상관.
# 0: 상관관계가 존재하지 않는다.
# 0.2: 약한 양의 상관.
# 0.5: 강한 양의 상관.
# 1: 매우 강한 양의 상관.

# 여기서 상관값이 -0.76602가 나왔으므로 강한 음의 상관이다.

#ggplot2로 그리는 산점도
ggplot(data = final, aes(x = displ, y = hwy))+geom_point()





#기본툴로 그리는 산점도
plot(final)

#선형회귀분석(linear regression)을 위해 ggplot2의 linear model을 이용하여 그래프 그리기
ggplot(data = final, aes(x = displ, y = hwy))+geom_point()+geom_smooth(method="lm")



ggplot(data = final, aes(x = displ, y = hwy))+geom_count()+geom_smooth(method="lm")





#해석을 위한 선형회귀식 분석
analysis <- lm(hwy~displ, data = final)
summary(analysis)

# summary(analysis)로 나온 값
# Call:
#   lm(formula = hwy ~ displ, data = final)
# Residuals:
#   Min      1Q    Median    3Q     Max 
# -7.1039 -2.1646 -0.2242  2.0589 15.0105 
# Coefficients:
#                Estimate  Std. Error   t value     Pr(>|t|)    
# (Intercept)    35.6977     0.7204   49.55   <2e-16 ***
#   displ        -3.5306     0.1945  -18.15   <2e-16 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# Residual standard error: 3.836 on 232 degrees of freedom
# Multiple R-squared:  0.5868, Adjusted R-squared:  0.585 
# F-statistic: 329.5 on 1 and 232 DF,  p-value: < 2.2e-16

==========R==========




나온 데이터를 보기 좋게 정리해보자면

 Residuals:

 

 

 

 

 Min

1Q 

Median 

3Q 

Max 

 -7.1039

-2.1646 

-0.2242 

2.0589 

15.0105 



Coefficients: 

 

 

 

 

 

 Estimate

Std. Error 

t value 

Pr(>|t|)

 (Intercept)

 35.6977

 0.7204

 49.55

 <2e-16

 displ

 -3.5306

 0.1945

 18.15

 <2e-16



Residual standard error: 

 3.836 on 232 degrees of freedom

 Multiple R-squared:  

 0.5868

 Adjusted R-squared:  

 0.585 

 F-statistic: 

 329.5 on 1 and 232 DF

 p-value: 

 < 2.2e-16





위와 같은 형태로 나오게 된다.

일단 얻어진 결과로부터 알 수 있는 선형회귀식은 아래와 같다.

y = 35.6977 - 3.5306x

두 값은 강한 음의 상관관계가 있고 p-value가 2.2*10^(-16)로 충분히 작으므로 둘의 강한 음의 상관관계가 의미있는 결론이라는 것을 알 수 있다. 

잔차(residuals)의 경우 그래프 내 이상치를 제외한다면 중간값이 -0.2242로 에러가 적은 것을 알 수 있다. 만약 x축의 범위를 2~6 정도로 좁힌다면 더 작은 잔차를 얻을 수 있을 것이다. 거기에 더 정확한 그래프도 나오게 될 것이다.

t value도 보면 높게 나온 것을 확인 할 수 있다. 이는 독립-종속간의 상관도가 높다는 뜻이고 이 둘의 상관관계는 유의미한 결과라는 걸 뜻한다.

나온 결과를 해석해보자면 배기량이 높을수록 고속도로 연비가 떨어진다는 결과가 나온다. 대부분의 좋은 연비는 배기량 2~3에 몰려있고 안 좋은 연비는 4.5~5.5에 몰려있다. 이 데이터 하나로 굉장히 유의미한 결과를 얻을수는 없었지만 여기에 몇 가지 데이터가 합쳐진다면 재미있는 결과를 얻을 수 있을 것이라 생각한다.

1. 평소 고속도로를 많이 이용하는 사람이 '안전'과 '연비'를 따져서 자동차를 구매하고자 할 때.
 - 자동차 안전, 얼마나 고속도로를 이용하는가, 어느 정도의 비용을 지불할 용의가 있는가라는
   데이터를 더 모아서 최적의 차량을 선택 할 수 있게 된다.
2. 특정구간에서 과속 차량을 줄이기 위해 운전자의 습관을 분석하고자 할 때.
 - 차종과 연비, 운전 습관과 연비, 과속에 걸린 횟수와 차종, 과속이 많이 나타나는 구간들의 특징 등.
    포괄적인 개념이라 여러가지 데이터가 필요하겠지만 당장 생각나는 데이터는 위와 같다.
3. 생애주기에 따른 차량 선택과 운전습관의 관계.
 - 나이대별 구매하는 차량의 형태, 차량 구매에 지불 할 수 있는 비용의 상-하한선, 나이대별 선호하는 
    차량의 형태 등.
    보다 더 추상적인 개념이라 더 많은 데이터가 필요해졌다.


데이터 분석은 꽤 어려운 작업이라고 생각한다. 단순히 수치를 해석하는 것이 아니라 무엇을 얻고 싶은지에 대한 명확한 목표의식도 필요하고 내가 만들어 낸 결과가 유의미한지도 확인해야 하기 때문이다. 더 열심히 노력해야겠다.






ref.


+ Recent posts