2008-11-12 17 views
6

Para grandes n (ver más abajo cómo determinar qué es lo suficientemente grande), es seguro tratar, según el teorema del límite central, la distribución de la media de muestra como normal (gaussiana) pero me gustaría un procedimiento que proporcione un intervalo de confianza para cualquier n. La forma de hacerlo es usar una distribución T de estudiante con n-1 grados de libertad.Calcular un intervalo de confianza medio sin almacenar todos los puntos de datos

Entonces, la pregunta es, dado un flujo de puntos de datos que reúne o encuentra uno a la vez, ¿cómo se calcula un intervalo de confianza c (por ejemplo, c=.95) en la media de los puntos de datos (sin almacenar todos los datos encontrados anteriormente)?

Otra forma de preguntar esto es: ¿cómo se hace un seguimiento del primer y segundo momento de una secuencia de datos sin almacenar toda la secuencia?

PREGUNTA DE BONIFICACIÓN: ¿Puede realizar un seguimiento de los momentos más altos sin almacenar toda la secuencia?

+0

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

+0

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

+0

> "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? –

Respuesta

3

[! 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.

-7

Creo que puedes. Tendría que buscarlo en Google/Wikipidia, así que lo dejo como un ejercicio para el lector.

4

Aquí hay un artículo en how to compute the mean and standard deviation in a single pass, que no almacena ningún dato. Una vez que tenga estas dos estadísticas, puede estimar un intervalo de confianza. Un intervalo de confianza del 95% sería [media - 1.96 * stdev, media + 1.96 * stdev], suponiendo una distribución normal para sus datos y una gran cantidad de puntos de datos.

Para un número menor de puntos de datos, su intervalo de confianza sería [mean - c (n) * stdev, mean + c (n) * stdev] donde c (n) depende del tamaño de muestra y su nivel de confianza . Para un nivel de confianza del 95%, estos son sus valores de c (n) para 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.059539, 2.055529, 2.051831, 2.048407, 2,045230

Estos números son g (0.025, n-1) donde g es la CDF inversa de la distribución t con n grados de libertad. Si quería un intervalo de confianza del 99%, reemplace 0.025 con 0.005. En general, para un nivel de confianza de 1-alfa, use alpha/2.

Aquí está el comando R que generó las constantes anteriores.

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

Aquí hay una blog post explicar por qué los números anteriores no son lo más cercano a 1,96 como se podría esperar.

+0

Tenga en cuenta que no quiero suponer una distribución normal. Es un excelente artículo, pero creo que solo es aplicable al gran n caso. – dreeves

+0

Ahora estoy apreciando la brillantez de la técnica en ese artículo, y * es * relevante aquí, solo que hay otro paso necesario, es decir, aplicar la distribución t como lo indica David Nehme. Tal vez sea mejor actualizar la pregunta ... – dreeves

+0

Agregué notas sobre cómo incorporar la distribución t para muestras pequeñas. Esto le dará una solución general para todos los n. –

2
sigma = sqrt((q - (s*s/n))/(n-1)) 
    delta = t(1-c/2,n-1) * sigma/sqrt(n) 

Donde t (x, n-1) es la distribución t con n-1 grados de libertad. si está utilizando gsl

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

No hay necesidad de almacenar los datos más allá de la suma de cuadrados. Ahora, puede tener un problema numérico porque la suma de cuadrados puede ser bastante grande. Puede usar la definición alternativa de s

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

y realizar dos pasadas. Le recomiendo que considere usar gnu scientific library o un paquete como R para ayudarlo a evitar problemas numéricos. Además, tenga cuidado con su uso del teorema del límite central.El abuso de él es en parte culpable de toda la crisis financiera que está ocurriendo en este momento.

+0

PD: John D Cooke ha proporcionado una mejor manera de realizar un seguimiento de sigma (la desviación estándar de la muestra). Así que creo que la forma correcta de estructurar esto para la posteridad es eliminar la presunción de suma de cuadrados de la pregunta y combinar las respuestas de John y de usted. – dreeves

+0

Hecho. Además, creo que quieres el CDF inverso, ¿verdad? Escribí mi respuesta en términos de la función beta de Euler. – dreeves

+0

¿Quiere decir t ((1-c)/2, n-1)? Y luego t (p, df) = gsl_cdf_tdist_Qinv (p, df)? – dreeves

1

No desea acumular la suma de cuadrados. Las estadísticas resultantes son numéricamente inexactas: terminará restando dos números grandes y similares. Desea mantener la varianza, o la varianza (n-1) *, o algo así.

La manera directa es acumular los puntos de datos de forma incremental. La fórmula no es complicada ni difícil de derivar (ver el enlace de John D. Cook).

Una forma aún más precisa de hacerlo es combinar los puntos de datos de forma par recursiva. Puede hacer esto con memoria logarítmica en n: registro k contiene estadísticas para 2^k puntos de datos más antiguos, que se combinan con estadísticas para 2^k puntos más nuevos para obtener estadísticas para 2^(k + 1) puntos ...

+0

No entiendo su "forma aún más precisa". Sin embargo, definitivamente me han convencido de no almacenar la suma de cuadrados. Actualizaré la pregunta. Si puedes decir más sobre la técnica "recursiva por pares", soy todo oídos. – dreeves

+0

Agregar números pequeños a un gran valor de acumulador pierde precisión, lo que puede ser importante, por ejemplo, si n es grande y los requisitos de precisión son fuertes. Si le preocupan los intervalos de confianza pequeños n, un acumulador regular debería estar bien, el gran paso es alejarse de la suma de cuadrados. – comingstorm

1

Creo que no tiene que preocuparse demasiado por el tamaño de n porque pronto superará el número de 30, donde la distribución se puede considerar como normal. Usar la recursión bayesiana para hacer una inferencia posterior en la media poblacional y los parámetros de varianza, asumiendo un modelo normal, es la mejor manera, si no quiere almacenar ningún punto de datos de muestras anteriores. Puede consultar this document para la inferencia conjunta de la media y la varianza, y específicamente las ecuaciones 38a, 38b y 38c.

+0

Gracias! En cuanto al umbral n = 30, vea el penúltimo párrafo de mi respuesta (el que inmodestamente marqué como aceptado). – dreeves

Cuestiones relacionadas