확률(Probability)¶
- 기술통계 : 시각화와 표본
- 확률 : 모집단
확률 실험 => 확률 변수 => 확률 분포 => 모수 추론 => 검증 => 의미파악¶
- 위 과정을 거처 모집단의 특징을 말하는 것 => 추론
- 통계학은 모두 조사할 수 없는 모집단을 알기 위해 표본을 설명하면서 발전
- 최근에는 IT 기술 발전으로 큰데이터를 다룰 수 있어 그 의미가 변해 가고 있음
정해진 확률 구하기¶
확률 실험¶
- 실험으로 나올 수 있는 결과를 모두 알고 있지만 어떤 결과가 나올지 모르는 실험
- 동전 던지기 앞면 나올 확률
- 주사위 던지기 2 나올 확률
표본공간¶
- 확률실험에서 나올수 있는 결과 집합
- 동전 : {앞면, 뒷면]
- 주사위 : {1,2,3,4,5,6}
사건¶
- 표본 공간에서 알고 싶은 결과
- 표본 공간의 부분집합
- 동전던지기 확률실험에서 '앞면이 나오는 경우'
- 주사위던지기에서 '홀수가 나오는 경우'
경우의 수¶
- 사건이 하나가 아니고 여러 가지 나오는 사건
- 주사위던지기에서 4미만이 나오는 사건의 확률 = > {1},{2},{3}
실험번호 | 확률실험 | 표본공간 | 모든 경우의 수 | 사건 | 사건의 경우의 수 | 확률 |
---|---|---|---|---|---|---|
1 | 동전던지기 | {앞면,뒷면} | 2 | 앞면이 나오는 경우 | 1 | 1/2 |
2 | 주사위던지기 | {1,2,3,4,5,6} | 6 | 6이 나오는 경우 | 1 | 1/6 |
3 | 주사위던지기 | {1,2,3,4,5,6} | 6 | 3보다 큰 수가 나오는 경우 | 3 | 3/6 |
확률¶
- 확률실험으로 알고 싶은 건 사건이 일어날 확률
- 확률 = (사건이 일어날 모든 경우의 수) / (표본공간의 모든 경우의 수)
로또 6/45 확률¶
- 확률실험 : 1에서 45까지 숫자가 적힌 공을 임의로 6개 뽑는 실험
- 표본공간 : {1,2,3,4,5,6}, {1,2,3,4,5,7} ....
- 모든 경우의 수: 8,145,060
- 사건 : 1부터 45중에서 6개 숫자 뽑음
- 사건 경우의 수: 1
- 확률 : 1/8,145,060
사건의 결과는 반드시 표본공간 안에 포함되어 있어야 함¶
경우의 수 계산하기¶
n개에서 k개를 고를 경우의 수¶
- 순서 허용 여부
- 중복 허용 여부
종류 | 순열 | 조합 | 중복순열 | 중복조합 |
---|---|---|---|---|
순서 | O | X | O | X |
중복 | X | X | O | O |
경우 | 서로 다른 n개에서 k개를 택하여 일렬로 나열하는 방법의 수 | 서로 다른 n개에서 k개를 선택 방법의 수 | 서로 다른 n개에서 중복을 허용하여 k개를 택하여 일렬로 나열하는 방법의 수 | 서로 다른 n개에서 중복을 허용하여 k개를 선택 방법의 수 |
3개에서 2개 뽑기 | 12,13,21,23,31,32 | 12,13,23 | 11,12,13,21,22,23,31,32,33 | 11,12,13,22,23,33 |
기호 | nPk | nCk | nπk | nHk |
수학식 | n!(n−k)! | n!/(n−k)!k! | n^k | n+k−1Ck |
R | permutations(3,2) | combinations(3,2,data) | permutations(3,2,data, repeats.allowed = T) | combinations(3,2,data, repeats.allowed = T) |
In [2]:
# 패키지 설치
install.packages('gtools')
In [3]:
# 라이브러리 부착
library('gtools')
In [4]:
data <- c('1','2','3')
In [5]:
# 순열 - permutations() 순서 상관 O
permutations(3,2,data)
In [7]:
# 조합 - combinataions() 순서 상관 X
combinations(3,2,data)
In [8]:
# 중복 순열
permutations(3,2,data, repeats.allowed = T)
In [9]:
# 중복 조함
combinations(3,2,data, repeats.allowed = T)
상대도수의 극한 개념으로 동전던지기 확률 구하기¶
- 앞면이 나올 확률이 진짜로 0.5 일까?
실제 확률 실험 결과¶
실험자 | 던진 횟수 | 앞면 | 상대도수 |
---|---|---|---|
Buffon | 4040 | 2048 | 0.5080 |
Pearson | 12000 | 6019 | 0.5016 |
- 실험결과 이론값과 실험값이 거의 비슷
- 실험을 많이 할수록 어떤 값으로 수렴
확률실험과 확률 변수¶
- 확률변수는 반드시 숫자 이어야 함
- 수학적으로 계산하여 의미를 찾아야 하기 때문
- 확률변수는 이산형(확률질량함수)과 연속형(확률밀도함수)에 따라 달라짐
체계적인 확률 실험¶
베르누이 시행¶
- 성공/실패, 동전던지기 앞면/뒷면, 합격/불합격
- 웹시스템에 배너를 10000명에 노출 / 클릭 9명 => 성공/실패 => 클릭 확률 9/10000
- 결과가 성공/실패로 나타남
- 다른 사람이 클릭했다고 다른 사람이 클릭 못하는 건 아님
- 클릭할 확률은 모두가 동일
- 옆 사람이 클릭하는 것에 영향을 받지 않음
정리¶
- 결과는 성공/실패
- 각 시행 확률은 동일
- 각 시행은 독립적
베르누이 시행 확률분포¶
- 베르누이 시행의 결과를 가지고 할 수 있는 확률분포
이항분포 X~B(n,p)¶
- 성공확률이 P인 베르누이 시행을 n번 반복할 때 나타나는 특정 성공횟수 X의 확률에 대한 분포
동전을 20번 던저셔 앞면이 나올 확률 => X~B(20,0.5) => 10번 성공 확률이 제일 높음 => 확률은?
이항분포 평균 = n*p
- 이항분포 분산 = np(1-p)
In [12]:
# 이항분포확률 함수 - dbinom(x, sizem, prob)
# x: 확률밀도함수값을 얻은 x 벡터 / size: 이항분포 B(n,p)에서 n값을 설정/
# prob: 이항분포 B(n,p)에서 p값을 설정
Bino <- dbinom(0:20, size=20, prob=0.5)
Bino
Bino <- dbinom(10, size=20, prob=0.5)
Bino
n,p 변화에 따른 그래프¶
기하분포¶
- 베르누이 시행에서 처음 성공까지 시도한 횟수 X의 분포
- 30% 시험관 아기를 성공하는 병원에서 3번만에 성공할 확률?
- Pr(X=k)=(1−p)^(k−1)*p
In [15]:
# 기하분포확률 함수 - dgeom()
# 어느 병원의 시험관 성공확률 0.3%
a <- dgeom(1:10, 0.3) # 1번 실패하고 성공 : 10번 실패하고 성공할 확률 / 성공확률은 0.3
a
# 만약 환자가 3번만 시험관을 시도한다면 성공할 확률은 0.147
연속적인 변수¶
- 구간에 대한 확률
- 히스토그램으로 나타냄
- 1과 2사이에도 무수히 많은 값이 존재
확률밀도함수¶
- 확률 변수의 분포를 나타내는 함수
- 확률 밀도 함수 f(x) : f(x)와 구간 [a,b] 에 대해서 확률 변수 X 가 구간에 포함될 확률 P(a≤X≤b)
정규분포¶
- 평균중심으로 종모양인 본포
- 종의 중앙이 평균, 종의 퍼짐이 분산
- X ~ N (μ,σ2)
표준정규분포¶
- 정규 그래프중 평균 0, 분산 1인 그래프
- X ~ N (0, 1)
Z값과 정규분포표 사용¶
중심 극한 정리¶
- 모집단이 정규분포를 따르든 따르지 않든 상관없이 동일한 확률분포를 가진 독립 확률 변수 n개의 평균의 분포는 n이 적당히 크다면 정규분포에 가까워진다는 정리
가설검정¶
귀무가설(영가설) H0¶
- 기본적으로는 참으로 추정되며 이를 거부하기 위해서는 증거가 꼭 필요
- 검증해야 할 가설
대립가설 H1¶
- 귀무가설과 반대되는 가설
신뢰구간¶
- 구간추정은 모수가 어느 값 a와 어느 값 b사이 구간 내에 몇 %확률로 존재할 것이라고 추정 하는 것
- 그 확률을 신뢰수준 또는 신뢰도 라고 함
- 그 추정한 구간을 신뢰구간이라고 함
- EX) A후보 지지율은 신뢰수준 95%로 신뢰구간 48.7% ~ 53.3% 임
- 신뢰구간에 포함되지 않을 확률을 α
유의수준¶
- 대립가설을 채택하거나 기각할 기준확률 값
- 보통 5%
¶
- 앞면이 나오면 A에게 1달러를, 뒷면인 나오면 B에게 1달러를 주는 동전 내기를 A, B가 하기로 했다.
- 결과는 8회 중 7회 뒷면이 나왔다.
- A는 동전이 불량이라고 이야기했고, B는 앞면과 뒷면이 나올 확률이 같더라도 우연히 나올 수 있다고했다.
- 어떻게 반론하면 좋을까?
귀무가설 B의 주장¶
- 앞면과 뒷면이 나올 확률이 같다
대립가설 A의 주장¶
- 뒷면이 나오기 쉽다
유의 수준 5%¶
- 우연이라고 말할 수 없다
- 이 값보다 작다면 필연적인 이유가 있을 것이다
- 이 값보다 작아지는 영역을 기각역 이라고 함
B의 확률 분포를 구하고 결과를 확인¶
In [16]:
# B의 확률분포 계산
Bino <- dbinom(0:8, size=8, prob=0.5)
Bino
In [17]:
# 유의수준 확인 5%
psum <- 0.03125 + 0.00390625
psum
In [19]:
library(ggplot2)
df <- data.frame(x=0:8, prob=dbinom(0:8, size=8, prob=0.5))
ggplot(data=df, aes(x=x, y=prob)) + geom_line()
p값¶
- 귀무가설(H0)가 옳다는 가정하에서 대립가설(H1)을 지지하는 방향으로의 확률
- 대립가설에 유리한 데이터를 얻을 수 있는 확률
- p값이 유의수준보다 작으면 귀무가설은 기각되고 대립가설이 채택됨
- 컴퓨터에서 계산이 간단해지면서 많이 쓰이게 됨
- p값 0.0544 => 5.44%
- 단측검정 / 양측검정
R로 확률값 구하기¶
난수(랜덤) 생성하기 : runif()¶
In [20]:
# 균일한 난수 -runif
runif(10)
In [21]:
# 0~100 사이 50개 랜덤 수 뽑기
runif(50, min=0, max=100)
정규분포를 따르는 난수 - rnorm()¶
- 정규분포 N(mean, sd^2)
In [24]:
# 평균 100, 표준편차 15인 난수 10개
rnorm(10, mean=100, sd=15)
이항분포 난수 - rbinom()¶
In [25]:
# 50% 확률로 성공 1이 나오는 난수 100개
rbinom(100, size=1, prob=0.5)
In [26]:
# 1/6 확률로 성공 1이 나오는 난수 100개
rbinom(100, size=1, prob = 1/6)
In [27]:
# 성공/실패 문자로 추출
a <- rbinom(100, size=1, prob=1/6)
a[a==1] <- '성공'
a[a==0] <- '실패'
In [28]:
a
In [29]:
length(a[a=='성공'])
확률 계산하기¶
In [30]:
# 정규분포 점확률
# 평균 30, 표준편차 7인 확률변수 15의 확률 - dnorm()
dnorm(15, mean=30, sd=7)
In [31]:
# 정규분포 점확률
# 평균 550 표준편차 80인 확률변수 450의 확률 - dnorm()
dnorm(450, mean=550, sd=80)
In [32]:
# 이항분포 점확률
# 동전 1000번 던져 490번이 앞면 나올 확률
dbinom(490, size=1000, prob=0.5)
In [33]:
# 이항분포 점확률
# 흡연율 25%로 알려진 1000명이 있는 A대학에서 50명을 뽑았을 때 흡연자일 확률
dbinom(50, size=1000,prob=0.25)
구간확률 계산하기 - 확률밀도함수 / 연속변수에 대한 것¶
In [34]:
# 정규분포 구간확률
# 평균 240, 표준편차 80 정규분포에서 0~235 까지의 확률
# 면적이 곧 확률
pnorm(235, mean=240, sd=80)
In [35]:
# 정규분포 구간확률
# 평균 350, 표준편차 75 정규분포에서 200~370 까지의 확률
pnorm(370, mean=350, sd=75) - pnorm(200, mean=350, sd=75)
In [36]:
# diff() - 구간 한번에 계산
diff(pnorm(c(200,370), mean=350, sd=75))
그래프로 확인하기¶
- x출 확률변수, y축 확률 값
In [37]:
# 확률 밀도 함수
# 평균 50, 표준편차 5인 정규분포
x <- seq(from = 0, to = 100, by = 1)
head(x)
tail(x)
In [38]:
# 1~100까지 평균 50, 표준편차 12인 확률 값
y <- dnorm(x, mean=50, sd=12)
head(y)
tail(y)
In [42]:
# plot()
plot(x, y, type='l')
In [43]:
# 확률질량함수
# 100번 베르누이 시행, 단일 확률 50% 이항분포
y <- dbinom(x, size=100, prob=0.5)
head(y)
tail(y)
In [44]:
plot(x, y, type='l')
In [45]:
# 주어진 데이터로 밀도 함수 구하기
data <- rnorm(300, mean=70, sd=20)
In [46]:
# Data 분포를 모른다는 전제하에 밀도함구 구하기 - density()
Ddata <- density(data)
In [47]:
Ddata
In [48]:
plot(Ddata)
In [52]:
install.packages('ggthemes')
In [53]:
# ggplot() - density() 필요 없음
library('ggplot2')
library('ggthemes')
In [54]:
data <- rnorm(300, mean=70, sd=20)
df <- data.frame(data)
In [56]:
ggplot(df, aes(x=data)) +
geom_density(fill='skyblue2', colour='dodgerblue1', alpha=0.4) +
xlim(c(-10, 140)) + theme_wsj()
예제) 토익학원 학습법 가설 검정하기¶
- A학원 토익점수 평균 623점, 표준편차 90
- 자신들만의 새로운 학습법을 적용하면 평균 700점이 넘는 다고 주장
- 귀무(영)가설 : 토익점수 평균 623점
- 대립가설 : 평균 700점이상 => 단측 검증
- 신뢰구간 5% ~ 95%
In [57]:
# 신뢰구간의 확률 변수 값 구하기
ci_data <- qnorm(c(0.05, 0.95), mean=623, sd=90)
ci_data
In [58]:
# 표본의 데이터 확인
Sample <- read.csv('R-ggagi-data//example_test_statistic_ex1_sample.csv')
In [59]:
head(Sample)
In [63]:
# 모집단의 신뢰구간과 표본의 평균 비교
ci_data
# 474.963173574367 771.036826425632 -> 신뢰구간
mean(Sample$point)
# 640.4371984145 -> 귀무가설 기각되지 않음
# 771.036826425632 보다 커야 귀무가설 기각
예제) 국어 선생님 학습법 검증하기¶
- A고등학교 언어영역 평균 82점
- 국어 선생님 새로운 학습법 적용 후 평균이 82점이 아니라고 주장
- 귀무(영)가설 : 언어영역 평균 82점
- 대립가설 : 언어영역 평균 82점이 아니다 => 양측 검증
- 신뢰구간 2.5% ~ 97.5%
In [66]:
# 모집단 불러오기
Sample <- read.csv('R-ggagi-data//example_test_statistic_ex2_population.csv')
In [67]:
head(Sample)
In [68]:
# 평균, 표준편차
mean(Sample$point)
sd(Sample$point)
In [70]:
# 신뢰구간
# 양측검정
ci_data <- qnorm(c(0.025, 0.875), mean=mean(Sample$point), sd=sd(Sample$point))
ci_data
In [71]:
# 표본 적재
Sample2 <- read.csv('R-ggagi-data//example_test_statistic_ex2_sample.csv')
In [73]:
head(Sample2)
In [76]:
# 가설 검증
ci_data
# 64.004078480520976.6691922592352 -> 신뢰구간
mean(Sample2$point)
# 80.845 -> 귀무가설 기각, 대립가설 채택 (실제로는 타당성 조사 필요)
In [ ]:
'R' 카테고리의 다른 글
[R] 회귀분석 (0) | 2020.07.13 |
---|---|
[R] 확률 실전예제--------주피터파일--------- (0) | 2020.07.13 |
[R] D3js 와 js를 활용한 시각화 (0) | 2020.07.09 |
[R] R 필수 패키지 설치 및 기초 (0) | 2020.07.08 |
[R] 데이터 시각화 및 EDA (0) | 2020.07.08 |
댓글