axjack's blog

### axjack is said to be an abbreviation for An eXistent JApanese Cool Klutz ###

非階層的な部署コードと階層的な部署テキストを持つテーブルから、部署テキストで階層構造を導出する。の補足

まえがき

前回の宿題の1つが解決できたのでメモを残す記事です。前回の宿題とは、

部署テキストの途中から他の部署名を含むという場合(e.g. システム開発第一部 vs 老朽化更改システム開発第一部 のような部署テキストが存在する場合、システム開発第一部 ⊃ 老朽化更改システム開発第一部)となってしまう)、これはおそらく正しく無いと思うものの、今の所これを回避する方法が分からない。

非階層的な部署コードと階層的な部署テキストを持つテーブルから、部署テキストで階層構造を導出する。 - axjack's blog

です。*1

今回は、前回と同じデータに「老朽化更改システム開発第一部」を加えた際、「システム開発第一部 ⊃ 老朽化更改システム開発第一部」とならないようなwhere句の作り方を書いてみます。

ソースコード

前回と同じスタイルで作成します。

実行環境

DB FiddleMySQL v8.0 です。

テーブル作成

    --部署テーブル
    create table  DeptList (
      deptNum varchar(256) -- 部署コード
      ,deptText varchar(256) -- 部署テキスト
    );

データinsert

    --データ投入
    insert into DeptList values('1000','システム開発第一部');
    insert into DeptList values('10001','システム開発第一部第一課');
    insert into DeptList values('10002','システム開発第一部第二課');
    insert into DeptList values('10003','システム開発第一部第三課');
    insert into DeptList values('10004','システム開発第一部第三課一係');
    insert into DeptList values('10005','システム開発第一部第三課二係');
    insert into DeptList values('1006','システム開発第二部');
    insert into DeptList values('1007','システム開発第二部国内課');
    insert into DeptList values('1008','システム開発第二部海外課');
    insert into DeptList values('1009','システム開発第二部海外課アジア係');
    insert into DeptList values('1010','システム開発第二部海外課ヨーロッパ係');
    insert into DeptList values('1011','品質管理部');
    insert into DeptList values('1012','運用管理部');
    insert into DeptList values('1013','運用管理部総務課');
    insert into DeptList values('1014','総務部');
    insert into DeptList values('1015','人事部');
    insert into DeptList values('10151','人事部人事課');
    insert into DeptList values('1016','総務部給与課');
    insert into DeptList values('1017','企画室');
    insert into DeptList values('1018','企画室企画課');
    insert into DeptList values('1019','企画室企画課第一企画係');
    insert into DeptList values('10191','企画室企画課第二企画係');
    insert into DeptList values('10192','企画室企画課第三企画係');
    insert into DeptList values('1022','経理部第一課');
    insert into DeptList values('1029','経理部第二課');
    insert into DeptList values ('10301','老朽化更改システム開発第一部');   -- 今回追加したデータ
    insert into DeptList values('10311','外部委託システム運用管理部');  -- 同様に今回追加したデータ

部署の紐付け

create temporary table dept0
    select
        a.deptNum as srcNum --紐付け元の部署コード
        , a.deptText as srcText --紐付け元の部署テキスト
        , b.deptNum as dstNum --紐付け先の部署コード
        , b.deptText as dstText --紐付け先の部署テキスト
    from 
        DeptList as a
        , DeptList as b
    where 
         length(concat('dummy',a.deptText))  >  length(replace(concat('dummy',a.deptText), concat('dummy',b.deptText), ''))
    ;

結果確認

今回は、「老朽化更改システム開発第一部」と「外部委託システム運用管理部」がそれぞれどのように紐付けられたかを確認します。

select文

select 
    * 
from 
    dept0
where 
    srcNum in ('10301','10311') 
order by 
    srcNum desc
;

実行結果

srcNum srcText dstNum dstText
10311 外部委託システム運用管理部 10311 外部委託システム運用管理部
10301 老朽化更改システム開発第一部 10301 老朽化更改システム開発第一部

前回の抽出ロジックの場合

select文

    create temporary table dept0
        select
            a.deptNum as srcNum 
            , a.deptText as srcText 
            , b.deptNum as dstNum 
            , b.deptText as dstText 
        from 
            DeptList as a
            , DeptList as b
        where 
    
             length(a.deptText)  >  length(replace(a.deptText,b.deptText, ''))
        ;

    select 
        * 
    from 
        dept0
    where 
        srcNum in ('10301','10311') 
    order by 
        srcNum desc
    ;

実行結果

srcNum srcText dstNum dstText
10311 外部委託システム運用管理部 1012 運用管理部
10311 外部委託システム運用管理部 10311 外部委託システム運用管理部
10301 老朽化更改システム開発第一部 1000 システム開発第一部
10301 老朽化更改システム開発第一部 10301 老朽化更改システム開発第一部

考察

where句はlength(concat('dummy',a.deptText)) > length(replace(concat('dummy',a.deptText), concat('dummy',b.deptText), ''))です。テキストの頭にdummyなる文字列を連結してみました。これを付ける場合と付けない場合を比較すると、下記のようになります。

a b replaceできる? replaceすると? replace後の文字数は? replace前後で文字数を比較すると? 文字数比較の真偽は?
老朽化更改システム開発第一部 システム開発第一部 yes 老朽化更改 5 14 > 5 true
dummy老朽化更改システム開発第一部 dummyシステム開発第一部 no dummy老朽化更改システム開発第一部 19 19 > 19 false

なんとも見辛い表ですが、、テキストの頭にdummyを追加することによって、中間一致から前方一致することができた、ということです。

*1:「開発」が抜けていたので、追記箇所を太字で補いました。

非階層的な部署コードと階層的な部署テキストを持つテーブルから、部署テキストで階層構造を導出する。

はじめに

タイトルの詳しい説明

日本語って難しいですね。非階層的な部署コードと階層的な部署テキストを持つテーブルとは、以下のようなテーブルを意味します。

部署コード 部署テキスト
1000 システム開発第一部
10001 システム開発第一部第一課
10002 システム開発第一部第二課
10003 システム開発第一部第三課
10004 システム開発第一部第三課一係
10005 システム開発第一部第三課二係
1006 システム開発第二部
1007 システム開発第二部国内課
1008 システム開発第二部海外課
1009 システム開発第二部海外課アジア係
1010 システム開発第二部海外課ヨーロッパ係

部署コードがシーケンシャルのようなそうでもないような微妙な付け方をしている一方で、部署テキストはなんとなく

┏システム開発第一部  
┃ ┣システム開発第一部第一課
┃ ┣システム開発第一部第二課
┃ ┗システム開発第一部第三課
┃   ┣システム開発第一部第三課一係
┃   ┣システム開発第一部第三課二係
┃   ┗システム開発第一部第三課二係
┃
┗システム開発第二部
  ┣システム開発第二部国内課
  ┗システム開発第二部海外課
    ┣システム開発第二部海外課アジア係
    ┗システム開発第二部海外課アジア係

のように階層化できそうですよね。ということで、SQLにて部署テキストで階層構造を導出することにします。

どうやるか?

日本語で書くと以下の2ステップを踏みます。

  • テーブルを自己結合する
    • 同じテーブルを別名で二つ指定するので、便宜上A・Bと名付ける
  • 以下の条件を満たすレコードを抽出する
    • Aの部署名をBの部署名で''(ブランク)に置換し(★1)
    • Aの部署名の長さ が ★1の長さより大きい

なぜこのように抽出すると(一見)うまくいくのか?

置換が成功する例を見てみます。

A.部署名 = システム開発第一部第一課
B.部署名 = システム開発第一部

なとき、

・Aの部署名をBの部署名で''(ブランク)に置換し(★1)
 → 「システム開発第一部第一課」が「第一課」と置換されます。
・ Aの部署名の長さ が ★1の長さより大きい
 → 12文字 vs 3文字 なので条件を満たす

一方、置換が失敗する例はというと、

----------【例1】----------
A.部署名 = システム開発第一部
B.部署名 = システム開発第一部第一課

なとき、

・Aの部署名をBの部署名で''(ブランク)に置換し(★1)
 → 置換ができないので「システム開発第一部」のままとなります
・ Aの部署名の長さ が ★1の長さより大きい
 → 12文字 vs 12文字 なので条件を満たさない
----------【例2】----------
A.部署名 = システム開発第一部第一課
B.部署名 = システム開発第二部

なとき、

・Aの部署名をBの部署名で''(ブランク)に置換し(★1)
 → 置換ができないので「システム開発第一部第一課」のままとなります
・ Aの部署名の長さ が ★1の長さより大きい
 → 12文字 vs 12文字 なので条件を満たさない

となるので、(一見)うまくいきます。

ソース

実際にテーブルを作ってSELECT文を実行してみます。

実行環境

DB FiddleMySQL v8.0 にて実行しました。

テーブル作成

    --部署テーブル
    create table  DeptList (
      deptNum varchar(256) -- 部署コード
      ,deptText varchar(256) -- 部署テキスト
    );

データinsert

階層的で無い(i.e. 子を持たない部)データも加えてinsertします。

    --データ投入
    insert into DeptList values('1000','システム開発第一部');
    insert into DeptList values('10001','システム開発第一部第一課');
    insert into DeptList values('10002','システム開発第一部第二課');
    insert into DeptList values('10003','システム開発第一部第三課');
    insert into DeptList values('10004','システム開発第一部第三課一係');
    insert into DeptList values('10005','システム開発第一部第三課二係');
    insert into DeptList values('1006','システム開発第二部');
    insert into DeptList values('1007','システム開発第二部国内課');
    insert into DeptList values('1008','システム開発第二部海外課');
    insert into DeptList values('1009','システム開発第二部海外課アジア係');
    insert into DeptList values('1010','システム開発第二部海外課ヨーロッパ係');
    insert into DeptList values('1011','品質管理部');
    insert into DeptList values('1012','運用管理部');
    insert into DeptList values('1013','運用管理部総務課');
    insert into DeptList values('1014','総務部');
    insert into DeptList values('1015','人事部');
    insert into DeptList values('10151','人事部人事課');
    insert into DeptList values('1016','総務部給与課');
    insert into DeptList values('1017','企画室');
    insert into DeptList values('1018','企画室企画課');
    insert into DeptList values('1019','企画室企画課第一企画係');
    insert into DeptList values('10191','企画室企画課第二企画係');
    insert into DeptList values('10192','企画室企画課第三企画係');
    insert into DeptList values('1022','経理部第一課');
    insert into DeptList values('1029','経理部第二課');

部署の紐付け

    create temporary table dept0
    select
        a.deptNum as srcNum --紐付け元の部署コード
        , a.deptText as srcText --紐付け元の部署テキスト
        , b.deptNum as dstNum --紐付け先の部署コード
        , b.deptText as dstText --紐付け先の部署テキスト
    from 
        DeptList as a
        , DeptList as b
    where 
         length(a.deptText)  >  length(replace(a.deptText, b.deptText, ''))
    ;

結果確認

なお、結果の解釈は「左側(srcNum, srcText)は右側(dstNum, dstText)の配下にある」です。

select * from dept0;

srcNum srcText dstNum dstText
1000 システム開発第一部 1000 システム開発第一部
10001 システム開発第一部第一課 1000 システム開発第一部
10002 システム開発第一部第二課 1000 システム開発第一部
10003 システム開発第一部第三課 1000 システム開発第一部
10004 システム開発第一部第三課一係 1000 システム開発第一部
10005 システム開発第一部第三課二係 1000 システム開発第一部
10001 システム開発第一部第一課 10001 システム開発第一部第一課
10002 システム開発第一部第二課 10002 システム開発第一部第二課
10003 システム開発第一部第三課 10003 システム開発第一部第三課
10004 システム開発第一部第三課一係 10003 システム開発第一部第三課
10005 システム開発第一部第三課二係 10003 システム開発第一部第三課
10004 システム開発第一部第三課一係 10004 システム開発第一部第三課一係
10005 システム開発第一部第三課二係 10005 システム開発第一部第三課二係
1006 システム開発第二部 1006 システム開発第二部
1007 システム開発第二部国内課 1006 システム開発第二部
1008 システム開発第二部海外課 1006 システム開発第二部
1009 システム開発第二部海外課アジア係 1006 システム開発第二部
1010 システム開発第二部海外課ヨーロッパ係 1006 システム開発第二部
1007 システム開発第二部国内課 1007 システム開発第二部国内課
1008 システム開発第二部海外課 1008 システム開発第二部海外課
1009 システム開発第二部海外課アジア係 1008 システム開発第二部海外課
1010 システム開発第二部海外課ヨーロッパ係 1008 システム開発第二部海外課
1009 システム開発第二部海外課アジア係 1009 システム開発第二部海外課アジア係
1010 システム開発第二部海外課ヨーロッパ係 1010 システム開発第二部海外課ヨーロッパ係
1011 品質管理部 1011 品質管理部
1012 運用管理部 1012 運用管理部
1013 運用管理部総務課 1012 運用管理部
1013 運用管理部総務課 1013 運用管理部総務課
1014 総務部 1014 総務部
1016 総務部給与課 1014 総務部
1015 人事部 1015 人事部
10151 人事部人事課 1015 人事部
10151 人事部人事課 10151 人事部人事課
1016 総務部給与課 1016 総務部給与課
1017 企画室 1017 企画室
1018 企画室企画課 1017 企画室
1019 企画室企画課第一企画係 1017 企画室
10191 企画室企画課第二企画係 1017 企画室
10192 企画室企画課第三企画係 1017 企画室
1018 企画室企画課 1018 企画室企画課
1019 企画室企画課第一企画係 1018 企画室企画課
10191 企画室企画課第二企画係 1018 企画室企画課
10192 企画室企画課第三企画係 1018 企画室企画課
1019 企画室企画課第一企画係 1019 企画室企画課第一企画係
10191 企画室企画課第二企画係 10191 企画室企画課第二企画係
10192 企画室企画課第三企画係 10192 企画室企画課第三企画係
1022 経理部第一課 1022 経理部第一課
1029 経理部第二課 1029 経理部第二課

感想

良い点

  • ひとまず1階層分( e.g. システム開発第一部 ⊃ システム開発第一部第一課) を紐づけることができた。
  • 自分は自分自身に含まれる(e.g 企画室企画課 は 企画室企画課を含む) 結果となっているが、これはwhere句を弄れば抽出対象から外すことができる。

改善すべき点

一見 と付けた理由を書き残します。

  • もし部署テキストが2階層・3階層…と続いてしまう場合、階層数が分からない場合、この手法では物足りなさが残る。
  • 部署テキストの途中から他の部署名を含むという場合(e.g. システム第一部 vs 老朽化更改システム第一部 のような部署テキストが存在する場合、システム第一部 ⊃ 老朽化更改システム第一部)となってしまう)、これはおそらく正しく無いと思うものの、今の所これを回避する方法が分からない。

センター試験2019 数学I・数学Aの統計の問題だけを解く。数学Ⅱ・数学Bの統計もちょっとだけ解く。

www.toshin.com

統計のみ解いて、確率は手を出さないことにします・・・。問題文はリンク先または適当にググってください。

数学I・数学A〔2〕

(1)

2013年のヒストグラム

図1によると、2013年のboxplot(箱ひげ図)は、

  • 最小値:72
  • 1Q:76
  • 中央値:81
  • 3Q:89
  • 最大値:136

周辺と読み取れるので、3となる。

2017年のヒストグラム

図1によると、2017年のboxplotは、

  • 最小値:80
  • 1Q:90
  • 中央値:93
  • 3Q:95
  • 最大値:122

周辺と読み取れるので、4となる。

(2)

選択肢を吟味する。

  • 0番:モンシロチョウとツバメの各初見日は、図3によると同じに見える。図3で言うと一番左の縦線が最小値。よって正しい。
  • 1番:モンシロチョウの初見日の最大値はツバメの初見日の最大値よりもどうだろうか?図3で言うと一番右側の縦線を比較する。すると、モンシロチョウの初見日の最大値はツバメのそれよりも右側にあるので大きいと言える。よって正しい。
  • 2番:中央値は図3の真ん中にある太い縦線である。ツバメの太い縦線よりも右側にモンシロチョウの太い縦線が位置している。つまり中央値もモンシロチョウの方が大きい。よって正しい。
  • 3番:四分位範囲を比較する。モンシロチョウの四分位範囲は、3Q-1Q = 103 - 84 = 20。ツバメの四分位範囲は、3Q - 1Q = 97 - 88 = 9ぐらいと読めるので、3倍よりは小さいと思われる。よって正しい。
  • 4番:モンシロチョウの四分位範囲は、15日以下か? 少なくとも四分位範囲が85〜100を含んでいるので15日よりも大きいと確実に言える。よって正しくない
  • 5番:ツバメの四分位範囲は、15日以下か?少なくとも四分位範囲が90〜95を含んでいるので5日よりは大きい。しかし、残りの範囲を足しても10日加算とはならない。よって正しい。
  • 6番:モンシロチョウとツバメの初見日が同じところが少なくとも4地点あるか?図4の傾き1の直線は、モンシロチョウとツバメの初見日が、それぞれ同じであることを示している。この直線上に点は4つあるので、同じ初見日を持つ観測点は4地点あると言える。ところで「散布図の点には重なった点が2点」あるということなのでこの直線上に重なった点がもしあれば+2地点の可能性がある。ということで少なくとも4地点である。よって正しい。
  • 7番:図4の点線の直線は傾き1±切片15な線である。この範囲に収まれば初見日の差は15日以下と言えるがしかし、よく見ると、点(69,86)および点(105,88)あたりに±15を超えた点がある。よって正しくない

(3)

標準化の話である。標準化すると平均値:0, 分散:1となる。(従って標準偏差も1)

  • 偏差の平均値は0
  • X'の平均値は0
  • X'の標準偏差は1
  • 2σで約95%カバーできるので2

復習も兼ねてそれぞれ導出する

基本数式


\displaystyle X = \{x_1, x_2, \dots , x_n\} \\
\displaystyle \bar{x} = \frac{1}{n}\sum{x_i} \leftarrow const. \\
\displaystyle n\bar{x} = \sum{x_i} \\
\displaystyle s^{2} = \frac{1}{n}\sum{ (x_i - \bar{x} ) ^ {2} }  \leftarrow const. \\
\displaystyle s = \sqrt{s^{2}} = \sqrt {   \frac{1}{n}\sum{ (x_i - \bar{x} ) ^ {2} }  } \leftarrow const.

偏差の平均値は0


\displaystyle \overline{x - \bar{x}} = \frac{1}{n} \sum{ ( x_i - \bar{x}  ) } =   \frac{1}{n} ( \sum{ x_i } - \sum{\bar{x}} )\\
= \displaystyle \frac{1}{n}( \sum{ x_i } - n\bar{x})  \\
=  \displaystyle \frac{1}{n} (\sum{ x_i } -  \sum{ x_i })  \\
= \displaystyle \frac{1}{n} \times 0 = 0 \\

X'の平均値は0

 \displaystyle  x_i' = \frac{x_i - \bar{x} }  { s }

より、

 \displaystyle  \bar{X'} = \frac{1}{n} \sum{x_i'} = \frac{1}{n}  \sum{  \frac{x_i - \bar{x}}{s}}  \\
\displaystyle = \frac{1}{n} \frac{1}{s}  \sum{ (x_i - \bar{x}) } = \frac{1}{s}  \frac{1}{n}  \sum{ (x_i - \bar{x}) } \\
= \displaystyle \frac{1}{s} \times \overline{x - \bar{x}}  = \frac{1}{s} \times 0 = 0

X'の標準偏差は1

X'の分散を求めれば標準偏差は分散の平方根で出せる。諸々の代入は上述の結果を用いる。

 \displaystyle s'^{2}  = \frac{1}{n}\sum{ ( x_i' - \bar{X'} ) ^ {2} }  = \frac{1}{n}\sum{ ( x_i' - 0 } ) ^ {2} \\
= \displaystyle \frac{1}{n} \sum{ x_i'  ^ {2}  }  \\
= \displaystyle \frac{1}{n} \sum{  (\frac{x_i - \bar{x} }  { s } ) ^ {2} } \\
= \displaystyle \frac{1}{n} \frac{1}{s^{2}} \sum{ ( x_i - \bar{x}  ) ^{2} } \\
= \displaystyle \frac{1}{s^{2}}  \frac{1}{n} \sum{ ( x_i - \bar{x}  ) ^{2} } \\
= \displaystyle \frac{1}{s^{2}}  s^{2} \\
= \displaystyle 1

となるので、

s'^{2} = 1 より  s' = \sqrt{ s'^{2} } = \sqrt{ 1 } = 1

解答

  • ソ:3
  • タ:4
  • チ:4
  • ツ:7
  • テ:0
  • ト:0
  • ナ:1
  • ニ:2

数学2・数学Bは?

暗算だけだと解けなかった。メモのみ。

M ~ B(50, 0.08) = B(n, p)
E[M] = np =50 * 0.08 = 4.0
V[M] = np(1-p) = 4 * (1-0.08) = 3.68 ≒ 3.7
1.64と来れば, 90%信頼区間, 両側10%。

感想

受験生の皆さんは受験お疲れ様でした。

  • 数Ⅰの方:選択肢は多いけれども基本的な事柄が問われている。図の読み取りは大事。
  • 数Ⅱの方:やはり基本的な事柄が問われている。最近の高校生は信頼区間なんて勉強するんだなぁ。

統計検定2級に合格したので勉強法やら参考書などを書いておきます。

はじめに

勉強の甲斐あって、2018年11月実施の統計検定2級に合格しました。ネットで検索したブログやら記事やらwebページやらを励みに、なんとか合格にたどり着いたというところです。

これから受験するみなさんの何か参考になったら良いな、という気持ちでこのブログ記事を書きます。

成績

2回受験して2回目で合格しました。

1回目の受験(2018年6月)

  • 成績:不合格
  • 評価:?(不合格者のうち、上位20〜40 %)
  • 正答数:18問正解 in 34問
  • 正答率:53 %

2回目の受験(2018年11月)

  • 成績:合格
  • 評価:A(優秀成績賞)
  • 正答数:27問正解 in 34問
  • 正答率:79 %

参考書・お世話になった本

参考リンク・お世話になったリンク

資料探しのコツは、

  • 統計 講義 site:ac.jp
  • 医療統計 講義
  • 生物統計 講義

のように、できれば大学の学部レベルあたりの講義資料を見るのが良いでしょう。まとまっているし信憑性もありそうですし。1つの資料にこだわらず何個も資料を横串で見ると、理解が深まって良いと思います。というか、一つの資料でカバーできる範囲では無いんだなぁと探していて思いました。

勉強法

全般

  • 参考書に掲げた書籍の例題から演習問題から、片っ端から解く
  • 参考リンクに掲げたページを、暇な時に読みこなす
  • 勝手にヤマをハラない
    • ここは難しいから諦めよう → 1回目の受験で落ちた原因
    • 試験範囲は『統計検定2級対応 統計学基礎』の全ページです

分野別?の対策

教科書の目次に沿って書いてみます。

第1章 データの記述と要約

箱ひげ図やローレンツ曲線やジニ係数ラスパイレス指数でおなじみの第1章。ローレンツ曲線なんてコラム的な扱い、試験に出ないだろう・・・と思っていましたがちゃんと出題されます。ジニ係数ラスパイレス指数も同様です。

練習問題がなかなか見つからない範囲ですが、教科書の例題や定義はきちんと押さえておきましょう。練習問題が少ないとはいえ、試験前に2・3回は自分で計算して置いた方が良いです。定義式をふわっと覚えているだけだと、実際に試験で出題された際に後悔します。

第2章 確率と確率分布

分布と名のつくものは全暗記。この式で定義されているのは何分布?なんて問題も出ます。暗記さえしていれば解ける問題もあるので、そういうところは確実に抑え失点を防ぎましょう。

試験に出る応用的な確率の問題はわりかし難しいので、ここはあまり注力しなくても良いのでは?と個人的には思います。統計検定であって確率検定ではないので、サイコロを7回投げる時2以下の目が出る確率を解けるようになってもなんだかなぁ、と。

ただ、ベイズの定理や条件付き確率は、典型的な問題であれば解けるようにしておいた方が良いと思います。サイコロよりはベイズの定理の方が重要かつ為になりそうな概念かと。

第3章・第4章・第5章・第6章

教科書によると、ここからが2級のメインパートです。ひとまずざっくりまとめると、

  • 第3章 統計的推定
  • 第4章 統計的仮説検定
    • 仮説検定
  • 第5章 線形モデル分析
    • 線形回帰
    • 分散分析
  • 第6章 その他の分析法 正規性の検討,適合度と独立性のΧ2検定
    • 適合度の検定
    • 独立性の検定

です。

1回目落ちて2回目で合格したので自信(?)を持って言えますが、3章から順に勉強しない方が良いです。なぜかというと、ここからが2級のメイン!と意気込んで勉強するも意味がわからず挫折orz となること間違いなしだからです。点推定も信頼区間も、割と挫折を誘います。

なので、まずは3〜6章を一通り眺めて、自分にしっくりきそうな章を1つだけ見つけてください。見つかったらその章を浅く理解します。そしてその後、他の章へ戻り浅く理解し、ぐるぐると浅い理解を反復し、最終的に3〜6章全部の理解を深めましょう。

じつは3〜6章は推測統計の枠に入った仲間たちなので、どこから始めても横のつながりが垣間見えて、最終的には全部つながります。(そこが2級の醍醐味なのかもしれません)

なお私は、

仮説検定を浅く理解
↓
適合度の検定と独立性の検定を楽しむ(∵意外と計算が楽なので)
↓
分散分析を楽しむ(∵意外と計算が楽なので。但し一元配置に限る。)
↓
仮説検定を浅く理解
↓
線形回帰をチラ見
↓
仮説検定を浅く理解
↓
点推定・信頼区間をチラ見
↓
仮説検定の問題を解きまくる
点推定・信頼区間の問題を解きまくる
たまに適合度独立性分散分析線形回帰の問題を解く
・・・

のようなループで理解を深めることができ・・・たと思います。

その他

合格者の声

合格してから気づいたのですが、公式サイトの統計検定TOP > 合格者の声 > 2級も必見です。様々な方の勉強方法やモチベーションが書かれています。

電卓

10桁ぐらい表示できれば十分でしょう。私が買ったのは「CASIO MH-10T」です。電卓で大事なことを箇条書きすると、

  • 電卓を叩いた時のレスポンスが極めて大事
  • [C]・[AC]の挙動の違いを理解する
  • [M+]・[M-]・[MRC]を駆使する
  • [ = ] を押さなくても計算ができる場合があることを理解する

です。たとえば、 n = 20なデータの組 (x_i, y_i). i \in [1,n] の、

  • 総和
  • 二乗和
  • 積和
  • 平均
  • 分散
  • 共分散
  • 回帰係数の傾きの推定量
  • 回帰係数の切片の推定量
  • 相関係数

あたりをさらっと電卓で出せるようになると良いでしょう。慣れれば機械的に答えが出てしまいます。

細かく言えば、[=] を押さなくても計算ができる場合があることを理解するは、

i x_i y_i
1 3 4
2 7 8
3 5 6
4 1 2

とデータが与えられた時に積和: \sum{}x_i y_i を求めるとします。この時、

[3] [x] [4] [=] [M+]
[7] [x] [8] [=] [M+] 
[5] [x] [6] [=] [M+] 
[1] [x] [2] [=] [M+] 
[MRC]

と電卓を叩くのではなく、

[3] [x] [4] [M+]
[7] [x] [8] [M+] 
[5] [x] [6] [M+] 
[1] [x] [2] [M+] 
[MRC]

と叩く、ということです。素早く計算でき、かつ打鍵ミス低減 → 問題をたくさん解くことができる、に繋がります。このTipsはnが大きくなるにつれて効果が大きくなるでしょう。

おわりに

試験まで諦めずに勉強し、試験中も諦めなければなんとか合格できるはずです。Enjoy 統計学!

2級合格後の自分は?

準1級合格を目指して勉強しています。どうやら線形代数の知識をフル活用するらしく、絶賛苦しんでいる最中です。対称行列の2次形式を偏微分したり楽しい毎日を送っています。

アーカイ部

リンク

自問自答

  • なぜwiki ?
    • 更新しやすそう
  • wikiに何載せるの?
    • テキストベースで、コンサート毎のこれまでの演奏曲一覧
    • お知らせとか
    • 連絡先とか
    • リンク先とか
  • なぜdokuwiki ?
    • 誰でも更新できる ( 誰が更新するのかと言う問題。 更新されない情報サイト )
    • 構文が簡単そう
    • アクセス制御ができる
    • データベースを使用しない(テキストファイル)
  • なぜsakura の レンタルサーバー の liteプラン?
    • 安い
    • dokuwikiがインストールできそう
  • S3は何に使うの?
    • プログラムや音源を保管する
  • S3はwebサーバーじゃないけどアクセス制御どうするの?
  • 音源ファイルはでかい。ダウンロードされまくると料金がやばいのでは?
    • そこが一番の悩みどころ。
    • ダウンロードされまくった月のクレジット引き落としが怖いね
  • レン鯖の容量でかいプランにするのは?
    • そうすると年額がコンスタントに高い。
  • 全部AWSとか全部Azureで良いのでは?
    • アクセス制御のやり方がよくわからん。
      • cloudfrontやらaws lambdaやら Azure Active Directoryやらあるのは知っているが、ググってサクッと作るほど簡単ではなさそう&従量課金
  • Google Driveは?
    • Googleアカウントでアクセス制御ってのは、ちょいと面倒。全員Googleアカウント取得しないといけない。

計算

プログラム:: 11MB/1コンサート
 → 22MB/1年
 → 50年分だと → 1100MB → 1.1GB
 → 100年分だと → 2.2GB

音源:: 1.5GB/1コンサート(3時間)
 → 3GB/1年
 → 50年分だと → 150GB
 → 100年分だと → 300GB

統計学入門 p.65 問3.4 ブートストラップ(途中)

データ

data.x <- c(71,68,66,67,70,71,70,73,72,65,66)
data.y <- c(69,64,65,63,65,62,65,64,66,59,62)

相関係数

> cor(data.x, data.y)
[1] 0.5580547

ブートストラップ

11組のデータからランダムに11個復元抽出し相関係数を計算する、ような関数を作る。

bs <- function(x){
  bx <- sample(data.x,size = 11,replace = T)
  by <- sample(data.y,size = 11,replace = T)
  return( cor(bx,by) )
}

上の関数を10,000回繰り返す。

data.r <- sapply(1:10000,bs)

結果

par(mfrow=c(2,1))
hist(data.r,breaks = seq(-1,1,0.05), main="Histogram of correlation",freq = F,xlab="range of r")
lines(density(data.r), col = "orange", lwd = 2)
boxplot(data.r,horizontal = T)

f:id:axjack:20181224110122p:plain

考察

相関係数が0になることもあるよってことなのだろうか?ブートストラップ法について調べる必要がある。

期待値の基本からモーメント母関数まで

基本

確率分布の総和は1


\sum f(x) = 1\\

期待値と原点周りのモーメント

以下は記法として覚えてしまうのが得策です。


E\bigl[  X \bigr]  = \sum x f(x)  = \mu \\
E\bigl[  X^1 \bigr]  = \sum x^1 f(x)  = \sum x f(x) = \mu_1 = \mu \\
E\bigl[  X^2 \bigr]  = \sum x^2 f(x)  = \mu_2 \\
\hspace{10pt} \vdots \\
E\bigl[  X^k \bigr]  = \sum x^k f(x)  = \mu_k \\

指数関数

マクローリン展開です。

\displaystyle exp(\theta) = e^{\theta} = \sum_{\theta=0}^{k} \frac {\theta^k} {k!} = 1 + \theta + \frac {\theta^2} {2!} + \dots + \frac {\theta^k} {k!} \\
\displaystyle exp(tx) = e^{tx} = \sum_{tx=0}^{k} \frac {(tx)^k} {k!} = 1 + tx + \frac {(tx)^2} {2!} + \dots + \frac {(tx)^k} {k!} \\
\displaystyle = 1 + tx + \bigl( \frac {t^2} {2!} \bigr) x^2 + \dots + \bigl( \frac {t^k} {k!} \bigr) x^k \\

期待値の性質


E\bigl[  \ 1 \ \bigr]  = \sum  1 \times f(x) =  1 \times \sum  f(x) = 1 \times 1 = 1   \\
E\bigl[  \ 0 \ \bigr]  = \sum  0 \times f(x) = 0 \times \sum f(x) = 0 \times 1 = 0  \\
E\bigl[  \ c \ \bigr]  = \sum  cf(x) = c\sum f(x) = c \times 1  = c \\
E\bigl[  tX \bigr]  = \sum (tx) \times f(x)  = t \sum x f(x) = t E\bigl[X\bigr] = t \mu \\
E\bigl[  g(X) \bigr]  = \sum g(x)  f(x)   \\

モーメント母関数

上記の式を結集すると、モーメント母関数が理解できてく。はず。。


M_X\bigl[ \ t \ \bigr] \equiv E\bigl[  e^{tX} \bigr]  = \sum e^{tx} f(x)  = \sum \Bigl( 1 +tx + \frac{ (tx)^2 } {2!} + \cdots + \frac{(tx)^k}{k!} \Bigr) f(x) \\
= \sum \Bigl( f(x) +txf(x) + \frac{ (tx)^2 } {2!}f(x) + \cdots + \frac{(tx)^k}{k!}f(x) \Bigr) \\
= \sum \Bigl( f(x) +t\bigl( xf(x) \bigr) + \frac{t^2} {2!} \bigl( x^2 f(x) \bigr) + \cdots + \frac{t^k }{k!} \bigl( x^k f(x) \bigl) \Bigr) \\
=  \sum f(x) + \sum t\bigl( xf(x) \bigr) + \sum \frac{t^2} {2!} \bigl( x^2 f(x) \bigr) + \cdots + \sum  \frac{t^k }{k!} \bigl( x^k f(x) \bigl)  \\
=  \sum f(x) + t \sum \bigl( xf(x) \bigr) + \frac{t^2} {2!}  \sum \bigl( x^2 f(x) \bigr) + \cdots + \frac{t^k }{k!} \sum \bigl( x^k f(x) \bigl)  \\
\displaystyle= 1 + t E\bigl[ X \bigr] +  \frac{t^2} {2!} E\bigl[ X^2 \bigr] + \dots + \frac{t^k }{k!} E\bigl[ X^k \bigr] \\
\displaystyle= 1 + t\mu_1 + \frac{t^2} {2!} \mu_2 + \dots + \frac{t^k} {k!} \mu_k

となるので、


\displaystyle \left.M_X\bigl[ \ t \ \bigr]' \right |_{t=0} =  \mu_1 \\
\displaystyle \left.M_X\bigl[ \ t \ \bigr]'' \right |_{t=0} =  \mu_2 \\
\hspace{10pt} \vdots \\
\displaystyle \left.M_X\bigl[ \ t \ \bigr]^{(k)} \right |_{t=0} =  \mu_k \

を得る。

統計検定2級 2018年6月 問4の2

2010年の輸出物価指数をp_0とすると、2011年の輸出物価指数p_1は変化率r_0を用いて


p_1 = p_0 (1+r_0)

と書ける。

以下同様に書き出すと、

p_2 = p_1(1+r_1)\\
p_3 = p_2(1+r_2)\\
p_4 = p_3(1+r_3)\\
p_5 = p_4(1+r_4)\\

の式が得られる。さて、前年からの変化率が常にrであるならば

 p_5 = 100

となるので、得られた式を下から上に掛けて代入していくと、

100 = p_5 = p_0\times\prod_{i=0}^{4}(1 + r_i )

となる。ところで、「変化率が常にrである」とは 1 + r_i 1+rと置き換えるに等しい。
したがって、

100 = p_5 = p_0\times\prod_{i=0}^{4} (1+r)

を得る。よって、p_0 = 89.5 を代入し、

 
100 = p_5 = 89.5\times\prod_{i=0}^{4} (1+r) \\
= 89.5\times(1+r)^5\\
\Leftrightarrow \frac{ 100 } {89.5} = ( 1 + r )^5\\
\Leftrightarrow  ( \frac{ 100 } {89.5} )^{\frac{1}{5}} =  1 + r \\
\Leftrightarrow ( \frac{ 100 } {89.5} )^{\frac{1}{5}} - 1 =  r \\

となる。答えは②である。

axjack is said to be an abbreviation for An eXistent JApanese Cool Klutz.