6

大きい場合n(十分な大きさを決定する方法については以下を参照)、中心極限定理により、標本平均の分布を正規 (ガウス) として扱っても安全ですが、任意の信頼区間を与える手順が必要です。n. n-1その方法は、自由度のあるスチューデント T 分布を使用することです。

そこで問題は、一度に 1 つずつ収集または遭遇する一連のデータ ポイントが与えられた場合、 (以前に遭遇したすべてのデータを保存せずに) データ ポイントの平均に対する信頼区間c(たとえば) をどのように計算するかということです。c=.95

これを尋ねる別の方法は、次のとおりです。ストリーム全体を保存せずに、データ ストリームの最初と 2 番目の瞬間をどのように追跡しますか?

ボーナス質問: ストリーム全体を保存せずに、より高い瞬間を追跡できますか?

4

6 に答える 6

5

これは、データを保存せずに、シングルパスで平均と標準偏差を計算する方法に関する記事です。これらの2つの統計を取得したら、信頼区間を推定できます。[mean - 1.96*stdev, mean + 1.96*stdev]データと多数のデータポイントの正規分布を想定すると、95%の信頼区間はになります。

データポイントの数が少ない場合、信頼区間はサンプルサイズと信頼水準[mean - c(n)*stdev, mean + c(n)*stdev]c(n)依存します。95%の信頼水準の場合、c(n)for n= 2、3、4、...、30の値は次のとおりです。

12.70620、4.302653、3.182446、2.776445、2.570582、2.446912、2.364624、2.306004、2.262157、2.228139、2.200985、2.178813、2.160369、2.144787、2.131450、2.119905、2.109816、2.100922、2.093024、2.085963、2.079614、2.073873、2.068658、2.063899、2.0 2.055529、2.051831、2.048407、2.045230

これらの数値はg(0.025, n-1)、ng自由度のt分布の逆CDFです。99%の信頼区間が必要な場合は、0.025を0.005に置き換えます。一般に、信頼水準がの場合は1-alpha、を使用しますalpha/2

上記の定数を生成したRコマンドは次のとおりです。

n = seq(2, 30); qt(0.025, n-1)

上記の数値が予想ほど1.96に近くない理由を説明するブログ投稿があります。

于 2008-11-12T00:37:26.870 に答える
4

[この回答をまとめることで学んだ多くのことについて、John D Cook に心から感謝します!]

まず、平方和を使用しない理由は次のとおりです: http://www.johndcook.com/blog/2008/09/26/

代わりにすべきこと:

カウント (n)、平均 (u)、および数量 (s) を追跡して、そこからサンプル分散と標準誤差を決定できます。( http://www.johndcook.com/standard_deviation.htmlから適応。)

初期化しn = u = s = 0ます。

新しいデータポイントごとに、次のようになりxます。

u0 = u;
n ++;
u += (x - u) / n;
s += (x - u0) * (x - u);

この場合、標本分散はs/(n-1)、標本平均の分散は 、標本平均s/(n-1)/nの標準誤差は ですSE = sqrt(s/(n-1)/n)

Student-tc信頼区間 ( cin (0,1))を計算する必要があります。

u [plus or minus] SE*g((1-c)/2, n-1)

ここgで、確率と自由度 (データ ポイント数より 1 少ない数) を取る、平均 0、分散 1 のスチューデント t 分布の逆累積分布関数 (別名、分位数) です。

g(p,df) = sign(2*p-1)*sqrt(df)*sqrt(1/irib(1, -abs(2*p-1), df/2, 1/2) - 1)

ここiribで、逆正則化された不完全ベータ関数は次のとおりです。

irib(s0,s1,a,b) = z such that rib(s0,z,a,b) = s1

正規化されribた不完全なベータ関数は次のとおりです。

rib(x0,x1,a,b) = B(x0,x1,a,b) / B(a,b)

ここB(a,b)で、 はオイラー ベータ関数、B(x0,x1,a,b)は不完全なベータ関数です。

B(a,b) = Gamma(a)*Gamma(b)/Gamma(a+b) = integral_0^1 t^(a-1)*(1-t)^(b-1) dt
B(x0,x1,a,b) = integral_x0^x1 t^(a-1)*(1-t)^(b-1) dt

典型的な数値/統計ライブラリには、ベータ関数 (またはスチューデント t 分布の逆累積分布関数) が直接実装されています。C の場合、事実上の標準は Gnu Scientific Library (GSL) です。多くの場合、ベータ関数の 3 引数バージョンが与えられます。4 つの引数への一般化は次のとおりです。

B(x0,x1,a,b) = B(x1,a,b) - B(x0,a,b)
rib(x0,x1,a,b) = rib(x1,a,b) - rib(x0,a,b)

最後に、Mathematica での実装を次に示します。

(* Take current {n,u,s} and new data point; return new {n,u,s}. *)
update[{n_,u_,s_}, x_] := {n+1, u+(x-u)/(n+1), s+(x-u)(x-(u+(x-u)/(n+1)))}

Needs["HypothesisTesting`"];
g[p_, df_] := InverseCDF[StudentTDistribution[df], p]

(* Mean CI given n,u,s and confidence level c. *)
mci[n_,u_,s_, c_:.95] := With[{d = Sqrt[s/(n-1)/n]*g[(1-c)/2, n-1]}, 
  {u+d, u-d}]

比較する

StudentTCI[u, SE, n-1, ConfidenceLevel->c]

または、データポイントのリスト全体が利用可能な場合、

MeanCI[list, ConfidenceLevel->c]

最後に、ベータ関数などの数学ライブラリをロードしたくない場合は、 のルックアップ テーブルをハードコーディングできます-g((1-c)/2, n-1)。ここに と がc=.95ありn=2..100ます:

12.706204736174698, 4.302652729749464, 3.182446305283708, 2.7764451051977934, 2.570581835636314, 2.4469118511449666, 2.3646242515927853, 2.306004135204168, 2.262157162798205, 2.2281388519862735, 2.2009851600916384, 2.178812829667226, 2.1603686564627917, 2.1447866879178012, 2.131449545559774, 2.1199052992212533, 2.1098155778333156, 2.100922040241039, 2.093024054408307, 2.0859634472658626, 2.0796138447276835, 2.073873067904019, 2.0686576104190477, 2.0638985616280254, 2.0595385527532963, 2.05552943864287, 2.051830516480281, 2.048407141795243, 2.0452296421327034, 2.042272456301236, 2.039513446396408, 2.0369333434600976, 2.0345152974493392, 2.032244509317719, 2.030107928250338, 2.0280940009804462, 2.0261924630291066, 2.024394163911966, 2.022690920036762, 2.0210753903062715, 2.0195409704413745, 2.018081702818439, 2.016692199227822, 2.0153675744437627,2.0141033888808457, 2.0128955989194246, 2.011740513729764, 2.0106347576242314, 2.0095752371292335, 2.0085591121007527, 2.007583770315835, 2.0066468050616857, 2.005745995317864, 2.0048792881880577, 2.004044783289136, 2.0032407188478696, 2.002465459291016, 2.001717484145232, 2.000995378088259, 2.0002978220142578, 1.9996235849949402, 1.998971517033376, 1.9983405425207483, 1.997729654317692, 1.9971379083920013, 1.9965644189523084, 1.996008354025304, 1.9954689314298386, 1.994945415107228, 1.9944371117711894, 1.9939433678456229, 1.993463566661884, 1.9929971258898527, 1.9925434951809258, 1.992102154002232, 1.9916726096446793, 1.9912543953883763, 1.9908470688116922, 1.9904502102301198, 1.990063421254452, 1.989686323456895, 1.9893185571365664, 1.9889597801751728, 1.9886096669757192, 1.9882679074772156, 1.9879342062390228, 1.9876082815890748, 1.9872898648311672, 1.9869786995062702, 1.986674540703777, 1.986377154418625, 1.9860863169510985, 1.9858018143458114, 1.9855234418666061, 1.9852510035054973, 1.9849843115224508, 1.9847231860139618, 1.98446745450849, 1.9842169515863888

これは、 の正規 (0,1) 分布の逆 CDF に漸近的に近づいてc=.95います。

-sqrt(2)*InverseErf(-c) = 1.959963984540054235524594430520551527955550...

逆関数については、 http://mathworld.wolfram.com/InverseErf.htmlを参照してください。少なくとも 474 個のデータ ポイントが存在するまで、 は 1.96 に丸められないことにerf()注意してください。g((1-.95)/2,n-1)29 個のデータ ポイントがある場合、2.0 に丸められます。

経験則として、n従来の通念による 30 ではなく、少なくとも 300 までは通常の近似の代わりに Student-t を使用する必要があります。参照。http://www.johndcook.com/blog/2008/11/12/ .

Cornell の Ping Li による「Improving Compressed Counting」も参照してください。

于 2008-11-12T06:25:51.610 に答える
2
   sigma = sqrt( (q - (s*s/n)) / (n-1) )
   delta = t(1-c/2,n-1) * sigma / sqrt(n)

ここで、t(x、n-1)は、n-1自由度のt分布です。gslを使用している場合

t = gsl_cdf_tdist_Qinv (c/2.0, n-1)

二乗和以外のデータを保存する必要はありません。ここで、平方和が非常に大きくなる可能性があるため、数値の問題が発生する可能性があります。sの代替定義を使用できます

sigma = sqrt(sum(( x_i - s/n )^2 / (n-1)))

そして2つのパスを作ります。数値の問題を回避するために、 gnuScientificLibraryまたはRのようなパッケージの使用を検討することをお勧めします。また、中心極限定理の使用にも注意してください。それの乱用は、現在起こっている金融危機全体のせいに部分的になっています。

于 2008-11-12T00:40:02.120 に答える
1

二乗和を累積したくありません。結果の統計は数値的に不正確です。2つの大きな類似した数値を減算することになります。分散、または(n-1)*分散、またはそのようなものを維持したい。

簡単な方法は、データポイントを段階的に蓄積することです。公式は複雑でも導き出すのも難しいことではありません(John D. Cookのリンクを参照)。

これを行うさらに正確な方法は、データポイントをペアワイズ再帰的に結合することです。これは、nのメモリ対数で行うことができます。レジスタkは、2 ^ k個の古いデータポイントの統計を保持し、2 ^ k個の新しいポイントの統計と組み合わせて、2 ^(k + 1)ポイントの統計を取得します。

于 2008-11-12T00:46:04.090 に答える
1

nのサイズは、まもなく通常の分布と考えられる 30 を超えますので、それほど気にする必要はないと思います。以前のサンプルからのデータポイントを保存したくない場合は、通常のモデルを想定して、ベイジアン再帰を使用して母集団の平均と分散パラメーターで事後推論を行うことが最善の方法だと思います。平均と分散、具体的には式 38a、38b、38c の共同推論については、このドキュメントを参照してください。

于 2010-02-05T18:00:18.993 に答える
-7

できると思います。私はそれのためにグーグル/ウィキペディアに行かなければならないので、それを読者のための練習として残しておきます。

于 2008-11-12T00:37:22.877 に答える