본문 바로가기
  • "You can't manage what you can't measure" Peter Drucker
데이터 분석 (with Rstudio)

[R 기초] 기술통계 (논문 작성을 위한 세 번째 분석)

by Vitaminymc 2023. 9. 26.
반응형

기술통계

주어진 데이터를 몇 개의 요약값으로 효과적으로 표현하는 방법이 기술통계 분석이다.

기술통계 값은 차후에 고차원 데이터 분석을 위한 준비과정이다.

 

기술통계 값은 (1) 분포의 중심을 나타내는 중심 경향 값, (2) 분포의 퍼짐 정도를 나타내는 산포도, (3) 분포의 모양을 나타내는 분포도로 나뉜다.

구분 분석 값 의미 기술통계 값
중심 경향 값 분포의 중심 평균, 중위수(중앙값), 최빈값
산포도 분포의 퍼짐 정도 표준편차, 분산, 범위, 사분위 범위
분포도 분포의 모양 왜도, 첨도

평균 (R 함수 : mean)

평균은 대표적인 통계 값이나, 극단 값(extreme valuse)의 영향을 받기 때문에 표본의 크기(관측값)가 작을 경우에는 몇 개의 극대값에 의해서  대표값 기능을 상실 할 수도 있다. 

 

중위수 (R 함수median)

중위수(중앙값)은 데이터를 크기순으로 정렬했을 때, 가운데 위치한 관측값을 말하며, 관측값이 홀수일 때는 중간에 위치한 값이 중앙값이며, 관측값이 짝수일 때는 통상적으로 중앙에 위치한 2개의 관측값의 평균을 중앙값으로 사용한다.

관측값의 수가 작고 극대값이 존재하는 경우에도 대표값으로 의미가 있다.

# 예시 데이터 1
eng_score1 <- c(0, 75, 75, 84, 86, 93, 96, 100)

mean(eng_score1)

median(eng_score1)
> mean(eng_score1)
[1] 76.125

> median(eng_score1)
[1] 85

 

최빈값 (R함수 : Mode, 'DescTools' 패키지 필요)

최빈값은 가장 빈도가 많은 관측값을 말한다. 최빈값은 존재하지 않을 수도 있고, 여러 개가 존재할 수도 있다.

※ R 기본 라이브러리에는 최빈값을 구하는 mode 함수가 없음,  'DescTools' 패키지 필요

install.packages('DescTools')

library(DescTools)

# 예시 데이터 1
eng_score1 <- c(0, 75, 75, 84, 86, 93, 96, 100)

Mode(eng_score1)
> Mode(eng_score1)
[1] 75
attr(,"freq")
[1] 2
# 예시 데이터 2
eng_score2 <- c(75, 75, 84, 84, 86, 96, 96, 100)

Mode(eng_score2)
> Mode(eng_score2)
[1] 75 84 96
attr(,"freq")
[1] 2

 

표준 편차와 분산 (R함수 : sd, var)

# 예시 데이터 1
eng_score1 <- c(0, 75, 75, 84, 86, 93, 96, 100)

# 예시 데이터 2
eng_score3 <- c(70, 72, 73, 75, 76, 77, 78, 80)

mean(eng_score1)

mean(eng_score3)
> mean(eng_score1)
[1] 76.125

> mean(eng_score3)
[1] 75.125
sd(eng_score1)

sd(eng_score3)
> sd(eng_score1)
[1] 32.08666

> sd(eng_score3)
[1] 3.313932
var(eng_score1)

var(eng_score3)
> var(eng_score1)
[1] 1029.554

> var(eng_score3)
[1] 10.98214

 

범위 (최대값과 최소값의 차) (R 함수 : range)

※ Range를 실행하면 데이터의 최소값과 최대값이 출력됨

# 예시 데이터 1
eng_score1 <- c(0, 75, 75, 84, 86, 93, 96, 100)

# 예시 데이터 2
eng_score3 <- c(70, 72, 73, 75, 76, 77, 78, 80)

range(eng_score1)

range(eng_score3)
> range(eng_score1)
[1]   0 100

> range(eng_score3)
[1] 70 80
range1 <- max( eng_score1) - min( eng_score1)

range3 <- max( eng_score3) - min( eng_score3)

print(range1)

print(range3)
> print(range1)
[1] 100

> print(range3)
[1] 10

 

사분위수범위 (IQR) (R 함수 : IQR)

사분위수범위(IQR)은 상위 25%에 해당하는 관측값과 하위 25%에 해당하는 관측값을 제외하고 범위를 구한 값이다.

# 예시 데이터 1
eng_score1 <- c(0, 75, 75, 84, 86, 93, 96, 100)

# 예시 데이터 2
eng_score3 <- c(70, 72, 73, 75, 76, 77, 78, 80)

IQR(eng_score1)

IQR(eng_score3)
> IQR(eng_score1)
[1] 18.75

> IQR(eng_score3)
[1] 4.5
eng_score1_q1 <- quantile(eng_score1, probs = c(0.25))  #0.25, 0.5, 0.75 형태로 사분위수 입력 (1개 또는 여러 개)

eng_score1_q3 <- quantile(eng_score1, probs = c(0.75))

eng_score1_q3 - eng_score1_q1
> eng_score1_q3 - eng_score1_q1
  75% 
18.75
eng_score3_q1 <- quantile(eng_score3, probs = c(0.25))

eng_score3_q3 <- quantile(eng_score3, probs = c(0.75))

eng_score3_q3 - eng_score3_q1
> eng_score3_q3 - eng_score3_q1
75% 
4.5 

왜도와 첨도

왜도는 데이터 분포가 얼마나 비대칭인지를 나타내며, 양수인 경우 오른쪽으로 치우침(오른쪽으로 꼬리가 긴 분포)을 나타내고, 음수인 경우 왼쪽으로 치우침(왼쪽으로 꼬리가 긴 분포)을 나타낸다.

 

첨도는 데이터 분포가 얼마나 뾰족한지를 나타내며, 정규 분포의 첨도는 3에 가깝습니다. 따라서 첨도가 3보다 크면 뾰족한 분포를 나타내고, 3보다 작으면 더 편평한 분포를 나타냅니다.

# moments 패키지 설치
install.packages("moments")

# moments 패키지 불러오기
library(moments)

# 데이터의 왜도와 첨도 계산
skewness_value1 <- skewness(eng_score1)
kurtosis_value1 <- kurtosis(eng_score1)

skewness_value3 <- skewness(eng_score3)
kurtosis_value3 <- kurtosis(eng_score3)
> skewness_value1  # 왜도 출력
[1] -1.911297
> kurtosis_value1  # 첨도 출력
[1] 5.261184

> skewness_value3  # 왜도 출력
[1] -0.1168409
> kurtosis_value3  # 첨도 출력
[1] 1.965172
# psych 패키지 설치
install.packages("psych")

# psych 패키지 불러오기
library(psych)


# 데이터의 왜도와 첨도 계산
skewness_value_opt2 <- skew(eng_score1)
kurtosis_value_opt2 <- kurtosis(eng_score1)

# 결과 출력
skewness_value_opt2  # 왜도 출력
kurtosis_value_opt2  # 첨도 출력

# 데이터의 왜도와 첨도 계산
skewness_value_opt2_3 <- skew(eng_score3)
kurtosis_value_opt2_3 <- kurtosis(eng_score3)

# 결과 출력
skewness_value_opt2_3  # 왜도 출력
kurtosis_value_opt2_3  # 첨도 출력
> skewness_value_opt2  # 왜도 출력
[1] -1.564373
> kurtosis_value_opt2  # 첨도 출력
[1] 5.261184

> skewness_value_opt2_3  # 왜도 출력
[1] -0.09563285
> kurtosis_value_opt2_3  # 첨도 출력
[1] 1.965172

데이터 크기가 크고 비편향 추정치를 원하는 경우 "skew" 함수를 사용하는 것이 좋을 수 있으며, 작은 데이터셋이나 표본 왜도를 원하는 경우 "skewness" 함수를 사용하는 것이 유용

 

300x250
# 그래프 레이아웃 설정
par(mfrow = c(1, 2))  # 1행 2열의 레이아웃
hist(eng_score1)

boxplot(eng_score1)
hist(eng_score3)

boxplot(eng_score3)

Histogram과 Boxplot

728x90