Académique Documents
Professionnel Documents
Culture Documents
(CTPEA)
L’économétrie avec R
Économétrie 2 1 / 90
Introduction
Objets dans R
R utilise des fonctions ou des opérateurs qui agissent sur des objets (vecteurs, matrices,
data frame, liste, etc.)
Il arrive de vouloir garder en mémoire les résultats, pour cela on créera un objet dans
lequel sera stocké le résultat souhaité.
Trois opérateurs peuvent être utilisés pour créer un objet " <-“,”=“,”->" en donnant un
nom à l’objet.
On note que “=” et “==” sont utilisés différemment dans R. “==” est un opérateur
binaire qui permet de tester l’égalité entre deux objets (A==B est équivalent à A est égal
à B).
Économétrie 2 2 / 90
Création de l’objet x dans lequel sera stocké log 2
Le symbole “#” indique que tout ce qui vient après sera considéré dans R comme étant
des commentaires.
Dans le cadre de cours on utilisera le symbole “<-” pour la création d’objet dans R.
Pour afficher la valeur stockée dans l’objet x on utilisera la commande print()
Économétrie 2 3 / 90
print(x)
[1] 0.6931472
ou plus simplement
[1] 0.6931472
Économétrie 2 4 / 90
Mode d’un objet
mode(x)
[1] "numeric"
Économétrie 2 5 / 90
On peut aussi l’appartenance de l’objet à un mode particulier
is.null(x)
[1] FALSE
is.logical(x)
[1] FALSE
is.numeric(x)
[1] TRUE
Économétrie 2 6 / 90
is.complex(x)
[1] FALSE
is.character(x)
[1] FALSE
Économétrie 2 7 / 90
On peut convertir un objet x d’un mode à un autre de façon explicite en utilisant les
commandes suivantes:
as.logical(x)
[1] TRUE
as.numeric(x)
[1] 0.6931472
Économétrie 2 8 / 90
as.complex(x)
[1] 0.6931472+0i
as.character(x)
[1] "0.693147180559945"
Économétrie 2 9 / 90
Un objet a deux attributs intrinsèques: son mode mode et sa longueur length
Il existe d’autres attributs selon l’objet: dim, dimnames, class, names.
attributes(x)
NULL
Économétrie 2 10 / 90
Valeur manquante
Généralement les données collectées présentent des valeurs manquantes, c’est-à-dire des
données qui ne sont pas disponibles pour l’utilisateur.
R les note NA “Not Available”
x <- NA
print(x+1)
[1] NA
is.na(x)
[1] TRUE
Économétrie 2 11 / 90
Opérations de base
Économétrie 2 12 / 90
L’opérateur AND retourne TRUE si les propositions comparées retournent TRUE
x <- 1:10
y <- 10:1
x>y & x>5
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
Économétrie 2 13 / 90
OR |
L’opérateur OR retourne TRUE si au moins l’une des propositions comparées retourne TRUE
x == y | x != y
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Économétrie 2 14 / 90
NOT !
!x > y
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
Économétrie 2 15 / 90
Les vecteurs
Économétrie 2 16 / 90
1:6
[1] 1 2 3 4 5 6
seq(1,6,by=0.5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0
seq(1,6,length=5)
Économétrie 2 17 / 90
rep(1,4)
[1] 1 1 1 1
rep(c(1,2),each=3)
[1] 1 1 1 2 2 2
Économétrie 2 18 / 90
A = rep(1,1000) # création d’un vecteur de 1
typeof(A)
[1] "double"
object.size(A)
8048 bytes
Économétrie 2 19 / 90
object.size(as.integer(A))
4048 bytes
typeof(as.integer(A)+1)
[1] "double"
object.size(as.integer(A)+1)
8048 bytes
Économétrie 2 20 / 90
typeof(as.integer(A)+1L)
[1] "integer"
object.size(as.integer(A)+1L)
4048 bytes
Économétrie 2 21 / 90
A = rep(1L,1000) # vecteur de 1 stocké en entiers
object.size(A)
4048 bytes
Économétrie 2 22 / 90
x <- c("A","BB","C1")
x
x <- rep('A',5)
x
Économétrie 2 23 / 90
paste("X",1:5,sep="-")
paste(c("X","Y"),1:5,"txt",sep=".")
paste(c("X","Y"),1:5,sep=".",collapse="+")
[1] "X.1+Y.2+X.3+Y.4+X.5"
Économétrie 2 24 / 90
substr("livre",2,5)
[1] "ivre"
[1] 2 4
Économétrie 2 25 / 90
1>0
[1] TRUE
x>13
x <- c(-1,0,2)
test <- x>1
(1+xˆ2)*test
[1] 0 0 5
Économétrie 2 26 / 90
all(x>1)
[1] FALSE
any(x>1)
[1] TRUE
Économétrie 2 27 / 90
v <- 1:100
v[6] # donne le sixième élément de v
[1] 6
[1] 6 7 8
[1] 6 6 1 2
Économétrie 2 28 / 90
v[10:1] # donne les 10ème, 9ème, ..., 1er éléments de v
[1] 10 9 8 7 6 5 4 3 2 1
[1] 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
[20] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
[39] 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
[58] 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
[77] 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 1
Économétrie 2 29 / 90
v[-c(1,5)] # donne v sans le premier et le cinquième élément
[1] 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
[20] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
[39] 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
[58] 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
[77] 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
[96] 98 99 100
Économétrie 2 30 / 90
v <- 1:15
print(v)
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
v[(v<5)]
[1] 1 2 3 4
integer(0)
[1] 1 2 3 4 12 13 14 15
Économétrie 2 31 / 90
T <- c(23, 28, 24, 32)
O3 <- c(80, 102, 87, 124)
O3[T>25]
Économétrie 2 32 / 90
x[is.na(x)] <- 0 # les éléments NA de x reçoivent la valeur 0
y[y<0]<- -y[y<0]
y <- abs(y)
which.min(x)
[1] 1
which(x==min(x))
[1] 1
Économétrie 2 33 / 90
Les matrices
m <- matrix(c(1,17,12,3,6,0),ncol=2)
m
[,1] [,2]
[1,] 1 3
[2,] 17 6
[3,] 12 0
m <- matrix(1:8,nrow=2,byrow=TRUE)
m
Warning in matrix(1:4, nrow = 3, ncol = 3): data length [4] is not a sub-
multiple or multiple of the number of rows [3]
Économétrie 2 35 / 90
un <- matrix(1,nrow=2,ncol=4)
un
Économétrie 2 36 / 90
x <- seq(1,10,by=2)
x
[1] 1 3 5 7 9
as.matrix(x)
[,1]
[1,] 1
[2,] 3
[3,] 5
[4,] 7
[5,] 9
Économétrie 2 37 / 90
m[1,]
[1] 1 4 3
m[1,,drop=FALSE]
m[,c(2,2,1)]
[,1] [,2]
[1,] 23 31
[2,] 34 46
Économétrie 2 39 / 90
eig <- eigen(D)
eig
eigen() decomposition
$values
[1] 68.9419802 0.0580198
$vectors
[,1] [,2]
[1,] -0.5593385 -0.8038173
[2,] -0.8289393 0.5948762
eig$vectors[,1]
[1] -4 3
X <- matrix(1:6,ncol=3)
X
Économétrie 2 41 / 90
ncol(X)
[1] 3
nrow(X)
[1] 2
dim(X)
[1] 2 3
Économétrie 2 42 / 90
cbind(c(1,2),c(3,4))
[,1] [,2]
[1,] 1 3
[2,] 2 4
[1] 3 7 11
[1] 3 4
Économétrie 2 43 / 90
Les facteurs
[1] M M F M F M M M
Levels: F M
Économétrie 2 44 / 90
niveau <- ordered(c("novice","novice","champion","champion",
"moyen","moyen","moyen","champion"),
levels=c("novice","moyen","champion"))
niveau
Économétrie 2 45 / 90
salto <- c(1:5,5:1)
salto
[1] 1 2 3 4 5 5 4 3 2 1
[1] 1 2 3 4 5 5 4 3 2 1
Levels: 1 2 3 4 5
levels(salto.f)
nlevels(salto.f)
[1] 5
Économétrie 2 46 / 90
table(salto.f)
salto.f
1 2 3 4 5
2 2 2 2 2
x <- factor(c(10,11,13))
as.numeric(x)
[1] 1 2 3
Économétrie 2 47 / 90
as.numeric(as.character(x))
[1] 10 11 13
Économétrie 2 48 / 90
Les listes
vecteur <-
seq(2,10,by=3)
matrice <-
matrix(1:8,ncol=2)
facteur <-
factor(c("M","M","F","M","F","M","M","M"))
ordonne <-
ordered(c("novice","novice","champion",
"champion","moyen","moyen","moyen","champion"),
levels=c("novice","moyen","champion"))
maliste <- list(vecteur,matrice,facteur,ordonne)
length(maliste)
[1] 4
Économétrie 2 49 / 90
mode(maliste)
[1] "list"
names(maliste)
NULL
Économétrie 2 50 / 90
maliste[[3]]
[1] M M F M F M M M
Levels: F M
maliste[[1]]
[1] 2 5 8
maliste$sexe
[1] M M F M F M M M
Levels: F M
Économétrie 2 51 / 90
maliste[["sexe"]]
[1] M M F M F M M M
Levels: F M
maliste[c(1,3)]
$vec
[1] 2 5 8
$sexe
[1] M M F M F M M M
Levels: F M
Économétrie 2 52 / 90
X <- matrix(1:12,nrow=4,ncol=3)
nomligne <- c("ligne1","ligne2","ligne3","ligne4")
nomcol <- c("col1","col2","col3")
dimnames(X) <- list(nomligne,nomcol)
X
Économétrie 2 53 / 90
X[c("ligne4","ligne1"),c("col3","col2")]
col3 col2
ligne4 12 8
ligne1 9 5
Économétrie 2 54 / 90
Les data-frames
Économétrie 2 55 / 90
La classe d’un objet
df <- data.frame(x = 1:2, y = c(3, 5))
print(df)
x y
1 1 3
2 2 5
print.default(df)
$x
[1] 1 2
$y
[1] 3 5
Économétrie 2 56 / 90
Les fonctions
Économétrie 2 57 / 90
args(rnorm)
args(plot)
Économétrie 2 58 / 90
Les packages
[,1] [,2]
[1,] 0.6681649 0.92211747
[2,] -0.1600569 -0.05816423
[3,] -0.1612923 0.50391363
Économétrie 2 59 / 90
set.seed(45) # fixe la graine du générateur aléatoire
MASS::mvrnorm(3,mu=c(0,1),Sigma=matrix(c(1,0.5,0.5,1),2,2))
[,1] [,2]
[1,] 0.6681649 0.92211747
[2,] -0.1600569 -0.05816423
[3,] -0.1612923 0.50391363
Économétrie 2 60 / 90
if (!require(rpart)) install.packages("rpart") # installe rpart si besoin
require(rpart)
update.packages(ask=FALSE)
packs = as.data.frame(installed.packages(.libPaths()[1]),
stringsAsFactors = F)
install.packages(packs$Package) ## réinstallation des packages
Économétrie 2 61 / 90
Importation d’un fichier texte
Économétrie 2 62 / 90
summary(tab)
individu.taille.poids.pointure.sexe
Length:3
Class :character
Mode :character
data(iris)
Économétrie 2 63 / 90
Manipuler les variables
X <- c(rep(10,3),rep(12,2),rep(13,4))
X
[1] 10 10 10 12 12 13 13 13 13
is.factor(X)
[1] FALSE
is.numeric(X)
[1] TRUE
Économétrie 2 64 / 90
summary(X)
[1] 10 10 10 12 12 13 13 13 13
Levels: 10 12 13
summary(Xqual)
10 12 13
3 2 4
Économétrie 2 65 / 90
## conversion avec recodage des modalités
as.numeric(Xqual)
[1] 1 1 1 2 2 3 3 3 3
[1] "10" "10" "10" "12" "12" "13" "13" "13" "13"
as.numeric(provisoire)
[1] 10 10 10 12 12 13 13 13 13
Économétrie 2 66 / 90
set.seed(654) ## fixe la graine du générateur pseudo-aléatoire
X <- rnorm(15,mean=0,sd=1)
X
Économétrie 2 67 / 90
Xqual <- cut(X,breaks=c(min(X),-0.2,0.2,max(X)),include.lowest=TRUE)
Xqual
table(Xqual)
Xqual
[-0.983,-0.2] (-0.2,0.2] (0.2,1.69]
7 3 5
Économétrie 2 68 / 90
Xqual
Xqual
[-0.983,-0.544] (-0.544,0.311] (0.311,1.69]
5 5 5
Économétrie 2 69 / 90
levels(Xqual) <- c("niv1","niv2","niv3")
Xqual
[1] niv1 niv2 niv3 niv2 niv2 niv3 niv3 niv3 niv3 niv2 niv2 niv1 niv1 niv1 niv
Levels: niv1 niv2 niv3
[1] niv1+3 niv2 niv1+3 niv2 niv2 niv1+3 niv1+3 niv1+3 niv1+3 niv2
[11] niv2 niv1+3 niv1+3 niv1+3 niv1+3
Levels: niv1+3 niv2
Économétrie 2 70 / 90
X <- c(1,1,2,2,2,3)
Xqual <- factor(X,label=c("classique","nouveau","placebo"))
Xqual
Économétrie 2 71 / 90
Xqual3 <- factor(Xqual,levels=c("placebo","nouveau","classique"))
Xqual3
[1] A A A B C C C C
Levels: A B C
[1] A A A C C C C
Levels: A B C
Économétrie 2 72 / 90
facteur2 <- as.character(facteur2)
facteur2 <- factor(facteur2)
facteur2
[1] A A A C C C C
Levels: A C
[1] A A A C C C C
Levels: A C
Économétrie 2 73 / 90
Manipuler les individus
set.seed(23)
variable <- rnorm(10,mean=0,sd=1)
variable[c(3,4,6)] <- NA
select <- is.na(variable)
select
[1] FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE FALSE FALSE
which(select)
[1] 3 4 6
Économétrie 2 74 / 90
variable2 <- variable[!select]
variable2
[1] TRUE
Économétrie 2 75 / 90
varqual <- factor(c(rep("M",3),NA,NA,rep("F",5)))
don <- cbind.data.frame(variable,varqual)
don
variable varqual
1 0.19321233 M
2 -0.43468211 M
3 NA M
4 NA <NA>
5 0.99660511 <NA>
6 NA F
7 -0.27808628 F
8 1.01920549 F
9 0.04543718 F
10 1.57577959 F
Économétrie 2 76 / 90
summary(don)
variable varqual
Min. :-0.4347 F :5
1st Qu.:-0.1163 M :3
Median : 0.1932 NA’s:2
Mean : 0.4454
3rd Qu.: 1.0079
Max. : 1.5758
NA’s :3
Économétrie 2 77 / 90
select <- is.na(don)
select
variable varqual
[1,] FALSE FALSE
[2,] FALSE FALSE
[3,] TRUE FALSE
[4,] TRUE TRUE
[5,] FALSE TRUE
[6,] TRUE FALSE
[7,] FALSE FALSE
[8,] FALSE FALSE
[9,] FALSE FALSE
[10,] FALSE FALSE
Économétrie 2 78 / 90
aeliminer <- apply(select,MARGIN=1,FUN=any)
aeliminer
[1] FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
variable varqual
1 0.19321233 M
2 -0.43468211 M
7 -0.27808628 F
8 1.01920549 F
9 0.04543718 F
10 1.57577959 F
Économétrie 2 79 / 90
which(is.na(don),arr.ind=TRUE)
row col
[1,] 3 1
[2,] 4 1
[3,] 6 1
[4,] 4 2
[5,] 5 2
Économétrie 2 80 / 90
library(rpart)
data(kyphosis)
boxplot(kyphosis[,"Number"])
Économétrie 2 81 / 90
valaberrante <- resultat$out
valaberrante
[1] 9 10
which(kyphosis[,"Number"]%in%valaberrante)
[1] 43 53
Économétrie 2 82 / 90
X <- data.frame(C1=c("a","b","b","a","a"),C2=c(1,2,2,3,1))
X
C1 C2
1 a 1
2 b 2
3 b 2
4 a 3
5 a 1
Économétrie 2 83 / 90
unique(X)
C1 C2
1 a 1
2 b 2
4 a 3
duplicated(X)
Économétrie 2 84 / 90
X[duplicated(X),]
C1 C2
3 b 2
5 a 1
Économétrie 2 85 / 90
Concaténer des tableaux de données
X <- matrix(c(1,2,3,4),2,2)
rownames(X) <- paste("ligne",1:2,sep="")
colnames(X) <- paste("X",1:2,sep="")
X
Y <- matrix(11:16,3,2)
colnames(Y) <- paste("Y",1:2,sep="")
Y
Z <- rbind(X,Y)
Z
Xd <- data.frame(X)
Yd <- data.frame(Y)
colnames(Yd) <- c("X2","X1")
Économétrie 2 86 / 90
rbind(Xd,Yd)
X <- matrix(c(1,2,3,4),2,2)
rownames(X) <- paste("ligne",1:2,sep="")
Y <- matrix(11:16,2,3)
cbind(data.frame(X),Y)
Économétrie 2 87 / 90
age <- c(7,38,32)
prenom <- c("arnaud","nicolas","laurent")
ville <- factor(c("rennes","rennes","marseille"))
indiv <- cbind.data.frame(age,prenom,ville)
indiv
population <- c(200,500,800)
caractvilles <- cbind.data.frame(c("rennes","lyon","marseille"),population)
names(caractvilles) <- c("ville","pop")
caractvilles
merge(indiv,caractvilles,by="ville")
Économétrie 2 88 / 90
Tableau croisé
Économétrie 2 89 / 90
Références
Économétrie 2 90 / 90