tutorial tablas probabilidad para leer funciones estadistica español ecuacion datos curso cuadratica con ajuste python python-2.7 statistics confidence-interval

tablas - Función de Python para obtener la estadística t



pandas python tutorial español (3)

Estoy buscando una función de Python (o escribir la mía si no hay una) para obtener la estadística t para usarla en un cálculo de intervalo de confianza.

He encontrado tablas que dan respuestas para varias probabilidades / grados de libertad como esta , pero me gustaría poder calcular esto para cualquier probabilidad dada. Para cualquiera que no esté familiarizado con estos grados de libertad es el número de puntos de datos (n) en su muestra -1 y los números de los encabezados de las columnas en la parte superior son probabilidades (p), por ejemplo, se usa un nivel de significación de 2 colas de 0.05 si está buscando la puntuación t para usar en el cálculo para una confianza del 95% de que si repitiera n pruebas, el resultado caería dentro de la media +/- el intervalo de confianza.

He estudiado el uso de varias funciones dentro de scipy.stats, pero ninguna que pueda ver parece permitir las entradas simples que describí anteriormente.

Excel tiene una implementación simple de esto, por ejemplo, para obtener la puntuación t para una muestra de 1000, donde necesito estar 95% seguro de que usaría: =TINV(0.05,999) y obtendría la puntuación de ~ 1.96

Aquí está el código que he usado para implementar los intervalos de confianza hasta ahora, como pueden ver, estoy usando una forma muy burda de obtener la puntuación t en el presente (solo se permiten algunos valores para perc_conf y se advierte que no es preciso para muestras <1000):

# -*- coding: utf-8 -*- from __future__ import division import math def mean(lst): # μ = 1/N Σ(xi) return sum(lst) / float(len(lst)) def variance(lst): """ Uses standard variance formula (sum of each (data point - mean) squared) all divided by number of data points """ # σ² = 1/N Σ((xi-μ)²) mu = mean(lst) return 1.0/len(lst) * sum([(i-mu)**2 for i in lst]) def conf_int(lst, perc_conf=95): """ Confidence interval - given a list of values compute the square root of the variance of the list (v) divided by the number of entries (n) multiplied by a constant factor of (c). This means that I can be confident of a result +/- this amount from the mean. The constant factor can be looked up from a table, for 95% confidence on a reasonable size sample (>=500) 1.96 is used. """ if perc_conf == 95: c = 1.96 elif perc_conf == 90: c = 1.64 elif perc_conf == 99: c = 2.58 else: c = 1.96 print ''Only 90, 95 or 99 % are allowed for, using default 95%'' n, v = len(lst), variance(lst) if n < 1000: print ''WARNING: constant factor may not be accurate for n < ~1000'' return math.sqrt(v/n) * c

Aquí hay un ejemplo de llamada para el código anterior:

# Example: 1000 coin tosses on a fair coin. What is the range that I can be 95% # confident the result will f all within. # list of 1000 perfectly distributed... perc_conf_req = 95 n, p = 1000, 0.5 # sample_size, probability of heads for each coin l = [0 for i in range(int(n*(1-p)))] + [1 for j in range(int(n*p))] exp_heads = mean(l) * len(l) c_int = conf_int(l, perc_conf_req) print ''I can be ''+str(perc_conf_req)+''% confident that the result of ''+str(n)+ / '' coin flips will be within +/- ''+str(round(c_int*100,2))+''% of ''+/ str(int(exp_heads)) x = round(n*c_int,0) print ''i.e. between ''+str(int(exp_heads-x))+'' and ''+str(int(exp_heads+x))+/ '' heads (assuming a probability of ''+str(p)+'' for each flip).''

La salida para esto es:

Puedo estar seguro al 95% de que el resultado de 1000 lanzamientos de monedas estará dentro de +/- 3.1% de 500, es decir, entre 469 y 531 cabezas (suponiendo una probabilidad de 0.5 para cada lanzamiento).

También estudié el cálculo de la t-distribution para un rango y luego devolví la puntuación t que tenía la probabilidad más cercana a la requerida, pero tuve problemas al implementar la fórmula. Avíseme si esto es relevante y quiere ver el código, pero asumí que no, ya que probablemente haya una forma más fácil.

Gracias por adelantado.


¿Has probado scipy?

Deberá instalar la biblioteca scipy ... más acerca de cómo instalarla aquí: http://www.scipy.org/install.html

Una vez instalado, puede replicar la funcionalidad de Excel como por ejemplo:

from scipy import stats #Studnt, n=999, p<0.05, 2-tail #equivalent to Excel TINV(0.05,999) print stats.t.ppf(1-0.025, 999) #Studnt, n=999, p<0.05%, Single tail #equivalent to Excel TINV(2*0.05,999) print stats.t.ppf(1-0.05, 999)

También puede leer acerca de cómo instalar la biblioteca aquí: ¿cómo instalar scipy para python?


Prueba el siguiente código:

from scipy import stats #Studnt, n=22, 2-tail #stats.t.ppf(1-0.025, df) # df=n-1=22-1=21 print (stats.t.ppf(1-0.025, 21))


Puedes probar este código:

# for small samples (<50) we use t-statistics # n = 9, degree of freedom = 9-1 = 8 # for 99% confidence interval, alpha = 1% = 0.01 and alpha/2 = 0.005 from scipy import stats ci = 99 n = 9 t = stats.t.ppf(1- ((100-ci)/2/100), n-1) # 99% CI, t8,0.005 print(t) # 3.36