상세 컨텐츠

본문 제목

[R]기술통계분석, 상관분석, 회귀분석 R로 한방에 끝내기

R

by 대학원생D군 2023. 3. 1. 06:10

본문

반응형

안녕하세요, 

지난 포스팅에서 SAS를 활용해서 기술통계분석, 상관분석, 회귀분석을 한방에 끝낼 수 있는 매크로 코드를 소개드렸습니다.

 

[SAS]기술통계분석부터 회귀 분석까지 한방에 끝내는 매크로

안녕하세요, 사회과학 분야의 석사학위 논문을 살펴보면 최근에는 중급, 고급 통계기법이 많이 사용되고 있지만, 여전히 기술통계분석, 상관분석, 다중회귀분석으로 이어지는 연구를 어렵지 않

paratussemper.tistory.com

이번 포스팅은 R 사용자를 위하여 이전 포스팅에서 소개드린 SAS 코드를 R로 변환하여 보았습니다! R은 비교적 코드가 단순해서 따로 매크로로 만들지 않았습니다:)

SASHELP.CLASS 데이터셋 만들기

우선 아래의 코드를 실행시켜 봅니다. 벡터형식으로 5개의 변수를 만든 후 data.frame을 활용해서 class라는 데이터프레임을 만들었습니다. 

Name <-c("Alfred", "Alice", "Barbara", "Carol", "Henry", "James", "Jane", "Janet", "Jeffrey", "John", "Joyce", "Judy", "Louise", "Mary", "Philip", "Robert", "Ronald", "Thomas", "William")
Sex <-c("M", "F", "F", "F", "M", "M", "F", "F", "M", "M", "F", "F", "F", "F", "M", "M", "M", "M", "M")
Age <-c(14, 13, 13, 14, 14, 12, 12, 15, 13, 12, 11, 14, 12, 15, 16, 12, 15, 11, 15)
Height <-c(69, 56.5, 65.3, 62.8, 63.5, 57.3, 59.8, 62.5, 62.5, 59, 51.3, 64.3, 56.3, 66.5, 72, 64.8, 67, 57.5, 66.5)
Weight <-c(112.5, 84, 98, 102.5, 102.5, 83, 84.5, 112.5, 84, 99.5, 50.5, 90, 77, 112, 150, 128, 133, 85, 112)
class <- data.frame(Name,Sex,Age,Height,Weight)

그리고 head(), str()을 사용해서 데이터 프레임이 잘 만들어졌는지 확인해 보겠습니다. str()을 사용하면 데이터 프레임 구조를 확인할 수 있는데 변수의 숫자형, 문자형 여부를 확인할 수 있습니다. 아래의 결과를 살펴보면 Name, Sex라는 변수는 문자형, 그 외의 변수들은 숫자형임을 확인할 수 있습니다.

head(class)
str(class)

기술통계분석

간단한 기술통계분석의 경우 R에 내장된 summary, table, plot으로 할 수 있습니다. 간단한 코드이니 직접 해보시는 것을 추천합니다.

  • summary() : 최솟값, 제1사분위수, 중윗값, 평균, 제3사분위수, 최댓값 확인
  • table() : 빈도
  • plot() : 두 변수 간 산점도 
summary(class)
table(class$Sex)
plot(class$Height, class$Weight)
상관분석

상관분석 또한 내장된 함수를 이용해서 분석할 수 있습니다. 우선 cor()를 사용하면 피어슨 상관계수를 얻을 수 있습니다. 그러나 소수점이 너무 많아서 지저분한 느낌이라 round()를 이용하여 소수점 3자리까지만 나오게 하였습니다. cor()에 문자형 변수를 넣게 되면 에러가 나기 때문에 조금 번거로운 부분이 있습니다. pairs()를 사용하면 변수 간 산점도를 확인할 수 있습니다. 아래의 그림을 보면 height와 weight는 선형의 관계가 있어 보이는군요. 

round(cor(class[,c(3:5)], method="pearson"),3)
pairs(class[,c(3:5)])

선형회귀분석

회귀분석 자체는 R에 내장된 lm()함수를 이용하여 분석할 수 있습니다. 그러나 회귀분석의 경우 표준화회귀계수, 회귀진단 등이 필요하므로 lm()만으로는 한계가 명백합니다. 이를 위해서 car와 lm.beta 패키지를 사용했습니다. 이 밖에도 이분산성 등의 진단이 필요하지만 이번 포스팅에서는 생략하겠습니다.

  • lm() : 회귀분석 - 모형정보, 회귀계수 등 확인
  • car::vif() : 분산팽창지수 계산
  • lm.beta() : 표준화 회귀계수 계산
  • par(mfrow=c(2,2)), plot(reg) : 회귀진단 그래프를 2X2로 그리기
library(car)
library(lm.beta)
reg<-lm(Weight ~ Age + Height + Sex)
list(summary(reg), vif(reg), lm.beta(reg))
par(mfrow=c(2,2))
plot(reg)

지금까지 R을 활용하여 사회과학 논문에서 반드시 등장하는 기술통계분석, 상관분석, 회귀분석을 하는 방법을 알아봤습니다. 제가 소개해드린 R에 내장된 기본 함수 뿐만 아니라 다양한 패키지를 통해서 동일한 분석을 수행할 수 있으니 참고하시면 좋을 것같습니다! 단적인 예로 제가 소개해드린 cor()만으로 논문의 상관분석결과 표를 채우는 것은 어렵습니다. 그렇기 때문에 cor.test()나 Hmisc패키지의 rcorr()가 등장할 수 있었겠죠.

 

궁금하신 점은 언제든 댓글로 담겨주세요:)

감사합니다!

 

☆ 제 코드는 정답이 아니며 틀린 부분이 있을 수 있으니 주의하여 활용하시기 바랍니다.

반응형

'R' 카테고리의 다른 글

[R] 구글 코랩에서 R 사용하기  (0) 2023.04.18
[R] 그래프 한글 깨짐 (showtext 패키지)  (0) 2023.04.11

관련글 더보기

댓글 영역