Ch.2 「1次元のデータ」の章末問題の解答例 〜基礎統計学Ⅰ 統計学入門(東京大学出版会)〜

当記事は「基礎統計学Ⅰ 統計学入門(東京大学出版会)」の読解サポートにあたってChapter.2の「$1$次元のデータ」の章末問題の解説について行います。
※ 基本的には書籍の購入者向けの解説なので、まだ入手されていない方は下記より入手をご検討ください。また、解説はあくまでサイト運営者が独自に作成したものであり、書籍の公式ページではないことにご注意ください。(そのため著者の意図とは異なる解説となる可能性はあります)

・解答まとめ
https://www.hello-statisticians.com/answer_textbook_stat_basic_1-3#red

章末の演習問題について

問題2.1の解答例

問題2.2の解答例

下記を実行することで平均差とジニ係数の計算を行うことができる。

import numpy as np

A = np.array([0., 3., 3., 5., 5., 5., 5., 7., 7., 10.])
B = np.array([0., 1., 2., 3., 5., 5., 7., 8., 9., 10.])
C = np.array([3., 4., 4., 5., 5., 5., 5., 6., 6., 7.])

diff_A, diff_B, diff_C = 0., 0., 0.
for i in range(10):
    for j in range(10):
        diff_A += np.abs(A[i]-A[j])/100.
        diff_B += np.abs(B[i]-B[j])/100.
        diff_C += np.abs(C[i]-C[j])/100.

gini_A = diff_A/(2.*np.mean(A))
gini_B = diff_B/(2.*np.mean(B))
gini_C = diff_C/(2.*np.mean(C))

print("diff_A: {:.2f}, diff_B: {:.2f}, diff_C: {:.2f}".format(diff_A,diff_B,diff_C))
print("gini_A: {:.3f}, gini_B: {:.3f}, gini_C: {:.3f}".format(gini_A,gini_B,gini_C))

・実行結果

> print("diff_A: {:.2f}, diff_B: {:.2f}, diff_C: {:.2f}".format(diff_A,diff_B,diff_C))
diff_A: 2.76, diff_B: 3.76, diff_C: 1.20
> print("gini_A: {:.3f}, gini_B: {:.3f}, gini_C: {:.3f}".format(gini_A,gini_B,gini_C))
gini_A: 0.276, gini_B: 0.376, gini_C: 0.120

問題2.3の解答例

下記を実行することでエントロピーの計算を行うことができる。

import numpy as np

res_recent = np.array([32., 19., 10., 24., 15.])
res_previous = np.array([28., 13., 18., 29., 12.])

prob_recent = res_recent/np.sum(res_recent)
prob_previous = res_previous/np.sum(res_previous)

entropy_recent = np.sum(-prob_recent*np.log10(prob_recent))
entropy_previous = np.sum(-prob_previous*np.log10(prob_previous))

print("Recent entropy: {:.3f}".format(entropy_recent))
print("Previous entropy: {:.3f}".format(entropy_previous))

・実行結果

> print("Recent entropy: {.3f}".format(entropy_recent))
Recent entropy: 0.668
> print("Previous entropy: {.3f}".format(entropy_previous))
Previous entropy: 0.670

計算結果より、集中度合いは緩和していないことが確認できる。また、巻末の解答と結果を合わせるにあたって、エントロピーの計算には常用対数を用いた。

問題2.4の解答例

下記を実行することで標準得点$z_i$と、偏差値得点$T_i=10z_i+50$を計算することができる。

import numpy as np

B = np.array([0., 1., 2., 3., 5., 5., 7., 8., 9., 10.])

s = np.sqrt(np.sum((B-np.mean(B))**2)/B.shape[0])
z = (B-np.mean(B))/s
T = 10.*z + 50.

print("z: {}".format(z))
print("T: {}".format(T))

・実行結果

> print("z: {}".format(z))
z: [-1.52145155 -1.21716124 -0.91287093 -0.60858062  0.          0.
  0.60858062  0.91287093  1.21716124  1.52145155]
> print("T: {}".format(T))
T: [ 34.78548451  37.82838761  40.87129071  43.91419381  50.          50.
  56.08580619  59.12870929  62.17161239  65.21451549]

まとめ