Khoảng tin cậy Bootstrap SAS

Nếu bạn muốn khởi động các tham số trong mô hình hồi quy thống kê, bạn có hai lựa chọn chính. Đầu tiên là lấy mẫu lại theo trường hợp, còn được gọi là lấy mẫu lại các quan sát hoặc lấy mẫu lại theo cặp. Trong trường hợp lấy mẫu lại, bạn tạo mẫu bootstrap bằng cách chọn ngẫu nhiên các quan sát [có thay thế] từ dữ liệu gốc. Lựa chọn thứ hai được gọi là lấy mẫu lại phần dư. Trong phương pháp này, bạn khớp một mô hình với dữ liệu gốc để thu được các giá trị và phần dư được dự đoán. Bạn tạo mẫu bootstrap bằng cách sử dụng các biến giải thích ban đầu nhưng xây dựng giá trị phản hồi mới bằng cách thêm phần dư ngẫu nhiên vào giá trị dự đoán. Bài viết này cho thấy một ví dụ về lấy mẫu lại trường hợp trong SAS. Một bài viết trong tương lai cho thấy một ví dụ về lấy mẫu lại phần dư

Lấy mẫu lại trường hợp để khởi động phân tích hồi quy

Nếu bạn có một số kinh nghiệm với bootstrapping số liệu thống kê đơn biến, việc lấy mẫu lại theo trường hợp sẽ trông quen thuộc. Các ý tưởng chính đằng sau quá trình khởi động được giải thích trong bài viết "Tính toán khoảng tin cậy bootstrap trong SAS", thảo luận về các bước sau của phương pháp bootstrap

  1. Tính toán thống kê quan tâm cho dữ liệu gốc
  2. Lấy mẫu lại B lần từ dữ liệu để tạo mẫu B bootstrap
  3. Tính toán số liệu thống kê trên từng mẫu bootstrap. Điều này tạo ra phân phối bootstrap, xấp xỉ phân phối lấy mẫu của thống kê
  4. Sử dụng phân phối lấy mẫu gần đúng để có được các ước tính bootstrap như sai số chuẩn, khoảng tin cậy và bằng chứng ủng hộ hoặc chống lại giả thuyết không

Để chứng minh việc lấy mẫu lại theo trường hợp, hãy xem xét phân phối lấy mẫu của các ước tính tham số [hệ số hồi quy] trong hồi quy bình phương nhỏ nhất thông thường [OLS]. Phân phối lấy mẫu cung cấp cái nhìn sâu sắc về sự thay đổi của các ước tính và cách các ước tính tương quan với nhau. Trong phân tích lấy mẫu theo trường hợp, mỗi mẫu bootstrap sẽ chứa các quan sát được chọn ngẫu nhiên từ dữ liệu gốc. Bạn điều chỉnh cùng một mô hình hồi quy cho từng mẫu để có được các ước tính bootstrap. Sau đó, bạn có thể phân tích phân phối ước tính bootstrap

Đối với số liệu thống kê trong bài viết này, bạn có thể so sánh ước tính bootstrap với ước tính sai số chuẩn và khoảng tin cậy [CIs] do PROC REG tạo ra trong SAS. Quy trình xây dựng số liệu thống kê dựa trên một số giả định về phân phối lỗi trong mô hình OLS. Ngược lại, các ước tính bootstrap không theo tham số và dựa vào ít giả định hơn. Do đó, bootstrapping rất hữu ích khi bạn không chắc liệu các giả định OLS có phù hợp với dữ liệu của mình hay không hoặc khi bạn muốn lấy khoảng tin cậy cho các thống kê [như R-squared và RMSE] có phân phối lấy mẫu phức tạp hoặc không xác định

Thống kê quan tâm cho dữ liệu gốc

Ví dụ này phân tích Sashelp. Tập dữ liệu lớp, chứa dữ liệu về cân nặng và chiều cao của 19 học sinh. Biến phản hồi là biến Trọng lượng, mà bạn có thể hồi quy về biến Chiều cao. Hồi quy tạo ra hai ước tính tham số [Giao điểm và Chiều cao], sai số chuẩn và ước tính "hiệp phương sai của hệ số beta. " Để rõ ràng, tôi đổi tên biến phản hồi thành Y và biến giải thích thành X để vai trò của từng biến được rõ ràng

/* regression bootstrap: case resampling */
data sample[keep=x y];
   set Sashelp.Class[rename=[Weight=Y Height=X]];  /* rename to make roles easier to understand */
run;
 
/* 1. compute the statistics on the original data */
proc reg data=Sample plots=none;
   model Y = X / CLB covb;                          /* original estimates */
run; quit;

Bảng "Ước tính tham số" bao gồm các ước tính điểm, sai số chuẩn và khoảng tin cậy cho các hệ số hồi quy. Bảng "Hiệp phương sai của các ước tính" cho thấy các ước tính có tương quan nghịch

Lấy mẫu lại từ dữ liệu

Lệnh gọi PROC SURVEYSELECT sau đây tạo 5.000 mẫu bootstrap bằng cách lấy mẫu có thay thế từ dữ liệu

title "Bootstrap Distribution of Regression Estimates";
title2 "Case Resampling";
%let NumSamples = 5000;       /* number of bootstrap resamples */
%let IntEst = -143.02692;     /* original estimates for later visualization */
%let XEst   =    3.89903;
 
/* 2. Generate many bootstrap samples by using PROC SURVEYSELECT */
proc surveyselect data=sample NOPRINT seed=1
     out=BootCases[rename=[Replicate=SampleID]]
     method=urs              /* resample with replacement */
     samprate=1              /* each bootstrap sample has N observations */
     /* OUTHITS                 use OUTHITS option to suppress the frequency var */
     reps=&NumSamples;       /* generate NumSamples bootstrap resamples */
run;

Đầu ra từ thủ tục SURVEYSELECT là một tập dữ liệu lớn [BootCase] chứa tất cả các mẫu bootstrap. Biến SampleID cho biết quan sát nào thuộc về từng mẫu. Biến NumberHits đưa ra tần suất mà mỗi quan sát ban đầu được chọn. Biến đó nên được sử dụng làm biến FREQ khi phân tích các mẫu bootstrap. [Nếu quy trình của bạn không hỗ trợ biến tần số, hãy sử dụng tùy chọn OUTHITS trên câu lệnh PROC SURVEYSELECT để lấy phiên bản "mở rộng" của các mẫu bootstrap. ]

Tính toán phân phối bootstrap

Bộ dữ liệu BootCase chứa 5.000 mẫu bootstrap. Bạn có thể thực hiện 5.000 phân tích hồi quy một cách hiệu quả bằng cách sử dụng phân tích BY-group. Bạn có thể sử dụng câu lệnh BY trong PROC REG. Đảm bảo sử dụng tùy chọn NOPRINT để chặn đầu ra ra màn hình và sử dụng tùy chọn OUTEST= để tạo tập dữ liệu đầu ra chứa 5.000 ước tính tham số, một ước tính cho mỗi mẫu bootstrap

/* 3. Compute the statistic for each bootstrap sample */
proc reg data=BootCases outest=PEBoot noprint;
   by SampleID;
   freq NumberHits;
   model Y = X;
run;quit;

Phân tích phân phối bootstrap

Bộ dữ liệu PEBoot chứa 5.000 ước tính tham số. Để trực quan hóa phân phối bootstrap, bạn có thể tạo một biểu đồ phân tán. Lệnh gọi PROC SGPLOT sau đây phủ lên các đường tham chiếu giao nhau tại các ước tính tham số cho dữ liệu gốc

/* 4. Visualize bootstrap distribution */
proc sgplot data=PEBoot;
   label Intercept = "Estimate of Intercept" X = "Estimate of Coefficient of X";
   scatter x=Intercept y=X / markerattrs=[Symbol=CircleFilled] transparency=0.7;
   /* Optional: draw reference lines at estimates for original data */
   refline &IntEst / axis=x lineattrs=[color=blue];
   refline &XEst / axis=y lineattrs=[color=blue];
   xaxis grid; yaxis grid;
run;

Biểu đồ phân tán cho thấy các ước tính có mối tương quan nghịch, điều này đã được hiển thị trước đó bởi đầu ra từ tùy chọn COVB trên dữ liệu gốc. Bạn có thể gọi PROC CORR trên các mẫu bootstrap để có được ước tính bootstrap về hiệp phương sai của các bản beta

proc corr data=PEBoot cov vardef=N;
   var Intercept X;
run;

Ma trận hiệp phương sai cho các ước tính bootstrap gần với ma trận COVB từ PROC REG. Bảng "Thống kê đơn giản" hiển thị các ước tính bootstrap khác. Cột Mean hiển thị giá trị trung bình của các ước tính bootstrap; . Cột StdDev ước tính sai số chuẩn của ước tính hồi quy

Bạn cũng có thể sử dụng số 0. 025 và 0. 975 lượng tử của bootstrap ước tính để xây dựng khoảng tin cậy 95% cho các tham số. Có nhiều cách để lấy phần trăm trong SAS. các câu lệnh sau đây gọi PROC STDIZE và in khoảng tin cậy cho các biến Chặn và X

proc stdize data=PEBoot vardef=N pctlpts=2.5 97.5  PctlMtd=ORD_STAT outstat=Pctls;
   var Intercept X;
run;
proc report data=Pctls nowd;
  where _type_ =: 'P';
  label _type_ = 'Confidence Limit';
  columns ['Bootstrap Confidence Intervals [B=5000]' _ALL_];
run;

Ước tính bootstrap của khoảng tin cậy ngắn hơn khoảng tin cậy Wald từ PROC REG giả định tính quy phạm của lỗi

Tóm lược

Tóm lại, có hai cách chính để thực hiện bootstrapping cho các tham số trong mô hình hồi quy. Bài viết này tạo các mẫu bootstrap bằng cách sử dụng "lấy mẫu lại trường hợp" trong đó các quan sát được chọn ngẫu nhiên [có thay thế]. Quá trình bootstrap cho phép bạn ước tính sai số chuẩn, khoảng tin cậy và hiệp phương sai [hoặc tương quan] của các ước tính. Bạn cũng có thể sử dụng macro %BOOT để thực hiện loại phân tích bootstrap này

Lấy mẫu lại trường hợp là một lựa chọn tốt khi bạn đang lập mô hình dữ liệu quan sát trong đó các biến giải thích được quan sát ngẫu nhiên từ dân số. Mặc dù hồi quy OLS coi biến giải thích [chẳng hạn như Chiều cao] là một hiệu ứng cố định, nhưng nếu bạn học ở một trường khác và chọn ngẫu nhiên 19 học sinh cùng khối, bạn sẽ nhận được một tập hợp các chiều cao khác nhau. Theo nghĩa đó, dữ liệu [X và Y] có thể được coi là các giá trị ngẫu nhiên từ một dân số lớn hơn

Nếu bạn đang phân tích dữ liệu từ một thử nghiệm được thiết kế trong đó các biến giải thích có một số lượng nhỏ các giá trị được chỉ định, thì bạn có thể sử dụng lấy mẫu lại phần dư, điều này sẽ được thảo luận trong bài đăng trên blog tiếp theo

Bài viết Ước tính hồi quy Bootstrap. Lấy mẫu lại trường hợp xuất hiện đầu tiên trên Vòng lặp DO

Kể từ cuối những năm 1990, SAS đã cung cấp macro cho các phân tích bootstrap và jackknife cơ bản. Bài viết này cung cấp một ví dụ cho biết cách sử dụng macro %BOOT và %BOOTCI. Macro %BOOT tạo phân phối bootstrap và tính toán các số liệu thống kê cơ bản về phân phối bootstrap, bao gồm các ước tính về độ lệch, sai số chuẩn và khoảng tin cậy phù hợp khi phân phối lấy mẫu được phân phối bình thường. Bởi vì các phương pháp bootstrap thường được sử dụng khi bạn không muốn giả sử một thống kê được phân phối bình thường, nên macro %BOOTCI hỗ trợ một số khoảng tin cậy bổ sung, chẳng hạn như khoảng dựa trên phần trăm và khoảng được điều chỉnh sai lệch

Bạn có thể tải xuống các macro miễn phí từ trang web Hỗ trợ của SAS. Trang web bao gồm các ví dụ bổ sung, tài liệu và thảo luận về khả năng của macro

Macro %BOOT sử dụng lấy mẫu ngẫu nhiên thống nhất đơn giản [có thay thế] hoặc lấy mẫu bootstrap cân bằng để tạo các mẫu bootstrap. Sau đó, nó gọi macro %ANALYZE do người dùng cung cấp để tính toán phân phối bootstrap của thống kê của bạn

Cách cài đặt và sử dụng macro %BOOT và %BOOTCI

Để sử dụng macro, hãy làm như sau

  1. Tải xuống tệp nguồn cho các macro và lưu nó vào một thư mục mà SAS có thể truy cập được. Trong ví dụ này, tôi đã lưu tệp nguồn vào C. \Temp\jackboot. sass
  2. Xác định macro có tên %ANALYZE tính toán thống kê bootstrap từ một mẫu bootstrap. Phần tiếp theo cung cấp một ví dụ
  3. Gọi macro %BOOT. Macro %BOOT tạo ba bộ dữ liệu chính
    • BootData là chế độ xem tập dữ liệu chứa B mẫu dữ liệu bootstrap. Đối với ví dụ này, tôi sử dụng B=5000
    • BootDist là tập dữ liệu chứa bản phân phối bootstrap. Nó được tạo khi macro %BOOT gọi nội bộ macro %ANALYZE trên tập dữ liệu BootData
    • BootStat là tập dữ liệu chứa số liệu thống kê về phân phối bootstrap. Ví dụ: bộ dữ liệu BootStat chứa giá trị trung bình và độ lệch chuẩn của phân phối bootstrap, trong số các thống kê khác
  4. Nếu bạn muốn các khoảng thời gian tin cậy, hãy sử dụng macro %BOOTCI để tính toán tối đa sáu ước tính khoảng thời gian khác nhau. Macro %BOOTCI tạo một tập dữ liệu có tên là BootCI chứa các số liệu thống kê được sử dụng để xây dựng khoảng tin cậy. [Bạn cũng có thể tạo nhiều ước tính khoảng thời gian bằng cách sử dụng macro %ALLCI. ]

Một ví dụ về cách gọi macro %BOOT

Phần này cho biết cách gọi macro %BOOT. Ví dụ trước đây đã được phân tích trong một bài viết chỉ ra cách tính khoảng tin cậy phần trăm bootstrap trong SAS. Thống kê đáng quan tâm là độ lệch của biến SepalWidth cho 50 bông hoa diên vĩ của loài Iris virginica. Các câu lệnh SAS sau xác định dữ liệu mẫu và tính toán thống kê độ lệch trên dữ liệu gốc

%include "C:\Temp\jackboot.sas";         /* define the %BOOT and %BOOTCI macros */
 
data sample[keep=x];                     /* data are sepal widths for 50 Iris virginica flowers */
   set Sashelp.Iris[where=[Species="Virginica"] rename=[SepalWidth=x]];
run;
 
/* compute value of the statistic on original data: Skewness = 0.366 */
title 'Skewness for Petal Widths [Iris virginica]';
proc means data=sample nolabels skewness;
   var x;
   output out=SkewOut skew=Skewness;   /* three output variables: _type_ _freq_ and Skewness */
run;

Thống kê độ lệch [không hiển thị] là 0. 366. Cuộc gọi đến PROC MEANS là không cần thiết, nhưng nó chỉ ra cách tạo một tập dữ liệu đầu ra [SkewOut] có chứa thống kê Skewness. Theo mặc định, macro %BOOT sẽ phân tích tất cả các biến số trong tập dữ liệu đầu ra, vì vậy, bước tiếp theo xác định macro %ANALYZE và sử dụng tùy chọn DROP= tập dữ liệu để bỏ qua một số biến không quan trọng mà PROC MEANS tự động tạo

Khi bạn xác định macro %ANALYZE, hãy đảm bảo sử dụng tùy chọn NOPRINT hoặc ngăn chặn đầu ra ODS trong quá trình khởi động. Bao gồm macro %BYSTMT, macro này sẽ yêu cầu macro %BOOT sử dụng câu lệnh BY để triển khai phân tích bootstrap một cách hiệu quả. Macro %ANALYZE về cơ bản giống như lệnh gọi PROC MEANS trước đó, ngoại trừ việc bổ sung các tùy chọn NOPRINT, %BYSTMT và DROP=

%macro analyze[data=,out=];
   proc means noprint data=&data;   
      %bystmt;
      var x;
      output out=&out[drop=_type_ _freq_] skew=Skewness;
   run;
%mend;

Mặc dù câu lệnh DROP= không cần thiết nhưng nó làm giảm kích thước của dữ liệu được đọc và ghi trong quá trình phân tích bootstrap. KHÔNG sử dụng câu lệnh KEEP= trong macro %ANALYZE vì macro %BOOT sẽ tạo ra một số biến khác [được gọi là _SAMPLE_ và _OBS_] như một phần của quy trình lấy mẫu lại

Bây giờ bạn có thể sử dụng macro %BOOT để tạo các mẫu bootstrap và tính toán các thống kê mô tả cơ bản về phân phối bootstrap

________số 8

Tôi khuyên bạn nên chỉ định bốn tùy chọn đầu tiên. Ba tùy chọn cuối cùng được hiển thị trong trường hợp bạn muốn ghi đè các giá trị mặc định của chúng. Mặc dù macro %BOOT in một bảng thống kê mô tả, nhưng bảng này có 14 cột và rất rộng. Để rút ngắn đầu ra, tôi đã sử dụng PROC PRINT để hiển thị các kết quả quan trọng nhất. Bảng hiển thị ước tính của thống kê độ lệch trên dữ liệu gốc [VALUE], giá trị trung bình của phân phối bootstrap [BOOTMEAN], ước tính cho lỗi tiêu chuẩn của thống kê [STDERR] và giới hạn tin cậy dưới và trên [ALCL và AUCL . [Các giới hạn là b ± z1-α * stderr, trong đó z1-α là lượng phân vị chuẩn thứ [1 - α] và b = giá trị - sai lệch là ước tính đã hiệu chỉnh sai lệch. ]

Dữ liệu cho phân phối bootstrap nằm trong bộ dữ liệu BootDist, vì vậy bạn có thể sử dụng PROC SGPLOT để hiển thị biểu đồ thống kê bootstrap. Tôi muốn gán một số thống kê mô tả thành các biến vĩ mô để tôi có thể hiển thị chúng trên biểu đồ, như sau

/* OPTIONAL: Store bootstrap statistic in a macro variable */
proc sql noprint;
select value, alcl,     aucl 
 into :Stat, :LowerCL, :UpperCL
 from BootStat;
quit;
 
proc sgplot data=BootDist;      /* 

Chủ Đề