ご利用にあたって
配列 x を入力して次の基本統計量を得る。 参照:「平均、分散、標準偏差」
入力
var x = [40, 20, 50, 10, 30];
var rtn = statBasic(x);
出力
rtn["標本数"] = 5 n
rtn["最小値"] = 10
rtn["最小値位置"] = 3 最小値が x[i] の i。複数あるときはは最早発生
rtn["最大値"] = 50
rtn["最大値位置"] = 2 最大値が x[i] の i。複数あるときはは最早発生
rtn["範囲"] = 40 最大値 - 最小値
rtn["合計"] = 150 Σx
rtn["平均"] = 30 μ = Σx/n
rtn["平方和"] = 5500 Σx2
rtn["偏差平方和"] = 1000 Σ(x-μ)2 = Σx2 - (Σx)2/n
rtn["不偏分散"] = 250 σ2 = 偏差平方和/(n-1)
rtn["標準偏差"] = 15.81 σ = √不偏分散
rtn["変動係数"] = 0.527 標準偏差/μn
パーセント点とは、標本 x を昇順に並べたときに、指定した p よりも小さな標本の割合が p である x[i] の値 A のこと。 p = 0.25, 0.50, 0.75 の x[i] を、第1四分位点、中央値(メジアン)、第3四分位点という。 さらに、x[i] の累計の割合が p となる件数の割合 B も算出している。 ここでは、p を小数点で表示、複数個を与えることができる。
入力
var x = [ 34, 44, 20, 32, 50, 31, 20, 45, 20, 10,
43, 23, 33, 52, 33, 29, 46, 22, 12, 30,
20, 30, 54, 35, 20, 48, 21, 12, 36, 26,
30, 56, 35, 26, 40, 20, 14, 30, 24, 41,
58, 30, 20, 42, 20, 14, 30, 23, 42, 30,
30, 24, 43, 27, 15, 30, 21, 44, 37, 60,
21, 46, 20, 14, 30, 20, 47, 38, 61, 30,
40, 20, 17, 30, 20, 49, 39, 62, 38, 20,
22, 16, 30, 28, 40, 30, 63, 35, 25, 40,
15, 35, 20, 41, 31, 64, 33, 23, 43, 20 ];
var p = [ 0.25, 0.5, 0.75, 0.9 ];
var rtn = statBasicPer(x, p);
出力
与えたp 説明のA 説明のB
rtn[0][0]=0.25 rtn[0][1]=21 rtn[0][2]=0.4
rtn[1][0]=0.5 rtn[1][1]=30 rtn[1][2]=0.65
rtn[2][0]=0.75 rtn[2][1]=41 rtn[2][2]=0.85
rtn[3][0]=0.9 rtn[3][1]=50 rtn[3][2]=0.94
配列 x, y を入力して次の基本統計量を得る。
入力
var x = [26, 25, 23, 27, 28, 25, 22, 26, 25, 23];
var y = [54, 62, 51, 58, 63, 65, 59, 63, 65, 60];
var ary = statBasic(x, y);
出力(X、Yは大文字全角で)
rtn["標本数"] = 10 n
rtn["合計X"] = 250 Σ(x)
rtn["合計Y"] = 600 Σ(y)
rtn["平均X"] = 25 μx = Σ(x)/n
rtn["平均Y"] = 60 μy = Σ(y)/n
rtn["平方和X"] = 6282 Σ(x2)
rtn["平方和Y"] = 36194 Σ(y2)
rtn["積和"] = 15023 Σ(x・y)
rtn["偏差平方和X"] = 32 Sxx = Σ(x-μx)2
rtn["偏差平方和Y"] = 194 Syy = Σ(y-μy)2
rtn["偏差積和"] = 23 Sxy = Σ(x-μx)(y-μy)
rtn["共分散"] = 2.556 Sxy/(n-1)
rtn["回帰係数X"] = 0.718 Bx = Sxy/Sxx y = a + bx のb
rtn["回帰係数Y"] = 0.119 By = Sxy/Syy x = a + by のb
rtn["寄与率"] = 0.085 r2 = Bx・By
rtn["相関係数"] = 0.291 r = √(r2)
rtn["勾配"] = 0.719 回帰係数X y = a + bx の b
rtn["Y定数項"] = 42.03 (Σ(y) - Σ(x)*勾配) / n y = a + bx の a
rtn["X定数項"] = 42.03 (Σ(x) - Σ(y)*回帰係数Y) / n x = a + by の a
回帰式:y = Y定数項 + 回帰係数X * x = 42.03 + 0.719 x
x = X定数項 + 回帰係数Y * y = 17.89 + 0.119 y
一次元配列 x[i] (i=0~m) と、境界値 bx[j] (j=0~n) を与えて, bx[j] ≦ x < bx[i+1] となる x の頻度 hx[i] ( x < bx[0] なら hx[0]. bx[n] ≦ x なら hx[n+1] )を集計、一次元配列 h[j] (j=0~n+1) を戻します。
入力
var x = [ 0.0, 0.2, 0.4, // hx[0] = 3
0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, // hx[1] = 10
2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, // hx[2] = 10
4.6, 4.8, 5.0, 5.2, 5.4, 5.6, 5.8 ]; // hx[3] = 7
var bx = [ 0.5, 2.5, 4.5 ]; // 昇順に並べる
出力
var hx = statstatHist1(x, bx);
// hx[0] = 3, hx[1] = 10, hx[2] = 10, h[3] = 7
上の statHist1 を2次元に拡張したものです。
入力
var x = [ 0.0, 0.2, 0.4,
0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4,
2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4,
4.6, 4.8, 5.0, 5.2, 5.4, 5.6, 5.8 ];
var y = [ 1, 2, 4,
1, 1, 1, 2, 2, 2, 4, 4, 4, 4,
1, 1, 1, 1, 1, 2, 2, 4, 4, 4,
1, 1, 2, 2, 4, 4, 4 ];
var bx = [ 0.5, 2.5, 4.5 ];
var by = [ 1.5, 3.5 ];
出力
var hxy = statHist2(x, y, bx, by);
hxy[jx,jy]
jx jy=0 1 2 計
0 1 1 1 3
1 3 3 4 10
2 5 2 3 10
3 2 2 3 7
計 11 8 11 30
rtn["共分散行列"]
rtn["相関行列"]
入力
標本 x[*][k]
var x = [[12, 20, 24, 26, 33], ┐
[ 3, 6, 7, 10, 14], ├ 系列 x[i][*]
[22, 16, 14, 19, 8]]; ┘
var rtn = statCovcor(x);
出力
rtn["共分散行列"]
[[ 60, 31.5, -34.75],
31.5, 17.5, -17.5],
-34.7, -17.5, 28.2]]
rtn["相関行列"]
[[ 1, 0.972, -0.844],
[ 0.972, 1, -0.787],
[-0.844, -0.787, 1 ]]
要素 0. 1. 2. …, n-1 のn個から、r個を取り出す組み合われ nCr の全リストを列挙する [r][i][j] r:選択数、i:リスト番号、j:選択要素 例 statClist(4) list[0] リスト数=0 list[1] リスト数=4 list[1][0]=0 list[1][1]=1 list[1][2]=2 list[1][3]=3 list[2] リスト数=6 list[2][0]=0,1 list[2][1]=0,2 list[2][2]=1,2 list[2][3]=0,3 list[2][4]=1,3 list[2][5]=2,3 list[3] リスト数=4 list[3][0]=0,1,2 list[3][1]=0,1,3 list[3][2]=0,2,3 list[3][3]=1,2,3 list[4] リスト数=1 list[4][0]=0,1,2,3
var list = statClist(5):
m 個の独立した原因があり、それぞれの原因により発生する n 個の結果の発生確率が与えられています。 このとき、結果 j が実現したとき、その原因が i である確率(事後確率)を求めよという問題です。 その発展として、結果 j1 と結果 j2 が同時に起こったとき、原因 i である確率も求めます。 このときは「発生」を指定します。 参照:ベイズの定理 問題 野球(A)、サッカー(B)、ラグビー(C)のスポーツ(原因)に関する多数の文章を対象にして、 ボール(X)、ファール(Y)、ゴール(Z)のキーワード(結果)の有無を発生確率にして表にしました。 (野球に関する10文書のうち、7文書に単語「ボール」があれば 0.7 とします) ある文章に、「ボール」がありました。この文章が野球に関する文章である確率は? 「ボール」と「ファール」がある文章なら、どのスポーツの文章でしょうか? 問題 3つの病気A,B,Cがあり、各病気には症状X,Y,Zがあり、例えばAのときXが起こる確率は 0.7 というような統計資料がある。診断したら症状XとYがあった。Aである確率は?
入力
X Y Z
var 客観確率 = [ [ 0.7, 0.6, 0.1], // A
[ 0.3, 0.4, 0.6], // B
[ 0.4, 0.5, 0.3] ]; // C
var 事象発生 = [ [ 1, 1, 0 ], // 出現単語を1とする 「ボール」と「ファール」が出現した場合
[ 1, 0, 1 ] ];
var p = statBayes1(客観確率, 事象発生); // 事後確率
出力
X Y Z XY XZ
0(A) p[0][0]=0.5 p[0][1]=0.4 p[0][2]=0.1 p[0][3]=0.568 p[0][4]=0.189
1(B) p[1][0]=0.214 p[1][1]=0.267 p[1][2]=0.6 p[1][3]=0.162 p[1][4]=0.486
2(C) p[2][0]=0.286 p[2][1]=0.333 p[2][2]=0.3 p[2][3]=0.27 p[2][4]=0.324
ある文書に単語「ホール」があれば、野球に関する文書である確率は 0.5、「ボール」と「ファール」があれば 0.568
問題 statBayes1 において、A,B,Cである確率(事前確率)が、0.2, 0.3, 0.5 であると想定されているとします。 それを、キーワードの出現確率を用いて事後確率にしたいのです。 statBayes1 との違いは、事前に来る割合がわかっているということですが、 出現確率に事後確率を乗ずるだけで、考え方は statBayes1 と同じです。 参照:ベイズの定理
入力
A B C
var 事前確率 = [ 0.2, 0.3, 0.5]; // 合計=1
X Y Z
var 客観確率 = [ [ 0.7, 0.6, 0.1], // A
[ 0.3, 0.4, 0.6], // B
[ 0.4, 0.5, 0.3] ]; // C
var 事象発生 = [ [ 1, 1, 0 ], // X, Y が同時に発生する場合も計算する
[ 1, 0, 1 ] ]; // X, Z が同時に発生する場合も計算する
// 複数の条件を与えないなら「事象発生」を与えない
var 事後確率 = statBayes2(事前確率, 客観確率);
出力
X Y Z XY XZ
A [0][0]=0.326 [0][1]=0.245 [0][2]=0.057 [0][3]=0.216 [0][4]=0.057
B [1][0]=0.209 [1][1]=0.245 [1][2]=0.514 [1][3]=0.139 [1][4]=0.331
C [2][0]=0.465 [2][1]=0.51 [2][2]=0.429 [2][3]=0.644 [2][4]=0.612
ある文書が野球関連文書である確率は 0.2 と思っている(事前確率)
文書にキーワード「ボール(x)」と「ファール(Y)」が入っていた。
それにより、野球関連文書である確率は 0.216 に上昇した(事後確率)
問題
伝染病対策として感染の検査を行いますが、その結果が100%正確だとはいえません。
感染している人が、検査では陰性になったり(偽陰性率)、感染していない人が陽性となったり(偽陽性率)します。
それらが、どの程度であるかを知りたいのです。
(同じようなことに、天気予報が晴といったのに雨になったり、雨と予報したのに晴れることがあります。)
ベイズ推測
ある事象 i が発生する主観確率(事前確率)を P(Hi), 検査や予報で得た確率(客観確率)を P(Di)
主観で i だとしたことが検査でも i となる確率を P(Di|Hi)
検査の結果が i だと出たとき、主観確率も考慮した事後確率を P(Hi|Di) としたとき、
P(Hi|D) = P(Hi)*P(Di|Hi) / ΣP(Hi)*P(Di|Hi)
で計算できます。
これを用いて事後確率を求めることをベイズ推測といいます。
参照:ベイズの定理
ある病気について、次のような確率があったとします。
・全集団では感染者と非感染者の割合(事前確率、主観確率)は3%と97%といわれている(実際には不明)。
P(H0) = 0.03
P(H1) = 1-P(H0) = 0.97
・これまでの統計から、正しく感染者と判明している人の検査では、98%が陽性、2%が陰性と診断される(客観確率)。
P(D0|H0) = 0.98
P(D1|H0) = 1-0.98 = 0.02
・同様に、正しく非感染者と判明している人の検査では、95%が陰性、5%が陽性と診断される(客観確率)。
P(D0|H1) = 0.05
P(D1|H1) = 1-0.05 = 0.95
これから、次の確率(事後確率)を計算します。
主観 検査 事後確率
感度(真陽性率) 感染 陽性 P(H0|D0)
特異度(真陰性率) 非感染 陰性 P(H1|D1)
偽陽性率 非感染 陽性 P(H1|D0)
偽陰性率 感染 陰性 P(H0|D1)
入力
var PH = [ 0.03, // P(H0)
0.97 ]; // P(H1)
合計=1
D0 D1
var PDH = [ [ 0.98, 0.02 ], // 合計=1 P(D0|H0) = PDH[0][0], P(D1|H0) = PDH[0][1],
[ 0.05, 0.95 ] ]; // 合計=1 P(D0|H1) = PDH[1][0], P(D1|H1) = PDH[1][1],
var PHD = statBayes3(PH, PHD);
出力
P(H0|D0) = PHD[0][0] = 0.377 感染者と思われる人が陽性と判定される確率(真陽性率)
P(H0|D1) = PHD[0][1] = 0.001 感染者と思われる人が陰性と判定される確率(偽陰性率)
P(H1|D0) = PHD[1][0] = 0.623 非感染者と思われる人が陽性と判定される確率(偽陽性率)
P(H1|D1) = PHD[1][1] = 0.999 非感染者と思われる人が陰性と判定される確率(真陰性率)
(注)
偽陽性率が大きいのは、事前確率での感染率 P(H01) が小さいからです。
「ほとんどが非感染者なので陽性になることはめったにない」のに
「めったにないことが発生した」ことが大きく影響したのです。