Categories: R

R에서 상관 분석 (cor(), cor.test())

안녕하세요! 데이터 분석에 관심 있는 분들, 모두 환영해요! 😊 오늘 우리 같이 재미난 통계 이야기 하나 나눠볼까요? 바로 ‘상관 분석‘이라는 건데요, 어렵게 생각하지 마세요! R을 이용해서 쉽고 간편하게 상관 분석 하는 법, 제가 차근차근 알려드릴게요. 혹시 두 변수 사이에 어떤 관계가 있을지 궁금했던 적 있나요? 예를 들어 아이스크림 판매량과 날씨의 관계처럼요. ☀️🍦 R의 `cor()` 함수와 `cor.test()` 함수를 사용하면 이런 궁금증을 쉽게 해결할 수 있어요! 데이터 시각화까지 해서 더욱 직관적으로 이해할 수 있도록 도와드릴 테니 함께 즐겁게 배워봐요! 😉

 

 

상관 분석의 기초

상관 분석! 데이터 과학의 세계에서 빼놓을 수 없는 아주 중요한 개념이죠? 마치 탐정처럼, 변수들 간의 숨겨진 관계를 찾아내는 매력적인 분석 방법이에요. 두 변수가 서로 어떻게 움직이는지, 얼마나 밀접하게 연결되어 있는지 알아낼 수 있다니, 정말 흥미롭지 않나요?

피어슨 상관 계수

자, 그럼 상관 분석의 기초를 함께 탐험해 볼까요? 두 변수 간의 관계를 파악하는 방법은 여러 가지가 있지만, 가장 흔하게 쓰이는 방법은 바로 피어슨 상관 계수 (Pearson correlation coefficient)를 이용하는 거예요. 이 계수는 -1부터 +1 사이의 값을 가지는데, +1에 가까울수록 강한 양의 상관관계, -1에 가까울수록 강한 음의 상관관계를 나타낸답니다. 0에 가까워지면? 두 변수는 서로 독립적이라는 뜻이죠!

피어슨 상관 계수 예시

예를 들어 아이스크림 판매량과 기온 사이의 상관관계를 생각해 보세요. 날씨가 더워질수록 (기온 증가) 아이스크림이 더 많이 팔린다면 (판매량 증가) 양의 상관관계가 있다고 할 수 있겠죠? 반대로, 겨울 코트 판매량과 기온은 음의 상관관계를 가질 가능성이 높아요. 기온이 낮아질수록 코트 판매량은 증가할 테니까요! 참 쉽죠?!

피어슨 상관 계수의 한계

하지만 피어슨 상관 계수만으로는 모든 관계를 설명할 수 없어요. 피어슨 상관 계수는 선형 관계만 측정할 수 있기 때문이에요. 만약 두 변수의 관계가 곡선 형태라면? 피어슨 상관 계수는 0에 가까운 값을 보여줄 수도 있어요. 실제로는 관계가 있음에도 불구하고 말이죠! 그러니 항상 산점도 (scatter plot)를 그려서 데이터의 분포를 눈으로 확인하는 것이 중요해요! 데이터 시각화는 정말 백문이 불여일견이랍니다.

상관 관계와 인과 관계

상관 계수의 절댓값이 크다고 해서 항상 인과 관계가 있다고 단정 지을 수는 없다는 점도 명심해야 해요. 아이스크림 판매량과 익사 사고 건수 사이에 양의 상관관계가 있다고 가정해 볼게요. 그렇다고 해서 아이스크림을 먹으면 익사할 위험이 높아진다는 뜻일까요? 물론 아니죠! 두 변수 모두 더운 날씨라는 제3의 변수의 영향을 받기 때문이에요. 이처럼 상관관계는 인과관계를 의미하지 않는다는 사실, 꼭 기억해 두세요!

상관 분석의 다양한 측면

상관 분석은 데이터 분석의 기본 중의 기본이지만, 함정에 빠지지 않으려면 다양한 측면을 고려해야 해요. 단순히 숫자에만 집중하지 말고, 데이터의 특성과 숨겨진 이야기를 읽어내는 능력을 키워야 한답니다. 데이터 분석은 마치 퍼즐을 맞추는 것과 같아요. 조각 하나하나를 꼼꼼히 살펴보고, 전체 그림을 그려나가는 즐거움을 느껴보세요!

상관 계수의 통계적 유의성 검정

좀 더 깊이 들어가 볼까요? 상관 계수의 통계적 유의성을 검정하는 것도 중요해요. 표본 데이터에서 얻은 상관 계수가 단순히 우연에 의한 것인지, 아니면 실제로 모집단에서도 유의미한 관계가 있는지를 판단해야 하죠. 이때 사용하는 것이 바로 p-값 (p-value)! p-값이 미리 정해놓은 유의 수준 (보통 0.05)보다 작다면, 표본에서 관찰된 상관관계가 우연히 발생했을 가능성이 낮다고 판단하고, 통계적으로 유의미하다고 결론 내릴 수 있어요.

상관 분석의 활용

상관 분석은 다양한 분야에서 활용될 수 있어요. 의학 분야에서는 질병과 위험 요인 간의 관계를 밝히는 데 사용되고, 마케팅 분야에서는 고객의 구매 행동을 예측하는 데 활용될 수 있죠. 금융 분야에서는 투자 포트폴리오를 구성할 때 자산 간의 상관관계를 고려하는 것이 필수적이랍니다. 정말 다양한 분야에서 활용되죠?! 상관 분석, 알면 알수록 더욱 흥미진진한 분석 기법이에요!

향후 학습 내용

다음에는 cor() 함수 사용법에 대해 자세히 알아볼게요! 기대해 주세요!

 

cor() 함수 사용법

드디어 R에서 상관 분석을 할 때 가장 기본이 되는 cor() 함수를 만나볼 시간이에요! 두 변수 간의 관계를 얼마나 긴밀하게 연결되어 있는지 알아보는 핵심 함수죠. 생각보다 간단해서 금방 익숙해지실 거예요~?

cor() 함수는 기본적으로 Pearson 상관 계수를 계산하는데, 이 계수는 -1부터 1까지의 값을 가지거든요. -1에 가까울수록 음의 상관관계, 1에 가까울수록 양의 상관관계가 강하다는 것을 의미해요. 0에 가까워지면? 두 변수는 거의 관련이 없다는 거죠! 참 쉽죠?! ^^

cor() 함수의 기본 사용법

자, 이제 cor() 함수의 기본적인 사용법을 예시와 함께 살펴볼게요. R에 기본적으로 내장된 mtcars 데이터셋을 이용해보겠습니다! mtcars 데이터셋은 다양한 자동차 모델의 연비(mpg), 마력(hp), 배기량(disp) 등의 정보를 담고 있어서 연습하기 딱 좋아요.

# mtcars 데이터셋 불러오기
data(mtcars)

# 연비(mpg)와 마력(hp) 간의 상관계수 계산
cor(mtcars$mpg, mtcars$hp)

이 코드를 실행하면, 연비와 마력 간의 상관계수가 짠! 하고 나타날 거예요. 아마 음수 값이 나올 텐데, 이는 마력이 높을수록 연비가 낮아지는 경향이 있다는 걸 보여주는 거죠! 상식적으로 생각해도 그럴듯하죠~?

데이터 프레임 또는 행렬에서의 cor() 함수 사용

cor() 함수는 벡터뿐만 아니라 데이터 프레임이나 행렬에도 적용할 수 있어요. 예를 들어, mtcars 데이터셋에서 연비, 마력, 배기량, 차량 무게(wt) 간의 상관관계를 한 번에 계산해 볼까요?

# 연비(mpg), 마력(hp), 배기량(disp), 차량 무게(wt) 간의 상관계수 행렬 계산
cor(mtcars[, c("mpg", "hp", "disp", "wt")])

이 코드를 실행하면, 선택한 변수들 간의 상관계수를 한눈에 보여주는 상관행렬이 짠! 하고 나타납니다! 각 변수 쌍의 상관관계를 한 번에 파악할 수 있어서 정말 편리해요. 각 셀의 값을 보면서 어떤 변수들이 서로 강한 상관관계를 가지는지 바로 확인할 수 있답니다!

cor() 함수의 유용한 옵션: 결측값 처리 및 다른 상관 계수 계산

cor() 함수에는 몇 가지 유용한 옵션들이 있어요. 결측값(NA)이 있는 경우 어떻게 처리할지 정해줄 수 있거든요. use argument를 사용하면 “everything”, “all.obs”, “complete.obs”, “na.or.complete”, “pairwise.complete.obs” 중에서 선택할 수 있어요. 각 옵션은 결측값 처리 방식이 다르니까 상황에 맞게 잘 선택해야 해요! 예를 들어, use = "pairwise.complete.obs"로 설정하면 변수 쌍마다 결측값이 없는 데이터만 사용해서 상관계수를 계산해요. 결측값이 많을 때 유용하겠죠?!

또 다른 옵션으로는 method argument가 있는데, 이걸로 Pearson 상관 계수 외에도 Spearman이나 Kendall의 순위 상관 계수를 계산할 수도 있어요! 데이터가 정규 분포를 따르지 않을 때는 순위 상관 계수를 사용하는 것이 더 적절할 수 있거든요. 상황에 따라 적절한 방법을 선택하는 것이 중요해요!

# Spearman 순위 상관 계수 계산
cor(mtcars$mpg, mtcars$hp, method = "spearman")

# Kendall 순위 상관 계수 계산
cor(mtcars$mpg, mtcars$hp, method = "kendall")

cor() 함수, 생각보다 간단하고 유용하죠? 다양한 옵션을 활용해서 데이터에 맞는 상관 분석을 해보세요! 다음에는 cor.test() 함수를 이용해서 상관관계의 유의성을 검정하는 방법을 알아볼 거예요. 기대해 주세요~! ^^

 

cor.test() 함수를 이용한 유의성 검정

후~ 드디어 cor() 함수를 이용해서 상관계수를 구하는 방법을 알아봤어요! 그런데 말이죠, 이 상관계수가 통계적으로 유의미한지 아닌지를 판단하는 것도 정말 중요하답니다. 단순히 상관계수 값만 보고 “오! 이 두 변수는 0.7이나 되네? 엄청 강한 상관관계가 있구나!”라고 결론 내리면 안 돼요~ 왜냐하면, 표본의 크기가 작거나 데이터의 특성에 따라 우연히 높은 상관계수가 나올 수도 있거든요. 그래서 우리는 유의성 검정을 해야 한답니다! 자, 이제 R에서 `cor.test()` 함수를 이용해서 어떻게 유의성 검정을 하는지 자세히 알아볼까요? ^^

cor.test() 함수의 사용법

`cor.test()` 함수는 상관계수를 계산할 뿐만 아니라, 그 상관계수가 통계적으로 유의미한지에 대한 검정 결과까지 제공해준답니다. 정말 편리하죠?! `cor()` 함수와 마찬가지로 `cor.test(x, y, method = “pearson”)`처럼 사용하는데, 여기서 x와 y는 비교하려는 두 변수 벡터이고, method는 사용할 상관계수의 종류를 지정해요. “pearson”은 피어슨 상관계수, “spearman”은 스피어만 상관계수, “kendall”은 켄달의 타우 상관계수를 의미한답니다. 보통 연속형 변수에는 피어슨 상관계수를, 순서형 변수에는 스피어만이나 켄달의 타우 상관계수를 사용해요. 데이터의 특성에 맞게 잘 선택해야겠죠?!

p-value와 유의수준

`cor.test()` 함수를 실행하면 p-value라는 값이 출력되는데, 이 p-value가 0.05보다 작으면 “통계적으로 유의미한 상관관계가 있다!”라고 판단할 수 있어요. 반대로 p-value가 0.05보다 크면 “통계적으로 유의미한 상관관계가 없다”라고 판단하는 거죠! p-value가 0.05라는 기준은 보통 사회과학 분야에서 많이 사용되는데, 다른 기준값(0.01, 0.1 등)을 사용할 수도 있어요. 이 기준값을 유의수준(α, alpha)라고 부른답니다. 유의수준은 연구자가 설정하는 값이에요. 유의수준을 낮출수록 (예: 0.01) 더 엄격한 기준으로 유의성을 판단하게 되는 거죠.

키와 몸무게 예시

예를 들어, 키와 몸무게 사이의 상관관계를 분석한다고 가정해 볼게요. `cor.test()` 함수를 사용해서 분석한 결과, p-value가 0.001이 나왔다고 해봅시다. 이는 p-value가 0.05보다 훨씬 작으므로, 키와 몸무게 사이에는 통계적으로 유의미한 상관관계가 있다고 결론 내릴 수 있어요! “키가 클수록 몸무게도 더 많이 나가는 경향이 있다!”라고 말할 수 있는 거죠. 만약 p-value가 0.2였다면? 0.05보다 크니까 통계적으로 유의미한 상관관계가 없다고 판단해야겠죠? “키와 몸무게는 별 관련이 없어 보이는데…?”라고 생각할 수 있겠네요.

신뢰구간

`cor.test()` 함수는 p-value뿐만 아니라 신뢰구간도 제공해준답니다. 95% 신뢰구간이란, “이 구간 안에 실제 모집단의 상관계수가 95% 확률로 포함되어 있을 것이다!”라고 추정하는 구간이에요. 예를 들어, 키와 몸무게 사이의 상관계수에 대한 95% 신뢰구간이 [0.6, 0.8]이라고 한다면, 실제 모집단에서 키와 몸무게 사이의 상관계수는 0.6에서 0.8 사이일 가능성이 높다고 해석할 수 있는 거예요. 신뢰구간이 좁을수록 추정의 정확도가 높다고 할 수 있어요! 마치 양궁에서 과녁의 정중앙을 맞추는 것처럼요!

mtcars 데이터셋 예시

자, 이제 실제 데이터를 이용해서 `cor.test()` 함수를 사용해 볼까요? R에 기본적으로 내장되어 있는 `mtcars` 데이터셋을 사용해 보겠습니다! `mtcars` 데이터셋은 다양한 자동차 모델의 여러 가지 변수(연비, 마력, 엔진 크기 등)를 포함하고 있어요. `mtcars$mpg` (연비)`mtcars$hp` (마력) 사이의 상관관계를 분석해 보겠습니다.

cor.test(mtcars$mpg, mtcars$hp, method = "pearson")

결과를 보면 p-value가 매우 작게 나오는 것을 확인할 수 있을 거예요. 이는 연비와 마력 사이에 통계적으로 유의미한 음의 상관관계가 있다는 것을 의미해요. “마력이 높을수록 연비가 낮아지는 경향이 있다!”라고 해석할 수 있겠죠? 신뢰구간도 함께 확인해 보면, 실제 모집단에서 연비와 마력 사이의 상관계수가 어느 정도 범위에 있을지 추정할 수 있답니다. 참 유용하죠?

결론

`cor.test()` 함수를 잘 활용하면 두 변수 사이의 상관관계를 더욱 정확하게 파악할 수 있답니다! 단순히 상관계수 값만 보는 것보다 유의성 검정과 신뢰구간까지 함께 고려하는 것이 중요해요! 이제 여러분도 `cor.test()` 함수를 이용해서 데이터 분석의 고수가 되어 보세요! 화이팅!!

 

R에서 상관 분석 시각화

상관 분석 결과를 표로만 확인하면 뭔가 좀 아쉽죠? 숫자만 봐서는 변수 간의 관계가 어떻게 생겼는지, 얼마나 강한지 직관적으로 와닿지 않을 수 있어요. 그래서 R에서는 다양한 시각화 도구를 제공해서 상관 분석 결과를 더욱 효과적으로 보여줄 수 있도록 도와준답니다! 함께 알아볼까요~? ^^

`plot()` 함수를 이용한 산점도 시각화

가장 기본적인 시각화 방법은 plot() 함수를 이용하는 거예요. 두 변수를 plot(x, y) 형태로 입력하면 산점도를 그릴 수 있죠. 산점도를 보면 두 변수 간의 관계가 양의 상관관계인지, 음의 상관관계인지, 아니면 상관관계가 거의 없는지 한눈에 파악할 수 있답니다. 예를 들어, 키와 몸무게 데이터가 있다면 plot(키, 몸무게)처럼 입력하면 키와 몸무게의 관계를 산점도로 바로 확인할 수 있어요! 참 쉽죠?!

`pairs()` 함수를 이용한 다중 산점도 시각화

하지만 변수가 많아지면 plot() 함수만으로는 조금 부족해요. 변수가 세 개만 되어도 산점도를 세 개나 그려야 하니까요. ㅠㅠ 그럴 땐 pairs() 함수가 정말 유용해요! pairs() 함수는 데이터 프레임을 입력하면 변수들 간의 모든 조합에 대한 산점도를 한 번에 그려준답니다! 만약 다섯 개의 변수가 있다면? pairs() 함수 하나면 10개의 산점도를 한꺼번에 볼 수 있어요! 정말 편리하지 않나요? ?!!

`pairs()` 함수와 `panel.smooth` 옵션을 활용한 LOESS 곡선 추가

pairs() 함수를 사용할 때 panel.smooth 옵션을 추가하면 각 산점도에 LOESS (locally estimated scatterplot smoothing) 곡선을 추가할 수 있어요. LOESS 곡선은 데이터의 지역적인 패턴을 보여주는 곡선이에요. 이 곡선을 통해 변수 간의 관계가 선형적인지 비선형적인지 좀 더 명확하게 파악할 수 있답니다! 예를 들어, pairs(data, panel.smooth = TRUE)처럼 사용하면 돼요!

`corrplot` 패키지를 활용한 상관 분석 시각화

corrplot 패키지는 상관 분석 시각화에 특화된 다양한 기능을 제공해요. 이 패키지를 사용하려면 먼저 install.packages("corrplot") 명령어로 설치해야 해요. 설치 후 library(corrplot)로 패키지를 불러온 다음, cor() 함수로 상관행렬을 계산하고, 이 행렬을 corrplot() 함수에 입력하면 시각화가 완료돼요!

corrplot() 함수는 다양한 시각화 옵션을 제공하는데, method 옵션을 사용하면 원, 사각형, 타원, 숫자, 색상, 음영 등 다양한 방식으로 상관계수를 표현할 수 있어요! 예를 들어, corrplot(cor(data), method = "circle")은 원의 크기로 상관계수의 절댓값을, 색상으로 상관계수의 부호를 나타내는 시각화를 생성해요. method = "number"는 상관계수를 숫자로 표시하고, method = "color"는 색상의 농도로 상관계수를 표현해요. 다양한 옵션을 조합하여 자신에게 맞는 최고의 시각화를 만들어 보세요!

`corrgram` 패키지를 활용한 상관 분석 시각화

corrgram 패키지도 상관 분석 시각화에 유용한 패키지예요. install.packages("corrgram") 명령어로 설치하고 library(corrgram)으로 불러온 후, corrgram() 함수를 사용하면 돼요. corrgram() 함수는 산점도, 타원, 텍스트, 색상 등 다양한 방식으로 상관관계를 시각화할 수 있도록 지원해요.

corrgram(data, order=TRUE, lower.panel=panel.shade, upper.panel=panel.pie, text.panel=panel.txt)와 같이 사용하면, 하단 패널에는 음영으로 상관계수를 표시하고, 상단 패널에는 원형 차트로 상관계수를 나타내며, 대각선 패널에는 변수명을 표시하는 시각화를 생성할 수 있어요. order=TRUE 옵션은 변수들을 상관관계에 따라 재정렬하여 시각화를 더욱 명확하게 만들어준답니다! 정말 멋지죠?!

`ggplot2` 패키지를 활용한 고급 시각화

ggplot2 패키지를 사용하면 더욱 세련되고 유연한 상관 분석 시각화를 만들 수 있어요. geom_point() 함수를 사용하여 산점도를 그리고, geom_smooth() 함수를 사용하여 회귀선을 추가할 수 있죠. aes() 함수를 사용하여 색상, 크기, 모양 등 다양한 요소를 변수에 따라 매핑하면 데이터의 특징을 더욱 효과적으로 시각화할 수 있어요. facet_wrap()이나 facet_grid() 함수를 사용하면 여러 변수의 관계를 한눈에 비교할 수 있는 패널 그래프를 생성할 수도 있답니다. ggplot2 패키지는 무궁무진한 가능성을 제공하니, 꼭 한번 사용해 보세요! 강력 추천합니다! ?!!

R에서 제공하는 다양한 시각화 도구를 활용하면 상관 분석 결과를 더욱 효과적으로 전달하고, 데이터에 숨겨진 인사이트를 발견할 수 있을 거예요! 다양한 시각화 기법을 연습하고 자신만의 스타일을 개발해서 데이터 분석 전문가로 거듭나 보세요! 화이팅! ^^

 

자, 이렇게 R을 활용한 상관 분석의 세계를 살짝 엿봤어요! 어때요, 생각보다 어렵지 않았죠? cor() 함수로 상관계수를 뚝딱 구하고, cor.test() 함수로 유의성까지 검정해보면서 데이터 속 숨은 관계를 찾아내는 재미, 쏠쏠하지 않나요? 눈으로만 봐선 알 수 없었던 변수들의 관계가 숫자와 그래프를 통해 드러나는 모습이 정말 신기해요. 앞으로 데이터 분석을 하면서 변수들 간의 관계가 궁금해질 때, 오늘 배운 내용을 꼭 기억해 두었다가 써먹어 보세요.

데이터 분석, R과 함께라면 더 이상 어렵고 복잡한 작업이 아니에요! 훨씬 쉽고 재밌게 데이터를 탐색하고 인사이트를 발견할 수 있을 거예요. 분석하면 할수록 데이터의 매력에 푹 빠지게 될 거라고 확신해요!

 

Itlearner

Share
Published by
Itlearner

Recent Posts

R에서 정규성 검정 (shapiro.test(), qqnorm())

안녕하세요! 데이터 분석을 하다 보면 "내 데이터가 정규분포를 따르는 걸까?" 하는 궁금증, 한 번쯤은 가져보셨을…

4시간 ago

R에서 카이제곱 검정 (chisq.test())

안녕하세요! 오늘은 데이터 분석에서 빼놓을 수 없는 중요한 친구, 바로 카이제곱 검정(chisq.test())에 대해 함께 알아보려고…

13시간 ago

R에서 회귀 분석 (lm(), summary())

안녕하세요! 데이터 분석에 관심 있는 분들, 모두 환영해요! 🤗 오늘은 R을 이용해서 회귀 분석하는 방법을…

18시간 ago

R에서 t-test, ANOVA 분석 수행 (t.test(), aov())

안녕하세요! 데이터 분석에 관심 있는 분들, 모두 환영해요! 오늘은 통계 분석에서 가장 기본적이면서도 중요한 분석…

24시간 ago

R에서 기초 통계량 계산 (mean(), median(), sd(), var(), summary())

안녕하세요! 데이터 분석의 기초 중의 기초, 바로 기초 통계량에 대해 함께 알아보는 시간을 가져보려고 해요.…

1일 ago

R에서 대시보드 만들기 (shiny 패키지 활용)

안녕하세요! 요즘 데이터 시각화, 진짜 중요하잖아요? 그래서 오늘은 R의 Shiny 패키지를 활용해서 멋진 대시보드를 만드는…

1일 ago