BookmarkSubscribeRSS Feed

ブートストラップ、クロスバリデーション、ジャックナイフ法について

Started ‎02-19-2019 by
Modified ‎09-10-2018 by
Views 3,444

質問

SASにおいて、ブートストラップ法やクロスバリデーション法(ジャックナイフ法)を実行することはできますか。

 

回答

一つの方法として、以下のリンクに記載のサンプルマクロ%JACKおよび%BOOTが用意されています。
[Downloads]
タブにマクロを定義するためのSASプログラムがあります。

Sample 24982: Jackknife and Bootstrap Analyses

http://support.sas.com/kb/24/982.html


上記のサンプルマクロでは、任意のプロシジャによって出力された推定値をもとにブートストラップ法や

ジャックナイフ法に基づいた信頼区間をいくつかの方法(:パーセンタイル法)によって求めることができます。

本マクロでは単純無作為抽出しか実行できません。

なお、いくつかのプロシジャではクロスバリデーション法やブートストラップ法を用いています。

一例を以下に記載します。

 

DISCRIMプロシジャ

CROSSVALIDATEオプションではleave-one-outクロスバリデーションを用いて誤判別率を推定しています。

 

LOGISTICプロシジャ

MODELステートメントのCTABLEオプションでは、誤判別率を求める時にクロスバリデーションを

近似した方法を採用しています。

 

PLSプロシジャ

CV= オプションでは、成分の数を決める際にクロスバリデーション法を実行することができます。

 

MULTTESTプロシジャ

Cochran-Armitage検定やFisherの正確検定などのP値を調整するために、ブートストラップ法を用いることができます。

 

詳細は以下のリンクのSAS Noteをご参照ください。

 

Usage Note 22220: Procedures with bootstrapping, cross validation, or jackknifing capabilities

http://support.sas.com/kb/22/220.html

 

またSAS/STATSURVEYSELECTプロシジャを用いることでも、ブートストラップ法を実装することができます。

以下に簡単なサンプルを記載いたします。ブートストラップ法は大きく4つのステップから構成されています。

 

サンプルプログラム(Compute a bootstrap confidence interval in SAS):

data sample(keep=x);
   set Sashelp.Iris(where=(Species="Virginica") rename=(SepalWidth=x));
run;
 
/* 1. オリジナルデータの統計値を計算する: 歪度 = 0.366 */
proc means data=sample nolabels Skew;  var x;  run;

%let NumSamples = 5000;       /* ブートストラップのリサンプル数 */

/* 2. ブートストラップサンプルをたくさん生成する */
proc surveyselect data=sample NOPRINT seed=1
     out=BootSSFreq(rename=(Replicate=SampleID))
     method=urs              /*リサンプル */
     samprate=1              /* 各ブートストラップサンプルにはN個の観測値がある */
     /* 頻度を抑えるためのオプション */
     reps=&NumSamples;       /* NumSamplesブートストラップリサンプルを生成する */
run;

/* 3. 各ブートストラップサンプルの統計量を計算する */
proc means data=BootSSFreq noprint;
   by SampleID;
   freq NumberHits;
   var x;
   output out=OutStats skew=Skewness;  /* 標本分布に近似 */
run;

/* ブートストラップ分布を視覚化する */
title "Bootstrap Distribution";
%let Est = 0.366;
proc sgplot data=OutStats;
   label Skewness= ;
   histogram Skewness;
   /* オプション: 観測値で基準線と95%信頼区間を描く */
   refline &Est / axis=x lineattrs=(color=red) 
                  name="Est" legendlabel="Observed Statistic = &Est";
   refline -0.44737 0.96934  / axis=x lineattrs=(color=blue) 
                  name="CI" legendlabel="95% CI";
   keylegend "Est" "CI";
run;

proc means data=OutStats nolabels N StdDev;
   var Skewness;
run;

/* 4. 統計的推論を行うために近似した標本分布を使う */
proc univariate data=OutStats noprint;
   var Skewness;
   output out=Pctl pctlpre =CI95_
          pctlpts =2.5  97.5       /* 95%ブートストラップ信頼区間を計算する */
          pctlname=Lower Upper;
run;
 
proc print data=Pctl noobs; run;

実行結果:

分析変数 : x
歪度
0.3659491

 

SGPlot.png

 

分析変数 : Skewness
N 標準偏差
5000 0.3624289
 
CI95_Lower CI95_Upper
-0.44737 0.96934
Version history
Last update:
‎09-10-2018 02:08 AM
Updated by:
Contributors

SAS INNOVATE 2024

Innovate_SAS_Blue.png

Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.

If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website. 

Register now!

Article Labels
Article Tags

SAS Support Communitiesのユーザーガイドライン


コミュニティの基本的なガイドラインについてご説明します。まずは、こちらをご参照ください。

詳細を読む

 

SAS Support CommunitiesのFAQ


SAS Support CommunitiesのFAQはヘルプに記載されています。参照方法は、こちらからご確認ください。

詳細を読む

 

質問や意見の投稿と返信方法について


Japan SAS Discussionページに質問や意見(メッセージ)を投稿/返信する方法を簡単にご説明します。

詳細を読む