Se trata de aplicar el concepto estadístico de entropía a la distribución de probabilidades de la variable suma-de-valores, en un conjunto de estados cuantizados dados, usando como por ejemplo el juego de dados tradicional. Se pide:
a) Si no se sabe de un dado más que que tiene seis caras, ¿cuál es la probabilidad de que al mirarlo veamos una cierta cara arriba?
b) ¿Cuál es la distribución más probable sabiendo que al lanzar 10 dados la suma era 15?
Datos:
Ecuaciones de normalización y de medida de la incertidumbre media (entropía) de una distribución de probabilidades:
> |
eqN:=1=Sum(p[i],'i'=1..N);eqS:=S=-k*Sum(p[i]*ln(p[i]),i=1..N); |
a) Si no se sabe de un dado más que tiene seis caras, ¿cuál es la probabilidad de que al mirarlo veamos una cierta cara arriba?
La de entropía máxima, que al tener restricciones se maximiza la función de Lagrange:
> |
Phi:=rhs(eqS)+alpha*rhs(eqN);eqSol[i]:=Diff('Phi',p[i])=0;eqSol[i]:=diff(-k*p[i]*ln(p[i])+alpha*p[i],p[i])=0;eqSol[i]:=p[i]=solve(eqSol[i],p[i]); |
Es decir, si no se sabe nada, la elección de menor sesgo es suponer que todos los casos posibles son equiprobables, y por tanto para un dado de seis caras distintas p=1/6 y para una moneda p=1/2. Esta asignación de probabilidades debería ser contrastada con una serie de experimentos, comprobando a posteriori que la frecuencia acumulativa tiende a los valores de las probabilidades asignadas a priori.
b) ¿Cuál es la distribución más probable sabiendo que al lanzar 10 dados la suma era 15?
La suma más probable al lanzar 10 dados es 35, ya que al ser una distribución simétrica, la moda coincide con la media que es n veces la de un dado (1+2+3+4+5+6)/6=3,5, pero una vez que se sabe que la suma ha sido s=15 podemos calcular la probabilidad de los unos, doses, treses, etc.
Sea p[i] ahora la probabilidad de los ies en el resultado de n dados con suma s.
> |
restart:dat:=[N=6,n=10,s=15]: |
> |
eqN:=1=Sum(p[i],'i'=1..N);eqS:=S=-k*Sum(p[i]*ln(p[i]),i=1..N);eqSum:=s/n=Sum(i*p[i],'i'=1..N); |
> |
Phi:=rhs(eqS)+alpha*rhs(eqN)+beta*rhs(eqSum);eqS_:=simplify(subs(dat,S=-k*sum(p[i]*ln(p[i]),i=1..N)));eqSol[i]:=Diff('Phi',p[i])=0;eqSol[i]:=diff(-k*p[i]*ln(p[i])+alpha*p[i]+beta*i*p[i],p[i])=0;eqSol[i]:=p[i]=solve(eqSol[i],p[i]); |
> |
### WARNING: allvalues now returns a list of symbolic values instead of a sequence of lists of numeric values
eqN_:=1=sum(subs(eqSol[i],p[i]),i=1..6);eqSum_:=s/n=sum(subs(eqSol[i],i*p[i]),i=1..6);sol:=(solve(subs(dat,{eqN_,eqSum_}),{alpha,beta})):alpha:=evalf(allvalues(subs(sol,alpha/k)*k))[1];beta:=evalf(allvalues(subs(sol,beta/k)*k))[1]; |
 |
> |
sol2:=subs(eqSol[i],p[i]);sol2_:=seq([p[i]=sol2],i=1..6); |
Es decir, entre los diez dados (como pi=ni/n y los ni han de ser enteros), lo más probable es que haya 7 con unos, 2 con doses y 1 con un tres, aunque esto sumaría 7+2x2+1*3=14 y como ha de sumar 15 y la sensibilidad mínima es la de los unos y doses, concluimos diciendo que la solución más probable es 6 unos, 3 doses y 1 tres.
Puede apreciarse la importancia del método de la entropía en este problema comparando el esfuerzo aquí requerido con el necesario para resolver este mismo problema por la regla de Laplace; para ello se calcula el número de combinaciones posibles al lanzar 10 dados (que es 6^10), luego se calcularía cuáles de entre ellos tiene de suma 15, y finalmente entre ellas se vería cuál es la combinación más frecuente. Veamos:
Sean n1,n2,n3,n4,n5,n6 el número de unos, doses,... El planteamiento sería:
> |
eq1:=n1+n2+n3+n4+n5+n6=n;eq2:=1*n1+2*n2+3*n3+4*n4+5*n5+6*n6=s;eq3:=n!/(n1!*n2!*n3!*n4!*n5!*n6!)=W[max]; |
y ahora se irían dando soluciones plausibles hasta conseguir la de mayor probabilidad.
> |
sol1:=[n1=9,n2=0,n3=0,n4=0,n5=0,n6=1]:sol2:=[n1=8,n2=1,n3=0,n4=0,n5=1,n6=0]:sol3:=[n1=8,n2=0,n3=1,n4=1,n5=0,n6=0]:sol4:=[n1=6,n2=3,n3=1,n4=0,n5=0,n6=0]:eval(seq([sol||i,subs(n=lhs(eq1),sol||i,[eq1,eq2,eq3])],i=1..4)); |
etc.
Puede verse que este método coincide con el de la entropía:
> |
eqStirling:=ln(n!)=n*ln(n)-n;eq3_:=subs(n=lhs(eq1),eq1,n*ln(n)-n-sum('n||i*ln(n||i)-n||i',i=1..6)=ln(W[max]));eq3__:=-Sum((n||i/n)*ln(n||i/n),i=1..N)=ln(W[max]); |