EM Algorithm - censored missed data estimation (imputation)
Bonjour,
Je suis en train de travailler sur l’estimation de données tronquées "constrained or censored observations" et je suis tombé sur plusieurs articles utilisant l’algorithme d'Expectation-Maximization pour résoudre ce problème 8-).
J'ai aussi trouvé un vieux code abandonné depuis 2008 et qui a l'air de fonctionner mais je n'arrive pas à comprendre quelques éléments et j'espère que quelqu'un puisse m'éclairer :)
j'ai particulièrement un souci avec les équations:aie::calim2: e = exp(-(x- mu) * (x- mu) * 0.625 / ( stdDev*stdDev) ) et par la suite on utilise ça s = sqrt(1 - e) . Est ce que ce 0.625 :roll: parle à quelqu’un? et puis la racine de 1 -e, je ne vois pas du tout ce que c'est.
ça aussi ( stdDev / sqrt(2 * PI) ) * exp( -(x - mu) * (x - mu) * 0.5 / (stdDev * stdDev) ), ça ressemble à une pdf de gaussienne mais ce n'est pas le cas?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
initialDem = demands;// backup input demand data
....
for (int i = 0; i < nbDemand; i++)
{
if (censored[i])
{
// E- step
double uncdem = demands[i];
double expectedDemand;
double x= initialDem[i];
double e, d1;
//1
e = exp(-(x- mu) * (x- mu) * 0.625 / ( stdDev*stdDev) );
double s = sqrt(1 - e);
if (x>= avg)
{
d1 = 0.5 * (1 - s);
}
else
{
d1 = 0.5 * (1 + s);
}
//2
e = ( stdDev / sqrt(2 * PI) ) * exp( -(x - mu) * (x - mu) * 0.5 / (stdDev * stdDev) );
double d2 = e ;
if (d1 == 0. || e < 0.01)
{
expectedDemand = uncdem;
}
else
{
expectedDemand = (avg + d2 / d1);
}
//
double absDiff = abs( expectedDemand - uncdem );
demands[i] = expectedDemand;
censored[i] = absDiff > EPS;
}
} |
Merci d'avance.