[! Vielen dank an John D Koch für viel von dem, was ich bei der zusammen~~POS=TRUNC dieser Antwort gelernt]
Zuerst, hier ist der Grund nicht Summe der Quadrate zu verwenden: http://www.johndcook.com/blog/2008/09/26/
Was Sie stattdessen tun sollte:
verfolgen der Zählung (n), die mittleren (u) und eine Menge (n), aus der Stichprobenvarianz und den Standardfehler kann bestimmt. (Angepasst von http://www.johndcook.com/standard_deviation.html.)
Initialize n = u = s = 0
.
Für jeden neuen Datenpunkt, x
:
u0 = u;
n ++;
u += (x - u)/n;
s += (x - u0) * (x - u);
Die Probe wird dann Varianz s/(n-1)
, die Varianz des Stichprobenmittelwertes ist s/(n-1)/n
, und der Standardfehler der Probe bedeutet SE = sqrt(s/(n-1)/n)
ist.
Es bleibt den Student-t-c
-Konfidenzintervall (c
in (0,1)) zu berechnen:
u [plus or minus] SE*g((1-c)/2, n-1)
wo g
ist die inverse cdf (aka Quantil) der Student-t-Verteilung mit Mittelwert 0 und Varianz 1, mit einer Wahrscheinlichkeit und die Freiheitsgrade nehmen (eins weniger als die Anzahl von Datenpunkten):
g(p,df) = sign(2*p-1)*sqrt(df)*sqrt(1/irib(1, -abs(2*p-1), df/2, 1/2) - 1)
wo irib
ist die inverse unvollständige Betafunktion regula:
irib(s0,s1,a,b) = z such that rib(s0,z,a,b) = s1
wo rib
ist die regularisierten unvollständige Beta-Funktion:
rib(x0,x1,a,b) = B(x0,x1,a,b)/B(a,b)
wo B(a,b)
die Beta-Funktion Euler und B(x0,x1,a,b)
ist die unvollständige Beta-Funktion:
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
Typische Zahlen/Statistik-Bibliotheken wird Implementierungen der Beta-Funktion haben (oder das inverse cdf der Student-t-Distribution direkt). Für C ist der De-facto-Standard die Gnu Scientific Library (GSL).Oft wird eine 3-Argumente-Version der Beta-Funktion gegeben; die Verallgemeinerung auf 4 Argumente lautet wie folgt:
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)
Schließlich hier ist eine Implementierung in 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}]
zu
Vergleichen
StudentTCI[u, SE, n-1, ConfidenceLevel->c]
oder, wenn die gesamte Liste der Datenpunkte ist verfügbar,
MeanCI[list, ConfidenceLevel->c]
Schließlich, wenn Sie keine Mathe-Bibliotheken für Dinge wie die Beta-Funktion laden wollen, können Sie eine Nachschlagetabelle für -g((1-c)/2, n-1)
fest codieren. Hier ist es für c=.95
und 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,0422 724563, 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,9965644189523 084, 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
die asymptotisch die Inverse CDF einer normalen (0,1) für die Verteilung c=.95
nähert, welche ist:
-sqrt(2)*InverseErf(-c) = 1.959963984540054235524594430520551527955550...
Siehe http://mathworld.wolfram.com/InverseErf.html für die inverse Funktion erf()
. Beachten Sie, dass sich g((1-.95)/2,n-1)
nicht auf 1,96 aufrunden, bis mindestens 474 Datenpunkte vorliegen. Bei 29 Datenpunkten wird auf 2,0 gerundet.
Als Faustregel sollten Sie Student-t anstelle der normalen Approximation für n
bis zu mindestens 300 verwenden, nicht 30 pro herkömmlicher Weisheit. Vgl. http://www.johndcook.com/blog/2008/11/12/.
Siehe auch "Verbessertes komprimiertes Zählen" von Ping Li von Cornell.
PS: Ich glaube mit ziemlich hohem Vertrauen, dass meine Antwort unten vollständig und richtig ist. Vielen Dank an John D Cooke und David Nehme! – dreeves
An John D Cook: Entschuldigung, ich bin mir nicht sicher, wo ich auf die Idee gekommen bin, das extra E auf deinen Namen zu setzen! – dreeves
> "Der Weg dahin ist, eine Student T-Distribution mit n-1 Freiheitsgraden zu verwenden." --- basierend worauf? Die Ableitung der T-Verteilung beruht auf * drei * Dingen - dass der Zähler normal ist (ich gebe das unter bestimmten Bedingungen zu), dass der Nenner ein entsprechend skaliertes Chi ist und dass Zähler und Nenner unabhängig sind. Hast du alle drei? –