suivant: Graphe de la régression
monter: Les fonctions statistiques à
précédent: Graphe de la régression
Table des matières
Index
Régression logistique : logistic_regression
Les courbes logistiques sont des courbes dont léquation y = y(x) sont
solutions d'une équation différentielle de la forme :
y'/y = a*y + b et
y0 = y(x0) avec a < 0 et b > 0.
Les solutions sont de la forme :
y(x) = C/(1 + exp(-
(x - x0 - k)
avec C = - b/a,
= - b et
y0 = (- b/a)/(1 + exp(- b*k) soit
k = - 1/b*(ln(- ((a*y0 + b)/(a*y0))))
Pour vérifier, on peut taper :
normal(desolve(y'/y=a*y+b)
On obtient :
(-b*exp(-(b*c_0-b*x)))/(a*exp(-(b*c_0-b*x))-1)
Puis on peut taper :
normal(desolve([y'/y=a*y+b,y(x0)=y0],y)
On obtient :
[(-b*exp(b*x-b*x0+ln(y0/(a*y0+b))))/(a*exp(b*x-b*x0+ln(y0/(a*y0+b)))-1)]
On a donc :
c0 = x0 - ln(y0/(a*y0 + b))/b
Donc, en multipliant le numérateur et dénominateur de y(x) par
exp(b*c
0 - b*x) on a :
y(x) = (- b/(exp(b*c
0 - b*x)*a*exp(- (b*c
0 - b*x)) - 1)
soit
y(x) = - b/(a - exp(b*(x - c0))) = (- b/(a*(1 - exp(b*(x - c0))/a))
On a
1/a = - exp(- ln(- a)) car a < 0
donc
y(x) = (- b/a)*(1/(1 + exp(b*(x - c0) - ln(- a)))
qui est bien la forme annoncée.
Lorsque on connait les valeurs de f' en
x = x0, x0 +1....x0 + n, on cherche
une fonction logistique y(x) tel que y'(x) approche au mieux les
différentes valeurs de f'(x).
logistic_regression a comme paramètres :
- une liste L qui contient les valeurs de y' pour
x = x0, x0 +1....x0 + n,
- la valeur de x0 de x0
- la valeur y0 de y(x0) lorsqu'on la connait sinon Xcas
arrive à l'estimer...
logistic_regression(L,x0,y0 renvoie les fonctions y(x) et
y'(x), la constante C, y1M et xM avec y1M
est la valeur y'(xM) qui est le maximum de y' obtenu en x = xM, et
enfin le coefficient de correlation linéaire R de Y = y'/y en fonction
de y avec la droite Y = a*y + b.
À partir de la liste L, Xcas calcule la liste Ly en
utilisant la formule
y(t + 1) - y(t) = y'(t), donc, on a
Ly=[y0,y0+y0',y0+y0'+y1',....]. Puis Xcas fait une régression
linéaire de L/Ly en fonction de Ly pour avoir les valeurs de
a et b (
y'/y = a*y + b et
y0 = y(x0)) puis touve la solution de cette
équation différentielle
On tape :
logistic_regression([0.0,1.0,2.0,3.0,4.0],0,1)
On obtient avec écrit en bleu la signification des valeurs renvoyées :
[(-17.77)/(1+exp(-0.496893925384*x+2.82232341488+3.14159265359*i)), (-2.48542227469)/(1+cosh(-0.496893925384*x+2.82232341488+3.14159265359*i)), -17.77,-1.24271113735,5.67993141131+6.32246138079*i, 0.307024935856]
On tape :
evalf(logistic_regression([1,2,4,6,8,7,5],0,2))
Ou on tape :
logistic_regression(evalf([1,2,4,6,8,7,5]),0,2.0))
On obtient :
[64.8358166583/(1.0+exp(-0.551746244591*x+2.95837880348)), 14.4915280084/(1.0+cosh(-0.551746244591*x+2.95837880348)), 64.8358166583,7.24576400418,5.36184674112,-0.81176431297]
Pour retouver la valeur -0.81176431297 du coefficient de corrélation,
on tape :
L:=[1,2,4,6,8,7,5];
y0:=2.0;
Ly:=makelist(y0,1,size(L))+cumSum(L)
On obtient :
[3,5,9,15,23,30,35]
puis
correlation(L/Ly,Ly) qui renvoie
-0.81176431297
suivant: Graphe de la régression
monter: Les fonctions statistiques à
précédent: Graphe de la régression
Table des matières
Index
Documentation de giac écrite par Renée De Graeve