59doit

[ R ] 기술통계분석 #2 본문

통계기반 데이터분석

[ R ] 기술통계분석 #2

yul_S2 2022. 11. 22. 13:56
반응형

 

  1. 대표값 구하기 : 자료 전체를 대표하는 값으로 분포의 중심 위치를 나타내는 평균, 중위수, 사분위수, 최빈수 등의 통계량

ex)  생활비 변수를 대상으로 대표값 산출

#1 평균과 중위수

mean(x)
# [1] 5.354032

median(x)
# [1] 5.4

sort(x)
sort(x,decreasing=T)

mean()함수

median()함수,

sort()함수 : sort(x, decreasing = FALSE, …)

decreasing = TRUE : 내림차순

decreasing = FALSE 또는 option 제외 : 오름차순

 

#2 사분위수

quantile(x,1/4)
# 25% 
# 4.6 

quantile(x,2/4)
# 50% 
# 5.4 

quantile(x,3/4)
# 75% 
# 6.2

quantile(x,4/4)
# 100% 
# 7.9 

 

ex)  생활비 변수의 최빈수

#1 최빈수: 빈도수가 가장 많은 변량

 

table()함수

 

 

#2 2개의 행을 묶어서 matrix생성

x.m <- rbind(x.t)
class(x.m)
# [1] "matrix" "array" 

str(x.m)
# int [1, 1:42] 1 2 6 2 2 5 3 3 15 9 ...
# - attr(*, "dimnames")=List of 2
# ..$ : chr "x.t"
# ..$ : chr [1:42] "2.1" "2.3" "3" "3.3" ...

which(x.m == 18)
# [1] 19

 

 

#3 데이터프레임으로 변경

x.df <- as.data.frame(x.m)

#which(x.df[1, ] == 18)
which(x.df == 18)
# [1] 19

 

#4 최빈수와 변량 확인

x.df[1, 19]
attributes(x.df) 
names(x.df[19])

attributes()함수: 특정 객체의 속성 정보를 확인할 수 있는 기능

 

 

 

   2. 산포도 구하기 : 자료가 대표값으로부터 얼마나 흩어져 분포하고 있는가의 정도를 나타내는 척도 분산(Variance), 표준편차(Standard Deviation)

 

ex)  생활비 변수를 대상으로 산포도 구하기

var(x)
sd(x)
sqrt(var(data$cost, na.rm = T))

var()함수

sd()함수

sqrt()함수

 

 

  3. 표본분산과 표본표준편차 

표본분산

표본표준편차

표준오차 : 표본과 실제 모집단 간의 차이를 나타내는 값

변동계수(Coefficient of variation)

변동계수 = 표준편차/평균

측정단위가 다른 아이템의 편차를 비교하기 위해 사용

Ex. 평균값이 100일 때 표준편차가 10이면 변동성이 큼

평균값이 1000일 때 표준편차가 10이면 변동성이 작음

 

 

  4. 빈도분석

비율척도를 대상으로 직접 빈도분석을 수행한 결과는 의미가 없음.

일정한 간격으로 범주화 하여 빈도분석을 해야 의미가 있음

 

ex)  생활비 변수의 빈도분석과 시각화

#1 연속형 변수의 빈도분석

table(data$cost)

 

 

#2 연속형 변수의 히스토그램 시각화

hist(data$cost)

 

 

#3 연속형 변수의 산점도 시각화

plot(data$cost)

 

 

#4 연속형 변수 범주화

data$cost2[data$cost >= 1 & data$cost <= 3] <- 1
data$cost2[data$cost >= 4 & data$cost <= 6] <- 2
data$cost2[data$cost >= 7] <- 3

 

#5 범주형 데이터 시각화

table(data$cost2)
par(mfrow = c(1, 2)) 
barplot(table(data$cost2)) 
pie(table(data$cost2))

 

 

 

 

(5) 비대칭도 구하기

 

* 왜도: 평균을 중심으로 하는 확률분포의 비대칭 정도를 나타내는 지표. 분포의 기울어진 방향과 정도를 나타내는 양

>0 : 분포의 오른쪽 방향으로 비대칭 꼬리가 치우침

<0 : 분포의 왼쪽 방향으로 비대칭 꼬리가 치우친다.

=0 : 평균을 중심으로 좌우대칭

 

* 첨도: 표준정규분포와 비교하여 얼마나 뾰족한가를 측정하는 지표

=0 (또는 3) : 정규분포 곡선

>0 : 정규분포보다 뾰족한 형태

<0 : 정규분포보다 완만한 곡선 형태

cf) 첨도식에서 -3을 적용하지 않으면 정규분포의 첨도는 3

 

 

ex)  패키지를 이용한 비대칭도 구하기

#1 왜도와 첨도 사용을 위한 패키지 설치

install.packages("moments")
library(moments)
cost <- data$cost

 

 

#2 왜도 구하기

skewness(cost)

 

 

#3 첨도 구하기

kurtosis(cost)

*kurtosis()함수에서 첨도 식에서 -3을 미 적용 : 정규분포첨도는 3

 

 

 

#4 히스토그램으로 왜도와 첨도 확인

hist(cost)
par(mfrow = c(1, 1))

 

 

ex)  히스토그램과 정규분포 곡선 그리기

hist(cost,freq=F)
lines(density(cost), col = 'blue')
x <- seq(0,8,0.1)
curve(dnorm(x,mean(cost),sd(cost)),col='red',add=T)
  • line()함수: 분포선 추가
  • curve()함수: 정규분포 확률밀도 구함

 

 

ex)  attach()/detach()함수로 기술통계량 구하기

sd <- sd(cost,na.rm=T)
sqrt(var(cost,na.rm=T))
sd(cost,na.rm=T)
detach(data)
  • attach()함수: database가 R search path에 추가됨. 데이터셋을 추가하면 이후부터는 ‘data$’ 생략 가능
  • detach()함수: attach()함수 해제

 

 

ex)  NA제거 후 기술통계량

#1 NA가 있으면 error발생 함수

test <- c(1:5,NA,10:20)
min(test)
max(test)
range(test)
mean(test)

데이터에 NA가 있는 경우 min(), max(), range(), mean()함수는 결과로 NA 출력

 

 

#2 NA제거 후 통계량 구하기

min(test,na.rm=T)
max(test,na.rm=T)
range(test,na.rm=T)
mean(test,na.rm=T)

na.rm=T 로 NA제거

 

 

 

 

기술통계량 보고서 작성

도분석과 기술통계량의 분석 결과를 토대로 표본의 인구통계학적 특성을 제시하는 방법

 

(1) 기술통계량 구하기

 

ex)  변수 리코딩과 빈도분석 하기

#1 거주지역 변수의 리코딩과 비율 계산

data
data$resident2[data$resident == 1] <- '특별시'
data$resident2[data$resident >= 2 & data$resident <= 4] <- "광역시"
data$resident2[data$resident == 5] <- "시구군" 

x <- table(data$resident2)
x

prop.table(x)

y <- prop.table(x)
round(y*100,2)

 

 

#2 성별 변수의 리코딩과 비율 계산

data$gender2[data$gender == 1] <- "남자"
data$gender2[data$gender == 2] <- "여자"
x <- table(data$gender2)
prop.table(x)
y <- prop.table(x)
round(y*100,2)

 

 

 

 

#3 나이 변수의 리코딩과 비율 계산

data$age2[data$age<=45] <- "중년층"
data$age2[data$age>=46 & data$age <=59] <- "장년층"
data$age2[data$age>=60] <- "노년층"
x <- table(data$age2)
x

 

 

#4 학력수준 변수의 리코딩과 비율 계산

data$level2[data$level == 1] <- "고졸"
data$level2[data$level == 2] <- "대졸"
data$level2[data$level == 3] <- "대학원졸"
x <- table(data$level2)
x
prop.table(x)
y <- prop.table(x)
round(y*100,2)

 

 

 

#5 합격여부 변수의 리코딩 및 비율 계산

data$pass2[data$pass == 1] <- "합격"
data$pass2[data$pass == 2] <- "불합격"
x <- table(data$pass)
x
prop.table(x)
y <- prop.table(x)
round(y*100,2)

head(data)

 

 

반응형
Comments