Elección del error estándar correcto: balanza entre precisión y exactitud

Última actualización: Edgar Rueda, Mayo 2016

Nota: no ha sido revisado por pares

Con este programa se pretende sensibilizar a los estudiantes en la importancia de elegir el error estándar correcto, priorizando la exactitud sobre la precisión.

El programa permite elegir el valor exacto y su dispersión debido a la aleatoriedad en la medida. Igualmente se puede elegir el número de datos de cada muestra, el número de muestras a observar, y la incerteza en la elección del valor de la corrección de t-student.


In [1]:
import numpy as np
import pylab as plt
from scipy import stats

%matplotlib inline

In [12]:
mu = 100. # Valor exacto
sigma = 3. # Dispersión de los datos debido a factores aleatorios
data = np.random.normal(mu,sigma,1000) # Generación de datos de la distribución normal

In [14]:
incerteza = 0.01 # Incerteza aceptada para la corrección de t-student
numdatos = 3 # Número de datos de la muestra
opc = numdatos # Numero de posibles resultados a comparar (número de muestras)

l1 = np.ones(numdatos) # para graficar los datos de cada muestra en una línea
plt.figure(figsize=(16,opc*3)) 

promu = 0.
devmu = np.zeros(opc)

for cont in range(0,opc):
    d3 = data[cont*numdatos:cont*numdatos + numdatos] # datos de la muestra
    md3 = np.mean(d3) # valor promedio de la muestra
    sd3 = np.std(d3,ddof=1)/np.sqrt(numdatos) # error estándar de la muestra
    sd = np.std(d3,ddof=1) # Desviación estándar de una muestra
    sd3_3s = 3*sd3 # error estándar con tres sigma
    aux = stats.t.interval(1-incerteza,numdatos-1,loc=0,scale=1) # para determinar la corrección de t-student
    valor_t = aux[1] # corrección de t-student
    sd3_t = valor_t*sd3 # error estándar con t-student
    
    # Graficación de los resultados
    plt.subplot(opc,1,cont+1)
    plt.axvline(mu,linewidth=3, c="black",label='valor exacto')
    plt.plot(d3,l1,linewidth=0,marker='.',ms=12,c='black',label='Datos')
    plt.plot([md3-sd3, md3+sd3], [1, 1], linewidth=3, linestyle="-", color="red",solid_capstyle="butt",label='sigma')
    plt.plot([md3-sd3_3s, md3+sd3_3s], [2, 2], linewidth=3, linestyle="-", color="blue",solid_capstyle="butt",label='3sigma')
    plt.plot([md3-sd3_t, md3+sd3_t], [3, 3], linewidth=3, linestyle="-", color="green",solid_capstyle="butt",label='t-student')
    plt.legend()
    plt.xlim(mu-3*sigma,mu+3*sigma) 
    plt.ylim(0,4)
    
    promu = promu + md3
    devmu[cont] = md3
    
promu = promu/float(opc)
devmu = np.std(devmu,ddof=1)

print('Dato de una muestra:')
print('media = %.1f' % md3)
print('desviación estándar = %.1f' % sd)
print('error estándar = %.1f' % (sd/np.sqrt(numdatos)))

print('\nDatos conjunto de %d muestras:' % numdatos)
print('media = %.1f' % promu)
print('desviación estándar = %.1f' % (devmu))
    
print('\nParámetros:')
print('Valor exacto de la media de la distribución = %.f' % mu)
print('Dispersión de los datos de la distribución (desviación estándar) = +/- %.f' % sigma)
print('Incerteza para t-student = %.f%%' % (incerteza*100))
print('Número de datos por muestra = %.d' % numdatos)
print('Número de muestras a observar = %d' % opc)


Dato de una muestra:
media = 99.6
desviación estándar = 1.6
error estándar = 0.9

Datos conjunto de 3 muestras:
media = 100.3
desviación estándar = 0.9

Parámetros:
Valor exacto de la media de la distribución = 100
Dispersión de los datos de la distribución (desviación estándar) = +/- 3
Incerteza para t-student = 1%
Número de datos por muestra = 3
Número de muestras a observar = 3

In [ ]:


In [ ]: