bootstrp
부트스트랩 추출
구문
설명
는 위에 열거된 구문에 나와 있는 입력 인수 조합과 함께 하나 이상의 이름-값 쌍의 인수를 사용하여 옵션을 지정합니다. 예를 들어, 데이터에 관측값 가중치를 추가하거나 부트스트랩 반복을 병렬로 계산할 수 있습니다.bootstat
= bootstrp(___,Name,Value
)
예제
부트스트랩 통계량의 밀도 추정하기
부트스트랩 평균의 커널 밀도를 추정합니다.
평균이 5인 지수 분포에서 100개의 난수를 생성합니다.
rng('default') % For reproducibility y = exprnd(5,100,1);
벡터 y
에서 가져온 임의 표본에 대한 100개의 부트스트랩 표본의 평균을 계산합니다.
m = bootstrp(100,@mean,y);
부트스트랩 평균의 밀도에 대한 추정값을 플로팅합니다.
[fi,xi] = ksdensity(m); plot(xi,fi)
여러 통계량의 부트스트랩
100개의 부트스트랩 표본의 평균과 표준편차를 계산하고 플로팅합니다.
평균이 5인 지수 분포에서 100개의 난수를 생성합니다.
rng('default') % For reproducibility y = exprnd(5,100,1);
벡터 y
에서 가져온 임의 표본에 대한 100개의 부트스트랩 표본의 평균과 표준편차를 계산합니다.
stats = bootstrp(100,@(x)[mean(x) std(x)],y);
부트스트랩 추정값 쌍을 플로팅합니다.
plot(stats(:,1),stats(:,2),'o') xlabel('Mean') ylabel('Standard Deviation')
관측값의 부트스트랩 표본
환자 데이터의 부트스트랩 표본을 가져오고 각 데이터 표본에 대한 평균 측정값을 계산한 후 결과를 시각화합니다.
patients
데이터 세트를 불러옵니다. 연령, 체중, 신장 측정값을 포함하는 행렬 patientData
를 만듭니다. patientData
의 각 행은 한 명의 환자에 대응됩니다.
load patients
patientData = [Age Weight Height];
patientData
의 데이터에서 200개의 부트스트랩 데이터 표본을 생성합니다. 각 표본을 생성하기 위해 patientData
의 100개 행(size(patientData,1)
)에서 무작위 복원추출 방식으로 행을 선택합니다. 각 표본에 대해, 평균 연령, 체중 및 신장 측정값을 계산합니다. bootstat
의 각 행은 하나의 부트스트랩 표본에 대해 세 개의 평균 측정값을 포함합니다.
rng('default') % For reproducibility bootstat = bootstrp(200,@mean,patientData);
모든 200개 부트스트랩 데이터 표본에 대해 평균 측정값을 시각화합니다. 평균 체중 측정값이 큰 부트스트랩 표본은 평균 신장 측정값도 큰 경향이 있습니다.
scatter3(bootstat(:,1),bootstat(:,2),bootstat(:,3)) xlabel('Mean Age') ylabel('Mean Weight') zlabel('Mean Height') view([-75 10])
상관 계수 표준 오차의 부트스트랩
표본 데이터의 부트스트랩 재추출을 사용하여 상관 계수 표준 오차를 계산합니다.
학생 15명의 LSAT 점수와 로스쿨 GPA가 포함된 lawdata
데이터 세트를 불러옵니다.
load lawdata rng('default') % For reproducibility size(lsat)
ans = 1×2
15 1
size(gpa)
ans = 1×2
15 1
15개의 데이터 점을 재추출하여 1000개의 데이터 표본을 만들고, 각 데이터 표본에 대해 두 변수 사이의 상관관계를 계산합니다.
[bootstat,bootsam] = bootstrp(1000,@corr,lsat,gpa);
처음 5개의 부트스트랩 상관 계수를 표시합니다.
bootstat(1:5,:)
ans = 5×1
0.9874
0.4918
0.5459
0.8458
0.8959
처음 5개의 부트스트랩 표본에 대해 선택된 데이터의 인덱스를 표시합니다.
bootsam(:,1:5)
ans = 15×5
13 3 11 8 12
14 7 1 7 4
2 14 5 10 8
14 12 1 11 11
10 15 2 12 14
2 10 13 5 15
5 1 11 11 9
9 13 5 10 3
15 15 15 3 3
15 11 1 2 4
⋮
모든 부트스트랩 표본의 상관 계수 변동을 보여주는 히스토그램을 만듭니다.
histogram(bootstat)
표본 최솟값은 양수입니다. 이는 LSAT 점수와 GPA 사이의 관계가 우연이 아님을 나타냅니다.
마지막으로, 추정된 상관 계수에 대한 부트스트랩 표준 오차를 계산합니다.
se = std(bootstat)
se = 0.1285
부트스트랩 표본을 다양한 관측값 가중치와 비교하기
부트스트랩 표본을 다양한 관측값 가중치와 비교합니다. 각 표본에 대한 통계량을 계산하는 사용자 지정 함수를 만듭니다.
숫자 1부터 6 사이에서 50개 부트스트랩 표본을 생성합니다. 각 표본을 생성하기 위해 bootstrp
는 숫자 1부터 6 사이에서 무작위 복원추출 방식으로 6번 선택합니다. 이 과정은 주사위를 6번 굴리는 것과 유사합니다. 각 표본에 대해 (이 예제의 끝부분에 나와 있는) 사용자 지정 함수 countfun
은 표본에서 1의 개수를 셉니다.
rng('default') %For reproducibility counts = bootstrp(50,@countfun,(1:6)');
참고: 이 예제에 라이브 스크립트 파일을 사용하는 경우, countfun
함수가 파일의 끝에 이미 포함되어 있습니다. 그렇지 않은 경우, .m 파일의 끝에 이 함수를 만들거나 MATLAB® 경로에 이 함수를 파일로 추가해야 합니다.
숫자 1부터 6 사이에서 50개 부트스트랩 표본을 만들되, 이들 숫자에 서로 다른 가중치를 할당합니다. bootstrp
이 숫자 1부터 6 사이에서 무작위로 선택할 때마다 1을 선택할 확률은 0.5
이고, 2를 선택할 확률은 0.1
인 식입니다. countfun
은 각 표본에서 1의 개수를 셉니다.
weights = [0.5 0.1 0.1 0.1 0.1 0.1]';
weightedCounts = bootstrp(50,@countfun,(1:6)','Weights',weights);
히스토그램을 사용하여 두 세트의 부트스트랩 표본을 비교합니다.
histogram(counts) hold on histogram(weightedCounts) legend xlabel('Number of 1s in Sample') ylabel('Number of Samples') hold off
두 세트의 부트스트랩 표본은 서로 다른 분포를 갖는데, 특히 두 번째 세트에 1이 더 많이 포함되는 경향이 있습니다. 예를 들어, 첫 번째 세트의 50개 표본 중에는 두 개의 표본에만 세 개 이상의 1이 포함되어 있습니다. 이와 반대로, 두 번째 세트의 50개 표본(관측값 가중치 사용) 중에는 개 표본에 세 개 이상의 1이 포함되어 있습니다.
다음 코드는 함수 countfun
을 생성합니다.
function numberofones = countfun(sample) numberofones = sum(sample == 1); end
회귀 모델의 부트스트랩
잔차에 부트스트랩을 적용하여 선형 회귀에서 계수 벡터에 대한 표준 오차를 추정합니다.
참고: 이 예제에서는 부트스트랩의 경우처럼 단순히 회귀 모델의 계수 추정값 또는 잔차가 필요하고 모델을 여러 차례 반복해서 피팅해야 하는 경우에 유용한 regress
를 사용합니다. 피팅된 회귀 모델을 추가로 조사하려면 fitlm
을 사용하여 선형 회귀 모델 객체를 생성하십시오.
표본 데이터를 불러옵니다.
load hald
선형 회귀를 수행하고 잔차를 계산합니다.
x = [ones(size(heat)),ingredients]; y = heat; b = regress(y,x); yfit = x*b; resid = y - yfit;
잔차에 부트스트랩을 적용하여 표준 오차를 추정합니다.
se = std(bootstrp(1000,@(bootr)regress(yfit+bootr,x),resid))
se = 1×5
56.1752 0.5940 0.5815 0.5989 0.5691
입력 인수
nboot
— 부트스트랩 표본 개수
양의 정수 스칼라
추출할 부트스트랩 표본 개수로, 양의 정수 스칼라로 지정됩니다. 각 부트스트랩 표본을 생성하기 위해, bootstrp
는 d
또는 d1,...,dN
에 있는 n
개 행의 (비 스칼라) 데이터에서 무작위 복원추출 방식으로 n
개를 선택합니다.
예: 100
데이터형: single
| double
bootfun
— 각 표본에 적용할 함수
함수 핸들
각 표본에 적용할 함수로, 함수 핸들로 지정됩니다. 이 함수는 사용자 지정 함수 또는 내장 함수일 수 있습니다. bootfun
은 @
기호를 사용하여 지정해야 합니다.
사용자 지정 함수를 사용하는 예제는 부트스트랩 표본을 다양한 관측값 가중치와 비교하기 항목을 참조하십시오.
예: @mean
데이터형: function_handle
d
— 표본을 추출할 데이터
열 벡터 | 행렬
표본을 추출할 데이터로, 열 벡터 또는 행렬로 지정됩니다. d
의 n
개 행은 관측값에 대응됩니다. 여러 개의 데이터 입력 인수 d1,...,dN
을 사용하는 경우, 일부 인수를 스칼라 값으로 지정할 수 있지만 모든 비 스칼라 인수는 행 개수가 동일해야 합니다.
단일 벡터 인수 d
를 사용하는 경우 이 인수를 행 벡터로 지정할 수 있습니다. 그러면 bootstrp
는 벡터의 요소에서 표본을 추출합니다.
데이터형: single
| double
| logical
| char
| string
| cell
| categorical
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: bootstrp(4,@mean,(1:2)','Weights',[0.4 0.6]')
은 값 1
과 2
에서 4개의 부트스트랩 표본을 추출하고 각 표본의 평균을 취하도록 지정합니다. 각 추출에 대해, 1
을 얻을 확률은 0.4
이고 2
를 얻을 확률은 0.6
입니다.
Weights
— 관측값 가중치
ones(n,1)/n
(디폴트 값) | 음이 아닌 벡터
관측값 가중치로, 'Weights'
와 적어도 하나의 양의 요소를 포함하는 음이 아닌 벡터가 쉼표로 구분되어 지정됩니다. Weights
의 요소 개수는 데이터 d
또는 d1,...,dN
에 있는 행 개수 n
과 동일해야 합니다. 하나의 부트스트랩 표본을 얻기 위해, bootstrp
는 이러한 가중치를 다항 표본추출 확률로 사용하여 n
개 행의 데이터에서 무작위 복원추출 방식으로 n
개를 선택합니다.
데이터형: single
| double
Options
— 병렬 계산 및 난수 설정을 위한 옵션
구조체
부트스트랩 추출 중에 부트스트랩 반복을 병렬로 계산하고 난수를 설정하기 위한 옵션으로, 'Options'
와 구조체가 쉼표로 구분되어 지정됩니다. statset
을 사용하여 Options
구조체를 생성합니다. 아래 표에는 옵션 필드와 그 값이 나와 있습니다.
필드 이름 | 값 | 디폴트 값 |
---|---|---|
UseParallel | 부트스트랩 반복을 병렬로 계산하려면 이 값을 true 로 설정합니다. | false |
UseSubstreams | 재현 가능한 방식으로 병렬 계산을 실행하려면 이 값을 재현 가능한 방식으로 계산하려면 | false |
Streams | 이 값을 RandStream 객체 또는 이러한 객체로 구성된 셀형 배열로 지정합니다. UseParallel 값이 true 이고 UseSubstreams 값이 false 인 경우를 제외하고는 단일 객체를 사용합니다. 이 경우에는 병렬 풀과 크기가 같은 셀형 배열을 사용하십시오. | Streams 를 지정하지 않으면 bootstrp 가 디폴트 스트림을 사용합니다. |
참고
병렬 계산을 실행하려면 Parallel Computing Toolbox™가 필요합니다.
예: 'Options',statset('UseParallel',true)
데이터형: struct
출력 인수
bootsam
— 부트스트랩 표본 인덱스
숫자형 행렬
부트스트랩 표본 인덱스로, n
×nboot
숫자형 행렬로 반환되며, 여기서 n
은 원본 비 스칼라 데이터의 행 개수입니다. bootsam
의 각 열은 하나의 부트스트랩 표본에 대응하고 해당 표본을 만들기 위해 비 스칼라 데이터에서 추출한 값의 행 인덱스를 포함합니다.
예를 들어, d1,...,dN
에 있는 각 데이터 입력 인수가 16개 값을 포함하고 nboot = 4
인 경우 bootsam
은 16×4 행렬입니다. 첫 번째 열은 첫 번째 부트스트랩 표본에 대해 d1,...,dN
에서 추출한 16개 값의 인덱스를 포함하고, 두 번째 열은 두 번째 부트스트랩 표본에 대한 인덱스를 포함하는 식입니다. 부트스트랩 인덱스는 모든 입력 데이터 세트 d1,...,dN
에서 동일합니다.
확장 기능
자동 병렬 지원
Parallel Computing Toolbox™를 사용해 자동 병렬 계산을 실행하여 코드 실행 속도를 높일 수 있습니다.
병렬로 실행하려면 이 함수에 대한 호출에 Options
이름-값 인수를 지정하고 statset
을 사용하여 options 구조체의 UseParallel
필드를 true
로 설정하십시오.
"Options",statset("UseParallel",true)
병렬 연산에 대한 자세한 내용은 자동 병렬 연산을 지원하는 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨
참고 항목
histogram
| bootci
| ksdensity
| parfor
| random
| randsample
| RandStream
| statget
| statset
도움말 항목
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)