#### 부트스트래핑 ####
# ****쓰는 이유 : 많은 test들이 정규성을 가정하고 쓴다(student's t) 하지만,
부트스트레핑을 쓰면, 적은 데이터라도 정규분포를 형성시켜 --> 모집단의 평균을 추정한다.
# https://thebook.io/006723/ch10/08-2/
# 부트스트래핑은 주어진 데이터로부터 복원 표본을 구하는 작업을 여러 번 반복해 원하는 값을 추정한다. 한 가지 예로 평균의 신뢰 구간을 구하는 경우를 생각해보자. 평균의 신뢰 구간은 평균이 속할 범위를 95% 신뢰도로 찾는 것이다. 부트스트래핑은 데이터로부터 표본을 복원 추출로 구하고 이들의 평균을 기록하는 일을 반복한다. 이렇게 구한 평균들을 나열한 뒤 가장 작은 값으로부터 2.5%, 가장 큰 값으로부터 97.5% 지점의 평균 두 개를 구한다. 그러면 두 평균 사이의 구간이 평균의 95% 신뢰 구간이 된다.

# 지난시간 정규성이 없어보이던 데이터
light <- read.table("data/light.txt", header = T) # 하위폴더에 접근할때는 앞에 / 안붙히고 바로..
light

hist(light$speed, col = "green")
image

# QQplot으로 확인하는 정규분포
qqnorm(light$speed)
qqline(light$speed, col = "red")
shapiro.test(light$speed) # p-value = 0.09876 -> H0정규분포를 채택하긴 했으나 찜찜..
image


#### 부트스트래핑 ####
# 0) 데이터의 개수 알아놓기
length(light$speed) # 데이터 개수 : 20개


# 1) 몇번 쌤플링(추출)할 것인지를 --> 빈 숫자 데이터에 정해놓기
a <- numeric(10000) # 10000개의 빈 숫자데이터 생성 -> 샘플링할 횟수가 될 것임

# 2) 20개씩 복원추출(1개뺀뒤 넣고 다시뺌x20)한 sample의 분포를 히스토그램으로 한번 봐보기
hist( sample(light$speed, size=20, replace = T), col="green" )
hist( sample(light$speed, size=20, replace = T), col="red" )
hist( sample(light$speed, size=20, replace = T), col="blue" )
imageimageimage

# 3) 10000개의 빈공간에 < 각 sample들( - *20개를 - 복원추출(replace)한 것) 의 평균mean*** >을 집어넣음
  my) 데이터 20개짜리에 대해,  10000번을,  20개씩 복원추출하여 나온 각 평균을  for문을 통해서 집어넣는다.

# 20개를 복원추출한 샘플의 평균구해보기
mean(  sample(light$speed, size=20, replace = T))

for( i in 1:10000){
   a[i] <- mean(  sample(light$speed, size=20, replace = T)  )
}

# 4) 이제 10000개의 20개복원추출의평균  을  히스토그램으로 분포를 보자.
hist(a, col='yellow') # 정규분포를 띈다.

# 5) 10000개짜리 정규분포의 평균으로 -> 모집단의 평균(H0는 990일 것이다)를 추정하여 H0를 reject하거나 채택가능

# 6) 각 샘플들에서는 1000짜리도 등장하지만, 그것(20개-복원추출)의 평균한 것들은 최대값도 990(H0)에는 못간다.
#    결과적으로 빛의 속도 990이라는 H0는 reject할 수 있다.
#    자료가 충분하지 않을 때는, 부트스트래핑을 통해 데이터를 잔뜩 늘일고 + 정규분포를 만들어서-> 모집단의 평균을 추정한다.
#    중심값 극한 정리에 쓰인다?
#    1개의 샘플의 평균은 별 의미가 없으나 1000개 이상한 부트스트레핑의 평균은--> 모집단의 평균을 추정가능하다.
#  
max(a) # 978.5
mean(a) # 909.2256 --> 1. 윌콕슨검정 시간에 909은 H0를 채택했었는데, 그 값과 비슷

+ Recent posts