□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ □ □ □ □ □ SAS数量化1類,2類マクロ %su1, %su2 について □ □ □ □ □ □ Version 1.0 鈴木督久 □ □ □ □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 【0】はじめに  %su1 と %su2 は、 SASがサンプル提供している数量化1類と数量化2類 のマクロ %suryo1, %suryo2 を修正した簡易版です.このドキュメントは従来 から %suryo1, %suryo2 を使っているユーザーを想定し,修正内容を中心に説 明します.  修正の直接的な動機は,仕事上の必要があって大規模データセット(例えば 100 カテゴリ,1万オブザベーション)で %suryo2 を実行してみたらエラー で実行できず困ったことにある.メインフレームでさえメモリ不足で終わって しまった.  こんなに多くの変数を数量化2類で分析すること自体にも問題はあるが,そ の時はとにかく実行する必要があった.%suryo2 をよく調べたらあちこちにバ グ的な危険箇所もあった.少し手直しして動かそうとしたが,抜本的な変更を しないと動かないので,いっそのこと全部作り直そうという気になって書き換 えた.小錦を舞の海くらいにスマートしたので,大規模データセットでもパソ コンで動くようになった.プログラムが読みにくかったので見通しを良くした かったのも理由のひとつ.ガチガチのバッチ型マクロだったのを,もう少し柔 軟にもしたかった.  カテゴリ数量の計算方法は基本的に元のままにしてある.すなわち原著者は, このマクロのコードを通じて「数量化1類は主効果の分散分析 ( proc glm ) であり,2類はダミー変数の正準判別分析 ( proc candisc ) である」と主張 していたとみなすことができる.SASに数量化法のプロシジャがないのでは なく,等価の結果を導くプロシジャがあることを示したともいえる.実際,マ クロの本質は数量化法の流儀にあわせて,プロシジャの出力した係数を再基準 化しているに過ぎない.  %suryo2 を書き換えたので,%suryo1 も同様の軽量化修正をしました.原著 者に感謝します. 【1】SAS社提供マクロからの変更点 《1類,2類に共通の変更点》 1. 大規模データセットでも実行可能な設計にした.例えば,マクロ変数 の多用や,膨大な一時データセットの生成をやめた. 2. 度数集計の印刷出力をやめた.理由の第1は,度数集計のために膨大 なメモリを使用しているから.第2は,度数集計は数量化プログラム の仕事ではなく,他のプロシジャの仕事だから.度数集計は度数集計 用のプロシジャ ( freq, means, summary, tabulate, etc. ) で実行 すればいい.これは予備解析の軽視ではなく,むしろ予備解析を,数 量化法の実行前に独立にしっかりやるべきとの考え. 3. data ステップによる計画行列(ダミー変数行列) 作成がメモリを消 費しているようなので proc glmmod を使った. 4. label や format の指定規則が(version5当時の機能制約もあるが) 非常に不自然・不自由だったので,SASの一般的な感覚で指定でき るようにした.すなわち,data ステップで label, format を定義し ておけば,それをそのまま出力に使用するようにした.膨大なマクロ 変数も不要にした. 5. マクロにパラメータを設定して,指定の自由度を増やした.分析のデ ータセット名は自由に決めてよいし,データセットには直接使わない 変数が含まれていてもよい.文字変数か数値変数かという制限もなく した.ただし基準変数は数値変数でなければいけない. 6. 出力は簡単にしたが,結果をSASデータセットに出力することにし たので,これを使って必要な分析に進むことができる.これはSAS のコンセプトと同じである. 7. アイテムレンジのチャートの出力を降順にした. 8. 印刷出力の数値の少数点以下の桁数を指定できるようにした. 9. 一時データセットを削除しないオプションをつけた.デバグ時やマク ロ改善時に便利. 10. マクロ内部で使う title の行番号を変更できるようにした. デフォ ルトは2行目にしてあり1行目をユーザーが使えるようにしてある. 11. ウエイト変数を指定できるようにした. 12. サンプル数量の要約統計量の計算も,駒澤 (1988) に忠実に合わせた ので,標準偏差などの計算には自由度をつかわず,サンプル数を使う ことになっている.自由度が小さい場合,小標本の場合には注意が必 要なので,タイトルの中に vaedef = n と表示するようにした.この 変更には異論も想定されるので,vardef= オプションで指定できるよ うにした. 《1類だけの変更点》 13. 分散分析表では TYPE II の平方和だけを出力することにした. 14. pdiff, tdiff オプションで水準間の差の検定を指定できるようにし た.カテゴリ併合の目安を与える. 《2類だけのの変更点》 15. サンプル数量の基準化方法を,駒澤 (1988) に合わせた.つまり平均 0,全体の分散1. 16. 多変量正規分布を仮定した判別規則の構成と判別領域図の出力をやめ た.ただし,出力データセットを使って見掛けの誤判別率(的中率) の計算は簡単にできる.判別を記述的に使うのでなく,予測的に使う 場合は candisc でなく discrim で書き換えることも可能. discrim は判別規則のほか,正準係数も出力するので数量化2類のカテゴリス コアの計算もできる. 17. candisc の出力を印刷するようにした.相関比(正準相関係数の2乗) や固有値が印刷される. 【2】使用方法 《%su1 の使用法》  %su1() のようにパラメータ無指定で呼び出すと, 以下の指定法メッセージ だけを LOG に出力する. ---------------------------------------------------------------------- USAGE: %su1( data=, outside=, item= [, out=, outitem=, outcate=, pdiff=, modelop=, workds=, maxdec=, title=, noprint=,) weight=, predict=, residual=, l95=, u95= ] ) data = データセット名 outside = 外的基準の変数名 item = アイテムの変数名リスト ----------------------------------------------------------------------  指定できるマクロ・パラメータ一がいろいろあるが,ほとんどはデフォルト のままで実行できる.必ず指定しなければいけない3個のパラメータに関して は簡単な説明が出る.すべてキーワード・パラメータであり定位置パラメータ はない.最も簡単な最低限の指定方法は次のようにする. %su1( data = x, outside = y, item = x1 - x5 )  予測値をデータセットに出力したい場合は,out= オプションを追加すれば いい. %su1( data = x, outside = y, item = x1 - x5, out = xout ) 《%su2 の使用法》  %su2() のようにパラメータ無指定で呼び出すと, 以下の指定法メッセージ だけを LOG に出力する. ---------------------------------------------------------------------- USAGE: %su2( data=, outside=, item= [, dim=, out=, outitem=, outcate=, weight=, workds=, maxdec=, title=, noprint= ] ) data = データセット名 outside = 外的基準の変数名 item = アイテムの変数名リスト ----------------------------------------------------------------------  指定できるマクロ・パラメータ一がいろいろあるが,ほとんどはデフォルト のままで実行できる.必ず指定しなければいけない3個のパラメータに関して は簡単な説明が出る.すべてキーワード・パラメータであり定位置パラメータ はない.最も簡単な最低限の指定方法は次のようにする. %su2( data = x, outside = g, item = x1 - x5 )  もしも外的基準変数 g が3グループあり, 判別軸を2個抽出したければ, dim= オプションを追加すればいい. %su2( data = x, outside = g, item = x1 - x5, dim = 2 ) 【3】マクロ・パラメータの説明 《%su1 のパラメータ》 data = 必須指定.分析対象のデータセット名.命名に制約はない.分析に使 わない変数が含まれていてもよい.外的基準とアイテムの label,お よびカテゴリの format を出力に反映したい場合は,このデータセッ トに定義してある内容が使われる.分析変数(外的基準とアイテム) には欠損値が含まれていてもよいが,分析には使用されない.分析に 使う変数の名前として,col: _: は使えない(コロンは接頭辞という 意味). outside = 必須指定.外的基準の変数名.数値変数でなければいけない.欠損値 は出力データセットでは予測値を計算する. item = 必須指定.アイテムの変数名リスト.SASの文法に従った変数名リ スト形式で指定できる(ただし,コロンによる省略形は使えない). 数値変数でも文字変数でもよい.両方が混在していてもよい. weight = ウエイトを値として持つ変数名.weight ステートメントで使われる. out = _null_ サンプル数量の出力データセット名.デフォルトは _null_ なので作 成されない.このデータセットには入力データセット ( data = ) の すべての変数と,新しく作成した予測値,残差,予測値の 95% の信 頼限界が含まれる.残差や信頼区間のプロットを描くのに利用できる. 高橋他 (1989) に使用例がある.下の例は内容を見せるために最初の 5オブザベーションだけを印刷.以下同様. --------------------------------------------------------------------------- OBS X1 X2 X3 X4 X5 1 3.50 以上 4.160 - 179 3.90 - 99 1.159 以下 3.異常 2 3.50 以上 3.140 - 159 4.100 以上 2.160 - 229 2.やや異常 3 3.50 以上 2.110 - 139 3.90 - 99 2.160 - 229 1.正常 4 3.50 以上 2.110 - 139 2.80 - 89 2.160 - 229 2.やや異常 5 2.40 - 49 4.160 - 179 4.100 以上 1.159 以下 4.非常に異常 OBS X6 X7 X8 YEAR 1 2.1日19本以下 4.毎日飲む 2.普通 6 2 2.1日19本以下 4.毎日飲む 2.普通 10 3 2.1日19本以下 4.毎日飲む 2.普通 5 4 2.1日19本以下 3.時々飲む 2.普通 8 5 4.現在やめている 3.時々飲む 3.太っている 9 OBS PREDICT RESIDUAL LOWER95P UPPER95P 1 7.46880 -1.46880 1.74565 13.1919 2 9.73508 0.26492 4.04047 15.4297 3 6.11191 -1.11191 0.73522 11.4886 4 8.81405 -0.81405 3.29795 14.3301 5 5.14977 3.85023 -0.71836 11.0179 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 outcate = _cate_ カテゴリ数量の出力データセット名.デフォルトでは _cate_ という データセットが作成される.別の名前を指定してもよいが,一時デー タセットと同じ名前を使わないように下線ではじまる名前を避ける. データセットにはカテゴリ数量のほか,最小2乗平均も含む.カテゴ リの総数がオブザベーション数となる.ITEM にはフォーマットが関 連づけられるので,以下の例ではフォーマットが表示されているが, 実際は変数名を値とする文字変数である. CATEGORY は最初の入力デ ータセットに定義されたフォーマットで出力された文字列を値として 持つ文字変数である. --------------------------------------------------------------------------- OBS ITEM CATEGORY FREQ1 LSMEAN SCORE 1 [1]年齢 1.39 以下 20 6.05734 1.05750 2 [1]年齢 2.40 - 49 24 3.93271 -1.06712 3 [1]年齢 3.50 以上 14 5.31848 0.31864 4 [2]最大血圧 2.110 - 139 25 5.88186 0.39250 5 [2]最大血圧 3.140 - 159 17 5.64167 0.15231 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 outitem = _null_ アイテム数量の出力データセット名.デフォルトは _null_ なので作 成されない.outitem=item と指定すると,item という名前でデータ セットが保存される.外的基準も含まれる. --------------------------------------------------------------------------- OBS YEAR X1 X2 X3 X4 1 6 0.31864 -0.32457 -2.25773 -0.54865 2 10 0.31864 0.15231 0.70800 0.46814 3 5 0.31864 0.39250 -2.25773 0.46814 4 8 0.31864 0.39250 1.01678 0.46814 5 9 -1.06712 -0.32457 0.70800 -0.54865 OBS X5 X6 X7 X8 1 1.87615 0.99450 0.75735 0.25656 2 -0.31697 0.99450 0.75735 0.25656 3 -1.21460 0.99450 0.75735 0.25656 4 -0.31697 0.99450 -0.71266 0.25656 5 1.94062 -0.83604 -0.71266 -0.40636 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 数量化1類ではアイテム間の相関や偏相関係数を参考にすることがあ る.このデータセットを使って reg を以下のように実行すれば出力 が得られる.偏相関係数でアイテムの寄与を評価する際の問題点に関 しては,高橋他 (1989) や柳井他 (1990) に指摘と解説がある. title 'アイテム間の相関行列と偏相関係数の2乗' ; proc reg data = item corr ; model year = x1 - x8 / pcorr2 ; run ; pdiff = noprint pdiff を指定すると水準(カテゴリ) 間の差の検定をする. これは lsmeans ステートメントのオプションをマクロパラメータにしたもの なので, 他のオプションも一緒に指定できる. 例えば, pdiff = pdiff tdiff, のように,lsmeans ステートメントのオプションであ れば, いくつでも指定できる.ただし,out= はすでに指定してあり _lsmean_ という一時データセットが作成されるようになっている. デフォルトは noprint であり,なにも印刷しない. 水準間の検定からカテゴリ併合を検討する手順に関しては, 高橋他 (1989) に言及があり,柳井他 (1990) の中で芳賀敏郎氏が reg によ るアイテム選択の方法も含め,詳しい解説をしている. modelop = glm プロシジャの model ステートメントのオプションを指定するこ とができる.%su1 では ss2 だけが指定してあるので,この他のオプ ション( solution など)を指定したければ,いくつでも指定できる. predict = predict residual = residual l95 = lower95p u95 = upper95p この4つのオプションはすべて,glm プロシジャの output ステート メントのオプションで,それぞれ予測値,残差,95% の信頼区間の上 下限の変数名を指定する.out=_null_ が指定されている場合は無視 される. maxdec = 印刷出力時の小数点以下の桁数.proc means の maxdec オプション に相当する. vardef = n 分散計算時の除数.デフォルトはNで,自由度ではないので注意.自 由度にしたい場合は,vardef = df と指定する. title = 2 %su1 が使う title ステートメントの行番号.%su1 はタイトルを1 行だけ使っている.デフォルトは title2 ステートメントとしてあり, ユーザーが title1 を利用できる.ユーザーが2行以上のタイトル行 を使いたい場合は,このオプションで %su1 に使わせるタイトル行を 指定しないと,title2 を %su1 に使われてしまう. noprint = noprint = noprint と指定すると,全ての印刷をしない. workds = delete マクロ内部で作成される一時データセットの後始末を指定する.デフ ォルトでは delete が指定されており,以下の一時データセットはす べて削除される. < 一時データセットの一覧> ---------- ---------------------------- _design_ : デザイン行列 _colpar_ : デザイン行列の変数情報 _fmt_ : アイテムformatの制御データ _freq_ : カテゴリの度数集計ファイル _score_ : カテゴリスコアのファイル _lsmean_ : 最小2乗平均のファイル _wmean_ : 最小2乗平均の重み平均 _range_ : アイテム・レンジの計算結果 ---------- ---------------------------- delete 以外を指定すると %su1 の処理終了後も削除しない. 《%su2 のパラメータ》 data = 必須指定.分析対象のデータセット名.命名に制約はない.分析に使 わない変数が含まれていてもよい.外的基準とアイテムの label,お よびカテゴリの format を出力に反映したい場合は,このデータセッ トに定義してある内容が使われる.分析変数(外的基準とアイテム) には欠損値が含まれていてもよいが,分析には使用されない.分析に 使う変数の名前として,can: dim: col: _: は使えない(コロンは接 頭辞という意味). outside = 必須指定.外的基準の変数名.数値変数でなければいけない.分類変 数なので本来は文字変数でもよいのだが,glmmod でデザイン行列を 作成するため「特性値」には数値変数しか許されず,この制約となっ た.%suryo2 では文字変数でなければいけなかったので,この変更に 注意. item = 必須指定.アイテムの変数名リスト.SASの文法に従った変数名リ スト形式で指定できる(ただし,コロンによる省略形は使えない). 数値変数でも文字変数でもよい.両方が混在していてもよい. weight = ウエイトを値として持つ変数名.weight ステートメントで使われる. dim = 1 抽出する判別軸の数.デフォルトは1個. out = _null_ サンプル数量の出力データセット名.デフォルトは _null_ なので作 成されない.このデータセットには入力データセット ( data = ) の すべての変数と,新しく作成した判別軸が含まれる.判別軸の変数名 は dim1, dim2 のように dim を接頭辞とし, 接尾辞として番号を1 からつけたものになる.元の入力データセットに同名の変数名が存在 すると上書きされる. また外的基準とアイテムのどれかに欠損値が含まれる場合も作成され ないので,必要な場合は事前に欠損値を除去した入力データセットを 準備する.欠損値が除去されたデータセット _design_ には元の変数 はないけれど判別軸(サンプル数量)が含まれるので,out= の代わ りに利用することができる. このデータセットを使えば,判別軸の群別の要約統計量と相関行列は proc corr で簡単に出力できる(out = samp として). proc corr data = samp ; by sick ; var dim: ; run ; また,数量化2類の記述的利用の立場からは,重要な利用方法である 判別座標の個体プロットもできる. proc plot data = samp ; plot dim1 * dim2 = sick / vref = 0 href = 0; run ; 群平均のデータセットを作れば,各群をポジショニングする知覚マッ プに利用することができる.群平均のデータは proc summary で簡単 に作成できるので,そのデータを上記のようにプロットすればいい. proc summary data = samp nway ; class sick ; var dim: ; output out = dimmean mean = ; run ; outcate = _cate_ カテゴリ数量の出力データセット名.デフォルトでは _cate_ という データセットが作成される.別の名前を指定してもよいが,一時デー タセットと同じ名前を使わないように下線ではじまる名前を避ける. データセットにはカテゴリ数量のほか以下の変数を含む.カテゴリの 総数がオブザベーション数となる(下の例は内容を見せるために最初 の5オブザベーションだけを印刷.以下同様).ITEM にはフォーマ ットが関連づけられるので,以下の例ではフォーマットが表示されて いるが, 実際は変数名を値とする文字変数である.CATEGORY は最初 の入力データセットに定義されたフォーマットで出力された文字列を 値として持つ文字変数である. --------------------------------------------------------------------------- OBS _TYPE_ _NAME_ ITEM CATEGORY FREQ1 DIM1 DIM2 DIM3 1 SCORE COL1 1.年 齢 (1) 49 - 54 33 -0.04878 0.42909 0.41088 2 SCORE COL2 1.年 齢 (2) 55 - 59 19 0.08473 -0.74526 -0.71363 3 SCORE COL3 2.眼底所見 (1) 正常 37 0.16872 -0.14780 0.30044 4 SCORE COL4 2.眼底所見 (2) 異常 15 -0.41617 0.36458 -0.74110 5 SCORE COL5 3.心電図所見 (1) 正常 33 -0.27613 0.06299 -0.07169 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 outitem = _null_ アイテム数量の出力データセット名.デフォルトは _null_ なので作 成されない.outitem=item と指定すると,item という名前でデータ セットが保存される.外的基準と判別軸の群平均の変数 GRPMEAN も 含まれる. --------------------------------------------------------------------------- OBS SICK DIM X1 〜 X7 GRPMEAN 1 1.脳出血 1 -0.048783 〜 -0.88815 -0.32709 2 1.脳出血 1 0.084729 〜 0.13361 -0.32709 3 1.脳出血 1 0.084729 〜 0.13361 -0.32709 4 1.脳出血 1 0.084729 〜 0.13361 -0.32709 5 1.脳出血 1 -0.048783 〜 0.13361 -0.32709 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 複数の判別軸を抽出した場合のオブザベーション数は,元の入力デー タセットのオブザベーション数から,軸の数だけ倍増する.判別軸の 区分は DIM という文字変数によって軸番号を識別できる. 数量化2 類ではアイテム数量間の相関行列や,偏相関係数を参考にすることが ある. それぞれこのデータセットを使って reg を以下のように実行 すれば出力が得られる.偏相関係数でアイテムの寄与を評価する際の 問題点に関しては,高橋他 (1989) や柳井他 (1990) に指摘と解説が ある. title 'アイテ間の相関行列との偏相関係数の2乗' ; proc reg data = item corr ; model grpmean = x1 - x7 / pcorr2 ; by dim ; run ; maxdec = 印刷出力時の小数点以下の桁数.proc means の maxdec オプション に相当する. vardef = n 分散計算時の除数.デフォルトはNで,自由度ではないので注意.自 由度にしたい場合は,vardef = df と指定する. title = 2 %su2 が使う title ステートメントの行番号.%su2 はタイトルを1 行だけ使っている.デフォルトは title2 ステートメントとしてあり, ユーザーが title1 を利用できる.ユーザーが2行以上のタイトル行 を使いたい場合は,このオプションで %su2 に使わせるタイトル行を 指定しないと,title2 を %su2 に使われてしまう. noprint = noprint = noprint と指定すると,全ての印刷をしない. workds = delete マクロ内部で作成される一時データセットの後始末を指定する.デフ ォルトでは delete が指定されており,以下の一時データセットはす べて削除される. < 一時データセットの一覧> ---------- ---------------------------- _design_ : デザイン行列 _colpar_ : デザイン行列の変数情報 _fmt_ : アイテムformatの制御データ _stat_ : 正準判別分析の各種統計量 _out_ : 正準変量の出力ファイル _score_ : 正準係数だけのファイル _std_ : 正準係数の標準偏差 _freq_ : カテゴリの度数集計ファイル _wmean_ : 正準係数の重み平均ファイル _item_ : アイテム数量作成用の係数 _coeff_ : 線形結合用のカテゴリ数量 _mean_ : サンプル数量の群平均値 _gmean_ : サンプル数量の群平均値 _range_ : アイテム・レンジの計算結果 ---------- ---------------------------- delete 以外を指定すると %su2 の処理終了後も削除しない. 【4】一時データセットの説明 《%su1 の一時データセット》 _design_ 元の入力データセットから作ったデザイン行列(ダミー変数行列). COL: がダミー変数で,カテゴリの数だけ変数ができる. 外的基準も 含まれる. --------------------------------------------------------------------------- C C C C C C C C C C C C C C C C C C C C C Y C C C C C C C C C O O O O O O O O O O O O O O O O O O O O O O E O O O O O O O O O L L L L L L L L L L L L L L L L L L L L L B A L L L L L L L L L 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 S R 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 6 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 2 10 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 3 5 0 0 1 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 4 8 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 5 9 0 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _colpar_ デザイン行列の変数情報. outcate= データセットから ITEM と CATEGORY の2変数だけ取り出した結果と等しい. --------------------------------------------------------------------------- OBS ITEM CATEGORY 1 X1 1.39 以下 2 X1 2.40 - 49 3 X1 3.50 以上 4 X2 2.110 - 139 5 X2 3.140 - 159 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _fmt_ アイテムの label を format として利用するための制御データセッ ト. _score_ アイテム・カテゴリ(ダミー変数)に対する係数. --------------------------------------------------------------------------- T Y C C C C C C C O P O O O O O O O B E L L L L L L L S _ 1 2 3 4 5 6 7 1 SCORE 1.05750 -1.06712 0.31864 . . . . 2 SCORE . . . 0.39250 0.15231 -0.32457 -1.76633 3 SCORE . . . . . . . 4 SCORE . . . . . . . 5 SCORE . . . . . . . _ C C C C C C C C C C C C C C C N O O O O O O O O O O O O O O O A O L L L L L L L L L L L L L L L M B 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 E S 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 _ 1 . . . . . . . . . . . . . . . [1]年齢 2 . . . . . . . . . . . . . . . [2]最大血圧 3 . . . . . . . . . . . . . . . [3]最小血圧 4 . . . . . . . . . . . . . . . [4]コレステ 5 -0.31697 1.87615 1.94062 . . . . . . . . . . . . [5]心電図 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _lsmean_ 最小2乗平均を含む lsmean ステートメントの out= で出力したデー タセット. --------------------------------------------------------------------------- OBS _NAME_ X1 X2 X3 X4 X5 X6 X7 X8 LSMEAN STDERR 1 YEAR 1.39 以下 . . . . . . . 6.05734 1.09468 2 YEAR 2.40 - 49 . . . . . . . 3.93271 1.14804 3 YEAR 3.50 以上 . . . . . . . 5.31848 1.12529 4 YEAR . 2.110 - 139 . . . . . . 5.88186 1.00958 5 YEAR . 3.140 - 159 . . . . . . 5.64167 1.09832 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _freq_ カテゴリの度数集計ファイル --------------------------------------------------------------------------- OBS FREQ1 1 20 2 24 3 14 4 25 5 17 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _wmean_ 最小2乗平均の加重平均 --------------------------------------------------------------------------- OBS ITEM WMEAN 1 X1 4.99984 2 X2 5.48936 3 X3 5.22840 4 X4 6.06993 5 X5 4.53154 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _range_ アイテム・レンジの計算結果.noprint=noprint を指定した場合は作 成されない. --------------------------------------------------------------------------- OBS ITEM RANGE 1 [1]年齢 2.12462 2 [2]最大血圧 2.15883 3 [3]最小血圧 3.27452 4 [4]コレステ 3.28889 5 [5]心電図 3.15523 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 《%su2 の一時データセット》 _design_ 元の入力データセットから作ったデザイン行列(ダミー変数行列). COL: がダミー変数で,カテゴリの数だけ変数ができる. 外的基準と 判別軸も含まれるので, out= で作成されるデータセットと同じ形だ が,_design_ には元のデータセットにあった変数は (外的基準以外 には)含まない.また欠損値も除外されている. --------------------------------------------------------------------------- C C C C C C C C C S C C C C C C C C C O O O O O O O O O D D D O I O O O O O O O O O L L L L L L L L L I I I B C L L L L L L L L L 1 1 1 1 1 1 1 1 1 M M M S K 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 1 2 3 1 1.脳出血 1 0 1 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 -1.07199 0.13828 0.80711 2 1.脳出血 0 1 0 1 1 0 0 0 1 0 1 0 1 0 0 0 1 0 -0.21294 0.08865 -2.93918 3 1.脳出血 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.08328 -0.97544 -1.06836 4 1.脳出血 0 1 0 1 0 1 0 0 1 0 0 1 0 0 1 0 1 0 -1.18745 -0.36002 -1.57055 5 1.脳出血 1 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 1 0 0.41085 -0.55749 0.40289 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _colpar_ デザイン行列の変数情報. outcate= データセットから ITEM と CATEGORY の2変数だけ取り出した結果と等しい. --------------------------------------------------------------------------- OBS ITEM CATEGORY 1 X1 (1) 49 - 54 2 X1 (2) 55 - 59 3 X2 (1) 正常 4 X2 (2) 異常 5 X3 (1) 正常 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _fmt_ アイテムの label を format として利用するための制御データセッ ト. _stat_ デザイン行列 ( _design_ ) に対して正準判別分析 ( candisc ) を 実行した結果, outstat= に出力される各種統計量を含むデータセッ ト.このデータセットは巨大になるので注意.SAS/STAT のマニュア ルを参照されたい. _out_ デザイン行列 ( _design_ ) に対して正準判別分析 ( candisc ) を 実行した結果, out= に出力される正準変量を含むデータセット. SAS/STAT のマニュアルを参照されたい. _gmean_ 判別軸(サンプル数量)の群平均値. --------------------------------------------------------------------------- OBS SICK DIM1 DIM2 DIM3 1 1.脳出血 -0.32709 -0.65487 -0.02143 2 2.脳梗塞 -0.56831 0.44936 -0.15595 3 3.心筋梗塞 0.23537 0.17127 0.46413 4 4.狭心症 0.93449 0.03387 -0.26640 --------------------------------------------------------------------------- 判別予測に関しては,proc discrim を活用すべきかも知れないが, 数量化2類の判別軸を使って見掛けの誤判別率(的中率)などは計算 できる. 重心からの最短ユークリド距離で分類する場合, proc fastclus を使う簡単な方法がある(鈴木他 (1990)). data seed ; set _gmean_ ; cluster = _n_ ; run; proc fastclus data = _design_( keep = dim1 - dim3 sick ) out = clus seed = seed maxc = 4 replace = none maxiter = 0 ; var dim1 - dim3 ; run ; title '見掛けの誤判別率' ; proc freq data=clus ; tables sick * cluster / nocol nopercent ; run; Gnanadesikan [1977] と Johnson & Wichern [1988] には正準変量を 使った判別方法について,比較的多くの説明がある.Hawkins [1982] は2値変数の判別分析なども含めた豊富な話題を提供している.圓川 (1988) にはSAS社提供の %suryo2 による事後判別の解説もある. 正準変量による見掛けの的中率については,高木他 (1995) の中で前 田忠彦氏がたいへん分かりやすく説明している.鈴木他 (1990) には SASによる正準変量の応用事例がある. _mean_ 判別軸のサンプル数量の群平均値.抽出した判別軸の数に対応したオ ブザベーションを含む.判別軸の番号は DIM(文字変数)で識別でき る.「群の数×次元の数」がオブザベーション数. --------------------------------------------------------------------------- OBS SICK DIM GRPMEAN 1 1.脳出血 1 -0.32709 2 2.脳梗塞 1 -0.56831 3 3.心筋梗塞 1 0.23537 4 4.狭心症 1 0.93449 5 1.脳出血 2 -0.65487 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _std_ 正準係数の標準偏差. --------------------------------------------------------------------------- OBS _TYPE_ _FREQ_ STD1 STD2 STD3 1 0 52 1.16466 1.06146 0.99727 --------------------------------------------------------------------------- _score_ アイテム・カテゴリ(ダミー変数)に対する正準係数.ランク落ちの 最後のカテゴリが0になっている.度数も含む. --------------------------------------------------------------------------- OBS ITEM CATEGORY CAN1 CAN2 CAN3 _NAME_ FREQ1 1 X1 (1) 49 - 54 -0.13351 1.17435 1.12450 COL1 33 2 X1 (2) 55 - 59 0.00000 0.00000 0.00000 COL2 19 3 X2 (1) 正常 0.58489 -0.51238 1.04154 COL3 37 4 X2 (2) 異常 0.00000 0.00000 0.00000 COL4 15 5 X3 (1) 正常 -0.75571 0.17240 -0.19621 COL5 33 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _item_ アイテム数量を作るための構造を持たせたスコア・データセット. --------------------------------------------------------------------------- OBS DIM _TYPE_ _NAME_ COL1 COL2 〜 COL18 1 1 SCORE 1.年 齢 -0.048783 0.084729 . 2 1 SCORE 2.眼底所見 . . . 3 1 SCORE 3.心電図所見 . . . 4 1 SCORE 4.最大血圧 . . . 5 1 SCORE 5.最小血圧 . . . 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _freq_ カテゴリの度数集計ファイル --------------------------------------------------------------------------- OBS _NAME_ FREQ1 1 COL1 33 2 COL2 19 3 COL3 37 4 COL4 15 5 COL5 33 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _wmean_ 正準係数の加重平均 --------------------------------------------------------------------------- OBS ITEM _TYPE_ _FREQ_ WMEAN1 WMEAN2 WMEAN3 1 X1 0 2 -0.08473 0.74526 0.71363 2 X2 0 2 0.41617 -0.36458 0.74110 3 X3 0 2 -0.47959 0.10940 -0.12452 4 X4 0 3 0.57061 0.01206 0.51251 5 X5 0 3 0.00169 0.77051 -0.69923 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _range_ アイテム・レンジの計算結果.noprint=noprint を指定した場合は作 成されない. --------------------------------------------------------------------------- OBS ITEM RANGE1 RANGE2 RANGE3 1 1.年 齢 0.13351 1.17435 1.12450 2 2.眼底所見 0.58489 0.51238 1.04154 3 3.心電図所見 0.75571 0.17240 0.19621 4 4.最大血圧 0.80778 0.17719 1.15563 5 5.最小血圧 0.54769 1.72090 1.39087 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 _coeff_ カテゴリ数量を線形結合して判別軸を生成するスコア・データセット. 判別軸と正準変量は同値なので,%suryo2 では正準変量をそのまま使 っていたが,数量化法の流儀にあわせて基準化された判別軸に変更し た. --------------------------------------------------------------------------- OBS _TYPE_ _NAME_ COL1 COL2 COL3 〜 COL18 1 SCORE DIM1 -0.04878 0.08473 0.16872 〜 0.15067 2 SCORE DIM2 0.42909 -0.74526 -0.14780 〜 -0.33511 3 SCORE DIM3 0.41088 -0.71363 0.30044 〜 0.40965 --------------------------------------------------------------------------- 【5】サンプルデータ(駒澤 (1988) より)による実行例 《%su1 の実行例》 PROC FORMAT; VALUE x1f 1 = '1.39 以下' 2 = '2.40 - 49' 3 = '3.50 以上' ; value x2f 1 = '1.109 以下' 2 = '2.110 - 139' 3 = '3.140 - 159' 4 = '4.160 - 179' 5 = '5.180 以上' ; value x3f 1 = '1.79 以下' 2 = '2.80 - 89' 3 = '3.90 - 99' 4 = '4.100 以上' ; value x4f 1 = '1.159 以下' 2 = '2.160 - 229' 3 = '3.230以下' ; value x5f 1 = '1.正常' 2 = '2.やや異常' 3 = '3.異常' 4 = '4.非常に異常' ; value x6f 1 = '1.前から吸わない' 2 = '2.1日19本以下' 3 = '3.1日20本以上' 4 = '4.現在やめている' ; value x7f 1 = '1.前から飲まない' 2 = '2.現在やめている' 3 = '3.時々飲む' 4 = '4.毎日飲む' ; value x8f 1 = '1.痩せている' 2 = '2.普通' 3 = '3.太っている' 4 = '4.肥満' ; run ; DATA SU1; INPUT ( x1 - x8 ) ( 1.) +1 YEAR 2. ; label x1 = '[1]年齢' x2 = '[2]最大血圧' x3 = '[3]最小血圧' x4 = '[4]コレステ' x5 = '[5]心電図' x6 = '[6]タバコ' x7 = '[7]酒' x8 = '[8]体格' year = '経過年数' ; format x1 x1f. x2 x2f. x3 x3f. x4 x4f. x5 x5f. x6 x6f. x7 x7f. x8 x8f. ; DATALINES; 〜〜サンプルライブラリのデータと同じなので省略〜〜 ; %su1( data = su1, outside = year, item = x1 - x8 ) 《%su2 の場合》 proc format ; value sickf 1 = '1.脳出血' 2 = '2.脳梗塞' 3 = '3.心筋梗塞' 4 = '4.狭心症' ; value af 1 = '(1) 49 - 54' 2 = '(2) 55 - 59' ; value bf 1 = '(1) 正常' 2 = '(2) 異常' ; value cf 1 = '(1) 正常' 2 = '(2) 異常' ; value df 1 = '(1) 139 以下' 2 = '(2) 140 - 170' 3 = '(3) 171 以上' ; value ef 1 = '(1) 84 以下' 2 = '(2) 85 - 95' 3 = '(3) 96 以上' ; value ff 1 = '(1) 7.4 以下' 2 = '(2) 7.5 - 8.5' 3 = '(3) 8.6 以上' ; value gf 1 = '(1) 179 以下' 2 = '(2) 180 - 210' 3 = '(3) 211 以上' ; run ; DATA su2 ; label sick = '病名' x1 = '1.年 齢' x2 = '2.眼底所見' x3 = '3.心電図所見' x4 = '4.最大血圧' x5 = '5.最小血圧' x6 = '6.大動脈速度' x7 = '7.コレステ' ; INPUT ( x1 - x7 sick ) ( 1. ) ; format sick sickf. x1 af. x2 bf. x3 cf. x4 df. x5 ef. x6 ff. x7 gf. ; DATALINES; 〜〜サンプルライブラリと同じデータなので省略する〜〜 ; run ; %su2( data = su2, outside = sick, item = x1 - x7, dim = 3 ) 【6】他の数量化ソフトウエアとの比較 《%su1 の場合》  %su1 と他の数量化ソフトウエアとを比較してみた. 生の数値例と出力結果 の掲載されている参考書のうち,代表的と思われる参考書(ソフト)に関して, 最初のアイテムのカテゴリスコアの比較を示す.SPSSが全然違うほかは, 高木 (1994) で桁精度に違いがある程度だった. [1]駒澤(1988) quant2 %su1 ------------------------------------ 1-1 1.05750 1.05750 1-2 -1.06712 -1.06712 1-3 0.31864 0.31864 ◎まったく同じ [2]林 (1993) ? %su1 ------------------------------------ 1-1 ー1941.2 -1941.16 1-2 392.0 392.02 1-3 2090.4 2090.40 ◎まったく同じ. [3]田中他(1984) Seto/B %su1 ------------------------------------ 1-1 -3.113 -3.11346 1-2 1.603 1.60279 1-3 0.505 0.50494 1-4 1.624 1.62414 ◎まったく同じ. [4]高木(1994) HALBAU-4 %su1 ------------------------------------ 1-1 8.204779D+00 8.17865 1-2 -1.510126D+00 -1.49755 1-3 -6.385470D+00 -6.36846 ◎少数点以下第2位でまるめると同じ. [5]菅 (1993) マルチ統計 %su1 ------------------------------------ 1-1 -7.774 -7.7744 1-2 7.384 7.3845 1-3 -2.442 -2.4421 1-4 2.126 2.1255 1-5 4.071 4.0711 1-6 1.055 1.0550 1-7 -4.420 -4.4196 ◎まったく同じ. [6]垂水他(1990) HAYASI1 %su1 ------------------------------------ 1-1 -1.45483303 -3.11346 1-2 0.43142676 1.60279 1-3 0.59909338 0.50494 1-4 0.66797334 1.62414 ◎全然違う!.重相関係数は同じ. 《%su2 の場合》  %su2 と他の数量化ソフトウエアとを比較してみた. 生の数値例と出力結果 の掲載されている参考書を確認すると,相関比が違うものはないので本質的に 同値であるが,カテゴリスコアはまちまち.比較したものの中から代表的と思 われる参考書(ソフト)に関して,最初のアイテムのカテゴリスコアを示す. [1]駒澤(1988) quant2 %su2 ------------------------------------ 1-1 -0.048717 -0.04878 1-2 0.084614 0.08473 ◎少数点以下第3位まで同じ. [2]林 (1993) ? %su2 ------------------------------------ 1-1 0.52 0.52011 1-2 0.30 0.29692 1-3 -1.20 -1.20321 ◎少数点以下第2位でまるめて同じ.ソフトウエアによる出力は掲載されてい ない.現実にはこれくらいのまるめで十分実用的だと思われる. [3]田中他(1984) Seto/B %su2 ------------------------------------ 1-1 -1.45483 1.45483 1-2 0.43142 -0.43142 1-3 0.59910 -0.59910 1-4 0.66797 -0.66797 ◎完全に一致している(符号はどちらでもよい).いまのところこれが %su2 の結果と完全一致した唯一のソフトウエア. [4]高木(1994) HALBAU-4 %su2 ------------------------------------ 1-1 -0.498972 0.50533 1-2 0.478111 -0.48420 1-3 0.359884 -0.36447 ◎少数点以下第2位でまるめると同じ.正準相関係数はまったく同じ. [5]菅 (1993) マルチ統計 %su2 ------------------------------------ 1-1 -0.4397 1.19613 1-2 -0.1605 0.43649 1-3 -0.0325 0.08852 1-4 0.2407 -0.65487 1-5 0.3945 -1.07300 ◎基準化の方法が違う.相関比や偏相関係数は同じで本質的には同値のようだ. ただし「マルチ統計」は相関比の平方根を「相関比」と題して出力している ので注意.通常の感覚で出力を解釈すると判別力を過大評価してしまう危険 がある. [6]垂水他(1990) HAYSI2 %su2 ------------------------------------ 1-1 -3.11345673 1.45483 1-2 1.60279846 -0.43142 1-3 0.50494576 -0.59910 1-4 1.62414551 -0.66797 ◎全然違う!.相関比は同じ. 【7】参考文献 圓川隆夫 (1988):『多変量のデータ解析』朝倉書店 Gnanadesikan, R. [1977] Methods for Statistical Data Analysis of Multivariate Observations. John Wiley & Sons.(丘本正・磯貝恭史訳 (1979)『統計的多変量データ解析』日本科学技術連盟. Hawkins, D.M. [1982] Topics in Applied Multivariate Analysis. Cambridge University Press.(医学統計研究会訳 (1988)『多変量解析の理論 と実際』MPC. 林知己夫 (1993):『数量化−理論と方法−』朝倉書店. 岩坪秀一 (1987):『数量化法の基礎』朝倉書店. Johnson, R.A. & Wichern, D.W.[1988].Applied Multivariate Statistical Analysis, 2/E. Prentice-Hall.(西田俊夫訳 (1992)『多変量解析の徹底研究』 現代数学社. 菅民郎 (1993):『多変量解析の実践(下)』現代数学社 駒澤勉・橋口捷久 (1988):『パソコン数量化分析』朝倉書店. 駒澤勉 (1982):『数量化理論とデータ処理』朝倉書店. 鈴木督久・池田達哉 (1990): 「正準変量による企業イメージの記述」 SAS Users Group International-Japan 9th Annual Conference. 高木廣文 (1994):『HALBAU−4 マニュアル』現代数学社. 高木廣文・柳井晴夫 (1995):『HALBAUによる多変量解析の実践』 現代 数学社. 高橋行雄・大橋靖雄・芳賀敏郎 (1989): 『SASによる実験データの解析』 東京大学出版会. 田中豊・垂水共之・脇本和昌 (1984): 『パソコン統計解析ハンドブック II 多変量解析編』共立出版 垂水共之・西脇二一・石田千代子・小野寺孝義 (1990):『新版 SPSSx II 解析編 1』東洋経済新報社. 柳井晴夫・岩坪秀一・石塚智一編 (1990): 『人間行動の計量学−多変量デー タ解析の理論と応用』東京大学出版会. 【8】変更履歴 %su1 < Version 1.0 > 1996/02/01 1. SASフォーラムに初公開. < Version 1.1 > 1996/02/13 1. maxdec= パラメータを print プロシジャに対して無効化. < Version 1.2 > 1996/03/14 1. アイテム変数名を昇順で指定しないとエラーになるバグ を修正. %su2 < Version 1.0 > 1996/02/01 1. SASフォーラムに初公開.