X: [1.02, 0.87, 0.89, 0.56, 0.39, 1.05, 0.66, 0.64, 0.61, 0.78, 0.50,
0.58, 0.80, 1.45, 1.05, 0.60, 0.54, 0.25, 0.72, 1.23, 0.35, 0.53,
0.61, 0.78, 1.04, 1.23, 0.47, 0.51, 1.45, 1.05, 0.66, 0.85, 0.86,
0.41, 1.38, 0.50, 0.17, 0.97, 0.81, 1.12, 1.27, 1.23, 0.78, 0.64,
0.71, 0.47, 0.77, 0.90, 1.21, 0.40, 0.86, 0.82, 0.67, 0.55, 1.04,
0.98, 0.57, 0.84, 1.09, 0.81, 1.20, 1.72, 0.53, 0.54, 1.18, 0.69,
1.79, 1.09, 0.38, 0.50, 1.06, 1.35, 0.69, 0.76, 1.46] ;
load (distrib);
f_gama (x, p, a) := pdf_gamma (x, p, 1/a);
f_gama (x, p, a);
assume (p > 0, a > 0);
declare (p, integer);
integrate (f_gama(x,p,a), x, 0, inf);
logL(a) := apply ("+", map (lambda ([Xi], log(f_gama(Xi,3,a))), X));
plot2d (logL(a), [a, 0.1, 10]);
load (lbfgs);
lbfgs (-logL(a), [a], [4], 0.001, [-1,0]);
logL(a,x,n) := sum (log(f_gama(x[i],3,a)), i, 1, n);
logexpand: super;
simpsum: true;
solve (diff(logL(a,x,n),a) = 0, a);
diff(logL(a,x,n),a,2);
logL(a,x,n);
assume(x[i]>0, y[i]>0);
diff (logL(a,x,n) - logL(a,y,n), a);
f_sumaX (x, p, a, n) := f_gama (x, n*p, a);
assume (n > 1);
declare (n, integer);
integrate (f_sumaX(x,p,a,n), x, 0, inf);
E_aMV (p, a, n) := integrate (n*p/x * f_sumaX(x,p,a,n), x, 0, inf);
gamma_expand: true $
E_aMV (3, a, n);
limit (E_aMV(3,a,n), n, inf);
E_aMV2 (p, a, n) := integrate ((n*p/x)^2 * f_sumaX(x,p,a,n), x, 0, inf);
V_aMV (p, a, n) := E_aMV2(p,a,n) - E_aMV(p,a,n)^2;
factor (ratsimp (V_aMV (3, a, n)));
limit (V_aMV(3,a,n), n, inf);
sesgo : ratsimp (E_aMV (3, a, n) - a);
ECM : factor (ratsimp (sesgo^2 + V_aMV(3,a,n)));
g(x) := 1/x;
define (gprima(x), diff(g(x),x));
abs (gprima (1/a)) * 1/(a*sqrt(p*n));
kill(all);
X: [1.02, 0.87, 0.89, 0.56, 0.39, 1.05, 0.66, 0.64, 0.61, 0.78, 0.50,
0.58, 0.80, 1.45, 1.05, 0.60, 0.54, 0.25, 0.72, 1.23, 0.35, 0.53,
0.61, 0.78, 1.04, 1.23, 0.47, 0.51, 1.45, 1.05, 0.66, 0.85, 0.86,
0.41, 1.38, 0.50, 0.17, 0.97, 0.81, 1.12, 1.27, 1.23, 0.78, 0.64,
0.71, 0.47, 0.77, 0.90, 1.21, 0.40, 0.86, 0.82, 0.67, 0.55, 1.04,
0.98, 0.57, 0.84, 1.09, 0.81, 1.20, 1.72, 0.53, 0.54, 1.18, 0.69,
1.79, 1.09, 0.38, 0.50, 1.06, 1.35, 0.69, 0.76, 1.46] ;
load(distrib);
f_gama (x, p, a) := pdf_gamma (x, p, 1/a);
logL(p) := apply ("+", map (lambda ([Xi], log(f_gama(Xi,p,5))), X));
plot2d (logL(p), [p, 0.1, 10]);
lbfgs (-logL(p), [p], [4], 0.001, [-1,0]);
logL(p,x,n) := sum (log(f_gama(x[i],p,5)), i, 1, n);
logexpand: super;
simpsum: true;
solve (diff(logL(p,x,n),p) = 0, a);
5 * apply("+",X) / length(X);
assume(x[i]>0, y[i]>0);
diff (logL(p,x,n) - logL(p,y,n), p);
kill(all);
X: [1.02, 0.87, 0.89, 0.56, 0.39, 1.05, 0.66, 0.64, 0.61, 0.78, 0.50,
0.58, 0.80, 1.45, 1.05, 0.60, 0.54, 0.25, 0.72, 1.23, 0.35, 0.53,
0.61, 0.78, 1.04, 1.23, 0.47, 0.51, 1.45, 1.05, 0.66, 0.85, 0.86,
0.41, 1.38, 0.50, 0.17, 0.97, 0.81, 1.12, 1.27, 1.23, 0.78, 0.64,
0.71, 0.47, 0.77, 0.90, 1.21, 0.40, 0.86, 0.82, 0.67, 0.55, 1.04,
0.98, 0.57, 0.84, 1.09, 0.81, 1.20, 1.72, 0.53, 0.54, 1.18, 0.69,
1.79, 1.09, 0.38, 0.50, 1.06, 1.35, 0.69, 0.76, 1.46] ;
media(x) := apply("+", x) / length(x);
var(x) := media(x**2) - media(x)**2;
pMM: media(X)**2/var(X);
aMM: media(X)/var(X);
load(distrib);
f_gama (x, p, a) := pdf_gamma (x, p, 1/a);
logL(p,a) := apply ("+", map (lambda ([Xi], log(f_gama(Xi,p,a))), X));
load(lbfgs);
lbfgs (-logL(p,a), [p,a], [pMM,aMM], 0.001, [-1,0]);
load(mnewton);
mnewton ([diff(logL(p,a), a) = 0,
diff(logL(p,a), p) = 0],
[p, a], [pMM, aMM]);
plot3d(logL(p,a), [a,5,7], [p,6,8]);
EC(p,a,X) := block([pMM, aMM, pMV, aMV, sol],
pMM: media(X)**2/var(X),
aMM: media(X)/var(X),
sol: lbfgs (-logL(p_,a_), [p_,a_], [pMM,aMM], 0.001, [-1,0]),
pMV: rhs(sol[1]),
aMV: rhs(sol[2]),
['pMV = pMV,
'aMV = aMV,
'pMM = pMM,
'aMM = aMM,
EC_MV = (pMV-p)**2 + (aMV-a)**2,
EC_MM = (pMM-p)**2 + (aMM-a)**2]) $
azar_gamma(p,a,n) := random_gamma(p,1/a,n);
ECazar(p,a,n) := block([X],
X: azar_gamma(p,a,n),
EC(p,a,X)) $
ECM(p,a,n,N) := block([aux],
aux: map (media,
transpose (apply (matrix,
map (lambda ([lista], map(rhs, lista)),
map(lambda([N], ECazar(p,a,n)),
makelist(i,i,1,N)))))),
$
map (lambda ([x], round (100*x)), ECM(6,5,75,1000));
map (lambda ([x], round (100*x)), ECM(6,7,75,1000));
map (lambda ([x], round (100*x)), ECM(7,5,75,1000));
map (lambda ([x], round (100*x)), ECM(7,7,75,1000));