-
확률(Probability)
-
기술통계 : 시각화와 표본
-
확률 : 모집단
확률 실험 => 확률 변수 => 확률 분포 => 모수 추론 => 검증 => 의미파악
-
위 과정을 거처 모집단의 특징을 말하는 것 => 추론
-
통계학은 모두 조사할 수 없는 모집단을 알기 위해 표본을 설명하면서 발전
-
최근에는 IT 기술 발전으로 큰데이터를 다룰 수 있어 그 의미가 변해가고 있음
정해진 확률 구하기
확률실험
-
실험으로 나올 수 있는 결과를 모두 알고 있지만 어떤 결과가 나올지 모르는 실험
-
동전 던지기 앞면 나올 확률
-
주사위 던지기 2 나올 확률
표본 공간
-
확률실험에서 나올 수 있는 결과 집합
-
동전 : {앞면, 뒷면}
-
주사위 : {1, 2, 3, 4, 5, 6}
사건
-
표본 공간에서 알고 싶은 결과
-
표본 공간의 부분집합
-
동전던지기 확률실험에서 '앞면이 나오는 경우'
-
주사위던지기에서 '홀수가 나오는 경우'
경우의 수
-
사건이 하나가 아니고 여러 가지 나오는 사건
-
주사위던지기에서 4미만이 나오는 사건의 확률 => {1}, {2}, {3}
확률
-
확률실험으로 알고 싶은 건 사건이 일어날 확률
-
확률 = (사건이 일어날 모든 경우의 수) / (표본공간의 모든 공간의 수)
로또 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개를 고를 경우의 수
-
순서 허용 여부
-
중복 허용 여부
-
우리는 공식으로 계산할게 아니라 이론 내용과 함수 사용법을 익히면 됨 :)
install.packages('gtools')
package 'gtools' successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\205\AppData\Local\Temp\RtmpuiDWXy\downloaded_packages
library(gtools)
data <- c('1', '2', '3')
permutations(3, 2, data)
1 2 1 3 2 1 2 3 3 1 3 2 combinations(3, 2, data)
1 2 1 3 2 3 permutations(3, 2, data, repeats.allowed = T)
1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 combinations(3, 2, data, repeats.allowed = T)
1 1 1 2 1 3 2 2 2 3 3 3 상대도수의 극한 개념으로 동전던지기 확률 구하기
-
앞면이 나올 확률이 진짜로 0.5 일까?
실제 확률 실험 결과
-
실험결과 이론값과 실험값이 거의 비슷
-
실험을 많이 할수록 어떤 값으로 수렴
출처: https://bookdown.org/mathemedicine/Stat_book/probability-vs-likelihood.html
확률실험과 확률변수
-
확률변수는 반드시 숫자 이어야 함
-
수학적으로 계산하여 의미를 찾아야 하기 때문
-
확률변수는 이산형(확률질량함수)과 연속형(확률밀도함수)에 따라 달라짐
체계적인 확률실험
베르누이 시행
-
성공/실패, 동전던지기 앞면/뒷면, 합격/불합격
-
웹시스템에 배너를 10000명에 노출 / 클릭 9명 => 성공/실패 => 클릭 확률 9/10000
-
결과가 성공/실패로 나타남
-
다른 사람이 클릭했다고 다른 사람이 클릭 못하는 건 아님
-
모두에게 클릭할 확률은 동일
-
옆 사람이 클릭하는 것에 영향을 받지 않음
정리
-
결과는 성공/실패
-
각 시행 확률은 동일
-
각 시행은 독립적
베르누이 시행 확률분포
-
베르누이 시행의 결ㄹ과를 가지고 할 수 있는 확률분포
이항분포 X~B(n, p)
-
성공확률이 P인 베르누이 시행을 n번 반복할 때 나타나는 특정 성공횟수 X의 확률에 대한 분포
-
동전을 20번 던저셔 앞면이 나올 확률 => X~B(20,0.5) => 10번 성공 확률이 제일 높음 => 확률은?
-
이항분포 평균 = n*p
-
이항분포 분산 = np(1-p)
Bino <- dbinom(0:20, size=20, prob=0.5) # prop : 확률 Bino Bino <- dbinom(10, size=20, prob=0.5) Bino
- 9.5367431640625e-07
- 1.9073486328125e-05
- 0.000181198120117188
- 0.00108718872070313
- 0.00462055206298827
- 0.0147857666015625
- 0.0369644165039063
- 0.0739288330078125
- 0.120134353637695
- 0.160179138183594
- 0.176197052001953
- 0.160179138183594
- 0.120134353637695
- 0.0739288330078124
- 0.0369644165039063
- 0.0147857666015625
- 0.00462055206298827
- 0.00108718872070313
- 0.000181198120117188
- 1.9073486328125e-05
- 9.5367431640625e-07
0.176197052001953
n, p 변화에 따른 그래프
기하분포
-
베르누이 시행에서 처음 성공까지 시도한 횟수 X의 분포
-
30% 시험관 아기를 성공하는 병원에서 3번만에 성공할 확률?
# 0.3 시험관 성공(1번하면 0.3, 2번했을때 성공하면 0.21 ....) a <- dgeom(1:10, 0.3) # 0.147 a
- 0.21
- 0.147
- 0.1029
- 0.07203
- 0.050421
- 0.0352947
- 0.02470629
- 0.017294403
- 0.0121060821
- 0.00847425746999999
연속적인 변수
-
구간에 대한 확률
-
히스토그램으로 나타냄
-
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%
귀무가설 B의 주장(기존에 참인 가설)
-
앞면과 뒷면이 나올 확률이 같다
대립가설 A의 주장(대립되는 가설)
-
뒷면이 나오기 쉽다
유의수준 5%
-
우연이라고 말할 수 없다
-
이 값보다 작다면 필연적인 이유가 있을 것이다
-
이 값보다 작아지는 영역을 기각역 이라고 함
B의 확률분포를 구하고 결과를 확인
# B의 확률 분포계산 Bino <- dbinom(0:8, size=8, prob=0.5) Bino
- 0.00390625
- 0.03125
- 0.109375
- 0.21875
- 0.2734375
- 0.21875
- 0.109375
- 0.03125
- 0.00390625
# 유의수준 확인 5% psum <- 0.03125 + 0.00390625 psum
0.03515625
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() runif(10)
- 0.885389418108389
- 0.0779970991425216
- 0.842031814623624
- 0.381347123300657
- 0.103793505812064
- 0.936883620452136
- 0.228023673174903
- 0.15278900670819
- 0.0791909319814295
- 0.130721268709749
# 0~100 사이 50개 runif(50, min=0, max=100)
- 84.7111913375556
- 10.934574296698
- 0.819327007047832
- 40.9031876828521
- 44.1820338368416
- 27.6619726559147
- 15.2416101424024
- 83.3246093709022
- 30.1515947794542
- 28.0001347418875
- 63.8598932884634
- 23.6258530989289
- 73.1331901857629
- 96.7019350500777
- 84.4377777539194
- 34.0797122567892
- 48.0505653191358
- 31.253151036799
- 82.8346077352762
- 22.2118839155883
- 56.3061837106943
- 16.5427040075883
- 13.0825237603858
- 3.77818765118718
- 27.5441631441936
- 16.2683324422687
- 77.6525264373049
- 60.7823750237003
- 54.5926111051813
- 55.6182157946751
- 7.710673334077
- 37.5652708113194
- 17.2977520385757
- 11.0488927690312
- 33.5975539404899
- 8.3340069744736
- 90.9841798013076
- 53.8030865136534
- 73.0076543986797
- 22.2787553677335
- 44.2986285779625
- 73.4532510163262
- 36.8159991223365
- 53.8750059669837
- 7.64563616830856
- 53.3883557422087
- 38.4875930147246
- 95.2575927134603
- 80.6527501204982
- 67.8329832153395
# 정규분포 N(mean, sd^2) # 정규분포를 따르는 난수 - rnorm() # 평균 100, 표준편차 15인 난수 10개 rnorm(10, mean=100, sd=15)
- 110.421015062279
- 99.0540335091025
- 116.228539227009
- 93.8478999042707
- 102.228999169667
- 104.560970411563
- 106.811554008347
- 107.824362544417
- 89.9106778931394
- 91.476555235027
# 이항분포 난수 - rbinom() # 50% 확률로 성공 1 나오는 난수 100개 rbinom(100, size=1, prob=0.5)
- 0
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 1
- 1
- 0
- 0
- 1
- 0
- 0
- 1
- 1
- 1
- 0
- 0
- 0
- 0
- 0
- 1
- 1
- 0
- 0
- 0
- 1
- 1
- 1
- 1
- 1
- 0
- 1
- 0
- 0
- 0
- 0
- 0
- 1
- 1
- 0
- 1
- 0
- 1
- 1
- 0
- 0
- 1
- 1
- 0
- 1
- 0
- 0
- 0
- 1
- 1
- 1
- 1
- 0
- 1
- 1
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 1
- 0
- 1
- 0
- 0
- 0
- 1
- 1
- 0
- 1
- 0
- 0
- 0
- 0
- 1
- 0
- 1
- 1
- 0
- 1
- 0
- 1
- 0
- 1
# 1/6 확률로 성공 1 나오는 난수 100 rbinom(100, size = 1, prob = 1/6)
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 1
- 0
- 1
- 0
- 1
- 0
- 0
- 0
- 0
- 0
- 1
- 0
- 0
- 1
- 0
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 1
- 1
- 0
- 0
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 1
- 1
- 0
- 0
- 0
- 1
- 0
- 0
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
# 성공 / 실패 문자로 추출 a <- rbinom(100, size = 1, prob = 1/6) a[a==1] <- '성공' a[a==0] <- '실패'
a
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '성공'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '성공'
- '실패'
- '성공'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '성공'
- '실패'
- '성공'
- '실패'
- '성공'
- '실패'
- '실패'
- '실패'
- '실패'
- '성공'
- '실패'
- '실패'
- '실패'
- '성공'
- '실패'
- '실패'
- '실패'
- '실패'
- '성공'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '성공'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '성공'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '성공'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '성공'
- '실패'
- '실패'
- '성공'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '성공'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
- '실패'
확률 계산하기
# 정규분포 확률 - 평균(mean) 30, 표준편차(sd) 7, 확률변수 15의 확률 - dnorm() dnorm(15, mean=30, sd=7)
0.0057372972058433
# 정규분포 확률 - 평균(mean) 550, 표준편차(sd) 80, 확률변수 450의 확률 - dnorm() dnorm(450, mean = 550, sd = 80)
0.00228311356736277
# 이항분포 확률 - 동전 1000번 던저 490번이 앞면 나올 확률 dbinom(490, size = 1000, prob = 0.5)
0.020656351649512
# 이항분포 확률 - 흡연율 25%로 알려진 1000명이 있는 A대학에서 50명을 뽑았을 때 흡연자일 확률 dbinom(50, size = 1000, prob = 0.25)
1.51744499043407e-64
구간확률 계산하기 - 확률밀도함수
# 정규분포 구간확률 - 평균(mean)240, 표준편차(sd)80, 정규분포에서 0~235 까지의 확률 pnorm(235, mean=240, sd=80)
0.475082330970753
# 정규분포 구간확률 - 평균(mean)350, 표준편차(sd)75, 정규분포에서 200~370 까지의 확률 pnorm(370, mean=350, sd=75) - pnorm(200, mean=350, sd=75)
0.582386957587796
# diff() - 구간 한번에 계산 diff(pnorm(c(200,370), mean = 350, sd = 75))
0.582386957587796
그래프로 확인 하기
-
x 축 확률 변수, y축 확률 값
# 확률 밀도 함수 # 평균(mean)50, 표준편차(sd)5인 정규분포 x <- seq(from=0, to=100, by=1) head(x) tail(x)
- 0
- 1
- 2
- 3
- 4
- 5
- 95
- 96
- 97
- 98
- 99
- 100
# 1부터 100까지 평균(mean)50, 표준편차(sd)12 인 확률 값 y <- dnorm(x, mean=50, sd=12) head(y) tail(y)
- 5.6469174907348e-06
- 7.96343006251161e-06
- 1.11525188137404e-05
- 1.5510643816312e-05
- 2.14225295885255e-05
- 2.93829735306205e-05
- 2.93829735306205e-05
- 2.14225295885255e-05
- 1.5510643816312e-05
- 1.11525188137404e-05
- 7.96343006251161e-06
- 5.6469174907348e-06
# plot() plot(x, y, type='l')
# 확률 질량 함수 # 100번 베르누이 시행 단일 확률 50% 이항 분포 y = dbinom(x, size=100, prob=0.5) head(y) tail(y)
- 7.8886090522101e-31
- 7.88860905221007e-29
- 3.90486148084405e-27
- 1.27558808374239e-25
- 3.09330110307526e-24
- 5.93913811790449e-23
- 5.93913811790444e-23
- 3.09330110307526e-24
- 1.27558808374239e-25
- 3.90486148084405e-27
- 7.88860905221007e-29
- 7.8886090522101e-31
plot(x, y, type='l')
# 주어진 데이터로 밀도 함수 구하기 data <- rnorm(300, mean = 70, sd = 20)
# Data분포를 모른다고 전제, 밀도함수 구하기 - density() Ddata <- density(data)
Ddata
Call: density.default(x = data) Data: data (300 obs.); Bandwidth 'bw' = 6.014 x y Min. :-33.42 Min. :2.488e-06 1st Qu.: 10.45 1st Qu.:1.675e-04 Median : 54.33 Median :2.365e-03 Mean : 54.33 Mean :5.693e-03 3rd Qu.: 98.20 3rd Qu.:1.128e-02 Max. :142.07 Max. :1.906e-02
plot(Ddata)
# ggplot() - density() 필요없음 library('ggplot2') library('ggthemes')
Warning message: "package 'ggthemes' was built under R version 4.0.2"
data <- rnorm(300, mean = 70, sd = 20) df <- data.frame(data)
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%
# 신뢰구간의 확률 변수 값 구하기 ci_data <- qnorm(c(0.05, 0.95), mean = 623, sd = 90) ci_data
- 474.963173574367
- 771.036826425632
# 표본의 데이터 확인 Sample <- read.csv('r-ggagi-data/example_test_statistic_ex1_sample.csv')
head(Sample)
X point <int> <dbl> 1 1 547.8331 2 2 615.9035 3 3 651.0697 4 4 579.7603 5 5 736.0187 6 6 628.7083 # 모집단의 신뢰구간과 표본의 평균 비교 ci_data #771.036826425632 mean(Sample$point) # 640.4371984145 => 귀무가설 기각되지 않음
- 474.963173574367
- 771.036826425632
640.4371984145
국어 선생님 학습법 검증하기
- A고등학교 언어영역 평균 82점
- 국어 선생님 새로운 학습법 적용 후 평균이 82점이 아니라고 주장
- 귀무(영)가설 : 언어영역 평균 82점
- 대립가설 : 언어영역 평균 82점이 아니다 => 양측 검증
- 신뢰구간 2.5% ~ 97.5%
# 모집단 불러오기 Population <- read.csv('r-ggagi-data/example_test_statistic_ex2_population.csv') head(Population)
A data.frame: 6 × 2 X point <int> <int> 1 1 72 2 2 72 3 3 78 4 4 78 5 5 75 6 6 72 # 평균, 표준편차 mean(Population$point) sd(Population$point)
71.985
4.07197355789778
ci_data <- qnorm(c(0.025, 0.975), mean = mean(Population$point), sd = sd(Population$point)) ci_data
- 64.0040784805209
- 79.9659215194791
# 표본 적재 Sample <- read.csv('r-ggagi-data/example_test_statistic_ex2_sample.csv') head(Sample)
A data.frame: 6 × 2 X point <int> <int> 1 1 85 2 2 83 3 3 74 4 4 92 5 5 77 6 6 73 # 가설 검증 ci_data # 64.0040784805209 | 79.9659215194791 mean(Sample$point) # 80.845 => 귀무가설 기각하고 대립가설을 채택 But 실제는 타당성 조사 필요
- 64.0040784805209
- 79.9659215194791
80.845
-