2013年4月17日水曜日

統計検定1級合格体験記

2012年に実施された統計検定1級(と2級)に合格していました。自信を持って完答できたのは解答した6問のうち1問のみ(残りは半答程度)なので、ギリギリの合格とは思いますが、今後学習する人の参考になればということで参考書や感想などを挙げておきます。

  1. 学習時間
  2. 本格的に勉強をする前は2級が受かるかなという程度でした。試験対策では400時間程度学習しました。今思うと学習前は大変無知な状態だったと思います。

  3. 選択分野
  4. 理工学を選択しました。ここはかなり人によって選択が変わってくると思います。統計なんて一括りにしてはいけません。統計の研究室に所属してますと言っても、(経済と生物のように)専門分野が違うと話が通じることはほぼ期待できません。過去問も出てきたので、向き不向きを見極めて慎重に選択してください。

  5. 統計数理参考書
  6. 統計検定1級の対策テキストは最近出たようです。統計数理分野のみならテキストを作れると思いますが、統計応用は広すぎてキーワード中心になってしまっているようです(完全網羅するテキストを作ったら1000ページぐらいになってもおかしくない)。受験当時は対策本が存在していなかったので、統計解析入門(赤平)、入門・演習 数理統計(野田・宮岡)を読んでいました。変数変換や順序統計量、フィッシャー情報量などが網羅されているレベルの本(学部3~4年程度)を読破すると、必答問題に対応できると思います。推定・検定で終わるような学部教養レベルの本は2級程度の対応止まりなので、副読本選びには要注意。

  7. 統計応用参考書
  8. 理工学の問題では欠測データと実験計画法の問題が出ました。不完全データの統計解析(岩崎)、よくわかる実験計画法(中村)を読んでいたことが試験に生きたかなと思います。統計応用の問題は曲者で、当日選択できません。当たり所が悪いとまったく手が出せない恐れがあります。全く知らない分野ではなかったので助かりました。

  9. 攻略法
  10. 出題者の癖を知るということで、問題製作者の本を読んでみるのがよいかもしれません。

まだ初回なので、今後試験形式が変わることもあるかもしれません。大きすぎる言い回しかもしれませんが、今後、統計検定などを通じて"正しい"データ解析の文化がさらに普及することを期待しています。

2013年4月14日日曜日

TopCoder SRM466 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。

ニックは宝くじを買うのが好きである。くじを1つ買う費用はpriceである。ニックはb1~b4までの紙幣を持っている(一緒の値になることもある)。ニックはおつりなしでくじを買えるかどうかを知りたがっている。言い換えれば、持っている紙幣の一部だけを使ってきっちりpriceを支払いたいということである。もし可能であれば"POSSIBLE"を、そうでなければ"IMPOSSIBLE"を返せ。

私の解答はこちら。

public class LotteryTicket {

 public String buy(int price, int b1, int b2, int b3, int b4) {
  int total = 0;
  for( int i=0 ; i<2 ; i++ ){
   for( int j=0 ; j<2 ; j++ ){
    for( int k=0 ; k<2 ; k++ ){
     for( int l=0 ; l<2 ; l++ ){
      total = 0;
      if( i == 1 ) total += b1;
      if( j == 1 ) total += b2;
      if( k == 1 ) total += b3;
      if( l == 1 ) total += b4;
      if( total == price ) return "POSSIBLE";
     }
    }
   }
  }
  return "IMPOSSIBLE";
 }

}

得点は244.99/250、1回のsubmitでシステムテストクリア。単純に全部のパターンを試すだけです。すべてのパターンを生成する方法は、本問のように4重ループ程度なら良いですが、100重ループとかになったら考えものでしょうね。

2013年4月13日土曜日

TopCoder SRM465 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。

numbers[]という整数型配列が与えられたときに、隣り合う数字のペアの数を返せ。隣り合う数字のペアというのは、数字を並び替えて作ることができる数字で先頭の0を除去したときに一致するものがあることをいう。例えば40020と204は00024と024と並び替えて先頭の0を除くと一致するので隣り合う数字のペアである。

私の解答はこちら。

import java.util.ArrayList;
import java.util.Arrays;

public class NumberNeighbours {

 public int numPairs(int[] numbers) {
  int nPair = 0;
  for( int i=0 ; i<numbers.length ; i++ ){
   for( int j=i+1 ; j<numbers.length ; j++ ){ // 探索範囲のインデックスに注意
    char[] s1 = ("" + numbers[i]).toCharArray(); // 各ペアを文字列に変換して
    char[] s2 = ("" + numbers[j]).toCharArray();
    s1 = removeZeros(s1); // 0を文字列から取り除いて
    s2 = removeZeros(s2);
    Arrays.sort(s1); // 文字コードでソートして
    Arrays.sort(s2);
    if( Arrays.equals(s1, s2)) nPair++; // 一致していれば隣り合う数字のペアとなる
   }
  }
  return nPair;
 }

 private char[] removeZeros(char[] cs){
  ArrayList<Character> ret = new ArrayList();
  for( int i=0 ; i<cs.length ; i++ ){
   if( cs[i] != '0' ) ret.add(cs[i]);
  }
  return ret.toString().toCharArray();
 }
}

得点は194.99/250、1回のsubmitでシステムテストクリア。この問題は軍隊がどうのこうのという設定があるのですが、本質的に関係ないので特に訳してません。

2013年4月7日日曜日

2013年3月の学習記録

2013年3月に学習した主な本一覧。月末に引越が絡んで何もできないような感じになってしまいました。

Rによる統計解析ハンドブック(pp.185~200)
演習問題が難しく、1つの章の問題をすべてを回答するのは難しい感じがありますね。
はじめての集合と位相(pp.61~83)
演習問題の解答が欲しい...
人文・社会科学の統計学(pp.59~78)
うーん、経済データの解析や時系列という感じではないんですよね。多変量解析や生物統計の方が性に合っているのかもと思いました。

英文ドキュメント翻訳の作業はWriting R Extensionsでした。次のバージョン(2.15.3)が出た直後でのリリースとなってしまいましたが、間瀬先生が翻訳をされて10年以上が経過して、随分と内容が変わってしまっていたので作成した次第です。TopCoderの演習は4問。

フォロワー

ページビューの合計