Imprimer
Catégorie : Logiciel R

1.5 Exemple étendu: Analyse de régression des notes d'examen
Pour notre prochain exemple, nous aborderons une brève analyse de régression statistique.
Il n'y a pas beaucoup de programmation réelle dans cet exemple, mais cela illustre comment
Certains types de données que nous venons de discuter sont utilisés, y compris les objets S3 de R.
En outre, cela servira de base à plusieurs de nos exemples de programmation dans
Chapitres suivants.
J'ai un fichier, ExamsQuiz.txt, contenant des notes d'une classe que j'ai enseignée. Ici
Sont ses premières lignes:
2 3.3 4
3,3 2 3,7
4 4,3 4
2,3 0 3,3
...
Les chiffres correspondent aux notes de lettres sur une échelle de quatre points; 3.3 est un
B +, par exemple. Chaque ligne contient les données pour un étudiant, consistant en
La note d'examen de mi-parcours, la note d'examen fi nale et le quiz moyen
qualité. Il pourrait être intéressant de voir à quel point les notes de mi-parcours et de quiz
Prévoir la note de l'élève lors de l'examen final.
Lisons d'abord le fichier de données:
> Examsquiz <- read.table ("ExamsQuiz.txt", header = FALSE)
Notre fichier n'inclut pas une ligne d'en-tête nommant les variables dans chaque
Dossier d'étudiant, nous avons donc spécifié
Header = FALSE dans l'appel de fonction. C'est un
Exemple d'argument par défaut, dont nous avons parlé plus tôt. En fait, le
Valeur par défaut de
L'argument d'en-tête est déjà FALSE (que vous pouvez vérifier par
Consulter l'aide en ligne de R pour
Read.table ()), donc nous n'avons pas besoin de spécifier cela
Mais il est plus clair si nous le faisons.
Nos données sont maintenant en
Examsquiz, qui est un objet R de la classe data.frame.
> Classe (examsquiz)
[1] "data.frame"
Juste pour vérifier que le fichier a été lu correctement, regardons le
Premières lignes:
> Head (examsquiz)
V1 V2 V3

1 2.0 3.3 4.0
2 3.3 2.0 3.7
3 4,0 4,3 4,0
4 2,3 0,0 3,3
5 2,3 1,0 3,3
6 3,3 3,7 4,0
En raison d'un en-tête pour les données, R a nommé les colonnes V1, V2 et V3. Rangée
Les chiffres apparaissent sur la gauche. Comme vous pourriez penser, ce serait mieux
Avoir un en-tête dans notre fichier de données, avec des noms significatifs comme
Examen1. Au plus tard
Exemples, nous allons généralement indiquer des noms.
Essayons de prédire le score de l'examen 2 (indiqué dans la deuxième colonne de
Examsquiz) de l'examen 1 (première colonne):
Lma <- lm (examsquiz [, 2] ~ examsquiz [, 1])
L'appel de la fonction lm () (pour le modèle linéaire) ici indique à R que cette prédiction
équation:
Examen prévu 2 = β
0
+ Β
Examen 1
Ici, β
0
Et β
1
1
Sont des constantes à estimer à partir de nos données. En d'autre
Paroles, nous établissons une ligne droite pour les paires (examen 1, examen 2) dans notre
Les données. Cela se fait par une méthode classique des moindres carrés. (Ne vous inquiétez pas si
Vous n'avez pas d'arrière-plan dans ce domaine.)
Notez que les scores de l'examen 1, qui sont stockés dans la première colonne de notre
Cadre de données, sont collectivement appelés
Examsquiz [, 1]. Omission du premier
L'indice (le numéro de la ligne) signifie que nous parlons d'une colonne entière
Du cadre. Les scores de l'examen 2 sont également référencés. Donc, notre appel à
Lm ()
Ci-dessus prédit la deuxième colonne d'examsquiz dès le premier.
Nous aurions également pu écrire
Lma <- lm (examsquiz $ V2 ~ examsquiz $ V1)
Rappelant qu'un cadre de données est juste une liste dont les éléments sont des vecteurs. Ici le
Les colonnes sont les
V1, V2 et V3 de la liste.
Les résultats sont retournés par
Lm () sont maintenant dans un objet que nous avons stocké dans
La variable
Lma. C'est une instance de la classe lm. Nous pouvons énumérer ses composants
en appelant
les attributs():
> Attributs (lma)
$ Noms
[1] "coefficients" "résidus" "effets" "rang"
[5] "fitted.values" "assigner" "qr" "df.residual"
[9] "xlevels" "appel" "termes" "modèle"
$ Classe
[1] "lm"

Chapitre 1
Comme d'habitude, une comptabilité plus détaillée peut être obtenue via l'appel str (lma).
Les valeurs estimées de β
Sont stockés dans les coefficients de lma $. Vous pouvez afficher
En tapant le nom à l'invite.
je
Vous pouvez également enregistrer certaines saisies en ouvrant les noms des composants,
Tant que vous ne réduisez pas le nom d'un composant au point d'être ambigu.
Par exemple, si une liste comprend les composants
Xyz, xywa et xbcde,
Alors les deuxième et troisième composants peuvent être abrégés
Xyw et xb,
respectivement. Donc, ici, nous pourrions taper ce qui suit:
> Lma $ coef
(Intercept) examsquiz [, 1]
1,1205209 0,5899803
Puisque les coefficients de lma $ sont un vecteur, l'impression est simple. Mais considérez quoi
Se produit lorsque vous imprimez l'objet
Lma elle-même:
> Lma
Appel:
Lm (formula = examsquiz [, 2] ~ examsquiz [, 1])
Coefficients:
(Intercept) examsquiz [, 1]
1,121 0,590
Pourquoi R n'a-t-il imprimé que ces éléments et non les autres composants d'Ima?
La réponse est que ici R utilise les
La fonction print (), qui est une autre
Exemple de fonctions génériques. En tant que fonction générique,
Imprimer () effectivement les mains
Du travail à une autre fonction dont le travail consiste à imprimer des objets de classe
Lm-
la
Print.lm () - et c'est ce que cette fonction affiche.
Nous pouvons obtenir une impression plus détaillée du contenu de
Lma en appelant
résumé(),
La fonction générique discutée précédemment. Il déclenche un appel à
Summary.lm () derrière les scènes, et nous obtenons un résumé spécifique de la régression:
> Résumé (lma)
Appel:
Lm (formula = examsquiz [, 2] ~ examsquiz [, 1])
Résidus:
Min 1Q médian 3Q Max
-3,4804 -0,1239 0,3426 0,7261 1,2225
Coefficients:
Estimation Std. Erreur t valeur Pr (> | t |)
(Intercept) 1.1205 0.6375 1.758 0.08709.
Examsquiz [, 1] 0.5900 0.2030 2.907 0.00614
**
...

Un certain nombre d'autres fonctions génériques sont définies pour cette classe. Voir
L'aide en ligne pour
Lm () pour plus de détails. (L'utilisation de la documentation en ligne de R est
Discuté à la section 1.7.)
Pour estimer une équation de prédiction pour l'examen 2 à partir de l'examen 1
Et les scores du quiz, nous utiliserions le
+ Notation:
> Lmb <- lm (examsquiz [, 2] ~ examsquiz [, 1] + examsquiz [, 3])
Notez que le + ne signifie pas que nous calculons la somme des deux quantités.
Ce n'est qu'un délimiteur dans notre liste de variables prédictives.