- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-11-07T09:47:18+00:00","","")
#author("2019-11-18T07:12:56+00:00","","")
#mynavi()
#setlinebreak(on)
#html(<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML"></script>)
* 目次 [#gbdcb128]
#contents()
- 関連
-- [[機械学習の為の数学の基礎]]
-- [[numpy入門]]
-- [[pandas入門]]
- 参考
-- [[統計Web>https://bellcurve.jp/statistics/]]
* 平均値 [#h483edc5]
#html(<div style="padding-left: 10px;">)
#html(){{
数式では μ(ミュー) や
<math>
<mover>
<mo>x</mo>
<mo>-</mo>
</mover>
</math>
として表される。
}}
#html(){{
<div style="padding-left: 10px;">
<math>
<mrow>
<mfrac>
<mi>1</mi>
<mo>n</mo>
</mfrac>
</mrow>
<munderover>
<mi>∑</mi>
<mrow>
<mi>i</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</munderover>
<msub>
<mo>x</mo>
<mi>1</mi>
</msub>
</math>
</div>
}}
#html(</div>)
//** トリム平均 [#d316d1d2]
//外れ値を除いた平均
* 中央値 [#d619971c]
#html(<div style="padding-left: 10px;">)
データを小さい順に並べたとき中央に位置する値。
#html(</div>)
* 最頻値 [#yf66f31a]
#html(<div style="padding-left: 10px;">)
最も頻繁に出現する値。
#html(</div>)
* 四分位範囲(IQR) [#bc1ef84e]
#html(<div style="padding-left: 10px;">)
散らばりの程度を表す尺度の一つ。
四分位範囲(IQR) = 75パーセンタイル(第三四分位数) - 25パーセンタイル(第一四分位数)
#mycode2(){{
data = np.array([2,69,67,75,84,92,80,77,65,78,84,95,71])
# 四分位点を求める
q25, q75 = np.percentile(data, [25 ,75])
# 四分位範囲
iqr = q75 - q25
print(q25, q75 )
print(iqr)
}}
** 外れ値について [#d31cf194]
#html(<div style="padding-left: 10px;">)
外れ値の定義は扱われるデータによって変わるが、一般的には、値 < (Q1 - 1.5 * IQR) または 値 > (Q3 + 1.5 * IQR) を外れ値として扱う。
例1) 上記のデータから外れ値を除外する例
#mycode2(){{
print(data[(data >= q25 - 1.5 * iqr) & (data <= q75 + 1.5 * iqr)])
}}
結果
#myterm2(){{
[69 67 75 84 92 80 77 65 78 84 95 71] # 2 が除外されている
}}
例2) 平均 ±Nσ の範囲外を外れ値として扱う場合
※ 平均 ± 標準偏差 * N
#mycode2(){{
# 平均 ±2σ を外れ値として扱う場合
N = 2
s_plus = data.mean() + (N * data.std())
s_minus = data.mean() - (N * data.std())
print(data[(data >= s_minus) & (data <= s_plus)])
}}
結果
#myterm2(){{
[69 67 75 84 92 80 77 65 78 84 95 71] # 2 が除外されている
}}
#html(</div>)
#html(</div>)
* 分散 ( variance ) [#td2ef10c]
#html(<div style="padding-left: 10px;">)
データのばらつきを表す値。
#html(<div style="display: inline-block; vertical-align: top;">)
1. 各データと平均値の差を求める
2. 1で求めた値を2乗する
3. 2で求めた値をすべて足す
4. 3で求めた値をデータ数で割る
#html(</div>)
#html(<div style="display: inline-block; vertical-align: top; padding: 30px;"> → </div>)
#html(<div style="display: inline-block; vertical-align: top; padding: 20px;">)
#html(){{
<math>
<mrow>
<mfrac>
<mi>1</mi>
<mo>n</mo>
</mfrac>
</mrow>
<munderover>
<mi>∑</mi>
<mrow>
<mi>i</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</munderover>
<mrow>
<msup>
<mrow>
<mo>(</mo>
<msub>
<mi>x</mi>
<mi>i</mi>
</msub>
<mo>-</mo>
<mover>
<mi>x</mi>
<mo>-</mo>
</mover>
<mo>)</mo>
</mrow>
<mi>2</mi>
</msup>
</mrow>
</math>
}}
#html(</div>)
例)
#mycode2(){{
import numpy as np
x = [1,2,3,4,5]
np.sum((x - np.mean(x)) ** 2) / len(x) # 2.0
}}
#html(</div>)
* 標準偏差 [#nb151669]
#html(<div style="padding-left: 10px;">)
標準偏差を求めるには、分散の平方根(ルート)をとる。
#html(){{
<div>
<math>
<mo>標準偏差</mo>
<mo>=</mo>
<msqrt>
<mrow>
<mfrac>
<mi>1</mi>
<mo>n</mo>
</mfrac>
</mrow>
<munderover>
<mi>∑</mi>
<mrow>
<mi>i</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</munderover>
<mrow>
<msup>
<mrow>
<mo>(</mo>
<msub>
<mi>x</mi>
<mi>i</mi>
</msub>
<mo>-</mo>
<mover>
<mi>x</mi>
<mo>-</mo>
</mover>
<mo>)</mo>
</mrow>
<mi>2</mi>
</msup>
</mrow>
</msqrt>
</math>
</div>
}}
#mycode2(){{
import numpy as np
x = [1,2,3,4,5]
np.std(x)
# 1.4142135623730951
np.sqrt(np.sum((x - np.mean(x)) ** 2) / len(x))
# 1.4142135623730951
}}
** 不偏分散と標本標準偏差 [#o9973d89]
#html(<div style="padding-left: 10px;">)
不偏分散の平方根をとる事で標本標準偏差を求める事ができる。
※不偏分散は、標本分散から母分散を推測するための分散で全標本数-1で割る。
#html(){{
<math>
<mo>標本標準偏差</mo>
<mo>=</mo>
<msqrt>
<mfrac>
<mo>1</mo>
<mo>(n - 1)</mo>
</mfrac>
<munderover>
<mi>∑</mi>
<mrow>
<mi>i</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mi>n</mi>
</munderover>
<mrow>
<msup>
<mrow>
<mo>(</mo>
<mo>x</mo>
<mo>-</mo>
<mover>
<mo>x</mo>
<mo>-</mo>
</mover>
<mo>)</mo>
</mrow>
<mi>2</mi>
</msup>
</mrow>
</msqrt>
</math>
}}
#mycode2(){{
data = np.array([...])
np.sqrt(np.sum((data - m) ** 2) / (len(data) - 1))
}}
#html(</div>)
** 偏差値の求め方 [#hbfb6d02]
#html(<div style="padding-left: 10px;">)
偏差値は、元のデータを平均が50、標準偏差が10となるように変換した値。
#html(){{
<math>
<mo>偏差値</mo>
<mo>=</mo>
<mfrac>
<mrow>
<mo>x</mo>
<mo>-</mo>
<mover>
<mo>x</mo>
<mo>-</mo>
</mover>
</mrow>
<mo>s</mo>
</mfrac>
<mo>*</mo>
<mi>10</mi>
<mo>+</mo>
<mi>50</mi>
</math>
}}
※ s: 標準偏差
#mycode2(){{
score = np.array([82, 95, 74, 65, 77, 88])
# 標準偏差
s = np.sqrt(((score - score.mean()) ** 2).sum() / (len(score)))
# 偏差値
print((score - score.mean()) / s * 10 + 50)
}}
結果
#myterm2(){{
[51.89289775 65.31526361 43.6329803 34.34057317 46.73044934 58.08783584]
}}
#html(</div>)
#html(</div>)
* Z得点(z値、z-score、z-value) [#ha83d6c4]
#html(<div style="padding-left: 10px;">)
平均が0、標準偏差(SD)が1になるように変換した得点。
※平均から標準偏差何個ぶん離れているか。
※ z = (データ - 平均) / 標準偏差
#html(){{
<math>
<mo>z</mo>
<mo>=</mo>
<mfrac>
<mo>x - μ</mo>
<mo>σ</mo>
</mfrac>
</math>
}}
#html(</div>)
* 相関係数 [#xc2ec0e9]
#html(<div style="padding-left: 10px;">)
#TODO
相関係数は相関関係の強弱を数値化したもの。
※相関係数は -1 <= r <= 1 の値を持ち、1 (または -1) に近いほど相関関係が強い。
#html(){{
<math>
<mo>r</mo>
<mo>=</mo>
<mfrac>
<msub>
<mo>x と y の共分散</mo>
</msub>
<mrow>
<mo>xの標準偏差</mo>
<mo>・</mo>
<mo>yの標準偏差</mo>
</mrow>
</mfrac>
<mo>=</mo>
<mfrac>
<msub>
<mo>S</mo><mo>xy</mo>
</msub>
<mrow>
<msub>
<mo>S</mo><mo>x</mo>
</msub>
<msub>
<mo>S</mo><mo>y</mo>
</msub>
</mrow>
</mfrac>
<mo>=</mo>
<mfrac>
<mrow>
<mfrac><mi>1</mi><mo>n</mo></mfrac>
<munderover><mi>∑</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover>
<mrow><mo>(</mo> <msub><mi>x</mi><mi>i</mi></msub> <mo>-</mo> <mover><mi>x</mi><mo>-</mo></mover> <mo>)</mo></mrow>
<mrow><mo>(</mo> <msub><mi>y</mi><mi>i</mi></msub> <mo>-</mo> <mover><mi>y</mi><mo>-</mo></mover> <mo>)</mo></mrow>
</mrow>
<mrow>
<mrow>
<msqrt>
<mrow><mfrac><mi>1</mi><mo>n</mo></mfrac></mrow>
<munderover><mi>∑</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover>
<mrow><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>i</mi></msub><mo>-</mo><mover><mi>x</mi><mo>-</mo></mover><mo>)</mo></mrow><mi>2</mi></msup></mrow></mrow>
</msqrt>
<msqrt>
<mrow><mfrac><mi>1</mi><mo>n</mo></mfrac></mrow>
<munderover><mi>∑</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover>
<mrow><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>i</mi></msub><mo>-</mo><mover><mi>x</mi><mo>-</mo></mover><mo>)</mo></mrow><mi>2</mi></msup></mrow></mrow>
</msqrt>
</mrow>
</mrow>
</mfrac>
</math>
}}
#mycode2(){{
x = np.array([82, 95, 74, 65, 77, 88])
y = np.array([2, 3, 1.5, 0.5, 1, 1.5])
n = x.size
x_mean = x.mean()
y_mean = y.mean()
x_std = x.std()
y_std = y.std()
# x と y の共分散を求める
cov = np.sum([(x - x_mean) * (y - y_mean)]) / n
# cov = np.cov(x, y, ddof=0)[0][1] # 共分散は np.cov でも求める事ができる
# 相関係数を求める
r = cov / (x_std * y_std)
print(r)
print(np.corrcoef(x, y)) # 相関係数は np.corrcoef でも求める事ができる
}}
結果
#myterm2(){{
0.8737254372984308
[[1. 0.87372544]
[0.87372544 1. ]]
}}
#html(</div>)
* 標準化係数 [#rabe09ac]
#html(<div style="padding-left: 10px;">)
(データ - 平均) / 標準偏差
※標準偏差何個分離れているか (平均を1とする)
※±1 以内は全体の 68% に含まれる
#html(</div>)
* P値 [#n9dbf60c]
#html(<div style="padding-left: 10px;">)
#html(</div>)
* 有意水準 [#i8cc1bb0]
#html(<div style="padding-left: 10px;">)
#html(</div>)
* 効果量 [#he47c768]
#html(<div style="padding-left: 10px;">)
#html(</div>)
* 検出力 [#x0752a31]
#html(<div style="padding-left: 10px;">)
#html(</div>)
* t検定 [#vf10a21a]
#html(<div style="padding-left: 10px;">)
#html(</div>)
* 加重平均 [#db3031bc]
#html(<div style="padding-left: 10px;">)
異なる母数を持つ複数の平均の平均を求める
#html(</div>)
* 平均 ±Nσ [#e5547bf0]
#html(<div style="padding-left: 10px;">)
平均 ± 標準偏差 * N (範囲外は外れ値として扱う。等)
#html(</div>)
* その他 [#p6afe4da]
#html(<div style="padding-left: 10px;">)
** 正規分布の「68-95-99.7ルール」 [#kcffce6a]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)
** 標準正規分布表(Zテーブル)を使用した分布率の算出 [#gb7ced3a]
#html(<div style="padding-left: 10px;">)
#TODO
#html(</div>)
#html(</div>)
// その他