“통계는 어렵고, R은 낯설다”고 느끼시나요? 이 문서는 통계 이론과 R 코드 실습을 함께 엮어, 통계의 '원리'를 이해하고 R로 '구현'하는 능력을 동시에 기르도록 돕는 완전 초보자용 가이드입니다.
본격적인 통계 여행을 떠나기 전, 우리의 '탐사선(R)'과 '조종석(RStudio)'을 준비해야 합니다.
'패키지'는 R의 능력을 확장하는 '앱(App)'과 같습니다. 그중 `tidyverse`는 데이터 분석에 필요한 대부분의 도구를 모아놓은 '만능 공구 세트'입니다. 이것 하나만 설치해도 충분합니다.
RStudio를 실행한 후, 아래 명령어를 Console 창에 입력하고 Enter 키를 누르세요.
# tidyverse 패키지(만능 공구 세트) 설치하기 install.packages("tidyverse")
이제 분석할 데이터를 R로 불러옵니다. 이 가이드에서는 `my_data`라는 이름으로 데이터를 사용하겠습니다.
# 앞으로 tidyverse 공구 세트를 사용하겠다고 선언 (R을 켤 때마다 실행) library(tidyverse) # CSV 파일을 불러와 my_data 라는 이름의 상자에 저장 my_data <- read_csv("C:/Users/내PC이름/Desktop/분석할_데이터.csv") # 데이터가 잘 불어왔는지 첫 6줄만 확인 head(my_data)
기술 통계(Descriptive Statistics)는 우리가 가진 데이터가 어떤 특징을 가졌는지 요약하고 설명하는 것입니다. 마치 처음 만난 사람의 '자기소개'를 듣는 것과 같습니다.
데이터들이 어떤 값을 중심으로 모여 있는지를 나타냅니다.
예시
: 우리 팀 9명의 연봉은 5천만원인데, 팀장님 연봉이 5억이라면 팀 평균 연봉은 실제보다 훨씬 높게 계산됩니다.예시
: 위와 같은 상황에서, 중앙값은 5천만원에 가깝게 계산되어 팀의 일반적인 연봉 수준을 더 잘 보여줍니다.# my_data의 '만족도' 점수에 대한 평균과 중앙값 계산 # %>% (파이프 연산자): 왼쪽의 데이터를 가지고 오른쪽 작업을 하라는 의미 (Ctrl+Shift+M) my_data %>% summarise( 평균만족도 = mean(만족도, na.rm = TRUE), # na.rm=TRUE : 빈 값(NA)은 제외하고 계산 중앙값만족도 = median(만족도, na.rm = TRUE) )
데이터가 중심에서 얼마나 넓게 퍼져있는지를 나타냅니다.
예시
: 두 부서의 평균 만족도가 4점으로 같더라도, A부서의 표준편차가 B부서보다 크다면, A부서는 만족도가 매우 높은 사람과 매우 낮은 사람이 섞여있다는 의미일 수 있습니다.# 만족도 점수의 표준편차 계산 my_data %>% summarise( 만족도_표준편차 = sd(만족도, na.rm = TRUE) )
숫자 요약만으로는 알 수 없는 데이터의 전체적인 형태를 그래프로 확인합니다.
용도
: 연령대 분포, 만족도 점수 분포 등 연속된 숫자 데이터의 형태를 볼 때 사용합니다.# 만족도 점수의 분포를 히스토그램으로 그리기 ggplot(data = my_data, aes(x = 만족도)) + geom_histogram(bins = 10, fill = "skyblue", color = "white") + labs(title = "직무 만족도 점수 분포", x = "만족도 점수", y = "인원수")
추론 통계(Inferential Statistics)는 우리가 가진 일부 데이터(표본)를 통해, 우리가 보지 못한 전체(모집단)의 특성을 추측하는 과정입니다. 마치 국 한 숟가락을 맛보고 솥 전체의 간을 판단하는 것과 같습니다.
여기서 가장 중요한 개념은 p-value입니다.
두 개 이상의 그룹 간에 평균 차이가 통계적으로 유의미한지 검정합니다.
두 개
의 그룹 간 평균을 비교할 때 사용합니다.HR 질문 예시
: “영업팀과 마케팅팀의 직무 만족도 평균에 차이가 있는가?”# 부서(A팀, B팀)에 따라 만족도에 차이가 있는지 t-검정 t.test(만족도 ~ 부서, data = my_data) # 결과에서 p.value가 0.05보다 작은지 확인합니다.
세 개 이상
의 그룹 간 평균을 비교할 때 사용합니다.HR 질문 예시
: “영업팀, 마케팅팀, 개발팀의 직무 만족도 평균에 차이가 있는가?”# aov() 함수로 ANOVA 모델 생성 anova_model <- aov(만족도 ~ 부서, data = my_data) summary(anova_model) # 결과 테이블에서 p-value (Pr(>F) 값) 확인
두 변수(요소)가 서로 어떤 관계를 맺고 있는지 파악합니다.
두 숫자형 변수
간의 직선적인 관계를 분석합니다.HR 질문 예시
: “근속연수가 길어질수록 직무 만족도도 높아지는가?”# 근속연수와 만족도의 상관계수 계산 cor(my_data$근속연수, my_data$만족도, use = "complete.obs") # use="...": NA값 처리 옵션 # 관계를 산점도로 시각화 ggplot(data = my_data, aes(x = 근속연수, y = 만족도)) + geom_point() + # 점으로 나타내기 geom_smooth(method = "lm") # 추세선 추가
두 범주형 변수
간의 관련성을 분석합니다.HR 질문 예시
: “직급(사원/대리)에 따라 퇴사 여부(Yes/No)에 차이가 있는가?”# 직급과 퇴사여부로 교차표 생성 cross_table <- table(my_data$직급, my_data$퇴사여부) # 카이제곱 검정 실행 chisq.test(cross_table) # p-value 확인
회귀분석(Regression Analysis)은 여러 원인 변수들이 특정 결과 변수에 얼마나 영향을 미치는지 분석하여, 미래의 결과를 '예측'하는 모델을 만드는 것입니다.
숫자형 결과
를 예측할 때 사용합니다.HR 질문 예시
: “직원의 근속연수, 월급, 상사와의 관계 점수가 직무 만족도에 각각 얼마나 영향을 미칠까?”# lm() 함수로 선형 회귀모델(Linear Model) 생성 # 만족도 ~ 근속연수 + 월급 : 만족도를 근속연수와 월급으로 예측 model <- lm(만족도 ~ 근속연수 + 월급, data = my_data) # 결과 요약 확인 (가장 중요!) summary(model)
summary(model)
핵심 해석법:
Estimate
: 각 원인이 1단위 증가할 때 결과가 얼마나 변하는지 (영향력의 크기)Pr(>|t|)
(p-value): 이 값이 0.05보다 작고, 옆에 별(*
)이 많을수록 중요한 원인 변수임을 의미합니다.Adjusted R-squared
: 이 모델이 결과(만족도)의 변동을 몇 %나 설명하는지 (모델의 전반적인 설명력)💡 최종 정리:
이 가이드를 통해 우리는 R이라는 도구로 데이터의 ①자기소개를 듣고(기술통계) → ②관계를 추측하고(추론통계) → ③미래를 예측하는(회귀분석) 기본적인 데이터 분석의 전 과정을 경험했습니다. 통계는 정답을 찾는 학문이 아니라, 데이터를 통해 더 나은 질문과 합리적인 의사결정을 하도록 돕는 과정입니다.