IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Explication pour test GLM


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suède

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2018
    Messages : 40
    Par défaut Explication pour test GLM
    Bonjour

    Je cherche à faire un GLM test sous R mais je ne suis pas tout à fait au point la-dessus.
    Je possède une variable de type vitesse . J'aimerai voir si elle est influencé par l'année de naissance, le sexe

    voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    start = glm(vitessemoyenne ~ info.sex+birthyear, data=traitement)
    summary(start)
    J'obtiens ces resultats mais je ne sais pas s'ils sont correcte car chaque année de naissance est détaillée. Quelqu'un pourrait'l m'expliquer comment interpréter les différents résultats ?

    Call:
    glm(formula = vitessemoyenne ~ info.sex + birthyear, data = traitement)

    Deviance Residuals:
    Min 1Q Median 3Q Max
    -11.407 -3.155 -1.517 1.200 75.932

    Coefficients:
    Estimate Std. Error t value Pr(>|t|)
    (Intercept) 81.4015 0.1287 632.682 < 2e-16 ***
    info.sexS 0.1012 0.1050 0.963 0.335479
    info.sexV -0.7992 0.1060 -7.538 4.90e-14 ***
    birthyear2004 -0.2329 0.1247 -1.867 0.061858 .
    birthyear2005 -0.2029 0.1261 -1.609 0.107667
    birthyear2006 -0.4449 0.1284 -3.464 0.000533 ***
    birthyear2007 -0.5886 0.1278 -4.608 4.09e-06 ***
    birthyear2008 -0.8567 0.1263 -6.781 1.21e-11 ***
    birthyear2009 -0.6843 0.1250 -5.474 4.42e-08 ***
    birthyear2010 -0.7841 0.1294 -6.061 1.36e-09 ***
    birthyear2011 -0.6226 0.1283 -4.851 1.23e-06 ***
    birthyear2012 -1.1090 0.1296 -8.559 < 2e-16 ***
    birthyear2013 -0.5549 0.1344 -4.130 3.64e-05 ***
    birthyear2014 1.3057 0.1393 9.370 < 2e-16 ***
    ---
    Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    (Dispersion parameter for gaussian family taken to be 25.48553)

    Null deviance: 907603 on 34940 degrees of freedom
    Residual deviance: 890133 on 34927 degrees of freedom
    (390 observations deleted due to missingness)
    AIC: 212317

    Number of Fisher Scoring iterations: 2
    j'aimerai également tester en fonction du genotype (AA,AG,GG) dois je transformer ma variable ? Puis je avoir un Multiple R-squared et Adjusted R-squared et une p-value ?


    Merci
    Bonne journée

  2. #2
    Membre émérite

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Dans tous les cas, il semble que l'année de naissance soit un facteur important dans la mesure ou elles sont notées avec trois étoiles.

    Par contre tes années sont considérées comme des Strings et non comme des valeurs numériques. Il serait bon de caster la colonne pour éviter ce que tu appelles toi-même une répétition des années.

    Pour cela tu as la fonction :


    Bien cordialement,

  3. #3
    Membre expérimenté
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Par défaut
    Bonjour,

    Pour que le test soit le plus correcte possible. Essaye de Connaitre tout d'abord la distribution suivie par ta variable à expliquer ( vitessemoyenne ) ( Normale, Poisson, Gamma ... ).
    L'année dans ton cas est détaillé parce que elle pris en compte comme variable qualitative, donc chaque année est considéré comme variable ( binaire ) sauf une. Il faut la transformer en quantitative.

    Je te propose ce code.

    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
     
    #Pour obtenir la distribution t'as le choix entre faire tout les tests de distribution ou analyser l'histograme de tes données et estimer par la suite 
    hist(traitement$vitessemoyenne) 
     
    #ensuite réaliser ta glm le as.numeric() est pour transformer ta variable et ajouter la distribution family= poisson() ou binomial() ou gaussian()  ou Gamma() ou autre ... 
     
    start = glm(vitessemoyenne ~ info.sex+as.numeric(birthyear)  , data=traitement , family = poisson() )
    summary(start)
     
    #pour ajouter d'autres variables comme genotype 
     
    start = glm(vitessemoyenne ~ info.sex+as.numeric(birthyear) +  genotype , data=traitement)
    summary(start)
    #pour avoir le R²
    r_square = sum( (start$fitted.values -  mean(traitement$vitessemoyenne) )^2) / sum( (traitement$vitessemoyenne - mean(traitement$vitessemoyenne))^2)
    paste( " R² =" , r_square)
    les étoile signifie la significativité de la variables *** très significative ... il y a un descriptif en bas de la sortie. C'est un test de student sur les paramètres du modèle.

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suède

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2018
    Messages : 40
    Par défaut
    Merci de vos réponses

    cela m'a bien aidé pour les années

    comment puis je choisir si je met poisson() ou binomial() ou gaussian() ou Gamma() à family ?

    si j'ai bien compris l'intercept est ma variable à expliquer.
    Que represente Estimate Std. Error t value Pr(>|t|) s'il vous plait ? je ne vois pas comment expliquer les résultats avec toutes ses données

    merci encore

  5. #5
    Membre expérimenté
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Par défaut
    Bonjour,

    Il faut analyser ta variable à expliquer (vitesse moyenne) pour connaitre sa distribution et ensuite mettre dans family = .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #poste le résultat de ce plot stp
    hist(traitement$vitessemoyenne)
    Glm est un modèle linéaire généralisé on essaye de modéliser la variable à expliquer en fonction des variables explicatives en supposant un liens linéaire.

    par exemple Y = a + b*X +c*Z ... dans ton cas Y : vitessemoyenne , X : Sexe, Z: Année.

    la fonction estime les paramètres inconnues ici c'est a , b et c . le petit a est appelé l'intercept.

    explication des sorties.

    Estimate : sont la liste des paramètres estimés les a est l'intercept , Oublie Std et t value et concentre toi sur Pr(>|t|) c'est la p-value c'est une probabilité pour tester si les paramètres sont négatives ou pas à travers un test de Student. ce qui va nous indiquer si la variable explicative est significative ou pas en générale une variable est significatif si la p value est inférieur à 0.05.
    Essaye de lire un cours de régression pour comprendre plus ce que fait la fonction glm ect. Aussi les notions de distribution, test statistiques...

  6. #6
    Membre émérite
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Par défaut
    1) Clairement l'année de naissance est considérée comme un facteur. Elle est donc lue de ton fichier d'origine comme une chaîne de caractères. Quel est le format d'origine de cette année et comment est lu ce fichier ?

    2) Ton utilisation de glm considère que la famille de ta donnée à expliquer est gaussienne, donc tu aurais parfaitement pu utiliser lm et tu aurais eu les mêmes résultats. Le terme 'données gaussiennes' ne signifie pas que la variable à expliquer suit une loi gaussienne, mais que les résidus sont gaussiens, cela se vérifie visuellement notamment par la droite de Henry.

    3) Quelle famille utiliser ? Cela dépend de la variable à expliquer. C'est une vitesse moyenne, donc une variable continue. Dans ce cas elle ne peut pas être de la famille poissonienne qui suppose un comptage ni binomiale, qui suppose d'analyser un taux de succès parmi un ensemble d'essais. La vitesse est positive. On peut supposer que la famille gamma serait appropriée mais... (voir http://pj.freefaculty.org/guides/stat/Regression-GLM/Gamma/GammaGLM-01.pdf) De plus, on sait le modèle linéaire robuste face à la non normalité des données et si tu veux vraiment t'assurer que tu es globalement dans les clous, la meilleure stratégie est d'utiliser une approche de vérification par fonction d'influence.

    4) Avant de te lancer dans l'explication des coefficients obtenus par summary, commence par regarder la significativité de tes différents prédicteurs par la fonction anova ou Anova (package car) ensuite tu devrais plutôt utiliser les fonctions de test post-hoc (packages multcomp ou lsmeans/emmeans), les résultats de summary étant des résultats 'bruts', c'est-à-dire sans correction de comparaisons multiples. En effet, le contraste par défaut de R est le contraste 'treatment' d'où l'intercept est la valeur du niveau de référence et non de la grande moyenne, et les coefficients sont les différences prises une à une entre un niveau donné (e.g., l'année 2004) et le niveau de référence (sans doute l'année 2003). A cause de ce calcul, les coefficients sont corrélées entre eux ce que summary ne prend pas en compte.

    5) Es-tu sûr de ton modèle car actuellement tu supposes que tes différents prédicteurs agissent indépendamment les uns des autres or vu le nombre de sujets (de l'ordre de 35000), tu peux sans problème tester l'existence d'interactions.

    6) Vu le nombre de sujets, analyse aussi la taille des effets pour t'assurer que tes résultats significatifs ne sont pas simplement des artéfacts dus à la taille de ton échantillon. En effet, on sait que quelque soit la différence entre deux groupes, on peut toujours trouver une taille d'échantillon qui conclura à la signicativité de la différence.

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suède

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2018
    Messages : 40
    Par défaut
    1)l'année est formatée j'arrive à la mettre en format numérique avec as.numeric

    3) d'influence ? en effet j'ai teste des échantillons de 500 avec shapiro test et toutes la population avec ks.test est dans les deux cas la vitesse ne suit pas une loi normale. J'utilise donc une famille gamma?


    5) oui j'ai un grand nombre de sujet et je veux tester indépendamment les indicateurs des uns des autres. mais comment puis faire pour tester l'existence d'interaction ?

    6) comment analyser aussi la taille des effets assurer des résultats significatifs (pas simplement des artéfacts dus à la taille de l'échantillon)?

  8. #8
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Bonjour,
    3) d'influence ? en effet j'ai teste des échantillons de 500 avec shapiro test et toutes la population avec ks.test est dans les deux cas la vitesse ne suit pas une loi normale. J'utilise donc une famille gamma?
    Non ... C'est pas parce que la distribution de ta variable n'est pas gaussienne que tu ne peux pas utiliser la loi normale. Comme l'a dit faubry, ce n'est pas la variable y qui doit être gaussiene mais les résidus, parce que quand tu fais un modèle linéaire, tu considères que pour une valeur de x donné alors les valeurs de y suivent une loi normale.

    Prends l'exemple suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x <- rep(1:100, each = 100)
    y <- -2+1.25*x+rnorm(1000, 0)
    Si tu fais hist(y) clairement la variable y n'est pas gaussienne. Par contre si tu regardes la distribution de y quand x = 5 par exemple hist(y[x==5]) alors là oui, et c'est bien l'hypothèse que fait un modèle linéaire. Comme en général on n'a pas plusieurs répétitions, plusieurs valeurs de y pour un x donné, alors on regarde la distribution des résidus du modèle (hist(residuals(lm(y ~ x)))), si elle est gaussienne, alors on considère que la condition est remplie.

    cdlt

  9. #9
    Membre émérite
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Par défaut
    1) 'as.numeric' OK mais il y a sans doute aussi un problème à la lecture de tes données car si dans le fichier d'origine, l'année est codée comme une chaine de caractères ne contenant que des valeurs numériques, il n'y a aucune raison pour avoir une variable sous forme de chaines de caractères.

    3) fonction d'influence, cf. la doc de influence.measures. Pour ce qui est des données gaussiennes, reprends l'exemple que te donne tototode.

    5) les interactions se modélisent dans la formule. Voir la documentation sur la construction des formules en R. Plus généralement, ne bonne introduction aux analyses sous R : le livre de Faraway qu'on peut trouver sur le site de R (http://cran.r-project.org) :
    V ~ X + Y : sans interaction
    V ~ X * Y ou V ~ X + Y + X:Y avec interaction

    6) Voir les notions de taille des effets et les fonctions/packages de R pour cela (par exemple, psych ou effsize)

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suède

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2018
    Messages : 40
    Par défaut
    Merci pour vos réponses
    elles m'ont bien aidée
    j'ai pu obtenir des résultats

Discussions similaires

  1. Besoin d'explication pour test dans script Bash
    Par Jipété dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 27/10/2014, 12h45
  2. Réponses: 4
    Dernier message: 02/07/2013, 11h39
  3. est-ce quelqu'un a une explication pour ce test bizzare
    Par sniper_marra dans le forum Langage
    Réponses: 1
    Dernier message: 15/08/2008, 11h19
  4. [FLASH MX2004] Explication pour les comboBox
    Par Sorento dans le forum Flash
    Réponses: 7
    Dernier message: 18/06/2005, 23h47
  5. Réponses: 4
    Dernier message: 30/04/2005, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo