Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

bootstrp

부트스트랩 추출

설명

예제

bootstat = bootstrp(nboot,bootfun,d)d에서 nboot개의 부트스트랩 데이터 표본을 추출하고 함수 bootfun을 사용하여 각 표본에 대한 통계량을 계산한 다음 결과를 bootstat에 반환합니다. bootstrp 함수는 d의 행에서 복원추출을 통해 각 부트스트랩 표본을 생성합니다. 출력 인수 bootstat의 각 행은 bootfun을 하나의 부트스트랩 표본에 적용한 결과를 포함합니다.

예제

bootstat = bootstrp(nboot,bootfun,d1,...,dN)dl,...,dN의 데이터에서 nboot개의 부트스트랩 표본을 추출합니다. dl,...,dN의 비 스칼라 데이터 인수는 행 개수 n이 동일해야 합니다. bootstrp 함수는 인덱스 1:n에서 복원추출을 수행하고 비 스칼라 인수 dl,...,dN의 대응되는 행을 선택하여 각 부트스트랩 표본을 생성합니다. 이 함수는 dl,...,dN의 비 스칼라 데이터 표본과 변경되지 않은 스칼라 데이터 인수를 bootfun에 전달합니다.

예제

bootstat = bootstrp(___,Name,Value)는 위에 열거된 구문에 나와 있는 입력 인수 조합과 함께 하나 이상의 이름-값 쌍의 인수를 사용하여 옵션을 지정합니다. 예를 들어, 데이터에 관측값 가중치를 추가하거나 부트스트랩 반복을 병렬로 계산할 수 있습니다.

예제

[bootstat,bootsam] = bootstrp(___)는 부트스트랩 표본 인덱스로 구성된 n×nboot 행렬인 bootsam도 반환합니다. 여기서 n은 원본 비 스칼라 데이터의 행 개수입니다. bootsam의 각 열은 하나의 부트스트랩 표본에 대응하고 해당 표본을 만들기 위해 비 스칼라 데이터에서 추출한 값의 행 인덱스를 포함합니다.

표본에 함수를 적용하지 않고 부트스트랩 표본 인덱스를 가져오려면 bootfun을 빈 값([])으로 설정하십시오.

예제

모두 축소

부트스트랩 평균의 커널 밀도를 추정합니다.

평균이 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개 표본(관측값 가중치 사용) 중에는 12+14+4+2=32개 표본에 세 개 이상의 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

입력 인수

모두 축소

추출할 부트스트랩 표본 개수로, 양의 정수 스칼라로 지정됩니다. 각 부트스트랩 표본을 생성하기 위해, bootstrpd 또는 d1,...,dN에 있는 n개 행의 (비 스칼라) 데이터에서 무작위 복원추출 방식으로 n개를 선택합니다.

예: 100

데이터형: single | double

각 표본에 적용할 함수로, 함수 핸들로 지정됩니다. 이 함수는 사용자 지정 함수 또는 내장 함수일 수 있습니다. bootfun@ 기호를 사용하여 지정해야 합니다.

사용자 지정 함수를 사용하는 예제는 부트스트랩 표본을 다양한 관측값 가중치와 비교하기 항목을 참조하십시오.

예: @mean

데이터형: function_handle

표본을 추출할 데이터로, 열 벡터 또는 행렬로 지정됩니다. dn개 행은 관측값에 대응됩니다. 여러 개의 데이터 입력 인수 d1,...,dN을 사용하는 경우, 일부 인수를 스칼라 값으로 지정할 수 있지만 모든 비 스칼라 인수는 행 개수가 동일해야 합니다.

단일 벡터 인수 d를 사용하는 경우 이 인수를 행 벡터로 지정할 수 있습니다. 그러면 bootstrp는 벡터의 요소에서 표본을 추출합니다.

데이터형: single | double | logical | char | string | cell | categorical

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: bootstrp(4,@mean,(1:2)','Weights',[0.4 0.6]')은 값 12에서 4개의 부트스트랩 표본을 추출하고 각 표본의 평균을 취하도록 지정합니다. 각 추출에 대해, 1을 얻을 확률은 0.4이고 2를 얻을 확률은 0.6입니다.

관측값 가중치로, 'Weights'와 적어도 하나의 양의 요소를 포함하는 음이 아닌 벡터가 쉼표로 구분되어 지정됩니다. Weights의 요소 개수는 데이터 d 또는 d1,...,dN에 있는 행 개수 n과 동일해야 합니다. 하나의 부트스트랩 표본을 얻기 위해, bootstrp는 이러한 가중치를 다항 표본추출 확률로 사용하여 n개 행의 데이터에서 무작위 복원추출 방식으로 n개를 선택합니다.

데이터형: single | double

부트스트랩 추출 중에 부트스트랩 반복을 병렬로 계산하고 난수를 설정하기 위한 옵션으로, 'Options'와 구조체가 쉼표로 구분되어 지정됩니다. statset을 사용하여 Options 구조체를 생성합니다. 아래 표에는 옵션 필드와 그 값이 나와 있습니다.

필드 이름디폴트 값
UseParallel부트스트랩 반복을 병렬로 계산하려면 이 값을 true로 설정합니다.false
UseSubstreams

재현 가능한 방식으로 병렬 계산을 실행하려면 이 값을 true로 설정합니다.

재현 가능한 방식으로 계산하려면 Streams를 서브스트림을 허용하는 유형인 'mlfg6331_64' 또는 'mrg32k3a'로 설정하십시오.

false
Streams이 값을 RandStream 객체 또는 이러한 객체로 구성된 셀형 배열로 지정합니다. UseParallel 값이 true이고 UseSubstreams 값이 false인 경우를 제외하고는 단일 객체를 사용합니다. 이 경우에는 병렬 풀과 크기가 같은 셀형 배열을 사용하십시오.Streams를 지정하지 않으면 bootstrp가 디폴트 스트림을 사용합니다.

참고

병렬 계산을 실행하려면 Parallel Computing Toolbox™가 필요합니다.

예: 'Options',statset('UseParallel',true)

데이터형: struct

출력 인수

모두 축소

부트스트랩 표본 통계량으로, n개 행을 가진 열 벡터 또는 행렬로 반환됩니다. bootstati번째 행은 bootfuni번째 부트스트랩 표본에 적용한 결과입니다. bootfun이 행렬 또는 배열을 반환하는 경우 bootstrp 함수는 먼저 이 출력값을 행 벡터로 변환한 후 bootstat에 저장합니다.

부트스트랩 표본 인덱스로, n×nboot 숫자형 행렬로 반환되며, 여기서 n은 원본 비 스칼라 데이터의 행 개수입니다. bootsam의 각 열은 하나의 부트스트랩 표본에 대응하고 해당 표본을 만들기 위해 비 스칼라 데이터에서 추출한 값의 행 인덱스를 포함합니다.

예를 들어, d1,...,dN에 있는 각 데이터 입력 인수가 16개 값을 포함하고 nboot = 4인 경우 bootsam은 16×4 행렬입니다. 첫 번째 열은 첫 번째 부트스트랩 표본에 대해 d1,...,dN에서 추출한 16개 값의 인덱스를 포함하고, 두 번째 열은 두 번째 부트스트랩 표본에 대한 인덱스를 포함하는 식입니다. 부트스트랩 인덱스는 모든 입력 데이터 세트 d1,...,dN에서 동일합니다.

  • 표본에 함수를 적용하지 않고 부트스트랩 표본 인덱스 bootsam을 가져오려면 bootfun을 빈 값([])으로 설정하십시오.

확장 기능

R2006a 이전에 개발됨