Travaux pratiques en langage R : opérations matricielles de base



Documents pareils
Initiation au logiciel R

Introduction à MATLAB R

Exercice : la frontière des portefeuilles optimaux sans actif certain

Introduction à R. Florence Yerly. Dept. de mathématiques, Université de Fribourg (CH) SP 2011

Cours 1. I- Généralités sur R II- Les fonctions de R et autres objets III-Les vecteurs

Etude des propriétés empiriques du lasso par simulations

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Introduction aux Statistiques et à l utilisation du logiciel R

INTRODUCTION AU LOGICIEL R

Relation entre deux variables : estimation de la corrélation linéaire

Extraction d informations stratégiques par Analyse en Composantes Principales

1 Complément sur la projection du nuage des individus

Chapitre 3 : Repères et positionnement 3D

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

Lire ; Compter ; Tester... avec R

Analyse en Composantes Principales

avec des nombres entiers

L ANALYSE EN COMPOSANTES PRINCIPALES (A.C.P.) Pierre-Louis GONZALEZ

Leslie REGAD ; Gaëlle LELANDAIS. leslie.regad@univ- paris- diderot.fr ; gaelle.lelandais@univ- paris- diderot.fr

Séance 0 : Linux + Octave : le compromis idéal

Python - introduction à la programmation et calcul scientifique

La classification automatique de données quantitatives

Exemple d application en CFD : Coefficient de traînée d un cylindre

Plan du cours Cours théoriques. 29 septembre 2014

Les concepts de base, l organisation des données

INTRODUCTION À L ANALYSE FACTORIELLE DES CORRESPONDANCES

Aide-mémoire de statistique appliquée à la biologie

Gestion obligataire passive

Évaluation de la régression bornée

Introduction à l approche bootstrap

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Initiation à l analyse en composantes principales

Contents. 1 Introduction Objectifs des systèmes bonus-malus Système bonus-malus à classes Système bonus-malus : Principes

1 Introduction - Qu est-ce que le logiciel R?

Master IAD Module PS. Reconnaissance de la parole (suite) Alignement temporel et Programmation dynamique. Gaël RICHARD Février 2008

Représentation des Nombres

Analyses multivariées avec R Commander (via le package FactoMineR) Qu est ce que R? Introduction à R Qu est ce que R?

Analyse de la variance Comparaison de plusieurs moyennes

ACTUARIAT 1, ACT 2121, AUTOMNE 2013 #16

Modèles pour données répétées

Salle de technologie

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Modèles à Événements Discrets. Réseaux de Petri Stochastiques

Satisfaction des stagiaires de BRUXELLES FORMATION Résultats 2013

Population responses to environmental forcing : approaches to model and monitor habitat characteristics

TABLE DES MATIÈRES. PRINCIPES D EXPÉRIMENTATION Planification des expériences et analyse de leurs résultats. Pierre Dagnelie

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

1. Structure d'un programme FORTRAN 95

Simulation de variables aléatoires

RESEAU TRES HAUT DEBIT EN FIBRE OPTIQUE - DOSSIER TECHNIQUE FTTH

Avant-après, amont-aval : les couples de tableaux totalement appariés

Big Data et Graphes : Quelques pistes de recherche

LES DÉTERMINANTS DE MATRICES

La structure de la base de données et l utilisation de PAST. Musée Royal de l Afrique Centrale (MRAC Tervuren)

Initiation à LabView : Les exemples d applications :

La problématique des tests. Cours V. 7 mars Comment quantifier la performance d un test? Hypothèses simples et composites

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

Mesures de temps de propagation de groupe sur convertisseurs de fréquence sans accès aux OL

MÉDICLICK! STUDIO 3 GESTION DES IMAGES ET PIÈCES JOINTES SOMMAIRE

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES

Introduction à la programmation en R. Vincent Goulet

Résolution de systèmes linéaires par des méthodes directes

Jérôme Mathieu janvier Débuter avec R. Ce document est disponible sur le site web :

TP1 : LOGICIEL R ET PRÉDICTION DE L EFFLORESCENCE ALGALE

ACP Voitures 1- Méthode

Big Data et Graphes : Quelques pistes de recherche

Interception des signaux issus de communications MIMO

L enseignant, l élève ou la classe se crée une adresse électronique ( ) du type utilisateur@gmail.com.

COURS 470 Série 04. Comptabilité Générale

SEMIN. Données sous R : stockage et échange. Julio PEDRAZA ACOSTA

Chapitre 2. Matrices

PARCOURS 3 EXPERIMENTATION APPRENTISSAGE : PHASE 2 CARA CREATION DU PROGRAMME POUR LA PHASE 2

Fonctions de plusieurs variables

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Introduction à la statistique non paramétrique

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

I. Programmation I. 1 Ecrire un programme en Scilab traduisant l organigramme montré ci-après (on pourra utiliser les annexes):

Déroulement d un projet en DATA MINING, préparation et analyse des données. Walid AYADI

Chapitre 10 Arithmétique réelle

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

Travaux pratiques avec RapidMiner

UFR de Sciences Economiques Année TESTS PARAMÉTRIQUES

TRAITEMENT DES DONNEES MANQUANTES AU MOYEN DE L ALGORITHME DE KOHONEN

Programmes des classes préparatoires aux Grandes Ecoles

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

ANALYSE STATIQUE D UNE POUTRE SOUMISE A UNE CHARGE VARIABLE

La place de SAS dans l'informatique décisionnelle

Validation probabiliste d un Système de Prévision d Ensemble

Annexe commune aux séries ES, L et S : boîtes et quantiles

MODELE A CORRECTION D ERREUR ET APPLICATIONS

Analyse des durées de vie avec le logiciel R

Introduction à l analyse des statistiques des données : travaux pratiques avec le logiciel R.

Chap. 9 : L affectation du résultat

Note de présentation générale. Secrétariat général du Conseil d orientation des retraites

FIMA, 7 juillet 2005

données en connaissance et en actions?

Analyse de la vidéo. Chapitre La modélisation pour le suivi d objet. 10 mars Chapitre La modélisation d objet 1 / 57

Circuits RL et RC. Chapitre Inductance

TP 1 Introduction à Matlab Février 2009

Transcription:

Travaux pratiques en langage R : opérations matricielles de base Pierre Legendre Janvier 2005 Département de sciences biologiques Janvier 2006 Université de Montréal Mai 2007 1. Créer des vecteurs et des matrices Il y a plusieurs façons de créer des vecteurs en langage R. 1. Fonction scan (lire des données dans la console R pour former un vecteur) vec1=scan() 1: 1 2: 5 3: 35 4: Read 3 items vec1 [1] 1 5 35 vec2=scan() 1: 1 2: 2 3: 4 4: Read 3 items 2. Fonction c (combiner) vec1 = c(1, 5, 35) vec1 [1] 1 5 35 # La commande c permet de combiner des vecteurs préexistants vec12 = c(vec1, vec2) vec12 [1] 1 5 35 1 2 4 09/09/14

2 3. Créer un vecteur formé de 6 valeurs, puis tenter de transformer celui-ci en matrice vec3 = c(6, 3, 0, 7, -5, 1) mat3 = matrix(vec3, 3, 2) # Ou sur une seule ligne: mat3 = matrix(c(6, 3, 0, 7, -5, 1), 3, 2) mat3 [1,] 6 7 [2,] 3-5 [3,] 0 1 mat1 = matrix(vec3, 3, 2, byrow=true) mat1 [1,] 6 3 [2,] 0 7 [3,] -5 1 # Pourquoi ces deux matrices sont-elles différentes? # Quelle convention suit le langage R, par défaut, lorsqu il crée une matrice à partir d un vecteur? # On peut également inscrire les données dans un fichier et demander à R de lire ce fichier par la commande read.table. Voir le document «Introduction aux fonctions du langage R». 4. Générer des vecteurs de nombres aléatoires # Fonction rnorm pour des nombres aléatoires tires d une distribution normale aleanorm1=rnorm(10) # ou aleanorm1=rnorm(10,mean=0,sd=1) aleanorm1 [1] 0.5537578 0.3176950 1.0835924 0.1095523 0.7744556-1.0011711 1.0175194 [8] 0.8675578 1.5805411 0.5824715 aleanorm2=rnorm(10,mean=50,sd=10) aleanorm2 [1] 49.51681 42.66049 54.33008 47.16372 70.80451 48.25744 55.69606 49.06176 63.45640 [10] 47.96367 # Fonction runif pour des nombres aléatoires tires d une distribution uniforme aleaunif1=runif(5) # ou aleaunif1=runif(5,min=0,max=1) aleaunif1 [1] 0.7684457 0.8364512 0.3568679 0.9119424 0.9935300 aleaunif2=runif(5,min=10,max=20) aleaunif2 [1] 15.75800 13.37846 17.76781 13.36102 17.49161

3 # Fonction rlnorm pour la distribution lognormale (distribution dont le log donne une distribution normale). On peut préciser la moyenne meanlog et l écart type sdlog de la distribution normale correspondante. alealnorm1=rlnorm(5) # ou alealnorm1=rlnorm(5,meanlog=0,sdlog=1) alealnorm1 [1] 0.2129886 1.6512231 3.2237191 5.8959147 1.2279456 alealnorm2=rlnorm(5,meanlog=2,sdlog=5) alealnorm2 [1] 0.75931953 0.02862776 1.12951044 0.51971353 48.50212899 5. Générer des sequences régulières de nombres res = seq(1, 5, 0.5) res [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 6. Répéter des sequences de nombres res = rep(c(1, 2, 3), 4) res [1] 1 2 3 1 2 3 1 2 3 1 2 3 7. Les fonctions fix(nom) et edit(nom) permettent de modifier une ou des valeurs dans une matrice. L objet peut être de type data.frame, matrix ou vector. fix modifie directement les valeurs de la matrice : fix(mat1) edit conserve les changements dans une nouvelle matrice dont on aura fourni le nom. Exemple : mat1a = edit(mat1)

4 2. Opérations matricielles de base 1. Somme de deux vecteurs ou de deux matrices: opérateur + vec1 [1] 1 5 35 vec2 [1] 1 2 4 vec1+vec2 [1] 2 7 39 mat1 [1,] 6 3 [2,] 0 7 [3,] -5 1 mat2 # Saisissez la matrice mat2 à l aide de la fonction matrix(), page 2 [1,] 3 8 [2,] 2-1 [3,] 6-4 mat1+mat2 [1,] 9 11 [2,] 2 6 [3,] 1-3 # Il faut s assurer que deux matrices ont le même nombre de lignes et de colonnes avant de calculer leur somme. # Que produirait la commande mat1+t(mat2)? 2. Produit scalaire de deux vecteurs ou de deux matrices: opérateur %*% # Exemple du manuel, p. 64 vec1 [1] 1 5 35 vec2 [1] 1 2 4 vec1 %*% vec2 [,1] [1,] 151 # Lors du calcul d un produit de deux vecteurs, R considère que le premier vecteur est horizontal et le second vertical.

5 # On peut spécifier l orientation des vecteurs en les transformant en matrices. Mvec1=matrix(vec1, 1, 3) Mvec2=matrix(vec2, 3, 1) Mvec1 [,3] [1,] 1 5 35 Mvec2 [,1] [1,] 1 [2,] 2 [3,] 4 Mvec1 %*% Mvec2 [,1] [1,] 151 # Que produirait la commande Mvec2 %*% Mvec1? # Il faut s assurer que deux matrices sont conformes avant de calculer leur produit, c est-à-dire que le nombre de colonnes de la matrice de gauche est identique au nombre de lignes de la matrice de droite. # La fonction «dim» permet de connaître les dimensions d une matrice : dim(mvec1) [1] 1 3 dim(mvec2) [1] 3 1 mat1 %*% mat2 # Quel message obtenez-vous? Comment pouvez-vous remédier à cette situation? mat1 %*% t(mat2) [,3] [1,] 42 9 24 [2,] 56-7 -28 [3,] -7-11 -34 # L opérateur t a transposé la matrice mat2 3. Produit Hadamard : produit élément par élément de deux vecteurs ou matrices vec1 = c(1, 5, 35) vec2 = c(1, 2, 4) vec1 * vec2 mat1 = matrix(c(6,0,-5,3,7,1), 3, 2) mat2 = matrix(c(3,2,6,8,-1,-4), 3, 2) mat1 * mat2

6 Autres commandes matricielles utiles Pour details, voir les fichier d aide. Exemple:?as.matrix # Conversion d un objet data.frame ou vector au type matrix : fonction as.matrix # Centrer ou centrer-réduire les valeurs des colonnes d une matrice: scale # Calcul d une matrice de covariances: fonction cov # Calcul d une matrice de corrélations: fonction cor # Transposition d une matrice: opérateur t # Calcul du déterminant: fonction det # Inversion d une matrice: fonction solve, ou ginv (generalized inverse, bibliothèque MASS) # Calcul des valeurs propres et des vecteurs propres: fonction eigen # Décomposition en valeurs singulières: fonction svd 4. Calcul d un déterminant (manuel p. 70-71) mat3x3 = matrix(c(1,2,3,4,5,6,7,8,10), 3, 3, byrow=true) mat3x3 [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 10 det(mat3x3) [1] 3 5. Calcul de valeurs propres et de vecteurs propres (manuel p. 83-87) mat2x2 [1,] 2 2 [2,] 2 5 res = eigen(mat2x2) # La fonction summary nous apprend que le fichier res comporte deux composantes: res$values et res$vectors : summary(res) Length Class Mode values 2 -none- numeric vectors 4 -none- numeric res$values [1] 6 1 res$vectors [1,] 0.4472136 0.8944272 [2,] 0.8944272-0.4472136

7 6. Mise à une puissance par produit matriciel (produit scalaire) B = matrix(c(2,3,3,5), 2, 2) B [1,] 2 3 [2,] 3 5 B %*% B [1,] 13 21 [2,] 21 34 # Attention: l opérateur exposant ^ produit une matrice dont chaque élément est mis à la puissance spécifiée et non la mise à puissance de la matrice B^2 [1,] 4 9 [2,] 9 25 7. Mise à une puissance via les valeurs et les vecteurs propres (manuel p. 91, eq. 2.29) eig.b = eigen(b) eig.b$values [1] 6.8541020 0.1458980 eig.b$vectors [1,] 0.5257311 0.8506508 [2,] 0.8506508-0.5257311 # B^2 = U %*% (matrice diagonale des valeurs propres au carré) %*% inverse de U B.exp2 = eig.b$vectors %*% diag(eig.b$values^2) %*% solve(eig.b$vectors) B.exp2 [1,] 13 21 [2,] 21 34 # Trouver l exposant 3.1416 de la matrice B BB = eig.b$vectors %*% diag(eig.b$values^3.1416) %*% solve(eig.b$vectors) BB [1,] 116.8843 189.1189 [2,] 189.1189 306.0031 # N.B. Ce calcul est impossible s il y a des valeurs propres négatives et l exposant est fractionnaire. En effet, l exposant fractionnaire d un nombre négatif n est pas défini.

8 8. Appliquer une fonction aux lignes ou aux colonnes à un tableau: apply?apply # Créer une matrice de nombres aléatoires à distribution normale mat = matrix(rnorm(15, 5, 1),5,3) # Calculer la somme des valeurs de mat ligne par ligne # Le paramètre 1 indique d appliquer la fonction sum aux lignes de mat row.sums = apply(mat, 1, sum) row.sums # Calculer la somme des valeurs de mat colonne par colonne # Le paramètre 2 indique d appliquer la fonction sum aux colonnes de mat col.sums = apply(mat, 2, sum) col.sums # Que produira la commande suivante? sum(mat) # Calculer la moyenne des variables de mat colonne par colonne col.means = apply(mat, 2, mean) col.means # Que produira la commande suivante? mean(mat) # Calculer l écart type des variables de mat colonne par colonne col.sd = apply(mat, 2, sd) col.sd # Que produira la commande suivante? sd(mat) # Calculer la variance des variables de mat colonne par colonne col.var = apply(mat, 2, var) col.var # Que produira la commande suivante? var(mat) # Centrer les variables de mat colonne par colonne mat.centred = scale(mat, center=true, scale=false) # ou encore mat.centred = apply(mat, 2, scale, center=true, scale=false) # Vérifier que la somme des valeurs de chaque colonne est maintenant zéro apply(mat.centred, 2, sum) # Comment faut-il comprendre ces résultats? # Centrer et réduire les variables de mat colonne par colonne, # i.e., soustraire la moyenne et diviser par l écart type de chaque colonne mat.stan = scale(mat, center=true, scale=true) # ou encore mat.stan = apply(mat, 2, scale, center=true, scale=true) # Vérifier la somme et la variance de chaque colonne apply(mat.stan, 2, sum) apply(mat.stan, 2, var)

9 9. Une fonction utile: which # Trouver la position des valeurs possédant certaines propriétés dans un vecteur ou une matrice?which # Où se trouvent les valeurs positives dans un vecteur de nombres aléatoires? vec = rnorm(10) vec.positif = which(vec > 0) vec vec.positif # Où se trouvent les valeurs négatives dans un tableau de nombres aléatoires? mat = matrix(rnorm(15), 5, 3) mat. negatif = which(mat < 0) mat mat.negatif # Dans quel ordre les valeurs sont-elles lues dans une matrice? 10. Une fonction utile: sweep # Produit une matrice résultant d une opération, impliquant une statistique, appliquée # à chaque case d une matrice fournie en entrée?sweep # Créer un tableau de valeurs ressemblant à des abondances d espèces (10 lignes et 5 colonnes) # La proportion de zéros dans tableau dépend de la valeur de l écart type (1.5) de rnorm 1 tableau = matrix(round(exp(rnorm(50, 0, 1.5))), 10, 5) # Diviser chaque valeur par la somme de sa ligne pour créer un tableau d abondances relatives row.sums = apply(tableau, 1, sum) tableau.profiles = sweep(tableau, 1, row.sums, "/") tableau.profiles # Vérifier que la somme de chaque ligne du tableau produit est bien 1 apply(tableau.profiles, 1, sum) # Diviser chaque valeur par la valeur maximum qui se trouve dans le tableau tableau.max = max(tableau) tableau.norm = sweep(tableau, 2, tableau.max, "/") tableau.norm # Vérifier quelle est la valeur maximum dans le tableau transformé max(tableau.norm) 1 Formule utilisée dans le program SimSSD. La formule est décrite à la p. 443 de l article suivant : Legendre, P., D. Borcard and P. R. Peres-Neto. 2005. Analyzing beta diversity: partitioning the spatial variation of community composition data. Ecological Monographs 75: 435-450.