확률 활용
2024. 10. 6. 23:13ㆍ확률 통계/R 데이터 분석
확률의 개념
- sample 함수를 활용한 랜덤 샘플링
- replace=T: 반복 선택 가능
sample(1:20, 10) #1~20 까지의 숫자에서 10개를 랜덤 선택해줌
> sample(1:20, 10)
[1] 20 1 6 16 9 17 15 12 8 3
sample(1:20, 10, replace=T)
> sample(1:20, 10, replace=T)
[1] 6 5 6 18 17 2 8 20 12 8
- 백터 형식으로 문자를 저장하여서 샘플링하는 것도 가능
sample(c("H","T"),10,replace=T)
> sample(c("H","T"),10,replace=T)
[1] "T" "T" "H" "H" "T" "T" "H" "H" "H" "T"
- 주사위 두개를 동시에 던지는 경우도 다음과 같이 저장 가능
x<-cbind(x1=sample(1:6,10,replace=T), x2=sample(1:6,10,replace=T))
x
> x
x1 x2
[1,] 5 6
[2,] 3 6
[3,] 4 6
[4,] 4 3
[5,] 5 1
[6,] 1 5
[7,] 5 6
[8,] 1 6
[9,] 4 1
[10,] 1 3
확률=상대 도수의 극한
- 아래의 그래프를 본다면 시행 횟수가 커진다면 특정한 수에 수렴하게 된다는 것을 알 수 있음
par(mfrow=c(2,2))
for(i in c(100,1000,10000,100000)){#각각의 횟수를 반복
x<-sample(1:6,i,replace=T)
y<-table(x) #도수 분포표표 구하기
barplot(y/i, ylim=c(0,0.5), xlab=paste("n=",i))
}

생성 및 확률 계산
- 동전을 네번 던졌을 때 앞면이 두 번 이상 나오는 경우
c1<-rep(c("H","T"),8)
c2<-rep(c("H","H","T","T"),4)
c3<-rep(c(rep("H",4),rep("T",4)),2)
c4<-c(rep("H",8),rep("T",8))
s<-data.frame(c1,c2,c3,c4,stringsAsFactors=T)
f<-function(x) sum(x=="H") #H의 개수 return
a<-subset(s,apply(s,1,f)>=2)
nrow(a)/nrow(s) #H가 2개 이상 나올 확률
[1] 0.6875
- a배열에는 다음과 같은 값들이 들어가게 된다.
c1 c2 c3 c4
1 H H H H
2 T H H H
3 H T H H
4 T T H H
5 H H T H
6 T H T H
7 H T T H
9 H H H T
10 T H H T
11 H T H T
13 H H T T
- 총 13가지의 경우의 수가 존재한다는 것을 확인할 수 있다.
베이즈 정리
- 불량품 하나가 발생하였을 때, 생산라인 A, B, C, D에서 생산되었을 확률은?
| 생산라인 | A | B | C | D |
| 생산비율 | 20% | 40% | 30% | 10% |
| 불량율 | 0.04 | 0.02 | 0.01 | 0.05 |
- 베이즈 정리를 적용하여서 코드를 만든다면 다음과 같다.

a<-c(0.2,0.4,0.3,0.1)
b<-c(0.04,0.02,0.01,0.05)
t<-a*b #특정한 생산라인에 속하면서 불량품일 확률
p<-t/sum(t) #(특정 생산라인의 불량품)/(불량품일 확률)
p
- 그래프를 작성하면 다음과 같다.
f<-function(a,b){
t<-a*b
p<-t/sum(t)
}
a<-c(0.2,0.4,0.3,0.1)
b<-c(0.04,0.02,0.01,0.05)
p<-f(a,b)
barplot(cbind(a,p),
horiz=T,
names.arg = c("사전확률","사후확률"),
col=c("lightblue","lightgreen","lightyellow","lightcyan"))
