R에서 회귀분석 후 결과 테이블을 만들기 위해서는 대부분 사용하는
방법이 회귀분석 결과에 따른 계수들을 기록해서 워드프로세서에서 표를
만드는 방법이다. 이러한 방법은 회귀분석 표를 만드는데 매우 번거로운
작업을 거쳐야하고 특히 p 값의 표현과 같이 약속된 표식을 사용할 때 매우
불편한 점이 있다. 앞선 포스트에서 apaTables
를 사용하여 미국
심리학회(APA : American Psychological Association) 형태의 표를 만드는
방법을 알아보았다. 이번 포스트에서는 stargazer
패키지의
기능을 사용하는 방법에 대해 알아보겠다.
사용 데이터
이번 포스트에서 사용하는 데이터는 ‘연도별 시도별 비정규 교원 1인당 학생수 in R - rank()’(https://2stndard.tistory.com/114)에서 사용한 데이터를 재활용하겠다.
df_provinfo_21 <- read_excel('D:/R/data/유초 주요-03 시도별 교육통계 현황_방통포함(1999-2021)_20220523y.xlsx',
sheet = '2021', skip = 11,
col_types = c(rep('text', 3), rep('numeric', 170)),
col_names = FALSE)
df_provinfo_1520 <- read_excel('D:/R/data/유초 주요-03 시도별 교육통계 현황_방통포함(1999-2021)_20220523y.xlsx',
sheet = '2015-2020', skip = 12,
col_types = c(rep('text', 3), rep('numeric', 138)),
col_names = FALSE)
## 21년 데이터 전처리
df_provinfo_21 <- df_provinfo_21 |> select(1, 2, 3, 15, 25, 73, 112, 115)
colnames(df_provinfo_21) <- c('연도', '시도', '학제', '학급수', '학생수', '전체교원수', '기간제교원수', '시간강사수')
df_provinfo_21 <- df_provinfo_21 |>
mutate(비정규교원당학생수 = 학생수 / (기간제교원수 + 시간강사수))
df_비정규교원당학생수_21 <- df_provinfo_21 |>
filter(학제 %in% c('초등학교', '중학교', '고등학교'))
## 15~20년 데이터 전처리
df_provinfo_1520 <- df_provinfo_1520 |> select(1, 2, 3, 5, 20, 41, 80, 83)
colnames(df_provinfo_1520) <- c('연도', '시도', '학제', '학급수', '학생수', '전체교원수', '기간제교원수', '시간강사수')
df_provinfo_1520 <- df_provinfo_1520 |>
mutate(비정규교원당학생수 = 학생수 / (기간제교원수 + 시간강사수))
df_비정규교원당학생수_1520 <- df_provinfo_1520 |>
filter(학제 %in% c('초등학교', '중학교', '고등학교')) |> arrange(연도)
df_비정규교원당학생수 <- rbind(df_비정규교원당학생수_1520, df_비정규교원당학생수_21)
stargazer
stargazer
패키지는 R에서 직접 출판이 가능한 품질의 표를
생성해주는 패키지이다. stargazer
패키지가 생성하는 표는
LaTex, HTML의 형태로 출력이 가능하기 때문에 워드프로세스 등에서 바로
사용할 수 있다. 특히 회귀분석 표를 만드는데 매우 편리한 기능을 제공하고
있고, 데이터프레임에 저장된 데이터들에 대한 요약표를 만드는데도 활용성이
높다.
패키지 설치
stargazer
패키지를 사용하기 위해 먼저 설치부터 하겠다.
stargazer
패키지는 CRAN에 등록되어 있는 정식 패키지이기
때문에 install.packages()
를 사용하여 설치가 가능하다.
if (!require(stargazer)) {
install.packages('stargazer')
library(stargazer)
}
데이터 요약표 생성
먼저 stargazer
패키지를 사용하여 데이터 요약표를 만들어
본다. 데이터 요약표를 만드는 데에는 stargazer()
를
사용한다.
stargazer(as.data.frame(df_비정규교원당학생수[, 4:9]), type = 'text', title = '표 1. 요약표', out = '1.txt')
##
## 표 1. 요약표
## ======================================================
## Statistic N Mean St. Dev. Min Max
## ------------------------------------------------------
## 학급수 378 8,625.730 18,980.740 220 124,047
## 학생수 378 208,486.100 446,487.500 5,112 2,747,219
## 전체교원수 378 15,965.600 32,959.070 529 191,224
## 기간제교원수 378 1,709.497 3,777.715 21 24,929
## 시간강사수 378 249.693 567.007 0 4,279
## 비정규교원당학생수 378 176.310 168.201 34.410 801.868
## ------------------------------------------------------
위의 결과를 보면 전체 테이블 요약표가 텍스트 형태로 생성되었고 결과는 ‘1.txt’파일에 저장되었다. 만약 이를 HTML 형태로 출력하고자 한다면 ’type’ 매개변수를 조절하여 사용하는데 다음과 같이 할 수 있다.
stargazer(as.data.frame(df_비정규교원당학생수[, 4:9]), type = 'html', title = '표 1. 요약표', out = '1.html')
만약 가로축과 세로축을 바꾸고자 한다면 ‘flip’ 매개변수를 사용한다.
stargazer(as.data.frame(df_비정규교원당학생수[, 4:9]), type = 'text', title = '표 1. 요약표', out = '1.txt', flip = TRUE)
##
## 표 1. 요약표
## =======================================================================
## Statistic 학급수 학생수 전체교원수 기간제교원수 시간강사수 비정규교원당학생수
## -----------------------------------------------------------------------
## N 378 378 378 378 378 378
## Mean 8,625.730 208,486.100 15,965.600 1,709.497 249.693 176.310
## St. Dev. 18,980.740 446,487.500 32,959.070 3,777.715 567.007 168.201
## Min 220 5,112 529 21 0 34.410
## Max 124,047 2,747,219 191,224 24,929 4,279 801.868
## -----------------------------------------------------------------------
회귀분석표 생성
stargazer
패키지의 가장 큰 장점은 회귀분석표를 생성하기
편리하다는 점이다. 회귀분석 결과표를 생성해 본 사람들은 대부분 느끼는
문제가 회귀분석 결과로 산출되는 많은 계수들을 정리하는데 어려움이 있고
특히 *을 사용하는 p 값의 표현에 혼동이 온다는 점이다.
stargazer
패키지는 이러한 어려움을 자동화해준다.
stargazer
패키지의 회귀분석 표 생성을 알아보기 위해 먼저
다음과 같은 회귀분석 모델을 생성한다.
lm_model = lm(학생수 ~ 전체교원수 + 기간제교원수 + 시간강사수, data = df_비정규교원당학생수)
summary(lm_model)
##
## Call:
## lm(formula = 학생수 ~ 전체교원수 + 기간제교원수 + 시간강사수,
## data = df_비정규교원당학생수)
##
## Residuals:
## Min 1Q Median 3Q Max
## -138308 -10623 -2498 3986 154651
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.729e+03 1.704e+03 -1.014 0.311
## 전체교원수 1.525e+01 8.713e-02 175.011 < 2e-16 ***
## 기간제교원수 -2.560e+01 8.082e-01 -31.670 < 2e-16 ***
## 시간강사수 4.214e+01 5.168e+00 8.153 5.43e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 29670 on 374 degrees of freedom
## Multiple R-squared: 0.9956, Adjusted R-squared: 0.9956
## F-statistic: 2.833e+04 on 3 and 374 DF, p-value: < 2.2e-16
R에서 표시해주는 회귀분석 결과는 위와 같은데 이를 표의 형태로 정리되지는 않는다.
stargazer
에서 회귀분석 결과표를 만드는 데에도
stargazer()
를 사용한다. 앞서 요약표에서는 데이터프레임을 첫
번째 매개변수로 전달하였는데 회귀모델을 전달하면 회귀분석 결과표를
만들어 준다.
stargazer(lm_model, type = 'text', title = '표 2. 회귀분석 결과', out = '2.txt', single.row = TRUE)
##
## 표 2. 회귀분석 결과
## ===============================================
## Dependent variable:
## ---------------------------
## 학생수
## -----------------------------------------------
## 전체교원수 15.248*** (0.087)
## 기간제교원수 -25.596*** (0.808)
## 시간강사수 42.136*** (5.168)
## Constant -1,728.813 (1,704.429)
## -----------------------------------------------
## Observations 378
## R2 0.996
## Adjusted R2 0.996
## Residual Std. Error 29,674.280 (df = 374)
## F Statistic 28,325.080*** (df = 3; 374)
## ===============================================
## Note: *p<0.1; **p<0.05; ***p<0.01
만약 변수의 차이에 따른 몇 개의 회귀분석 결과를 비교하고자 한다면
stargazer()
의 매개변수로 회귀모델을 전달해주면 비교표가
생성된다.
lm_model_1 = lm(학생수 ~ 전체교원수 + 기간제교원수 + 시간강사수 + (기간제교원수 * 시간강사수), data = df_비정규교원당학생수)
stargazer(lm_model, lm_model_1, type = 'text', title = '표 3. 회귀분석 비교 결과', out = '3.txt')
##
## 표 3. 회귀분석 비교 결과
## ===========================================================================
## Dependent variable:
## -------------------------------------------------------
## 학생수
## (1) (2)
## ---------------------------------------------------------------------------
## 전체교원수 15.248*** 15.189***
## (0.087) (0.096)
##
## 기간제교원수 -25.596*** -24.272***
## (0.808) (1.213)
##
## 시간강사수 42.136*** 50.585***
## (5.168) (7.747)
##
## 기간제교원수:시간강사수 -0.001
## (0.001)
##
## Constant -1,728.813 -3,215.955
## (1,704.429) (1,982.573)
##
## ---------------------------------------------------------------------------
## Observations 378 378
## R2 0.996 0.996
## Adjusted R2 0.996 0.996
## Residual Std. Error 29,674.280 (df = 374) 29,629.230 (df = 373)
## F Statistic 28,325.080*** (df = 3; 374) 21,308.990*** (df = 4; 373)
## ===========================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
만약 이 결과표에 신뢰구간의 표시가 필요하다면 ‘ci’ 매개변수와 ‘ci.level’ 매개변수를 사용하면 신뢰구간의 범위가 표시된다.
stargazer(lm_model, lm_model_1, type = 'text', title = '표 4. 회귀분석 비교 결과(신뢰구간 포함)', out = '4.txt', ci = TRUE, ci.level = 0.95)
##
## 표 4. 회귀분석 비교 결과(신뢰구간 포함)
## ===========================================================================
## Dependent variable:
## -------------------------------------------------------
## 학생수
## (1) (2)
## ---------------------------------------------------------------------------
## 전체교원수 15.248*** 15.189***
## (15.078, 15.419) (15.001, 15.377)
##
## 기간제교원수 -25.596*** -24.272***
## (-27.180, -24.012) (-26.649, -21.895)
##
## 시간강사수 42.136*** 50.585***
## (32.006, 52.266) (35.401, 65.768)
##
## 기간제교원수:시간강사수 -0.001
## (-0.002, 0.0003)
##
## Constant -1,728.813 -3,215.955
## (-5,069.432, 1,611.806) (-7,101.727, 669.817)
##
## ---------------------------------------------------------------------------
## Observations 378 378
## R2 0.996 0.996
## Adjusted R2 0.996 0.996
## Residual Std. Error 29,674.280 (df = 374) 29,629.230 (df = 373)
## F Statistic 28,325.080*** (df = 3; 374) 21,308.990*** (df = 4; 373)
## ===========================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
위의 결과는 95% 신뢰구간이 표시된 회귀분석 결과표를 보이고 있다.
학회 스타일링
stargazer
의 가장 큰 장점이라고 생각되는 것은 여러
학회에서 제안하는 스타일을 제공한다는 점이다. stargazer
의
‘style’ 매개변수를 설정하면 해당 학회에서 요구하는 형태의 표로
그려진다는 것이다.
stargazer
에서 지원하는 학회 스타일은 다음과 같다.
- all : 모든 가능한 통계를 출력
- all2 : 모든 가능한 통계를 출력하지만 t-통계값과 p-value는 제외
- aer : American Economic Review
- ajps : American Journal of Political Science
- ajs : American Journal of Sociology
- asq : Administrative Science Quarterly
- asr : American Sociological Review
- apsr : American Political Science Review
- demography : Demography
- io : International Organization
- jpam : Journal of Policy Analysis and Management
- qje : Quarterly Journal of Economics
## American Economic Review 스타일의 회귀분석 결과표
stargazer(lm_model, lm_model_1, type = 'text', title = '표 5. 회귀분석 비교 결과(American Economic Review)', out = '5.txt', ci = TRUE, ci.level = 0.95, style = 'aer')
##
## 표 5. 회귀분석 비교 결과(American Economic Review)
## ===========================================================================
## 학생수
## (1) (2)
## ---------------------------------------------------------------------------
## 전체교원수 15.248*** 15.189***
## (15.078, 15.419) (15.001, 15.377)
##
## 기간제교원수 -25.596*** -24.272***
## (-27.180, -24.012) (-26.649, -21.895)
##
## 시간강사수 42.136*** 50.585***
## (32.006, 52.266) (35.401, 65.768)
##
## 기간제교원수:시간강사수 -0.001
## (-0.002, 0.000)
##
## Constant -1,728.813 -3,215.955
## (-5,069.432, 1,611.806) (-7,101.727, 669.817)
##
## Observations 378 378
## R2 0.996 0.996
## Adjusted R2 0.996 0.996
## Residual Std. Error 29,674.280 (df = 374) 29,629.230 (df = 373)
## F Statistic 28,325.080*** (df = 3; 374) 21,308.990*** (df = 4; 373)
## ---------------------------------------------------------------------------
## Notes: ***Significant at the 1 percent level.
## **Significant at the 5 percent level.
## *Significant at the 10 percent level.
'데이터 시각화' 카테고리의 다른 글
APA(미국심리학회) style 논문 회귀분석 결과표 만들기 in R - p 값의 표현 (0) | 2022.10.31 |
---|---|
21년 고등교육기관 정보 요약 - gtExtras 패키지를 이용한 그래프 넣기 in R (0) | 2021.12.12 |
21년 고등교육기관 정보 요약 - gt 패키지를 이용한 데이터 강조 in R (0) | 2021.12.10 |
21년 고등교육기관 정보 요약 - gt 패키지를 이용한 표 꾸미기 in R (0) | 2021.12.08 |
21년 고등교육기관 정보 요약 - gt 패키지를 이용한 표 그리기 in R (3) | 2021.12.06 |
댓글