[! Muchas gracias a John D Cocine durante gran parte de lo que he aprendido en la elaboración de esta respuesta]
en primer lugar, esta es la razón para no utilizar la suma de cuadrados: http://www.johndcook.com/blog/2008/09/26/
lo que debe hacer en su lugar:
Lleve un registro del recuento (n), la media (u) y una cantidad (s) a partir de la cual la varianza de la muestra y el error estándar pueden ser determinado. (Adaptado de http://www.johndcook.com/standard_deviation.html.)
Inicializa n = u = s = 0
.
Para cada nuevo punto de datos, x
:
u0 = u;
n ++;
u += (x - u)/n;
s += (x - u0) * (x - u);
La varianza de la muestra es entonces s/(n-1)
, la varianza de la media de la muestra es s/(n-1)/n
, y el error estándar de la media muestral es SE = sqrt(s/(n-1)/n)
.
Se mantiene para calcular la c
intervalo de confianza t de Student (c
en (0,1)):
u [plus or minus] SE*g((1-c)/2, n-1)
donde g
es la cdf inversa (aka cuantil) de la distribución t de Student con media 0 y varianza 1, teniendo una probabilidad y los grados de libertad (uno menos que el número de puntos de datos):
g(p,df) = sign(2*p-1)*sqrt(df)*sqrt(1/irib(1, -abs(2*p-1), df/2, 1/2) - 1)
donde irib
es la inversa regularizado función beta incompleta:
irib(s0,s1,a,b) = z such that rib(s0,z,a,b) = s1
donde rib
es la función beta incompleta regularizada:
rib(x0,x1,a,b) = B(x0,x1,a,b)/B(a,b)
donde B(a,b)
es la función beta de Euler y B(x0,x1,a,b)
es la función beta incompleta:
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
bibliotecas/estadísticas numéricas típicos tendrá implementaciones de la función beta (o el cdf inverso de la distribución de Student-t directamente). Para C, el estándar de facto es la Biblioteca Científica Gnu (GSL).A menudo se da una versión de 3 argumentos de la función beta; la generalización de 4 argumentos es el siguiente:
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)
Por último, aquí es una implementación en 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}]
Compare con
StudentTCI[u, SE, n-1, ConfidenceLevel->c]
o, cuando toda la lista de puntos de datos está disponible,
MeanCI[list, ConfidenceLevel->c]
Finalmente, si no desea cargar las bibliotecas matemáticas para cosas como la función beta, puede codificar una tabla de búsqueda para -g((1-c)/2, n-1)
. Aquí se trata de c=.95
y 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
que se asintóticamente acercando a la CDF inversa de una distribución normal (0,1) para c=.95
, que es:
-sqrt(2)*InverseErf(-c) = 1.959963984540054235524594430520551527955550...
Ver http://mathworld.wolfram.com/InverseErf.html para la función inversa erf()
. Observe que g((1-.95)/2,n-1)
no redondea a 1.96 hasta que haya al menos 474 puntos de datos. Se redondea a 2.0 cuando hay 29 puntos de datos.
Como regla general, debe utilizar Student-t en lugar de la aproximación normal para n
hasta al menos 300, no 30 por sabiduría convencional. Cf. http://www.johndcook.com/blog/2008/11/12/.
Ver también "Mejora del conteo comprimido" por Ping Li de Cornell.
PD: Creo con bastante confianza que mi respuesta a continuación ahora es completa y correcta. ¡Muchas gracias a John D Cooke y David Nehme! – dreeves
Para John D Cook: ¡Lo siento, no estoy seguro de dónde surgió la idea de poner esa E extra en tu nombre antes! – dreeves
> "La forma de hacerlo es usar una distribución de Student T con n-1 grados de libertad". --- ¿basado en que? La derivación de la distribución t se basa en * tres * cosas - que el numerador es normal (lo concederé bajo ciertas condiciones), que el denominador es una escala apropiada-chi, y que el numerador y el denominador son independientes. ¿Tienes los tres? –