[余録] 統計のはなし

統計解析 02 クラス : 第15回 (07/26/07)

 今回はリクエストにお応えして、アンケート調査の手順とその実際を紹介する。
  1. アンケート調査とその解析例 :
     調査を実施する際の作業内容を手順を追って列挙してみる。
    1. 設計
      • 設計の善し悪しによって得られる結果の質も変わる
      • 調査の目的を明確に : 何を知りたいの?
      • 調査対象者の選定 : 規模、予算、...
      • 調査対象分野の熟知
      • 予想される回答を想定して設計すべき
      • 回答のしやすさ
      • 質問項目や選択肢の吟味
      • 偏りの少ない調査 : 対象集団、調査方法、...
      • 解析方法も事前に想定しておく
      • 調査全般にわたる検討

    2. 予備調査の実施
      • 小集団に対して模擬調査をしてみる
      • 予想外の回答
      • 改良点の発見
      • 場合によっては、「i. 設計」に戻って再検討する

    3. 調査と回収
      • 方法 : 面接、電話、郵送、Web、...
      • 調査方法による偏り : 面接とWebでは異なる
      • 回収率 : 事前に最低ラインは設定しておくべき
      • 場合によっては対象者を追加

    4. 電子化とスクリーニング
      • ノイズや入力ミスを見つけ出し修正する
      • 単純集計やクロス集計が威力を発揮する
      • 体力が要るがサボってはいけない
      • スクリーニングが不完全だと解析結果に影響する
      • "生"のデータを触る良い機会

    5. 解析
      • まずは、基本統計量を
      • いろいろな角度からの吟味
      • 各種の統計手法を駆使
      • 過去の経験
      • 予想に反した結果もあり得る
      • データを加工する(データ変容)の必要性も
      • 「道具(統計ソフト等)」に使われないように

    6. 結果の公表
      • 報告書、論文の作成
      • 学会発表 : プレゼン技術
      • 今後の方針、フィードバック

  2. [おまけ1] データの生成 : 乱数で(正規乱数) : 種(seed)の指定。種は任意の数値(普通は整数)。
      data rei01;
       do i=1 to 200;
         x=rannor(12345);
         output;
       end;
      run;
      
    [参考] : 乱数を生成する関数
      rannor : 正規乱数を生威します。
      ranuni : (0,1)の間の一様乱数を生成します。
      ranbin : 二項分布に従う乱数を生成します。
      rancau : コーシー乱数を生成します。
      ranexp : 指数乱数を生成します。
      rangam : ガンマ分布に従う乱数を生成します。
      ranpoi : ポアソン分布に従う乱数を生成します。
      rantbl : 指定した確率重み関数から、乱数を生成します。
      rantri : 三角分布に従う乱数を生成します。

  3. [おまけ2] 乱数で疑似データを 200個生成し、発生順、および昇順に並べて、それぞれをファイルに保存する
    • 91番から 110番(中央あたり)のデータの表示
    • 91番から 110番(中央あたり)のデータについて平均を計算する
    • データのアスキー保存 : フォーマット形式の指定に注意
    • データの並べ替え

    1. プログラム : les1501.sas

       /* Lesson 12-5 */
       /*    File Name = les1501.sas   07/26/07   */
      
      options linesize=72; /* pagesize=20; */      : 出力サイズの指定
      
      data rei01;                                  : データセット名を rei01 とする
       do i=1 to 200;                              : 200回の繰り返し
         x=rannor(12345);                          : 正規乱数を発生させる
         output;                                   : データセットに追加する
       end;                                        : 繰り返しの終端
      run;                                         :
      
      proc print data=rei01(obs=10);               : 先頭 10ケースの表示
      run;                                         :
      
      proc means data=rei01;                       : 全データに対する平均の計算
      run;                                         :
      
      proc print data=rei01(firstobs=91 obs=110);  : 91番から 110番のデータの表示
      run;                                         :
      
      proc means data=rei01(firstobs=91 obs=110);  : 91番から 110番のデータについての平均
      run;                                         :
      
      data _null_;                                 : データセット名は付けない
        set rei01;                                 : 元となるデータセット名
        file "unsorted.dat";                       : 出力ファイル名
        put i 5. x 15.8;                           : 変量 i は小数点以上 5桁で
      run;                                         : 変量 x は小数点以上 15桁、以下 8桁で
      
      proc sort data=rei01;                        : 並べ替え
        by x;                                      : 変量 x について
      run;                                         :
      
      proc print data=rei01(obs=10);
      run;
      
      proc print data=rei01(firstobs=91 obs=110);
      run;
      
      proc means data=rei01(firstobs=91 obs=110);
      run;
      
      data _null_;
        set rei01;
        file "sorted.dat";
        put i 5. x 15.8;
      run;
      
    2. 出力結果 : les1501.lst unsorted.dat sorted.dat
      • 並べる前後での数値列を比較せよ。
      • 乱数の種類を取り替えて計算させてみよ。

  4. [おまけ3] 軸ラベルの値を昇順、降順に並べたい

    1. プログラム : les1502.sas

       /* Lesson 12-6 */
       /*    File Name = les1502.sas   07/26/07   */
      
      options linesize=72; /* pagesize=20; */
      
      data rei02;                           : データセット名を rei02 とする
        do i=1 to 100;                      :
          x=rannor(23456);                  : 上記とは別の種で乱数を発生させる
          x10=int(x*10);                    : 10倍して正数部分だけ利用
          output;                           :
        end;                                :
      run;                                  :
      
      title "Default";                      : 見出し(タイトル)を付ける : 「無指定」
      proc chart data=rei02;                : オプションを指定しない場合のヒストグラム
        hbar x;                             : 変量 x について
      run;                                  :
      
      title "Ascending order";              : 「昇順」
      proc chart data=rei02;                : 
        hbar x / midpoints=-3 to 3 by .5;   : 変量 x について昇順で。0.5 刻み。
      run;                                  :
      
      title "Descending order";             : 「降順」
      proc chart data=rei02;                :
        hbar x / midpoints=3 to -3 by -.5;  : 変量 x について降順で。-0.5 刻み。
      run;                                  :
      
      title "Default";                      : 「無指定」: x10 を昇順に表示
      proc freq data=rei02;                 : オプションを指定しない場合の度数分布表
        tables x10;                         : 変量 x10 について
      run;                                  :
      
      title "Freqency order";               : 「頻度降順」: 頻度の大きいものから
      proc freq data=rei02 order=freq;      :
        tables x10;                         : 変量 x10 についての頻度順に表示
      run;                                  :
      
      proc sort data=rei02;                 : 並べ替え
        by decending x10;                   : x10 について降順に並べる
      run;                                  :
      
      title "Descending order";             : 「数値降順」: x10 を降順に表示
      proc freq data=rei02 order=data;      : データの出現順で表示させるというオプション
        tables x10;                         :
      run;                                  : 
      
    2. 出力結果 : les1502.lst
      • どこをキーとした順で表示されているかを把握せよ。
      • 乱数の種類を取り替えて計算させてみよ。

      • 見出しを付けるには「title」を使う。
[DIR]講義のホームページへ戻ります