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 .
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 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 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?
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
Partager