当記事は「基礎統計学Ⅰ 統計学入門(東京大学出版会)」の読解サポートにあたって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]