Corrélation non linéaire

Discussions générales concernant les mathématiques et n'entrant pas dans les catégories suivantes.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
mike

Corrélation non linéaire

Message non lu par mike »

Bonjour à tous

je souhaiterais savoir s'il y a une formule ou un algorithme qui
permet de déterminer le coéfficient de corrélation de deux séries
statistiques(X,Y) NON LINEAIRES?
La formule que je trouve le plus souvent est le coéfficient de corrélation linéaire, c'est celle là aussi qui est implantée dans excel.

Merci d'avance
nirosis
Modérateur honoraire
Modérateur honoraire
Messages : 1803
Inscription : samedi 28 mai 2005, 14:48
Localisation : Orsay, France

Message non lu par nirosis »

Tu peux déjà chercher des corrélations en formes polynomiales.

Si tu as une série $X$ et une $Y$.

Tu veux expliquer $Y$ comme une fonction de $X$.

Alors tu fais une corrélation linéaire entre $Y$ $X$ $X^2$ $X^3$ ...

Enfin c'est l'idée la plus simple je crois ! Tu peux encore le faire dans excel comme ça.

Sinon il y a Matlab qui la même chose, en mieux ;)
Dernière modification par nirosis le mardi 18 juillet 2006, 19:05, modifié 1 fois.
mike

Message non lu par mike »

Salut!!
Merci pour la réponse, mais au fait en faisant la corrélation entre y x, x², on fait toujours une corrélation linéaire(je l'ai tester avec excel) or mon problème est:
en prenant une série y=1/x² et en faisant la corrélation avec la série x, on trouve un coefficient de corrélation assez faible alors que y forte dépendance avec x.
Donc c'est la formule ou l'algorithme permettant de calculer ce type de corrélation que je voulais savoir.

Merci d'avance
guiguiche
Modérateur général
Modérateur général
Messages : 8191
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans
Contact :

Message non lu par guiguiche »

Avec cette technique, on effectue toujours une "corrélation linéaire" mais entre y et x² ou entre y et exp(x) (c'est à dire aussi entre ln(y) et x) ou entre y et cos(x), que sais-je encore. Tu n'a peut-être pas testé la bonne transformation sur (ou sur y) avant de lancer la "corrélation linéaire".
mike

Message non lu par mike »

salut!
Je n'ai pas très bien compris ta réponse, mais au fait quand tu fais une corrélation linéaire entre deux séries dépendantes de façon non linéaires, tu fausses le résultat du coefficient de corrélation car la formule prend en compte juste les endroits où c'est linéaire et ignore les autres d'où tu as un mauvais coefficient alors qu'il ya une forte dépendance !
P.Fradin

Message non lu par P.Fradin »

mike a écrit :tu as un mauvais coefficient alors qu'il ya une forte dépendance !
Mes souvenirs de statistiques sont lointains, mais il me semble normal que le coefficient de corrélation linéaire soit faible quand il n'ya pas de dépendance linéaire!

Si vous avez une dépendance de type affine ($y=ax+b$) on cherche une corrélation linéaire entre y et x.

Si vous avez une dépendance de type exponentielle ($y=a^x$) on cherche une corrélation linéaire entre ln(y) et x (avec un papier semi-logarithmique par exemple)

Si vous avez une dépendance de type puissance ($y=x^a$) on cherche une corrélation linéaire entre ln(y) et ln(x) (avec un papier logarithmique par exemple).

C'est la forme du nuage de points $(x_i,y_i)$ qui nous dit dans quelle direction chercher.
mike

Message non lu par mike »

salut !
je vois ce que tu veux dire, il s'agit de linéariser. c'est une bonne idée et elle nous donne un bon coef de corrélation mais il faut à priori connaitre le type de la dépendance. Avec les données dont je dispose, je ne connais pas à priori le type de dépendance et même en regardant la forme du nuage de point, ce n'est pas évident de déviner le type de dépendance. donc c'est un peu dur. En regardant quelques articles en anglais, j'ai vu "correlation ratio" ou rapport de corrélation qui fait ce genre de calcul. Mais je n'ai pas bien compris car ça fait intevenir des classe dont moi je ne dispose pas et il y a peu d'information et pas d'exemple d'application. si quelqu'un a une idée !!

Merci d'avance
nirosis
Modérateur honoraire
Modérateur honoraire
Messages : 1803
Inscription : samedi 28 mai 2005, 14:48
Localisation : Orsay, France

Message non lu par nirosis »

Si ces méthodes de corrélation en "devinant" la forme du nuage de point ne te plaisent pas, il existe aussi des méthodes à base de réseaux de neurones formels.

Telles que : Independant components analysis (ICA), non-linear components analysis (NCLA)... Il y a aussi la FastICA (algo en matlab qu'on trouve facilement sur le net). Cherche sur google si une méthode par réseaux de neurone t'intéresse.

Après c'est sûr qu'il te faut essayer de comprendre les méthodes derrières.

Autre méthode appelée Support Vector Machine (SVM) qui peut te permettre de trouver des relations non-linéaires entre des données...

Mais sache que quand ça touche au non-linéaire, il n'y a pas vraiment de recette miracle. Chacun utilisera ce qui lui convient le mieux. Le plus simple étant ce qu'on t'a dit au début. Les autres méthodes sont à voir si tu ne sais pas que c'est $Y$ qui s'exprime en fonction des autres. A ce moment là, des méthodes plus générales comme ICA, NCLA ou SVM seront plus adaptées !!
guiguiche
Modérateur général
Modérateur général
Messages : 8191
Inscription : vendredi 06 janvier 2006, 15:32
Statut actuel : Enseignant
Localisation : Le Mans
Contact :

Message non lu par guiguiche »

mike a écrit :salut !
Avec les données dont je dispose, je ne connais pas à priori le type de dépendance et même en regardant la forme du nuage de point, ce n'est pas évident de déviner le type de dépendance. donc c'est un peu dur.
Certaines calculatrices permettent de tester directement le type de relation entre x et y.
Sinon avec un tableur, à partir des lignes x et y, il est facile de créer des lignes ln(x), ln(y), ... puis de tester les régression entre les différentes lignes comme te le suggère P. Fradin.
mike

Message non lu par mike »

Bonjour !
Merci pour les différentes réponses. Au fait j'ai regardé les différents algorithmes que tu m'as conseillés.
-ICA, NLCA et FastICA sont des méthodes ou algorithmes permettant de faire une séparation aveugle de deux ou plusieurs variables indépendantes (non linéaires) contenues dans une même source (par exple deux signaux sonores différents qu'on mélange dans une seule source, fastICA les identifie et les sépare.)
-SVM: c'est plus une méthode utilisé dans la reconnaissance de visages ou de chiffres maanuscrits ou télésurveillance orientée objets. Ce sont des algo d'entrainement d'après ce que j'ai lu.
Or dans mons problème je cherche à retrouver le dégré de liaison (donc le coefficient de corrélation) de deux séries qui sont non linéaires.Je ne cherche pas à les séparer d'autant plus plus qu'elles sont dans deux colonnes différents. Mon entrée X et ma sortie Y sont parfaitement connues. X et Y sont non linéaire et la forme de la sortie Y n'est pas identifiable à un modèle précis (exponentielle ou puissance), Y est quelconque. J'ai testé la corrélation en forme polynomiale mais le résultat n'est pas bon.
Si quelqu'un a une idée, je suis preneur.

Merci d'avance
nirosis
Modérateur honoraire
Modérateur honoraire
Messages : 1803
Inscription : samedi 28 mai 2005, 14:48
Localisation : Orsay, France

Message non lu par nirosis »

Perso, je n'en sais pas plus...

Sauf que tu dois pouvoir évaluer la "corrélation" en calculant la Root Mean square Error (RMSE). Imagine que ton algo trouve que ton nuage de point est en fait un cercle. Il suffit ensuite d'évaluer la distance des points du nuage au cercle lui-même. Plus c'est loin, et moins bien c'est correlé. C'est l'idée.
Kuja

Message non lu par Kuja »

Bonjour,

Ca fait un long moment que je ne suis pas venu sur ce forum, mais je me permets de faire un commentaire sur la question posée par Mike.
Pour moi, elle n'a pas vraiment de sens.
En effet, j'ai l'impression qu'on mélange analyse de corrélation et régression. Bien sûr les deux peuvent être liés dans beaucoup de problèmes, mais il ne me semble pas que c'est le cas ici. Si mike recherche un "type" de corrélation qui fera que la corrélation sera maximale entre $Y$ et $X$, ce n'est plus une analyse de corrélation, mais de la régression : on cherche tout simplement à approcher la fonction $f$ telle que $Y=f(X)$ à partir d'observations $(X_i,Y_i)_{i=1,\ldots,n}$.
Des outils ont été proposés dans les réponses précédentes, par exemple on peut commencer par faire de la régression linéaire avec un polynôme en $X$. C'est l'outil de base et de départ en régression. Si on a une idée plus précise de la forme de $f$, on peut l'inclure dans la régression. Quand on propose de transformer $Y$ et $X$ (par exemple prendre le log de $Y$ et le cosinus de $X$ ou que sais-je) on est encore dans le cadre de la régression linéaire, mais sur les variables transformées. Mais on ne peut faire ça que si on sait a priori la transformation à faire, ou alors on y va à l'aveuglette.
Si on veut faire des choses plus "sérieuses", on peut effectivement penser à ICA comme l'a signalé nirosis. On peut aussi utiliser ACE, qui trouve les transformations à faire sur $Y$ et $X$. Mais ces méthodes, comme elles sont plus sophistiquées, demandent plus de temps de calcul (et d'avoir les algos aussi !). Il est à noter que ces méthodes sont d'habitude utilisées quand on a plusieurs régresseurs, rarement quand on n'en a qu'un seul (comme ici). Je signale aussi une méthode souvent utilisée en dimension un, la transformation de Box-Cox (je ne détaille pas, une recherche google devrait faire l'affaire).
Enfin, on peut s'éloigner de la régression linéaire et du cadre plus général de la régression paramétrique pour entrer dans celui de la régression non paramétrique. Ce sont des méthodes qui font peu de suppositions sur la forme de la fonction $f$ qu'on veut estimer (en général ce sont juste des hypothèses de "lissitude"). Il en existe des tas : régression par des splines, SVM (contrairement à ce que dit mike le cadre n'est pas aussi limité que ce qu'il dit, ça marche très bien en régression), polynômes locaux ou encore approche bayésienne + processus gaussiens, bref toutes les méthodes classiques de surface de réponse.

Amicalement,
loique13

Re: Corrélation non linéaire

Message non lu par loique13 »

Bonjour,

je viens de lire les différentes réponses et même si je suis loin d'avoir tout compris, je peux donner deux ou trois trucs. Ca se rapporte plus a de la bidouille que de l'analyse rigoureuse, cela permet cependant de voir un peu ou l'on va.
Le truc c'est que nous n'avons pas la moindre idée de la forme de tes données...
Dans la recherche d'une courbe, on peut (et on doit ?) y aller au juger pour déterminer une forme globale puis essayer une famille de fonction qui y ressemble :
- polynomiales c'est bien mais limité
- transformations/serie de fourrier, ca permet de se ramener à des $cos$
- le plus souvent c'est bien de passer au log : les lois en $1/x$ et puissances apparaissent clairement
- les gaussiennes
etc

En gros il y a plein de familles différentes qui permettent de decrire les fonctions, si t'as un peu de chance tu tombe sur la bonne sinon tu peux utiliser matlab qui reste le mieux pour se genre de choses.
J'espere que ça te servira, en ce qui me concerne j'aime bien les transformées de fourier mais c'est juste un vice personnel.
Matifou

Re: Corrélation non linéaire

Message non lu par Matifou »

Hello

J'ai aussi une réponse très partielle, mais c'est juste rappeler qu'il y a un lien direct entre corrélation et régression. Si je ne m'abuse, le coefficient de corrélation linéaire est égal à la racine (ou au carré, je sais plus dans quel sens) du coefficient de régression R ^2 dans un modèle linéaire avec la variable et une constante. y= ax +b

Donc je chercherais (idéalement d'abord avec des méthodes non paramétriques de lissage) les transformations/inclusion de variables qui maximisent ce R ^2 et je l'interpréterais comme un coefficient de corrélation non linéaire.

Ceci dit 4a me rappelel vaguement qu'il existe ausis une analyse de corrélation canonique, mais je crois que ça reste linéaire.

A plus
stokastik

Re: Corrélation non linéaire

Message non lu par stokastik »

Issu de http://rsscse.org.uk/ts/bts/noether/text.html:
A correlation coefficient is intended to measure "strength of relationship". But different correlation coefficients measure strength of relationship in different ways. A product moment coefficient, a Spearman coefficient, and a Kendall coefficient, all equal to1/3 mean three rather different things. Only the Kendall coefficient has a simple interpretation.
La corrélation entre deux variables aléatoires X et Y mesure plus précisément à quel point X et Y "bougent dans le même sens":
When statisticians talk of strength of relationship, they usually have in mind the strength of the tendency of two variables, X and Y, to move in the same (opposite) direction.

Bref pour répondre aux questions de mike il faut déjà leur donner un sens.

Je serais intéressé par un exemple de "nuage de points" où on ne trouve pas de corrélation forte, même après des transformations, mais où néanmoins on pourrait mettre en évidence une certaine "dépendance forte" entre les 2 variables.

Ceci dit, on pourrait dire que la dépendance la plus forte possible entre Y et X est le cas où Y est une fonction de X. Cela revient mathématiquement à dire que la tribu engendrée par Y est contenue dans celle engendrée par X. Dans ce cas il existe donc une fonction f telle que la corrélation de Y et f(X) est égale à 1.

Du point de vue probabiliste la dépendance entre X et Y pourrait être définie comme une distance entre les tribus engendrées par X et Y. Il y a le choix pour de telles distances. Ensuite il s'agirait encore d'estimer cette distance à partir d'un nuage de points.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message