Ejercicio de obtener la media y desviación típica muestral en m.a.s.

En esta entrada vamos a ver la forma de tabular y resolver un ejercicio tipo de 2º de CCSS en el que se pide comprobar que con m.a.s. se verifica que en la distribución de las medias muestrales se tiene que:

\(\mu=E[\bar{X}]\)

\(S_{\bar{x}}=\sigma_{\bar{x}}=\dfrac{\sigma}{\sqrt{n}}\)

Aunque las tablas que se obtienen de solución se pueden realizar con pandas de forma más fácil (de forma similar a como se hace en Tabla de derivadas e integrales usando LyX y pythontex), he optado por hacerlas de forma constructiva. De esa forma se pueden tener varios ejemplos de cómo mezclar LateX con funciones de python para obtener tablas tras compilar nuestro fichero con pdflatex. A partir de ellas se pueden coger ideas para realizar otro tipo de tablas con pythontex.

En la solución propuesta se ha trabajado con numpy, una librería imprescindible para el trabajo de problemas que impliquen el uso de vectores o matrices. También se usa la librería de python itertools. En ejemplos que veremos después sobre probabilidad, comprobaremos que también se podría hacer son sympy.

La solución de este ejercicio está parametrizada y en él solo hay que establecer tres variables en el inicio del código, se trata de:

#redondeo
r=4
#tamaño de las muestras
n=2
#valores para el muestreo
pos=[3,5,7,8,9,10]

A partir de esos datos de entrada podemos resolver todo tipo de problemas con un enunciado similar a:

Ejercicio

Se dispone de \(6\) tornillos de 3 , 5 , 7 , 8 , 9 , 10  gramos de peso respectivamente.

  1. Mediante muestreo aleatorio simple, exprese todas las muestras posibles de tamaño \(2\).
  2. Halla la media, la varianza y la desviación típica de los pesos medios muestrales.
  3. Halla la media y la desviación típica de la población.
  4. ¿Qué relación existe entre los resultados de los dos apartados anteriores?

y obtendríamos de:

Solución

  1. Suponemos que hay reemplazamiento, por tanto el número de muestras posibles es \(6^{2}=36=nm\) y se obtiene de espacio muestral:

    \(\Omega=\){ (3, 3) , (3, 5) , (3, 7) , (3, 8) , (3, 9) , (3, 10) , (5, 3) , (5, 5) , (5, 7) , (5, 8) , (5, 9) , (5, 10) , (7, 3) , (7, 5) , (7, 7) , (7, 8) , (7, 9) , (7, 10) , (8, 3) , (8, 5) , (8, 7) , (8, 8) , (8, 9) , (8, 10) , (9, 3) , (9, 5) , (9, 7) , (9, 8) , (9, 9) , (9, 10) , (10, 3) , (10, 5) , (10, 7) , (10, 8) , (10, 9) , (10, 10) }

  2. Tenemos que obtener todas las medias muestrales a partir de las muestras anteriores:

    \(\overline{X}=\){ 3.0 , 4.0 , 5.0 , 5.5 , 6.0 , 6.5 , 4.0 , 5.0 , 6.0 , 6.5 , 7.0 , 7.5 , 5.0 , 6.0 , 7.0 , 7.5 , 8.0 , 8.5 , 5.5 , 6.5 , 7.5 , 8.0 , 8.5 , 9.0 , 6.0 , 7.0 , 8.0 , 8.5 , 9.0 , 9.5 , 6.5 , 7.5 , 8.5 , 9.0 , 9.5 , 10.0 }

    \(\bar{x}_{i}\) \(f_{i}\) \(f_{i}\cdot\bar{x}_{i}\) \(f_{i}\cdot\bar{x}_{i}^{2}\)
    3.00 1 3.00 9.00
    4.00 2 8.00 32.00
    5.00 3 15.00 75.00
    5.50 2 11.00 60.50
    6.00 4 24.00 144.00
    6.50 4 26.00 169.00
    7.00 3 21.00 147.00
    7.50 4 30.00 225.00
    8.00 3 24.00 192.00
    8.50 4 34.00 289.00
    9.00 3 27.00 243.00
    9.50 2 19.00 180.50
    10.00 1 10.00 100.00
      36 252.00 1866.00

    Por tanto:

    \begin{equation*} E[\bar{X}]=\dfrac{\sum f_{i}\cdot\bar{x}_{i}}{nm}=\dfrac{252.0}{36.0}=7.0 \end{equation*}
    \begin{equation*} S_{\bar{x}}^{2}=\dfrac{\sum f_{i}\cdot\bar{x}_{i}}{nm}-E[\bar{X}]^{2}=\dfrac{1866.0}{36.0}-\left(7.0\right)^{2}=2.8333\Rightarrow S_{\bar{x}}=\sqrt{2.8333}=1.6833 \end{equation*}
  3. Hagamos una tabla para calcularlas:

    \(x_{i}\) \(x_{i}^{2}\)
    3 9
    5 25
    7 49
    8 64
    9 81
    10 100
    42 328

    Por tanto

    \begin{equation*} \mu=\dfrac{\sum x_{i}}{N}=\dfrac{42}{6}=7.0 \end{equation*}
    \begin{equation*} \sigma^{2}=\dfrac{\sum x_{i}^{2}}{N}-\mu^{2}=\dfrac{328}{6}-\left(7.0\right)^{2}=5.6667\Rightarrow\sigma=\sqrt{5.6667}=2.3805 \end{equation*}
  4. De lo anterior se puede ver que (hay que tener en cuenta que \(n=2\) es el tamaño de las muestras):

    \(\mu=7.0=E[\bar{X}]\)

    \(S_{\bar{x}}=\sigma_{\bar{x}}=\dfrac{\sigma}{\sqrt{n}}=\dfrac{2.3805}{\sqrt{2}}=1.6833\)

El código python usado es:

\begin{pycode}
#se usa para obtener el espacio muestral de las muestras
import itertools
import math
import numpy as np
#redondeo
r=4
#tamaño de las muestras
n=2
#valores para el muestreo
pos=[3,5,7,8,9,10]

#tamaño población
tp=len(pos)

#hallo el espacio muestral
em=list(itertools.product(pos,repeat=n))
#número de elementos del espacio muestral
nm=len(em)

#para mostrar el espacio muestral elemento a elemento y que no se muestre en una línea
def imprEM():
    print(r"\{")
    for i in range(nm-1):
        print(em[i])
        print(", ")
    else:
        print(em[i+1])
    print(r"\}")

#medias muestrales
xm=[]
for i in em:
    aux=i[0]
    for j in range(1,n):
        aux=aux+i[j]
    xm.append(aux/n)
#lo paso a lista y con los valores redondeados
xm=list(np.round(xm,r))

#para mostrar las medias muestrales elemento a elemento y que no se muestre en una línea
def imprMM():
    print(r"\{")
    for i in range(len(xm)-1):
        print(xm[i])
        print(", ")
    else:
        print(xm[i+1])
    print(r"\}")

#paso pos a array de numpy
x=np.array(pos)
#hallo xi*xi para la varianza de la población
x2=x*x

#medias, varianza y desviación típica poblacionales, se pueden usar las funciones de numpy
mu=round(np.mean(x),r)
s2=round((x2.sum()/tp)-mu**2,r)
s=round(math.sqrt(s2),r)
#este se calcula solo para comprobar que sale lo mismo que
#el valor obtenido después de dtp (desviación típica poblacional)
sp=round(s/math.sqrt(n),r)

#obtengo los valores y las frecuencias de las muestras
fM=np.array(np.unique(xm, return_counts=True)).T
#creo dos arrays para tener solo los
#valores de la primera columna
fMv=fM[:,0]
#frecuencias de la segunda columna
fMf=fM[:,1]

#hallo fi*xi y fi*xi**2
xf=fMv*fMf
x2f=xf*fMv

#media y varianza poblacionales
#uso las funciones de numpy para la media, varianza y la desviación típica
mp=round(np.mean(xm),r)
vp=round(np.var(xm),r)
dtp=round(np.std(xm),r)

#para mostrar la lista de elementos bien
def imprDatos():
    print(pos[0])
    for i in range(1,tp):
        print(", "+str(pos[i]))


#crea la tabla para la población
def creaTablaP():
    print(r"\begin{tabular}{c|r}")
    print(r"$x_i$ & $x_i^2$ \\ \hline")
    for i in range(tp):
        print(r"%d & %d  \\ \hline" % (pos[i], pos[i]**2))
    print(r" \hline %d & %d \\ \hline" % (x.sum(),x2.sum()))
    print(r"\end{tabular}")

#crea la tabla para la distribución de las medias muestrales
def creaTablaM():
    print(r"\begin{tabular}{c|r|r|r}")
    print(r"$\bar{x}_i$ & $f_i$ & $f_i \cdot \bar{x}_i$ & $f_i \cdot \bar{x}_i^2$ \\ \hline")
    for i in range(len(fM)):
        print(r"%.2f & %d & %.2f & %.2f  \\ \hline" % (fMv[i], fMf[i], xf[i], x2f[i] ))
    print(r" \hline %s & %d & %.2f & %.2f \\ \hline" % ("",fMf.sum(), xf.sum(), x2f.sum()))
    print(r"\end{tabular}")

\end{pycode}
  • Puedes descargar el fichero fuente en formato LyX en el enlace.
  • El resultado de compilarlo con pdflatex se puede ver desde este enlace.