R의 상관관계: Pearson & Spearman 상관관계 행렬
R의 이변량 상관관계
이변량 관계는 R의 두 변수 간의 관계 또는 상관관계를 설명합니다. 이 튜토리얼에서는 상관관계의 개념을 논의하고 R에서 두 변수 간의 관계를 측정하는 데 이 상관관계를 사용하는 방법을 보여줍니다.
R 프로그래밍의 상관관계
R 프로그래밍에는 두 변수 간의 상관 관계를 계산하는 두 가지 기본 방법이 있습니다.
- 피어슨: 매개변수 상관관계
- 창병: 비모수적 상관관계
R의 피어슨 상관 행렬
Pearson 상관관계 방법은 일반적으로 두 변수 간의 관계에 대한 기본 검사로 사용됩니다.
The 상관 계수, , 은 강도의 척도입니다. 선의 두 변수 사이의 관계와 . 다음과 같이 계산됩니다.
과
즉, 표준편차는
즉, 표준편차는
상관관계의 범위는 -1과 1 사이입니다.
- 0에 가까우거나 같은 값은 과 사이의 선형 관계가 거의 또는 전혀 없음을 의미합니다.
- 반면, 1이나 -1에 가까울수록 선형 관계는 강해집니다.
다음과 같이 t-검정을 계산하고 자유도가 다음과 같은 분포표를 확인할 수 있습니다.
R의 Spearman 순위 상관 관계
순위 상관은 관측치를 순위별로 정렬하고 순위 간의 유사성 수준을 계산합니다. 순위 상관관계는 이상값에 대해 견고하다는 장점이 있으며 데이터 분포와 연결되지 않습니다. 순위 상관은 순서형 변수에 적합합니다.
스피어만 순위 상관관계, 는 항상 -1과 1 사이이며, 극단에 가까운 값은 강한 관계를 나타냅니다. 다음과 같이 계산됩니다.
순위와 사이의 공분산을 명시했습니다. 분모는 표준편차를 계산합니다.
R에서는 cor() 함수를 사용할 수 있습니다. 세 개의 인수인 , 및 메서드를 사용합니다.
cor(x, y, method)
인수:
- x: 첫 번째 벡터
- y: 두 번째 벡터
- 방법: 상관 관계를 계산하는 데 사용되는 공식입니다. 세 가지 문자열 값:
- “피어슨”
- “켄달”
- "창병"
벡터에 누락된 값이 포함된 경우 선택적 인수를 추가할 수 있습니다. = "complete.obs"를 사용하세요.
우리는 BudgetUK 데이터세트를 사용할 것입니다. 이 데이터 세트는 1980년에서 1982년 사이 영국 가구의 예산 할당을 보고합니다. 그 중 1519가지 특징을 가진 XNUMX개의 관측치가 있습니다.
- wfood: 음식 공유 지출
- 연료: 연료 지출 공유
- 옷감: 의류 지출에 대한 예산 분배
- 월크: 술 소비를 공유
- 트랜스: 교통비 지출 분담
- 워더: 기타 재화 지출의 몫
- 토텍스: 총 가구 지출(파운드)
- 수입: 총 순가구 소득
- 나이: 가구의 나이
- 어린이: 자녀의 수
예시
library(dplyr) PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/british_household.csv" data <-read.csv(PATH) filter(income < 500) mutate(log_income = log(income), log_totexp = log(totexp), children_fac = factor(children, order = TRUE, labels = c("No", "Yes"))) select(-c(X,X.1, children, totexp, income)) glimpse(data)
코드 설명
- 먼저 데이터를 가져오고 dplyr 라이브러리의 looking() 함수를 사용하여 살펴봅니다.
- 500개의 포인트가 XNUMXK를 초과하므로 제외하기로 결정했습니다.
- 화폐변수를 로그로 변환하는 것이 일반적인 관행입니다. 이상값의 영향을 줄이고 데이터 세트의 왜곡을 줄이는 데 도움이 됩니다.
출력:
## Observations: 1,516## Variables: 10 ## $ wfood <dbl> 0.4272, 0.3739, 0.1941, 0.4438, 0.3331, 0.3752, 0... ## $ wfuel <dbl> 0.1342, 0.1686, 0.4056, 0.1258, 0.0824, 0.0481, 0... ## $ wcloth <dbl> 0.0000, 0.0091, 0.0012, 0.0539, 0.0399, 0.1170, 0... ## $ walc <dbl> 0.0106, 0.0825, 0.0513, 0.0397, 0.1571, 0.0210, 0... ## $ wtrans <dbl> 0.1458, 0.1215, 0.2063, 0.0652, 0.2403, 0.0955, 0... ## $ wother <dbl> 0.2822, 0.2444, 0.1415, 0.2716, 0.1473, 0.3431, 0... ## $ age <int> 25, 39, 47, 33, 31, 24, 46, 25, 30, 41, 48, 24, 2... ## $ log_income <dbl> 4.867534, 5.010635, 5.438079, 4.605170, 4.605170,... ## $ log_totexp <dbl> 3.912023, 4.499810, 5.192957, 4.382027, 4.499810,... ## $ children_fac <ord> Yes, Yes, Yes, Yes, No, No, No, No, No, No, Yes, ...
"pearson" 및 "spearman" 방법을 사용하여 소득과 wfood 변수 간의 상관 계수를 계산할 수 있습니다.
cor(data$log_income, data$wfood, method = "pearson")
출력:
## [1] -0.2466986
cor(data$log_income, data$wfood, method = "spearman")
출력:
## [1] -0.2501252
R의 상관 행렬
이변량 상관관계는 좋은 시작이지만 다변량 분석을 사용하면 더 넓은 그림을 얻을 수 있습니다. 많은 변수와의 상관 관계가 그림 안에 그려져 있습니다. 상관 행렬. 상관 행렬은 모든 변수의 쌍 상관 관계를 나타내는 행렬입니다.
cor() 함수는 상관 행렬을 반환합니다. 이변량 상관관계와의 유일한 차이점은 어떤 변수를 지정할 필요가 없다는 것입니다. 기본적으로 R은 모든 변수 간의 상관 관계를 계산합니다.
요인변수에 대해서는 상관관계를 계산할 수 없습니다. cor() 내부에 데이터 프레임을 전달하기 전에 범주형 기능을 삭제했는지 확인해야 합니다.
상관 행렬은 대칭적입니다. 즉, 대각선 위의 값이 아래 값과 동일한 값을 가집니다. 행렬의 절반을 표시하는 것이 더 시각적입니다.
children_fac는 요인 수준 변수이므로 제외합니다. cor는 범주형 변수에 대해 상관관계를 수행하지 않습니다.
# the last column of data is a factor level. We don't include it in the code mat_1 <-as.dist(round(cor(data[,1:9]),2)) mat_1
코드 설명
- 코르(데이터): 상관 행렬을 표시합니다.
- 라운드(데이터, 2): 상관행렬을 소수점 이하 두 자리로 반올림합니다.
- as.dist(): 후반부만 표시
출력:
## wfood wfuel wcloth walc wtrans wother age log_income ## wfuel 0.11 ## wcloth -0.33 -0.25 ## walc -0.12 -0.13 -0.09 ## wtrans -0.34 -0.16 -0.19 -0.22 ## wother -0.35 -0.14 -0.22 -0.12 -0.29 ## age 0.02 -0.05 0.04 -0.14 0.03 0.02 ## log_income -0.25 -0.12 0.10 0.04 0.06 0.13 0.23 ## log_totexp -0.50 -0.36 0.34 0.12 0.15 0.15 0.21 0.49
유의 수준
유의 수준은 Pearson 방법이나 Spearman 방법을 사용할 때 일부 상황에서 유용합니다. Hmisc 라이브러리의 rcorr() 함수는 p-값을 계산합니다. 우리는 다음에서 라이브러리를 다운로드할 수 있습니다. 콘도 코드를 복사하여 터미널에 붙여넣습니다.
conda install -c r r-hmisc
rcorr()에는 행렬로 저장될 데이터 프레임이 필요합니다. p-값으로 상관 행렬을 계산하기 전에 데이터를 행렬로 변환할 수 있습니다.
library("Hmisc") data_rcorr <-as.matrix(data[, 1: 9]) mat_2 <-rcorr(data_rcorr) # mat_2 <-rcorr(as.matrix(data)) returns the same output
목록 객체 mat_2에는 세 가지 요소가 포함되어 있습니다.
- r: 상관행렬의 출력
- n: 관찰 횟수
- P: p-값
우리는 세 번째 요소인 p-값에 관심이 있습니다. 상관계수 대신 p-값을 사용하여 상관행렬을 표시하는 것이 일반적입니다.
p_value <-round(mat_2[["P"]], 3) p_value
코드 설명
- mat_2[[“P”]]: p-값은 P라는 요소에 저장됩니다.
- round(mat_2[[“P”]], 3): 요소를 세 자리 숫자로 반올림합니다.
출력:
wfood wfuel wcloth walc wtrans wother age log_income log_totexp wfood NA 0.000 0.000 0.000 0.000 0.000 0.365 0.000 0 wfuel 0.000 NA 0.000 0.000 0.000 0.000 0.076 0.000 0 wcloth 0.000 0.000 NA 0.001 0.000 0.000 0.160 0.000 0 walc 0.000 0.000 0.001 NA 0.000 0.000 0.000 0.105 0 wtrans 0.000 0.000 0.000 0.000 NA 0.000 0.259 0.020 0 wother 0.000 0.000 0.000 0.000 0.000 NA 0.355 0.000 0 age 0.365 0.076 0.160 0.000 0.259 0.355 NA 0.000 0 log_income 0.000 0.000 0.000 0.105 0.020 0.000 0.000 NA 0 log_totexp 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 NA
R에서 상관 행렬 시각화
히트맵은 상관행렬을 표시하는 또 다른 방법입니다. GGally 라이브러리는 ggplot2의 확장입니다. 현재 conda 라이브러리에서는 사용할 수 없습니다. 콘솔에 직접 설치할 수 있습니다.
install.packages("GGally")
라이브러리에는 모든 변수의 상관 관계 및 분포와 같은 요약 통계를 표시하는 다양한 기능이 포함되어 있습니다. 매트릭스.
ggcorr() 함수에는 많은 인수가 있습니다. 튜토리얼에서 사용할 인수만 소개하겠습니다.
ggcorr 함수
ggcorr(df, method = c("pairwise", "pearson"), nbreaks = NULL, digits = 2, low = "#3B9AB2", mid = "#EEEEEE", high = "#F21A00", geom = "tile", label = FALSE, label_alpha = FALSE)
인수 :
- df: 사용된 데이터세트
- 방법: 상관관계를 계산하는 공식입니다. 기본적으로 쌍별 및 피어슨이 계산됩니다.
- nbreaks: 계수 색상에 대한 범주형 범위를 반환합니다. 기본적으로 끊김이 없으며 색상 그라데이션이 연속됩니다.
- 숫자: 상관계수를 반올림합니다. 기본적으로 2로 설정됩니다.
- 낮은: 발색의 낮은 단계를 조절합니다.
- 중순: 발색의 중간 정도를 조절합니다.
- 높은: 높은 발색력을 조절
- 기하학: 기하학적 인수의 모양을 제어합니다. 기본적으로 "타일"
- 상표: 부울 값. 라벨을 표시하거나 표시하지 않습니다. 기본적으로 'FALSE'로 설정됩니다.
기본 히트맵
패키지의 가장 기본적인 플롯은 히트 맵입니다. 그래프의 범례는 -1에서 1까지의 그라데이션 색상을 보여주는데, 뜨거운 색상은 강한 양의 상관관계를 나타내고 차가운 색상은 음의 상관관계를 나타냅니다.
library(GGally) ggcorr(data)
코드 설명
- ggcorr(데이터): 데이터 프레임 이름인 하나의 인수만 필요합니다. 요인 수준 변수는 그림에 포함되지 않습니다.
출력:
히트 맵에 제어 추가
그래프에 더 많은 컨트롤을 추가할 수 있습니다.
ggcorr(data, nbreaks = 6, low = "steelblue", mid = "white", high = "darkred", geom = "circle")
코드 설명
- nbreak=6: 6랭크로 전설을 깨뜨려보세요.
- 낮음 = "스틸블루": 음의 상관관계를 나타내려면 더 밝은 색상을 사용하십시오.
- 중간 = "흰색": 중간 범위의 상관관계를 위해 흰색 색상을 사용합니다.
- 높음 = “어두움”: 양의 상관관계를 위해서는 어두운 색상을 사용합니다.
- 기하학 = “원”: 히트 맵에서 창문 모양으로 원을 사용합니다. 원의 크기는 상관관계의 절대값에 비례합니다.
출력:
히트맵에 라벨 추가
GGally를 사용하면 창 내부에 레이블을 추가할 수 있습니다.
ggcorr(data, nbreaks = 6, label = TRUE, label_size = 3, color = "grey50")
코드 설명
- 라벨 = 참: 히트맵 내부의 상관계수 값을 추가합니다.
- 색상 = “회색50”: 색상을 선택하세요(예: 회색)
- label_size = 3: 라벨의 크기를 3으로 설정
출력:
ggpairs 함수
마지막으로 GGaly 라이브러리의 또 다른 함수인 Ggpair를 소개합니다. 이 함수는 행렬 형식으로 그래프를 생성합니다. 하나의 그래프 내에 세 가지 종류의 계산을 표시할 수 있습니다. 행렬은 차원이며, 관측치의 수와 같습니다. 위/아래 부분은 창을 표시하고 대각선에 있습니다. 행렬의 각 부분에 표시할 정보를 제어할 수 있습니다. ggpair의 공식은 다음과 같습니다.
ggpair(df, columns = 1: ncol(df), title = NULL, upper = list(continuous = "cor"), lower = list(continuous = "smooth"), mapping = NULL)
인수 :
- df: 사용된 데이터세트
- 열: 플롯을 그릴 열을 선택합니다.
- 제목: 제목 포함
- 상단: 플롯의 대각선 위에 있는 상자를 제어합니다. 반환할 계산 또는 그래프 유형을 제공해야 합니다. 연속 = "cor"인 경우 R에 상관 관계를 계산하도록 요청합니다. 인수는 목록이어야 합니다. 다른 인수를 사용할 수 있습니다. 자세한 내용은 [비네트]("http://ggobi.github.io/ggally/#custom_functions")를 참조하세요.
- 낮 춥니 다: 대각선 아래의 상자를 제어합니다.
- 매핑: 그래프의 심미성을 나타냅니다. 예를 들어, 다양한 그룹에 대한 그래프를 계산할 수 있습니다.
그룹화를 사용한 ggpair를 사용한 이변량 분석
다음 그래프에는 세 가지 정보가 표시됩니다.
- 가구에 자녀가 있는지 여부에 따라 그룹화된 log_totexp, log_income, age 및 wtrans 변수 간의 상관 행렬입니다.
- 그룹별 각 변수의 분포를 도표화합니다.
- 그룹별 추세를 산점도로 표시
library(ggplot2) ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"), title = "Bivariate analysis of revenue expenditure by the British household", upper = list(continuous = wrap("cor", size = 3)), lower = list(continuous = wrap("smooth", alpha = 0.3, size = 0.1)), mapping = aes(color = children_fac))
코드 설명
- 열 = c(“log_totexp”, “log_income”, “age”, “wtrans”): 그래프에 표시할 변수를 선택합니다.
- title = “영국 가계의 수입 지출에 대한 이변량 분석”: 제목 추가
- 상단 = 목록(): 그래프의 상단 부분을 제어합니다. 즉, 대각선 위
- 연속 = Wrap(“cor”, 크기 = 3)): 상관계수를 계산합니다. 그래프의 미학을 제어하기 위해 Wrap() 함수 내부에 연속 인수를 래핑합니다(예: 크기 = 3). -lower = list(): 그래프의 아래쪽 부분을 제어합니다. 즉, 대각선 아래.
- 연속 = 랩("부드러운",알파 = 0.3,크기=0.1): 선형 추세가 있는 산점도를 추가합니다. 그래프의 미학을 제어하기 위해 Wrap() 함수 내부에 연속 인수를 래핑합니다(예: 크기=0.1, 알파=0.3).
- 매핑 = aes(색상 = children_fac): 그래프의 각 부분을 변수 children_fac에 의해 쌓고 싶습니다. 이 변수는 가구에 자녀가 없는 경우 1, 그렇지 않은 경우 2의 값을 갖는 범주형 변수입니다.
출력:
부분 그룹화를 사용한 ggpair를 사용한 이변량 분석
아래 그래프는 조금 다릅니다. 위쪽 인수 내부의 매핑 위치를 변경합니다.
ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"), title = "Bivariate analysis of revenue expenditure by the British household", upper = list(continuous = wrap("cor", size = 3), mapping = aes(color = children_fac)), lower = list( continuous = wrap("smooth", alpha = 0.3, size = 0.1)) )
코드 설명
- 다음을 제외하면 이전 예제와 완전히 동일한 코드입니다.
- mapping = aes(color = children_fac): 상위 = list()에서 목록을 이동합니다. 우리는 그래프 상단에 그룹별로 계산이 쌓이길 원합니다.
출력:
제품 개요
- 이변량 관계는 R의 두 변수 사이의 관계 또는 상관 관계를 설명합니다.
- 두 변수 사이의 상관 관계를 계산하는 두 가지 기본 방법이 있습니다. R 프로그래밍: 피어슨 앤 스피어먼.
- Pearson 상관관계 방법은 일반적으로 두 변수 간의 관계에 대한 기본 검사로 사용됩니다.
- 순위 상관은 관측치를 순위별로 정렬하고 순위 간의 유사성 수준을 계산합니다.
- 스피어만 순위 상관관계는 항상 -1과 1 사이이며, 양 극단에 가까울수록 상관관계가 강함을 나타냅니다.
- 상관 행렬은 모든 변수의 쌍 상관 관계를 나타내는 행렬입니다.
- 유의 수준은 Pearson 방법이나 Spearman 방법을 사용할 때 일부 상황에서 유용합니다.
아래 표에는 R의 모든 상관관계 함수가 요약되어 있습니다.
도서관 | 목표 | 방법 | 암호 |
---|---|---|---|
Base | 이변량 상관관계 | 피어슨 |
cor(dfx2, method = "pearson") |
Base | 이변량 상관관계 | 창병 |
cor(dfx2, method = "spearman") |
Base | 다변량 상관관계 | 피어슨 |
cor(df, method = "pearson") |
Base | 다변량 상관관계 | 창병 |
cor(df, method = "spearman") |
흐미스크 | P 값 |
rcorr(as.matrix(data[,1:9]))[["P"]] |
|
갈리 | 열지도 |
ggcorr(df) |
|
다변량 도표 |
cf code below |