코딩/R

R 데이터 분석 - 단순 회귀분석 -

kaki_ss 2022. 1. 12. 16:16
728x90
반응형
반응형

안녕하세요!

 

Python 글을 계속 쓰다가 R로 글을 쓰려니 약간씩 헷갈리긴 하지만 그래도 정리를 안 하면 다 잊어버릴 것 같아서 이렇게 정리해봅니다.😂

 

오늘은 R로 단순회귀분석하는 방법에 대해서 설명드리겠습니다.

계속 기초 얘기하다가 갑자기 확 점프했지만.. 그래도 천천히 잘 설명해보겠습니다.

회귀분석 관련한 설명보다는 어떻게 R로 코드를 돌리는 지를 중점적으로 설명드릴게요.

 

#더빈왓슨검정을 위한 패키지
install.packages("lmtest")
library(lmtest)

먼저, 필요한 패키지를 먼저 설치하였습니다. 회귀분석 코드인 lm은 기본적으로 설치되어있을 테니 패스하고 회귀분석 후 더빈왓슨 검정을 위한 패키지를 설치하였습니다.

 

"lmtest" 패키지를 설치하고 라이브러리로 불러오면 됩니다.

 

data_car<-cars
head(data_car)

이번에 사용할 데이터는 "cars" 데이터입니다. R에 기본적으로 설치되어 있는 내장 데이터입니다. 

cars 데이터는 1920년대에 만들어진 데이터로 자동차 스피드에 따라 멈추는데 필요한 거리를 측정한 데이터입니다. 

2개의 변수와 50개의 데이터를 가지고 있습니다.

 

head를 이용해서 데이터를 살펴보면 다음과 같습니다.

각각 변수들의 단위는 speed는 시간당 마일이고, dist는 피트입니다.

 

summary(data_car)

 

summary를 이용해서 데이터를 파악해 보겠습니다.

 

 

speed는 평균이 15.4이고 dist는 42.98입니다. dist는 min과 max의 차이가 큰 것 같습니다.

 

300x250

 

사실 상관성이 있는지, 정규성을 가지는 지 등... 회귀분석을 위한 준비가 필요하지만..... 바로 회귀분석 코드를 알아보겠습니다.

회귀분석저장할곳<-lm(종속변수~독립변수1+독립변수2, data=사용할데이터)

회귀분석을 위한 코드는 이렇습니다. cars 데이터는 변수가 2개여서 독립변수를 더 추가하지 못하지만 독립변수가 2개 이상일 경우 저렇게 +로 원하는 독립변수를 계속 추가하면 됩니다.

 

종속변수를 제외한 전체 데이터를 넣고 회귀분석을 돌리고 싶으면 ~뒤에 독립변수를 일일이 다 쓰는 것 대신에 .을 넣어주면 됩니다. 

 

아래 cars를 이용해서 한번 보겠습니다.

lm_cars<-lm(dist~.,data=data_car)

 

회귀분석을 저장할 곳은 lm_cars라고 지정을 했고 그 안에 dist를 종속변수로 해서 모든 변수(라고 해봤자 speed 하나지만..)을 넣어주었습니다. 변수를 입력할 때 ""를 넣을 필요는 없습니다. 그리고 data 뒤에 내가 사용할 데이터를 넣어주면 됩니다.

 

summary(lm_cars)

앞에서 summary는 데이터의 값의 평균과 quantile 등을 알려주었지만 회귀분석 결과물의 summary 값은 다릅니다.

 

summary를 통해서 회귀분석 결과가 어떻게 나왔는 지를 확인할 수 있습니다. 주로 확인해야 할 곳들만 빨간색으로 표시하였습니다.

 

먼저 estimate 값은 회귀 계수로 speed가 1 증가할 때 예상되는 dist의 증가값이 3.9324로 speed의 회귀분석의 계수를 의미합니다. 

오른쪽의 Pr(>|t|) 값은 변수들이 유의미한지 여부인데 speed는 유의 수준이 0.001 수준에서 유의하다는 뜻입니다. 

 

R-squared 값은 이 모형의 설명력을 의미하는데 단순 회귀분석에서는 multiple R-squared 값으로 해도 상관없지만 대부분 Adjusted R-squared 값으로 설명력을 표시합니다. 수정된 R-squared 값이라고도 하는 이 값은 독립변수의 개수와 표본의 크기를 고려하여 R-squred 값을 보정합니다.

 

마지막 아래에 있는 p-value 값은 이 회귀모형이 유의한 지를 판단할 때 사용되는데 p-value 값이 0.05보다 작으므로 이 모형은 유의 수준 5% 내에 유의하다고 판단할 수 있습니다.

 

lm_cars$coefficients

회귀분석 결과의 회귀계수는 따로 알 수 있습니다.

회귀분석 결과를 저장한 변수인 lm_cars의 coefficents를 보면,

 

이렇게 회귀분석 결과의 계수들을 따로 다른 변수로 저장할 수 있습니다.

 

회귀분석할 때 가정해야 하는 것 중에 하나인 오차 항의 독립을 검정하기 위해서 더빈-왓슨 검정을 수행했습니다.

(이외에도 다른 검정들이 있지만.... 그거는 나중에 하나씩 하겠습니다.)

 

dwtest 코드를 이용해서 회귀분석 결과를 검정해보겠습니다.

dwtest(lm_cars)

더빈-왓슨 검정은 귀무가설이 오차항이 독립적이다이고 대립 가설이 오차항에 자기 상관관계가 있다 즉, 독립이 아니다입니다.

p-value 결과를 보면 유의 확률 0.05보다 크기 때문에 대립 가설을 기각하고 귀무가설을 채택합니다. 즉, 오차항은 독립적이기 때문에 회귀분석의 가정을 만족한다고 볼 수 있습니다.

 

 

이번에는 회귀분석 그래프를 그려보겠습니다. 다중회귀분석일 때는 변수가 여러 가지 이기 때문에 종속변수에 따른 독립변수 하나씩만 그릴 수 있지만 단순 회귀분석은 독립변수가 하나이기 때문에 그래프를 그리는 것이 더 쉽습니다.

 

plot(data_car$speed,data_car$dist)
abline(lm_cars,col="red")

 

plot에 x, y 순으로 데이터를 넣어서 그려주고 abline을 이용해서 lm_cars 즉, 회귀분석 결과 그래프를 red 색깔로 넣어줍니다.

 

그 결과를 다음과 같이 확인할 수 있습니다.

 

#예측
n_data<-data.frame(speed=c(70,100))

단순 회귀분석이지만.... 예측도 가능합니다. 예측을 위해서는 넣어줄 데이터 형태가 데이터 프레임 형태여야 합니다. speed가 70,100일 때 dist를 예측하기 위해서 데이터 프레임을 만들었습니다.

 

 

predict(lm_cars,newdata = n_data,interval = "confidence")

predict를 이용해서 처음에 회귀분석 결과를 넣고, newdata에 예측을 위한 데이터, interval은 신뢰구간을 알아보기 위해서 입력했습니다. 

 

예측 결과를 보면 speed가 70일 때 dist는 257.6895, 100일 때는 375.6618입니다.

제가 아무 숫자나 넣어야지 하고서 한 거긴 한데..... 너무 큰 값을 집어넣었습니다......ㅠㅠ 위에서 보시면 speed는 대부분 0~25 사이니깐요.......ㅠㅠㅠ

그냥 이렇게 하면 된다... 정도로만 생각해주세요.

 

오늘은 이렇게 해서 단순 회귀분석을 R로 코딩하는 방법에 대해서 설명드렸습니다. 통계 배울 때는 단순 회귀분석 부분은 매우 짧게 해서 넘어가고 다중회귀분석이라든지, 로지스틱 회귀분석을 더 중요하게 다뤄서 설명하는 것도 쉽겠지 했는데 예상보다 더 깊게 알아야 할 것도 많고 했습니다. 

 

설명하면서도 이게 맞나....? 당연하게 생각했던 것들을 설명하는 게 약간 어렵긴 하네요...ㅠㅠ

 

혹시라도 잘못된 점이 있을 경우 댓글로 남겨주시면 감사하겠습니다. 

 

읽으신 분들에게 도움이 되길 바라며...

오늘 하루도 즐거운 하루 보내세요( •̀ ω •́ )✧

728x90
반응형