授業内容
16.1 SAS/IMLについて
授業ではSAS/IMLという、ソフトウエアを使って統計や計算の処理を行っていきます。SASという統計パッケージの中のIMLという一つの機能を使っていくわけです。SAS/IMLの特徴として、大きく2つを挙げることが出来ます。
それが、「行列」と「モジュール(またはサブルーチン)」です。
まず、行列について。
IMLというのは、Interactive Matrix
Language:対話型行列演算言語の略語です。つまり、「行列の形で問題をコンピュータに問い合わせて、答えを返してもらう言語」とでも理解してもらえばいいと思います。
いろんな計算問題を解いていく際に、連立方程式で問題が与えられたならば、方程式の形で解いていくのではなく、行列の形式で解いていくのが実は簡単なのです。そして、それを可能にしているのがSAS/IMLの特徴なのです。
次に、モジュールまたはサブルーチンについて。
SAS/IMLの特徴は、自分で定義したサブルーチンや関数を、どこからでも呼び出せる点にあります。その、どこからでも呼び出せるような形にしたサブルーチン・関数のことをSAS/IMLでは、モジュールと呼んでいます。くりかえし同じIMLプログラムを使うような場合、モジュールにしておいて方が便利です。
16.2 SAS/IML環境の起動・終了
SASの上で、PROC
IMLステートメントを実行することで、IMLが使える状態になります。また、QUITステートメントを実行することで、IMLを終了させます。
【新規プログラム先頭】
proc iml;
/***************************/
/******プログラム本体******/
/***************************/
quit;
【新規プログラム末尾】
<当たり前ですが、これを実行しても何も起きません>
16.3 行列の演算
「行列」、または「線形代数」などという言葉を聞くと寒気がしてしまう人がほとんどだと思いますが、基本的なことさえ分かっておけば十分ですので、言葉の響きにビビってしまう必要はありません。数字の世界を簡単に考えるための道具だ、くらいに思っていてください。
例えば次のような方程式を見てみましょう。
例1:
これくらいなら、まだ簡単です。(1)と(2)を等号でむすんでxについて解いて、代入しなおしてyを求める。すると、
という解が得られます。これが次のような形をしていても、要点は同じで全て上と同じ結果が得られます。
例2:
例3:
これが、n個の変数になっても話は同じです。
例4:
ある一つの変数について解き、消去していくという作業を繰り返して、解に辿り着きます。
この連立方程式を行列の形式で書くと次のように書けます。
ただし、、
、
すると、イメージの上では解のセットXを求めるためには、を計算すればいいと言うことになります。
ただし、実際にはこのようには計算できません。
まず、行列についてちょっと知っておきましょう。
以下のように、文字または数字を、長方形(正方形を含む)に並べたものを、行列といいます。
このとき、a、b、cのように横への並びを「行(ROW)」と呼び、a、dのような縦の並びを「列(COLOMN)」と呼びます。そして、その並び方をタイプ(型)と呼び、上の形で行列が表されるとき、2×3行列とか、2行3列の行列と呼びます。このことは意外に重要なことですので覚えておきましょう。
行列のスカラー倍
僕たちが普段使っている数字は、方向を持たないただの大きさです。その向きを持たない数字のことをスカラーと数学の世界では呼びます。ある行列をスカラー倍するとき、その行列の全ての要素を同時にスカラー倍することを表します。
行列の足し算・引き算
行列同士を足したり、引いたりすることも可能です。ただしその場合、行列のタイプが一致していることが条件です。そして、その位置が一致する場所で、足したり引いたりを行います。
16.4 プログラムの実際
実際のプログラムで実行してみましょう。※カット&ペーストでは見えないタグが残って動かない可能性があるので要注意
行列の表示
【新規プログラム先頭】
proc iml;*IMLのスタートを宣言;
reset print;*これを入れることでアウトプットに経過が現れる;
A = {1 2 3,4 5 6};
*A = {1 2 3,
4 5 6}でも可;
quit;*ここまで書いたらサブミット;
【新規プログラム末尾】
行列のスカラー倍
【新規プログラム1先頭】
proc iml;
reset print;
A = {1 2 3,4 5 6};
B = 2 * A;
quit;
【新規プログラム1末尾】
行列の足し算・引き算
【新規プログラム2先頭】
proc iml;
reset print;
A = {1 2 3,4 5 6};
C = {7 8 9,0 1 2};
D = A + C;
quit;
【新規プログラム2末尾】