2006 Information Literacy Seminar.

第 9 回| 11 月 21 日

今回は、最初の「マルチアンサーの集計」、「変数変換」以外は自由課題です。基本的なことが出来てさらに学びたい人のために用意しました。2年次以上の演習などでも役に立つと思います。 アンケート票は完成したでしょうか。実施する前にもう一度基本的な注意事項をチェックしてください。

アンケート集計のためのSAS

マルチアンサーの集計

 

① house.csv を data1 という名でインポートしてください

② アンケート調査の実際の調査票をみてみましょう 

http://www.ne.senshu-u.ac.jp/~ehara/inflit05_2/anq2.htm

問6はいくつでも をつけてよいことになっています。このアンケートでは を一番たくさんつけた人でも8個でしたので、その回答が q61-q68 に入っています。同じ「4」や「3」という選択肢でも、人によっては q61 に入っていたり q62 にはいっていたり q63 にはいっていたりします。

③  そこで、q61-q68の中身を同じ変数名で書き出して見ます。性年齢別のクロス集計も行いますから、一人につき全ての変数を8回書き出してしまうことになります。 (再利用するデータ (data1) を set ステートメントで指定します。それを加工して新しく作るデータ (data2) の名前を data ステップで指定します。SASにはdata~;~;run;というデータを作成するデータステップとproc~;~;run;という処理をするプロシジャーの二つのプログラムがあります。前回の補足資料(pdfファイル)を参照してください

④  tabulateというプロシジャーで表を作ります  

data data2; set data1 ;

      y=q61 ; output ;

      y=q62; output ;

      y=q63 ; output ;

      y=q64 ; output ;

      y=q65 ; output ;

      y=q66 ; output ;

      y=q67 ; output ;

      y=q68 ; output ;

run;

proc tabulate data=data2 ;

      class y sex ;

      tables y*(n pctn), sex ; run ;

単純な度数集計(proc freq)でない場合は、proc tabulate を使うことがある。二行目の変数の指定は、分類変数なら class、数量データなら varと指定する。

例 var family child ; class sex age ;

三行目は表に何を表示するかを指定する。カンマの前が列(表頭)の指定、後が行(表側)の指定である。

( )内には、n,pctn(分類変数の時),sum,pctsum,mean,all(数量データの時)などが入る。         

 例 tables y,sex*(n pctn) ; tables age, family*(mean) ;

 

課題 

問6をデモグラフィクス別に集計しなさい

 (性。年齢。家族人数など人口統計学的変数を「デモグラフィクス」といいます。 ライフスタイルなど心理的な説明変数(独立変数)は「サイコグラフィクス」、職業や収入階層などは「社会経済階層」と呼ぶこともあります。職業をデモグラフィクスとすることもあります) 問6住まいの情報源と性別・年代などデモグラフィクスとの関係は、後者が前者を規定していてその逆ではあり得ません。後者のように何らかの因果関係の原因に関係する変数を独立変数と呼び、それに影響されている変数を従属変数と呼びます。(Y=a+bXなら、Xが独立変数、Yが従属変数です。)

性別は問6の比率の違いの原因になるかも知れませんが、問6は性別の原因にはなりません。 クロス集計では、表側に独立変数を、表頭に従属変数を置くことが普通です。

変数変換

この調査で、たとえば「マンションを買いたい人はどのような人か」などの分析のために問2の3と4を一緒にして分析したい、というようなことがあります。その時はデータを変換してから集計します。(proc freqなどSASのプロシジャーは指定しない限り直前に作られたデータを分析対象とします) インポートしたデータからdata3を作成しましょう。データを再利用するときはsetで指定します。  

data data3 ; set data1 ;

      if q2=3 or q2=4 then q2=1 ;

            else q2=0 ;

run ;

このように作った新しい data3 が、その行以後の分析対象にされます。  

proc freq ; tables (sex age) *q2 ; run ;

とすると、今変換した q2 が集計できます。 返還前の data1 を使いたいときは、  

proc freq data=data1 ; tables (sex age) *q2 ; run ;

というように使用するデータを指定すればよいのです。全てのprocで指定できます。省略すると直前につくったデータが処理対象となります。

課題1 

新築・中古を問わず、問2でマンションに住み替えたい人にでもグラフィック属性で特徴があるかどうか集計してみなさい。

課題2

 家族人数を1人、2人、3-4人、5人以上にまとめた変数を作って下さい (else を書かなくてもOKです。また、thenやelseのあとに複数行の処理をするときは、その節を

do ;            end ;

で挟んでください。PL/Iの文法です)

 


以下は授業中には触れませんが、余裕のある人はやってみてください。

独立性の検定

 クロス集計した独立変数と従属変数とが統計的に関係があることを否定しきれないかどうか「独立性の検定」を行うことがあります。カイ(χ)二乗検定とも呼ばれます。これを行うには chisq オプションをつけるだけです。

proc freq ; tables sex *q2 / chisq ; run ;

データの結合

たとえば4人が分担して何人分かずつ入力したアンケート結果をインポートして一つにしたいときは、次のようにsetで複数のデータを指定すると、データは縦に追加されます。  

data all ; set data1 data2 data3 data4 ; run ;

データに横に変数を付け足したいときはsetでなく merge を使います。 たとえば一人が d1 というデータに IDNO と q1-q4 を入力し、もう一人が d2 に IDNO と q5-q7 を入力したときなら、番号順に並び替えてから同じ番号の人のデータを横につなげます。  

proc sort data=d1 ; by IDNO ; run ;

proc sort data=d2 ; by IDNO ; run ;

data all ; merge d1 d2 ; by IDNO ; run ;

このような処理をマッチングマージといいます。

配列  

余裕のある人は、q7_1-q7_17を下記の配列の指定を参考にして、「そう思う」を1、「そう思わない」を0にしてみてください。  

data data3;set data1; array q7_{*}  q7_1-q7_17;

     do i=1 to 17;   

          if q7_{i}=2 then q7_{i}=0;      

     end;

run;

データを確認してみましょう。

proc print data=data3;run;

配列を使うと関数のグラフを書いたり出来ます 下記のプログラムを実行して感触をつかんで下さい。

data b;

     do i=1 to 100 by 0.1;

          y1=sqrt(I); y2=-sqrt(I);output;  

     end;

run;

proc gplot; plot y1*i y2*i /overlay vref=0;

run;

 

因子分析

(余裕のある人だけ試みてください) 住宅意識についての回答の背景には、各問にそう答える潜在的な要因があると考えられます。それを因子 facto rと呼びます。この17問からその背後にあると考えられる因子を求めてみましょう。

上の配列で作った data3 を使ってみましょう。 (数学的にはデータ行列Zをサンプルの因子得点行列Fと質問の因子負荷量行列Aの積に固有値分解することになります。Z=FA このとき、Aは求める潜在因子と17問の測定変数との相関係数になります)  

proc factor r=v n=3  data=data3 ; var q7_1-q7_17 ; run; 

   v はバリマックス回転の指定   n は因子の数の指定

読みやすくするには、因子負荷量(因子と各変数との相関係数)が 0.2 未満を非表示にし、因子負荷量で変数をならびかえてみましょう。

proc factor  fuzz=.200  re  r=v n=3 data=a5 ; var q7_1-q7_17 ;run; 

  fuss 非表示  re 並び替え

課題 

回転後の因子パターンを読んで、各因子に名前を付けてください

注) 因子分析では、入力変数は正規化(正規分布上のどこに位置するのかという標準化された得点に変換)されます。どの変数も平均ゼロ、分散1となります。したがって、求めた因子で1以上の分散が説明されていないと、その因子は一問分以下の説明力しかないことになります。ですから固有値1以下の因子は無視してください。

因子数を決定するには、変数の数と同じだけの因子を求めてそれらの説明力の推移をグラフに(スクリー・プロット)したりします。以下を実施してからn= を決めてもいいですね。     

proc factor scree ; var q7_1-q7_17;run;  

因子分析には様々の手法があります。デフォルトは主成分法なので、よく使われる主因子法にするには method=prinit とします。


SASとは  Statistical Analysis Systemsの略で、汎用の統計パッケージでしたが、今日では様々の機能が追加されてシステム構築ツールとしても使われています。データマイニングツールのエンタプライズ・マイナーもコマンドラインにminerと入力するだけで使えます。  統計処理では最も信頼されているソフトであり、たとえば製薬会社が新薬の治検結果を分析し認可を申請するときにはほとんどSASが用いられています。 SASをより進んで勉強したい人は下記のような参考書を参照してください。

また、ヘルプでもオンラインヘルプからマニュアルが参照できます。

(今回も2005年の教材(担当:江原)を一部変更して掲載しました)


「調査企画書」は提出しましたか? 次週からは実施の準備です。すでに許可がでたグループはアンケート調査を進めてください。