- 기본 그래프에 각종 객체를 추가하여 그래프 내용을 명확하게 표현할 수 있음
- 그래프에 선이나 도형, 텍스트 등 다양한 객체를 추가하여 그래프의 가독성을 높이고 명확하게 전달할 수 있음
- 예를들어 직선을 그려 그래프 추세나 변동추이, 원하는 위치를 표현하거나, 도형을 그려 그래프의 특정 영역을 강조하거나, 값을 텍스트로 그래프에 직접 표현할 수 있음
- 그래프에 직선을 표현할 때 : 절편과 기울기를 이용
- 절편 (intercept) : 직선이 x축이나 y축과 만나는 좌표
- 기울기(slope) : 직선의 경사도 (값이 클수록 선이 경사지다)
= 이러한 절편과 기울기는 회귀분석(regression analysis)으로 구할 수 있음
1. 사선 그리기 : geom_abline() 함수
그래프에 사선을 추가해 그래프 추세를 확인할 수 있다.
사선은 절편과 기울기를 이용해 geom_abline() 함수로 그린다.
geom_abline(intercept = 절편, slope = 기울기)
economics 데이터 세트의 date(날짜)를 x축으로, psavert(개인저축률)를 y축으로 하고, 선그래프를 그리고(geom_line), 그 위에 사선을 추가한다. (geom_abline)
> library(ggplot2)
> str(economics)
spc_tbl_ [574 × 6] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
$ date : Date[1:574], format: "1967-07-01" "1967-08-01" ...
$ pce : num [1:574] 507 510 516 512 517 ...
$ pop : num [1:574] 198712 198911 199113 199311 199498 ...
$ psavert : num [1:574] 12.6 12.6 11.9 12.9 12.8 11.8 11.7 12.3 11.7 12.3 ...
$ uempmed : num [1:574] 4.5 4.7 4.6 4.9 4.7 4.8 5.1 4.5 4.1 4.6 ...
$ unemploy: num [1:574] 2944 2945 2958 3143 3066 ...
> ggplot(economics, aes(x=date, y=psavert)) + geom_line() +
+ geom_abline(intercept = 12.19, slope = -0.000544)
2. 평행선 그리기 : geom_hline() 함수
평행선 : 평행선 기준으로 그래프 변동 추이를 좀 더 명확히 파악할 수 있음
geom_hline() 함수를 사용하며, yintercept 옵션에 y축 절편값을 입력하면 그 값에 따라 평행선을 그리는 함수.
geom_hline(yintercept = y절편)
ex) economics 데이터셋의 date를 x축, psavert를 y축, 선그래프 그리고 그 위에 평행선 그리기 (y절편은 psavert의 평균을 사용)
> ggplot(economics, aes (x = date, y = psavert)) +
+ geom_line() +
+ geom_hline(yintercept = mean(economics$psavert))
3. 수직선 그리기 : geom_vline() 함수
geom_vline() 함수에 xintercept 옵션으로 x축 절편을 입력한다
geom_vline(xintercept = x절편)
> library(dplyr)
> x_inter <- filter(economics, psavert == min(economics$psavert))$date
> ggplot(economics, aes(x=date, y=psavert)) + geom_line() + geom_vline(xintercept = x_inter)
- geom_vline() 함수 사용할 때 원하는 날짜 값에 수직선을 그릴 수 있는데, as.Date 옵션을 사용하면 됨.
> ggplot(economics, aes(x=date, y=psavert)) +
geom_line() +
geom_vline(xintercept = as.Date("2005-08-02"))
4. 레이블 입력하기 : geom_text 함수
그래프에 텍스트 작성하는 함수 (label 이라고 함) – 그래프 안에서 각 수치의 이름이나 값 등을 표시할 때 사용
geom_text(aes(label = 레이블, vjust = 세로 위치, hjust = 가로 위치)
ex) airquality 데이터세트의 날짜별 온도를 산점도로 표현하고 각 점에 온도(temp) 표시하기
> ggplot(airquality, aes(x=day, y=temp)) + geom_point() +
geom_text(aes(label = temp, vjust = 0, hjust = 0))
- 데이터 레이블을 입력할 위치에서 세로와 가로값을 모두 0으로 입력하면 레이블은 각 점의 오른쪽 위에 표시된다.
- +(플러스) 값은 왼쪽/아래, -(마이너스) 값은 오른쪽/위에 표시된다.
5. 도형 및 화살표 넣기 : annotate() 함수
그래프 위에 사각형이나 화살표 등을 그려 특정 영역을 강조할 때 사용한다.
1) 사각형 그리기 (annotate("rect", ...))
alpha 옵션 : 투명도 조절 (0.1~1사이의 값)
fill 옵션 : 채우기 색상 지정
annotate("모양", xmin = x축 시작, xmax = x축 끝, ymin = y축 시작, ymax = y축 끝)
ex) mtcars 데이터 셋에서 무게와 연비를 기준으로 산점도 그리고 강조할 부분에 사각형 그리기
ggplot(mtcars, aes(x=wt, y=mpg)) +
geom_point() +
annotate("rect", xmin = 3, xmax = 4, ymin = 12, ymax= 21, alpha = 0.5, fill = "pink")
2) 화살표 그리기 (annotate("segment", ..., arrow = arrow () ))
segment : 선을 의미
arrow = arrow() : 화살표를 의미
- x축과 y축의 시작 위치와 끝위치를 x, xend, y, yend로 표현한다.
ex) x축 2.5에서 3.7, y축 10에서 17에 빨간색 화살표 그리기
> ggplot(mtcars, aes(x=wt, y=mpg)) +
+ geom_point() +
+ annotate("rect", xmin = 3, xmax = 4, ymin = 12, ymax= 21,
+ alpha = 0.5, fill = "pink") +
+ annotate("segment", x = 2.5, xend = 3.7, y = 10, yend = 17,
+ color = "red", arrow = arrow())
- 화살표에 레이블 표현하기 : 도형모양을 text로 입력하고 레이블이 표시될 x와 y위치 값과 표시할 내용을 입력하면됨
> ggplot(mtcars, aes(x=wt, y=mpg)) +
+ geom_point() +
+ annotate("rect", xmin = 3, xmax = 4, ymin = 12, ymax= 21,
+ alpha = 0.5, fill = "pink") +
+ annotate("segment", x = 2.5, xend = 3.7, y = 10, yend = 17,
+ color = "red", arrow = arrow()) +
+ annotate("text", x = 2.5, y = 10, label = "focus")
[1] 그래프 꾸미기
1) 그래프 제목 / 축 제목 설정하기 : labs() 함수
ggplot() 함수에 labs() 함수 추가
labs(x = "x축명", y = "y축명", title = "그래프 제목")
ex) x축을 mtcars 데이터셋의 기어 수 (gear), y축을 자동차수로 하는 막대그래프를 그리고 x축, y축, 그래프에 이름 붙이기
> library(ggplot2)
> ggplot(mtcars, aes(x=gear)) +
+ geom_bar() +
+ labs(x = "기어수", y = "자동차수", title = "변속기 기어 수 별 자동차 수")
2) 디자인 테마 적용하기 : theme() 함수
theme () 함수 : 그래프 디자인 일괄 변경 가능한 함수
ggplot2 패키지에 포함됨
8가지 테마 있음
대) theme_gray() 함수
theme_bw()
[2] 회귀분석 - 절편과 기울기 구하기
회귀분석 : 독립변수와 종속변수 간 인과관계를 구하는 분석 기법
- 단순회귀분석 : 독립변수가 1개
- 다중회귀분석 : 독립변수가 2개
* 독립변수 : 다른 변수의 변화에 영향을 받지 않는 독립적인 변수
* 종속변수 : 독립변수에 영향을 받아 변하는 변수. 분석의 대상.
함수 : 독립변수(x) -> 종속변수(y)
- 단순회귀분석(simple regression analysis) : 두 변수간의 관계식을 도출하는 분석기법.
- 두 변수간의 선형성, 독립성, 정규분포, 등분산성을 가정하는 분석이다.
- lm() 함수를 사용해 두 변수 간의 p-value, 절편, 기울기를 구할 수 있다.
lm(종속변수 ~ 독립변수, data = 데이터세트)
ex) Sample1 데이터의 Y21_CNT와 Y20_CNT 변수 간 관계 확인하여 절편과 기울기 알기
(1) 두 변수 간 상관관계가 있는지 알아보기 : cor.test() 함수
- 먼저 두 변수간의 상관관계가 있는지 파악해야함 : 이를 상관분석(correlation analysis) 이라고 함
- cor.test() 함수를 사용
cor.test(테이블명$변수명1, 테이블명$변수명2)
상관관계 있으면 : cor 값이 1(양의 상관관계) 또는 -1(음의 상관관계)로 나타남
0에 가까울 수록 두 변수간의 상관관계가 없음을 의미
> cor.test(exdata1$Y20_CNT, exdata1$Y21_CNT)
Pearson's product-moment correlation
data: exdata1$Y20_CNT and exdata1$Y21_CNT
t = 4.9343, df = 18, p-value = 0.000107
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.4751688 0.8990895
sample estimates:
cor
0.7582507
- cor 값 : 0.7582507 : 1에 가까우므로 양의 상관관계가 있다는 걸 알 수 있음 -> 20년 카드 이용건수가 많을수록 21년 이용건수도 증가한다고 해석할 수 있음
- p-value : 0.000107
* p-value란, 두 변수간 상관관계가 통계적으로 유의미한지 판단하는 검정통계량(test statistics) 이다. 유의확률(significance probability)이라고도 한다. p-value값이 기준값(보통 0.05)보다 작으면 귀무가설 확률이 매우 낮다는 의미로 귀무가설을 기각하고 대립가설을 채택한다. p-value값이 기준값(0.05)보다 크면 귀무가설을 채택한다. (통계적으로 유의미하다)
위 예시에서 p-value가 0.000107으로 0.05보다 작다. 그러므로 두 변수간 상관관계가 통계적으로 유의미하다고 할수있다.
(2) 절편과 기울기 알아내기
> lm(Y21_CNT ~ Y20_CNT, data = exdata1)
Call:
lm(formula = Y21_CNT ~ Y20_CNT, data = exdata1)
Coefficients:
(Intercept) Y20_CNT
0.7104 0.7864
y절편 (intercept) : 0.7104
Y20_CNT 변수에 대한 기울기 : 0.7864
즉, y = 0.7864x + 0.7104 (y는 21년 이용건수, x는 20년 이용건수
=> 정리하면, 두 변수간 양의 상관관계 (통계적으로 유의미) 가 있고, y절편 0.7104, 기울기 0.7864이다.
두 변수로 선 그래프 그리고 사선으로 위의 일차함수도 그려주기
> ggplot(exdata1, aes(x=Y20_CNT, y=Y21_CNT)) +
geom_line() + geom_abline(intercept = 0.7104, slope = 0.7864)
함수 (ggplot2 패키지에 포함) | 기능 |
geom_abline() | 사선 그리기 |
geom_hline() | 평행선 그리기 |
geom_vline() | 수직선 그리기 |
geom_text() | 레이블 입력 |
annotate() | 도형 그리기 |
'기타 > R' 카테고리의 다른 글
건강보험 약품비 현황 추이 - R로 그래프 그리기 (0) | 2024.03.20 |
---|---|
R studio 오류해결하기 : 빨간 x 표시 오류 (expected ',' after expression) (1) | 2024.02.27 |
R 독학하기 - 6 (ggplot2 패키지) (1. 그래프 그리기) (0) | 2024.02.23 |
R 독학하기 - 5 (4. 데이터 정제) (0) | 2024.02.23 |
R 독학하기 - 5 (3. 데이터 구조 변형) (0) | 2024.02.22 |