Modèle additif généralisé

Bonjour
Je ne sais pas si mon message est dans le bon forum. N'hésitez pas à le déplacer et/ou me le dire.

Mon problème.
Je dois déterminer la température qu'il a fait localement à un endroit précis (A) pendant une période donnée du passé (de quelques jours à quelques semaines).
La procédure que j'utilise actuellement est :
- déposer en (A) une sonde qui relèvera la température pendant au moins 10 jours à partir d'une date X ;
- obtenir les données météorologiques de la station météo, données qui recouvriront la période X à X+10, mais qui reprennent aussi les jours précédents X (par exemple, les 3 mois précédents) ;
- rechercher les coefficients a et b de la droite de régression linéaire qui corrèle le mieux l'évolution de la température entre le lieu (A) et la station météo pendant la période X a X+10 ;
- sur base de ces coefficients, je calcule la température qu'il a pu faire dans le passé avant le jour X (le x de l'équation y=ax+b est la température mesurée par la station météo dans le passé, au jour le jour, ou heure par heure).

Ca fonctionne très bien. Mais parait-il que ce genre de méthode n'est pas assez robuste (ses extrapolation sont biaisées) pour être utilisée lorsqu'il y a des variations climatiques importantes (pluies, changement de saisons, ...).
Un article récent est sorti https://pubmed.ncbi.nlm.nih.gov/32873381/ qui propose d'utiliser plutôt un Modèle Additif Généralisé (GAM) pour ce genre de reconstitution des températures du passé.

J'avoue que je ne suis pas du tout mathématicien mais autant une équation de régression linéaire est facile à implémenter en VBA pour analyser les données d'une base de données access. Autant, je ne vois pas du tout comment faire pour implémenter en VBA un GAM sous access...
Si quelqu'un pouvait m'expliquer la logique derrière un GAM et me suggérer des pistes pour arriver à en mettre un au point, je serais déjà très content :-)
Et au paradis, si un module VBA était disponible ;-) (ca existe sous R et ca fonctionne bien, mais je ne connais pas R du tout...)
D'avance merci pour vos suggestions/idées/encouragements ;)
Cdlt

Réponses

  • Bonjour,

    Je ne prends en compte ton post en entier pour l'instant. Je te conseille de lire la partie du livre pratique sur les modèles additifs généralisés (GAM) par un de ses inventeurs ayant pour titre "An introduction to statistical learning" chez Springer à télécharger gratuitement et légalement sur le Web. Tu verras qu'utiliser R dans le cadre d'un GAM n'est pas d'une difficulté excessive pour quelqu'un qui a l''habitude de coder. Cela ne me surprendrait pas que dans un programme VBA, l'on puisse faire appel au logiciel R ce qui faciliterait ta tâche.

    Cordialement.
  • Le début de ton message est très trouble entre régression linéaire simple et régression linéaire multiple qu'entraîne la prise en compte des données météorologiques. Le lien que tu donnes vers cet article ne semble pas le plus adapté (j'ai même cru à une blague et, si c'est le même délire, je n'ai vraiment pas le temps). Pour programmer avec VBA, une régression linéaire simple ou multiple, ce n'est pas la mer à boire mais ce qui est fondamental, ce sont toutes les aides à l'interprétation et, là, cela se complique.

    Je ne comprends pas trop ce leitmotiv des messages qui disent "je n'y comprends pas grand chose en statistique/mathématiques mais je veux utiliser cette technique complexe". Cela ne me viendrait pas à l'idée de faire la même chose ou avec,énormément de précautions.

    Cordialement.
  • Bonjour JMA,

    Je te remercie pour t'être penché sur ma question et pour la suggestion du chapitre à lire :-)

    Concernant le début de mon message, j'expliquais (en essayant de décomposer les étapes que je suis actuellement) le processus que j'utilise pour le moment. Processus qui fonctionne très bien et que nous maîtrisons. Comme tu dis, une régression linéaire ce n'est pas difficile à mettre en oeuvre même en VBA.
    Pour reformuler la chose, plus succinctement et clairement, je calcule une équation de régression linéaire entre des données de températures locales et celles obtenues dans une station météo, pendant le même intervalle de temps. À l'aide de cette équation, et partant seulement des données de la station météo, je recalcule les températures théoriques qu'il y aurait eu dans le passé au niveau local.
    Quand je parle de local, c'est même micro-local, vu que c'est, par ex., un sous-bois particulier, le long d'un mur exposé au côté nord, ...

    La qualité de la reconstitution des températures du passé est évaluée sur base du coefficient de détermination de l'équation de régression calculée au début. Ce n'est probablement pas le seul moyen mais c'est le plus simple qu'on ait trouvé.

    Quant au message "je n'y comprends pas grand chose en statistique/mathématiques mais je veux utiliser cette technique complexe" :-) en fait, tu as raison :-)
    C'est pour ça qu'on utilise la régression linéaire actuellement car, on la comprend. Mais vu qu'elle ne permet pas d'introduire d'autres paramètres affectant la qualité de la reconstruction des températures du passé, et vu que l'article (ce n'est pas une blague du tout ;-) ) proposait un autre modèle, on voulait bien le tester pour voir si ce "nouveau" modèle ajoutait un plus à nos analyses.
    Et c'est là où je ne suis pas assez à l'aise avec les maths, car de ce que j'ai pu lire sur le GAM, je n'ai pas encore compris la logique sous-jacente et ne suis pas certain, actuellement, de pouvoir reproduire ça en programmation VBA :-) Mais bon j'y travaille :-) et ta lecture va peut-être m'éclairer :-)

    Bonne journée à toi en tout cas !
    Cordialement

    PS: et merci à AD pour la correction orthographique.
    [À ton service. :-) AD]
  • Bonjour,

    Je n'ouvre pas la boîte de Pandore des précisions sur l'application, je te fais confiance. ;-) Pour rejoindre jma sous un autre angle, quelques points de repère techniques...

    Exemple simple. Imagine que $y$ est l'aire d'un cercle et $x$ sont rayon. L'aire d'un cercle de rayon $r$ etant $\pi\cdot r^2$, tu n'iras pas bien loin avec un modèle linéaire $y=w\cdot x$ ! Par contre, si tu poses $\phi_1(x) = x^2$, tu vois que tu t'en sortiras à la perfection avec un modèle $y=w\cdot \phi_1(x)$, qui n'est rien d'autre qu'un modèle linéaire en $\phi_1(x)$ ! C'est l'astuce déployée par les modèles linéaires généralisés.

    Un modèle linéaire s’écrit $y= b+ w_1\cdot x_1 + w_2\cdot x_2 + \cdots + w_K \cdot x_K$.
    Si tu as travaillé avec tu as peut-être vu leur représentation vectorisée, plus compacte, $y=\mathbf{w}^T \mathbf{x} + b$ où l'on note $\mathbf{w}=(\cdots w_k \cdots)^T\in\mathbb{R}^K$ et $\mathbf{x}=(\cdots x_k \cdots)^T\in\mathbb{R}^K$ les concaténations respectives des coefficients et des variables explicatives.

    Si tu t'es intéressé au 'fit' des coefficients à partir de données, tu as peut-être vu la forme matricielle suivante : $\mathbf{y} = \mathbf{X}\mathbf{w} + b\mathbf{1}$, avec :
    * $N$ observations $(\mathbf{x}_1,y_1)$, $\cdots$, $(\mathbf{x}_N,y_N)$ où chaque $\mathbf{x}_n=(\cdots x_{nk} \cdots)^T$ est le vecteur de valeurs des variables explicatives pour la $n$-ième observation.
    * Les observations sont regroupées dans une matrice $\mathbf{X} = (\mathbf{x}_1 | \cdots | \mathbf{x}_N)^T\in\mathbb{R}^{N\times K}$. Chaque observation occupe une ligne. Les colonnes parcourent les $K$ variables explicatives.
    * $\mathbf{y}=(\cdots y_n \cdots)^T \in\mathbb{R}^N$ est le vecteur des $y_n$ des $N$ observations.
    * $b\mathbf{1}\triangleq b (1\cdots 1)^T$ est simplement une notation pour répéter le biais $b$ pour chacun des $N$ points de données.

    Cette expression matricielle est la plus pratique pour mener à bien les calculs d'ajustement des coefficients. Ok ?

    Les modèles linéaires généralisés (GLM, une paramétrisation commune des GAM) introduisent deux modifications. Je supprime le biais pour faire ressortir l'essentiel.

    * On s'autorise à appliquer des transformations judicieuses $\mathbf{x} \mapsto \phi_m(\mathbf{x})$ aux variables explicatives avant d'appliquer un modèle linéaire. On construit $M$ transformations $\phi_m$. Par exemple, une transformation pourrait retourner la somme des carrés des deux premières variables $\mathbf{x} \mapsto \phi(\mathbf{x})=x_1^2+x_2^2$.

    * On envisage donc à présent un modèle linéaire $y= w_1\cdot \phi_1(\mathbf{x}) + w_2\cdot \phi_2(\mathbf{x}) + \cdots + w_M \cdot \phi_M(\mathbf{x})$, qui combine les différentes transformations pour déterminer $y$. Remarque que l'on somme a présent sur $m=1\cdots M$ et non plus $k=1\cdots K$.

    * On appelle $\phi_m$ des "fonctions de base", des "features", parfois des "noyaux". La terminologie s'adapte au contexte. L’idée est que ces "features" sont choisies par l'utilisateur pour capturer des propriétés saillantes des données. D'une certaine façon, l'âge ($\phi_1(x)$), la taille ($\phi_2(x)$), le poids ($\phi_3(x)$) d'une personne $x$ sont des "features" d'une personne. Donc un modèle linéaire d'une variable $y$ en fonction de âge, taille, poids cache en fait un modèle linéaire généralisé de $y$ en fonction de la personne.

    * Ce qui est très joli, c'est que sous forme matricielle le problème n'est pas plus compliqué !

    $\mathbf{y} = \mathbf{\Phi}\mathbf{w}$,

    avec $\mathbf{\Phi}\in \mathbb{R}^{N\times M}$ une matrice de taille $N\times M$, dont le coefficient $\mathbf{\Phi}_{nm} \triangleq \phi_m(\mathbf{x}_n)$ sur la $n$-ième ligne, $m$-ième colonne, donne la valeur de la $m$-ième feature pour la $n$-ième observation.

    * La seule différence est que les données $\mathbf{X}$ n'apparaissent à présent plus qu'indirectement, à travers la matrice $\mathbf{\Phi}$ de réponses aux "features" que tu spécifies. Mais puisque tu connais $\mathbf{\Phi}$, le traitement mathématique est le même. Pratique, non ?

    * Deuxième point, moins important de prime abord si tu travailles sur de la régression, tu peux autoriser une transformation non-linéaire $g$ de $\mathbf{\Phi}\mathbf{w}$ pour obtenir $y$, soit $\mathbf{y} = g(\mathbf{\Phi}\mathbf{w})$. Si tu choisis $g=\text{Id}$ tu es ramené au cas décrit ci-dessus. Je n'entre pas plus dans les détails, cette astuce est plus avancée mais plutôt pertinente pour de la classification (e.g., $y$ est une variable binaire et non une valeur continue), ou bien dans une vision plus générale de la régression.

    Pour résumer, un GLM offre davantage de flexibilité qu'un modèle linéaire en autorisant des transformations judicieuses des variables explicatives. Clairement, toute la question va être celle du choix des $\phi_m$ sur des problèmes plus complexes avec moins d'apport de connaissances du domaine.

    Cordialement.
  • Bonjour Talbon,

    Et bien, tu débroussailles bien la logique sous-jacente! Je n'ai pas tout compris (en particulier, faudra que je me replonge dans le calcul matriciel) mais perçois quand même le cheminement d'un GLM et sa similitude avec un modèle linéaire...

    Je vais relire ça et continuer à potasser la matière... Je n'ai pas d'urgence quant à mettre cela en application, ce qui fait que je ne reviendrai peut-être pas tout de suite sur le forum. Mais, je n'hésiterai pas si j'ai des questions ;-)

    Cordialement et encore merci :-)
  • Je mets un tout petit bout du début du résumé de l'article indiqué : "... The reliable reconstruction of the temperature conditions at a crime scene is still a great challenge in forensic-entomological case work...". OK, d'accord.
    Les trois derniers post sont clairs comme du jus de chique : Dermochelys, expert Miami! Talbon une autre composition ? Beagle un autre message ? C'est la cinquième dimension.
    Bon bien que dire.
  • Bonjour JMA
    Je ne comprends pas bien ton post ...

    La reconstruction des températures (et plus généralement des conditions abiotiques locales), sur base d'un échantillonnage de données, dans les micro-habitats est quelque chose qui est effectivement important (et utilisé) en police scientifique mais également en écologie car ça conditionne la répartition de plein d'êtres vivants (plantes, insectes, ...), la dégradation de différents matériaux, ...
    Et en ce sens, l'application de modèles mathématiques est non seulement utile/indispensable mais doit être pratique pour des utilisateurs qui ne se pencheront jamais sur les subtilités de ceux-ci.
    C'est un peu ce que j'essaie de faire à mon niveau...

    Le post de Talbom, et ton premier, m'ont fourni des pistes pour approfondir la résolution de mon problème... c'est déjà bien, je trouve, même si je n'en suis pas certain que je vais y arriver en 2 jours ;-).
    Cordialement
  • Bonsoir,

    Il est à se demander pourquoi Hastie et Tibshirani range le modèle GAM dans les modèles non linéaires : linéaire en ses paramètres et non linéaire pour ses entrées ? Je ne sais pas.

    Cordialement.
  • Bonjour jma,

    Pour un GLM, $y=g(\mathbf{\phi}(\mathbf{x})^T\mathbf{w})$ est non-linéaire en $\mathbf{x}$ (toujours) et en $\mathbf{w}$ (si $g$ est non-linéaire).

    Pour un GAM en toute généralité, on remplace l'argument de $g$ par $\sum_m \phi_m(x)$, où $\phi_m$ peut être paramétrique ou non, donc en général non-linéaire.

    Pour quelqu'un qui fait de la régression, en VBA avec un modèle linéaire, c'est intéressant d'aller vers le particulier et de détailler le potentiel caractère linéaire du GAM/GLM (donc rien à recoder sinon les $\phi_m(x)$).
  • Un modèle linéaire généralisé peut donc être totalement non linéaire, je pense que ce n'est pas trop clair pour toi.

    Cordialement.
  • Un modèle linéaire généralisé peut donc être totalement non linéaire, oui. C'est pour ça qu'on l'appelle modèle linéaire généralisé, et pas modèle linéaire. Sur des problèmes de régression, l’archétype est $g=\text{Id}$ et donc $y$ est linéaire en $w$.

    *** modéré ***
Cette discussion a été fermée.