概要

分散分析をSASで実施し、数値を見てみます。
分散分析については以下の記事を参照いただければと思います。
本記事もシンプルな”一元配置“分散分析を行ってみます。

【SAS】実装方法

SASでは、glmプロシージャで分散分析ができます。
(「glm」は「一般化線形モデル」の略称であり、上記プロシージャは名前通り、一般化線形モデルも実行できるものです。)

下記の形で実装することで分散分析が行えます。
[グループ変数]には、因子となるカテゴリ値変数を指定し、[数値]には、分析対象となる数値変数を指定します。
「solution」は、指定することでモデル式のパラメータ推定値が出力されます。(本記事では確認対象外です。)

※モデル式については、下記「何で “regプロシージャと同じ数表” なのか?」を参照ください。

proc glm data=[データセット名];
	class [グループ変数];
	model [数値] = [グループ変数] / solution;
quit;

【SAS】実装

実施概要

下記データを作成し、「グループA , B で数値に有意な違いがあるか?」を調べてみましょう。

データ

下記合計1,000件のデータを作成。

  • グループAの数値 : 正規分布 (平均 -5 , 標準分散 5) の乱数で作成 (500件)
  • グループBの数値 : 正規分布 (平均 5 , 標準分散 5) の乱数で作成 (500件)

想定する分析結果

上記の通り、グループ間で平均値が異なります。(5 と -5)
なので、分析結果としては「F値が大きい」形になり、「グループ間で有意な差がある」という結論になると想定できます。

実装

データ作成

data testdata;
keep category value;
seed = 20;

/* category = A */
num = 500;
_mean = -5;
_std = 5;

do i=1 to num;
	category = 'A';
	value = _mean + _std * rannor(seed);
	output;
end;

/* category = B */
num = 500;
_mean = 5;
_std = 5;

do i=1 to num;
	category = 'B';
	value = _mean + _std * rannor(seed);
	output;
end;
run;

分散分析

proc glm data=testdata;
	class category;
	model value = category / solution;
quit;

実行結果

データ作成

下記のようなデータが作成できます。(5件を表示)

categoryvalue
A-4.0074
A7.6716
A-7.1349
B2.2678
B0.8699

分散分析

複数のレポート(数表やグラフ)が出力されます。
その内、今回の確認ポイントは下図のレポートです。

上図の右2列にF値とP値が載っています。
P値がとても小さいため、想定通り「グループ間で有意な差がある」と結論付けができます。

何で “regプロシージャと同じ数表” なのか?

上表を見て、「分散分析なのに群間分散と群内分散の表記が無い」ことに疑問を感じるかもしれません。
というのも、上表の行[Model]、[Error]ですが、線形回帰分析 (regプロシージャ) では、モデル平方和([Model])、残差平方和([Error])の位置付けで出力されます。
※モデル平方和 : 予測値と予測値平均の差の平方和
※残差平方和 : 目的変数値と予測値の差の平方和

上表は何故regプロシージャと同じ表なのでしょうか?
その疑問の回答は下記の通りです。
glmプロシージャでは、下記のモデル式で線形回帰分析をする形になっています。
その時、「モデル平方和」と「残差平方和」は、 「群間平方和」と「群内平方和」と一致します。
なので、(モデル平方和と残差平方和の比で算出された)F値は、分散分析のF値になるという事です。
故に、上表における行[Model]「群間平方和」の行行[Error]は「群内平方和」の行になります。

【glmプロシージャにおけるモデル式】\\\\
n個の数値データy_{ij}を下記モデルと仮定する。\\\\
iはグループの番号を意味し、\\\\
ε_{ij}は互いに独立な正規分布N(0 , σ^2)に従う。\\\\
y_{ij} = μ + α_{2}x_{2} + ... + α_{k}x_{k} + ε_{ij}\\\\
(※1)i=1,...,k、j=1,...,n_i\\\\
(※2)n=n_1+n_2+...+n_k\\\\
 \\\\
x_tは、グループ番号がtの時に「1」となり、\\\\
それ以外の時は「0」になる2値変数。\\\\
 \\\\
glmプロシージャでは、\\\\
yを目的変数、xを説明変数として\\\\
線形回帰を行ってるイメージになる。\\\\
結果、「グループ番号tの予測値」は、\\\\
「グループtの数値データ(目的変数)の平均」になる。

By clear

データエンジニア・機械学習・分析等を主とし、Webアプリ開発も行っているフリーランスです。