Elevation
R과 통계분석 1편 본문
표본분포
dbinom(x, size, prob)
$X \sim B(n, p)$에서 $P(X=x)$. x에는 벡터가 들어갈 수 있다.
pbinom(x, size, prob)
dbinom의 누적 합이다.
pbinom의 역함수로, 백분위를 x로 바꿔주는 qbinom()도 있다.
dnorm(x, mean, sd)
$X \sim N(\mu, \sigma^2)$에서 $P(X=x)$를 계산하고 사용방법은 비슷하다.
for(i in 5:0){
print(dbinom(i, size = 10, prob = 0.7))
}
pbinom(5, size = 10, prob = 0.7)
sum(dbinom(0:5, size = 10, prob = 0.7))
dnorm(seq(1,5), mean=0, sd=1)
데이터 불러오기
setwd(dir), getwd()로 working directory를 지정 및 확인한다.
csv 파일을 불러오려면 readr 라이브러리의 read_csv()를 이용한다.
엑셀 파일을 볼러오려면 readxl 라이브러리의 read_excel()을 이용한다.
install.packages("readr")
library("readr")
data <- read_csv("data.csv")
정규성 확인
먼저 히스토그램을 그려보자.
hist(x)로 그릴 수 있다. 주요 argument들은 다음과 같다.
- breaks: 계급 구간을 지정한다. 계급 구간의 개수가 들어가거나, seq()로 직접 벡터를 지정해 주거나, "Sturges" 등 알고리즘명이 들어갈 수 있다.
- prob: TRUE이면 y축이 확률밀도, FALSE면 도수가 된다. 반대로 동작하는 freq 매개변수가 있다.
- col: 칼럼 색
정규분포 곡선을 그려서 히스토그램과 비교하여 정규성 가정을 만족하는지 확인해볼 수 있다. seq()로 x축에 대응되는 벡터를 만들어서 dnorm()으로 분포값 y를 생성하고, lines(x, y)로 그려준다.
hist(data$BMI, breaks = seq(min(data$BMI)-1, max(data$BMI)+1, by=1), prob=TRUE, col="skyblue")
x <- seq(min(data$BMI),max(data$BMI),length=100)
ND <- dnorm(x,mean=mean(data$BMI),sd=sd(data$BMI))
lines(x, ND, lwd=2, col="green")
prob=FALSE로 설정하여 y축이 frequency라면, 정규분포 곡선도 그에 맞춰 수정해 주어야 하는데, 히스토그램의 한 단위(bin)의 간격 binwidth와, 전체 데이터 길이를 곱해 주어야 한다.
binwidth <- diff(range(data$BMI)) / 100
ND <- ND * binwidth * length(data$BMI)
Q-Q plot을 그려서 확인해볼 수도 있다. 간단하게 qqnorm-qqline으로 그릴 수 있다.
qqnorm(data$BMI)
qqline(data$BMI)
정규성을 검정하는 방법 역시 있다. Shapiro-Wilk test가 대표적이며 Kolmogorov-Smirnov test, K-S test를 개선시킨 Lilliefors test가 있다. 구체적인 검정의 원리를 모르더라도 간단하게 사용할 수 있기 때문에 편리하나, 결과의 해석에 주의하여야 한다.
- 대립가설이 "정규성을 만족하지 않음"이므로, 일반적인 검정과는 달리 p>0.05이기를 기대한다.
- 데이터 크기가 너무 크면 분산이 작아져 정규성을 만족할 때에도 p-value가 작아지므로, 앞의 방법들을 이용해 데이터 전반을 함께 확인하는 것이 좋다.
shapiro.test(data$BMI)
ks.test(data$BMI, "pnorm", mean=mean(data$BMI), sd=sd(data$BMI))
#install.packages("nortest")
library("nortest")
lillie.test(data$BMI)