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 :

Une régression linéaire


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Points : 54
    Points
    54
    Par défaut Une régression linéaire
    Bonjour à tous,

    Je fais une étude sur 2 variables quantitatives, avec la régression linéaire. J'essais de voir s'il y a une relation entre l'âge et le nombre d'enfants.

    Pour l'exemple, je crée un data.frame :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    data = data.frame(AGE = round(runif(100, min=40, max=60), digits=0), ENFANT = round(runif(100, min=0, max=5), digits=0))
    Je construit le module de ma droite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    model = lm(data$ENFANT~data$AGE)
    J'obtiens l'équation de ma droite de regression avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    model$coefficients
    Sur mon fichier de donnée data et sur une colonne après ENFANT, j'aimerais pouvoir afficher les valeurs théoriques de la droite de régression, à savoir le résultat de l'opération entre ENFANT et le coefficient de la droite.
    Sur une autre colonne, je voudrais afficher les ECARTS, pour pouvoir visualiser les différents écarts à savoir le résultat de l’opération entre les véritable valeur de ENFANT - Les valeurs Théoriques.

    Respectivement, je pensais qu'utiliser les formules ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    data$VALEURS_THEORIQUE = predict(model)
     
    data$ECARTS = model$residuals
    ... mais ça m'affiche des valeurs erronées.

    edit : predict(model) semble m'afficher le bon résultat du calcul entre ENFANT et le coefficient de la droite.

    Merci à vous

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Points : 561
    Points
    561
    Par défaut
    Bonjour,

    Quand tu fais un modèle linéaire, comme une régression, ton modèle est du genre y = ax + b.
    Déjà la synthaxe de ton modèle n'est pas optimale, il vaut mieux écrire lm(ENFANT ~ AGE, data = data), c'est beaucoup plus simple pour la suite et notamment pour se servir de predict.
    Autre chose, c'est une mauvaise habitude que de donner à un nom d'objet le nom d'une fonction préexistante, ici data. Appelle plutôt ton data.frame tab par exemple.
    Si tu appliques predict sur ton modèle sans rien spécifier d'autres alors il va te donner la valeur prédite pour chaque ligne de ton tableau initial. Pour se faire il va multiplier l'age avec le coefficient mais il va aussi ajouter le coefficient de l'ordonnée à l'origine ("l'intercept") soit le petit b de l'équation de la régression.
    Quand tu fais residuals, il te donne bien la différence entre le nombre d'enfants observé et le nombre d'enfant prédits pour chaque age de ton tableau : residu = obs - prédit. Pour la prédiction il va aussi prendre en compte le b.
    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
    head(tab)
      AGE ENFANT
    1  43      2
    2  57      4
    3  40      4
     
    lm1 <- lm(ENFANT ~ AGE, data = tab)
     
    lm1
     
    Call:
    lm(formula = ENFANT ~ AGE, data = tab)
     
    Coefficients:
    (Intercept)          AGE  
        1.30033      0.02475
     
    1.30033 + 0.02475*43
    [1] 2.36458
     
    head(predict(lm1))
           1        2        3 
    2.364531 2.711015 2.290284 # ça correspond bien
     
    2-2.364531
    [1] -0.364531
     
    head(residuals(lm1))
             1          2          3
    -0.3645307  1.2889855  1.7097159 # idem
    cdlt

  3. #3
    Membre éclairé
    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
    Points : 793
    Points
    793
    Par défaut
    Je n'ai rien à dire au sujet des commentaires de tototode sauf que si je comprends bien la variable ENFANT est un comptage, donc si on veut être rigoureux, ton modèle est faux. Il faut utiliser un modèle linéaire généralisé. Un modèle plus exact est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glm(formula = ENFANT ~ AGE, data = tab, family=poisson)

  4. #4
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Points : 561
    Points
    561
    Par défaut
    Je partage le commentaire de faubry. Par contre si tu passes sur des glm alors la situation est plus complexe parce que les observations sont transformées par la fonction de lien (un log pour la famille poisson) et que ce que je t'ai raconté pour une régression linéaire ne s'applique pas directement pour un glm.

    cdlt

  5. #5
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Points : 54
    Points
    54
    Par défaut
    Un grand merci pour vos réponses c'est bien plus clair

Discussions similaires

  1. Résultats d'une régression linéaire
    Par ToTo13 dans le forum Méthodes prédictives
    Réponses: 14
    Dernier message: 17/02/2016, 10h58
  2. Moyenne géométrique dans une régression linéaire
    Par Lilouche52 dans le forum SAS STAT
    Réponses: 2
    Dernier message: 06/06/2013, 09h13
  3. LaTeX PGFplots / Tikzpicture tracer une régression linéaire
    Par galaxie87 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 0
    Dernier message: 16/07/2010, 22h09
  4. Réponses: 2
    Dernier message: 22/12/2006, 20h24
  5. [NaN] Calcul d'une régression linéaire
    Par GLDavid dans le forum Langage
    Réponses: 1
    Dernier message: 24/10/2006, 12h55

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