Documente Academic
Documente Profesional
Documente Cultură
Nicolae BÂRSAN-PIPU
CUPRINS
1 ELEMENTE DE BAZĂ ÎN R
1.1 Ce este R
1.3 Consola R
1
LABORATORUL 1 – INTRODUCERE ÎN R
> 2 + 2 # suma 2 + 2
[1] 4
> 10 – 5 # diferența 10 – 5
[1] 5
2
LABORATORUL 1 – INTRODUCERE ÎN R
1.5 Variabile
3
LABORATORUL 1 – INTRODUCERE ÎN R
> a*2
[1] 10
> b = a*2
>b
[1] 10
4
LABORATORUL 1 – INTRODUCERE ÎN R
1.6 Vectori
▪ Observații:
▪ c( ) este funcția de concatenare a valorilor într-un vector
▪ Valorile numerice sunt separate prin virgula
▪ Vectorii pot fi utilizați pentru:
▪ Operații matematice
▪ Sortare
▪ Selectare valori
▪ Valorile inițiale ale vectorului rămân nemodificate
▪ Exemple:
5
LABORATORUL 1 – INTRODUCERE ÎN R
> sms.cr <- sort(sms) # crearea vectorului sms.cr cu valorile sortate crescător
ale sms
> sms.cr
[1] 0 0 0 0 1 1 2
> sms[2:4] # selectarea valorilor a 2-a până la a 4-a din vectorul sms
[1] 1 2 0
> sms[-3] # toate valorile sms mai puțin cea de-a 3-a
[1] 0 1 0 0 0 1
> sms[-(2:3)] # toate valorile sms mai puțin a 2-a până la a 3-a
[1] 0 0 0 0 1
> sms[-c(2, 3, 7)] # toate valorile sms mai puțin valorile a 2-a, a 3-a, a 7-a
[1] 0 0 0 0
6
LABORATORUL 1 – INTRODUCERE ÎN R
▪ Testul logic nume_vector < 0 returnează valorile TRUE sau FALSE pentru
elementele vectorului:
> sum(sms)
[1] 4
▪ Dacă facem însă suma pentru testul logic sms > 0, R va suma cele 3 valori
TRUE:
▪ Putem folosi acum funcția mean () pentru a obține numărul mediu de mesaje
SMS în zilele în care s-au primit mesaje:
> sms[which(sms > 0)] # numărul de mesaje din zilele în care sms > 0
[1] 1 2 1
7
LABORATORUL 1 – INTRODUCERE ÎN R
> mean(sms[which(sms > 0)]) # media numărului de mesaje pentru sms > 0
[1] 1.333333
> sms[1] <- 3 # înlocuire a primei valori din vectorul sms cu valoarea 3
> sms
[1] 3 1 2 0 0 0 1
8
LABORATORUL 1 – INTRODUCERE ÎN R
9
LABORATORUL 1 – INTRODUCERE ÎN R
2 VARIABILE CALITATIVE
2.1 Definirea variabilelor calitative
▪ Datele cu care lucrăm în R sunt în general stocate ca vectori, iar acești vectori
sunt, de obicei, parte dintr-un structură de date (data frame),
▪ Date calitative (datele de tip categorie sau datele atributive) sunt denumite
factori în R.
▪ Cele mai uzuale tipuri de date pentru vectorii din R sunt:
▪ "logic"
▪ "integer"
▪ "double"
▪ "character"
▪ Există câteva modalități de a afla cum stochează datele R.
▪ Funcția str() ("structura") oferă tipul de date de bază.
▪ Funcția summary() oferă statistici de sumare pentru variabilele numerice,
dar și numărul de niveluri pentru factori.
> cols <- c("Blue", "Blue", "Red", "Red", "Blue", "Yellow", "Green")
> str(cols) # structura vectorului
chr [1:7] "Blue" "Blue" "Red" "Red" "Blue" "Yellow" "Green"
10
LABORATORUL 1 – INTRODUCERE ÎN R
> summary(cols)
Blue Green Red Yellow
3 1 2 1
> table(cols)
cols
Blue Green Red Yellow
3 1 2 1
11
LABORATORUL 1 – INTRODUCERE ÎN R
▪ Dacă vrem un rezumat grafic al unui factor, putem vizualiza un grafic cu bare,
cu funcția barplot().
▪ Cu toate acestea, trebuie să folosim table() cu barplot(), deoarece barplot()
necesită valorile pe care le va competa (argumentul înălțimii height) într-o
formă numerică (adică un vector sau o matrice)
▪ Vezi ?barplot pentru mai multe detalii în Help.
> ?barplot
starting httpd help server ... done
> barplot(table(cols))
> plot(cols)
12
LABORATORUL 1 – INTRODUCERE ÎN R
13
LABORATORUL 1 – INTRODUCERE ÎN R
14
LABORATORUL 1 – INTRODUCERE ÎN R
> levels(a)
[1] "1" "4" "5"
> as.character(b)
[1] "-.1" " 2.7 " "B"
> as.numeric(b)
[1] -0.1 2.7 NA
Warning message:
NAs introduced by coercion
> cols <- factor(c("Blue", "Blue", "Red", "Red", "Bleu", "Yellow", "Green"))
levels(cols)
[1] "Bleu" "Blue" "Green" "Red" "Yellow"
> str(cols)
Factor w/ 5 levels "Bleu","Blue",..: 2 2 4 4 1 5 3
15
LABORATORUL 1 – INTRODUCERE ÎN R
> str(z)
Ord.factor w/ 3 levels "L"<"M"<"H": 1 2 3
16
LABORATORUL 1 – INTRODUCERE ÎN R
3 VARIABILE CANTITATIVE
3.1 Definirea variabilelor cantitative
> mp3 <- scan(text = "5.3 3.6 5.5 4.7 6.7 4.3 4.3 8.9 5.1 5.8 4.4")
Read 11 items
17
LABORATORUL 1 – INTRODUCERE ÎN R
> mp3 <- c(5.3, 3.6, 5.5, 4.7, 6.7, 4.3, 4.3, 8.9, 5.1, 5.8, 4.4)
> mp3
[1] 5.3 3.6 5.5 4.7 6.7 4.3 4.3 8.9 5.1 5.8 4.4
> str(mp3)
num [1:11] 5.3 3.6 5.5 4.7 6.7 4.3 4.3 8.9 5.1 5.8 ...
18
LABORATORUL 1 – INTRODUCERE ÎN R
19
LABORATORUL 1 – INTRODUCERE ÎN R
▪ Boxplot (box and whiskers plot) reprezintă o altă vizualizare utilă a datelor
cantitative care indică "cuartilele" mediane (Q2), inferioare (Q1) și
superioare (Q3), cât și limitele intercuartilice inferioare și superioare. Ele pot
fi, de asemenea, "crestate" („îngustate”) pentru a arăta intervalul de
încredere pentru mediană. Valorile situate dincolo de limitele intercuartilice
sunt posibile valori extreme (outliers)
20
LABORATORUL 1 – INTRODUCERE ÎN R
▪ Putem vizualiza datele folosind funcția plot (), care este o diagramă de
dispersie.
▪ Întrucât plot () necesită argumente atât pentru x cât și pentru y, dar avem
doar valorile lui x, indicii lui x vor fi folosiți pentru x, iar valorile lui x pentru y.
> plot(mp3)
21
LABORATORUL 1 – INTRODUCERE ÎN R
▪ Alte două alte instrumente care sunt uneori utile sunt „stripchart”-ul și
diagrama „ramuri și frunze” (stem and leaf)
▪ "Stripchart"-ul sau diagrama dotplot este un fel de "scatterplot
unidimensional".
> stripchart(mp3)
▪ Diagrama „ramuri și frunze” (stem and leaf) împarte datele în cifre principale
(ramuri – stem) și cifre secundare (frunze – leaf)
> stem(mp3)
The decimal point is at the |
2|6
4 | 33471358
6|7
8|9
22
LABORATORUL 1 – INTRODUCERE ÎN R
> m.r <- cut(mp3, breaks = c(3:9)) # specifică clasele (the breaks)
> m.r
[1] (5,6] (3,4] (5,6] (4,5] (6,7] (4,5] (4,5] (8,9] (5,6] (5,6] (4,5]
Levels: (3,4] (4,5] (5,6] (6,7] (7,8] (8,9]
> table(m.r)
m.r
(3,4] (4,5] (5,6] (6,7] (7,8] (8,9]
1 4 4 1 0 1
> plot(m.r)
23
LABORATORUL 1 – INTRODUCERE ÎN R
24
LABORATORUL 1 – INTRODUCERE ÎN R
25
LABORATORUL 1 – INTRODUCERE ÎN R
26
LABORATORUL 1 – INTRODUCERE ÎN R
4 DATE BIDIMENSIONALE
4.1 Două variabile calitative
> levels(am)<-c("auto","manual")
> table(cyl,am)
am
cyl auto manual
4 3 8
6 4 3
8 12 2
27
LABORATORUL 1 – INTRODUCERE ÎN R
> prop.table(tab)
am
cyl auto manual
4 0.09375 0.25000
6 0.12500 0.09375
8 0.37500 0.06250
> signif(prop.table(tab), 2)
am
cyl auto manual
4 0.094 0.250
6 0.120 0.094
8 0.380 0.062
28
LABORATORUL 1 – INTRODUCERE ÎN R
> chisq.test(tab)
Pearson's Chi-squared test
data: tab
X-squared = 8.7407, df = 2, p-value = 0.01265
Warning message:
In chisq.test(tab) : Chi-squared approximation may be incorrect
29
LABORATORUL 1 – INTRODUCERE ÎN R
> par(mfrow=c(1,2),mar=c(3,3,3,0.5))
> barplot(table(cyl,am), beside=FALSE, legend.text=TRUE,
main="Transmission and cylinders")
> barplot(table(cyl,am),beside=TRUE,legend.text=TRUE,
main="Transmission and cylinders")
> par(op)
▪ Să menționăm argumentele:
▪ legend.text=TRUE pentru afișarea legendei
▪ beside=TRUE are o valoare logică. Dacă FALSE, coloanele de înălțime
sunt reprezentate ca bare suprapuse și dacă TRUE coloanele sunt
reprezentate ca bare juxtapuse (alăturate).
▪ Comanda > par(op) determină revenirea parametrilor grafici la setările
inițiale
30
LABORATORUL 1 – INTRODUCERE ÎN R
▪ O altă opțiune care este mai puțin cunoscută este funcția mosaicplot(), care
arată proporțiile fiecărei combinații de factori.
31
LABORATORUL 1 – INTRODUCERE ÎN R
> disp=scan(text= "2.62 2.62 1.77 4.23 5.90 3.69 5.90 2.40 2.31 2.75 2.75 4.52
4.52 4.52 7.73 7.54 7.21 1.29 1.24 1.17 1.97 5.21 4.98 5.74 6.55 1.29 1.97
1.56 5.75 2.38 4.93 1.98")
Read 32 items
> hp=scan(text= "110 110 93 110 175 105 245 62 95 123 123 180 180 180
205 215 230 66 52 65 97 150 150 245 175 66 91 113 264 175 335 109")
Read 32 items
32
LABORATORUL 1 – INTRODUCERE ÎN R
4.3 Corelația
> plot(x = disp, y = hp, main = " Scatter plot - disp, hp")
33
LABORATORUL 1 – INTRODUCERE ÎN R
4.4 Regresia
> plot(x = disp, y = hp, pch = 16, cex = 1.3, col = "blue", main = " Regression
plot", xlab = "disp", ylab = "hp")
> abline(lm(hp ~ disp), col = "red")
34
LABORATORUL 1 – INTRODUCERE ÎN R
> summary(model)
Call:
lm(formula = hp ~ disp)
Residuals:
Min 1Q Median 3Q Max
-48.682 -28.396 -6.497 13.571 157.620
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 45.695 16.128 2.833 0.00816 **
disp 26.711 3.771 7.083 7.09e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 42.64 on 30 degrees of freedom
Multiple R-squared: 0.6258, Adjusted R-squared: 0.6133
F-statistic: 50.16 on 1 and 30 DF, p-value: 7.093e-08
35
LABORATORUL 1 – INTRODUCERE ÎN R
36
LABORATORUL 1 – INTRODUCERE ÎN R
37
LABORATORUL 1 – INTRODUCERE ÎN R
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 31.41 on 29 degrees of freedom
Multiple R-squared: 0.7378, Adjusted R-squared: 0.7287
F-statistic: 81.6 on 1 and 29 DF, p-value: 6.291e-10
> plot(model2)
> par(op)
38
LABORATORUL 1 – INTRODUCERE ÎN R
4.6 ANOVA
40
LABORATORUL 1 – INTRODUCERE ÎN R
▪ Cele mai multe analize implică importul de date din afara R și efectuarea
diverselor manipulări, teste și vizualizări. Pentru a realiza aceste obiective,
trebuie să înțelegem cum sunt stocate datele în R și cum pot fi accesate.
▪ Să presupunem că avem un mix de date numerice și date de tip caracter.
> a <- list(c(1, 2, 3), "Blue", factor(c("A", "B", "A", "B", "B")))
>a
[[1]]
[1] 1 2 3
[[2]]
[1] "Blue"
[[3]]
[1] A B A B B
Levels: A B
41
LABORATORUL 1 – INTRODUCERE ÎN R
> hp <- scan(text = "110 110 93 110 175 105 245 62 95 123 123 180 180 180
205 215 230 66 52 65 97 150 150 245 175 66 91 113 264 175 335 109")
Read 32 items
> summary(car)
cyl disp hp am
4:11 Min. : 1.170 Min. : 52.0 auto :19
6: 7 1st Qu.: 1.978 1st Qu.: 96.5 manual:13
8:14 Median : 3.220 Median :123.0
42
LABORATORUL 1 – INTRODUCERE ÎN R
▪ Variabilele din data frame au nume și putem folosi funcția names() pentru a
le regăsi sau modifica.
> names(car)
[1] "cyl" "disp" "hp" "am"
> car$trans
[1] manual manual manual auto auto auto auto auto auto auto
[11] auto auto auto auto auto auto auto manual manual manual
[21] auto auto auto auto auto manual manual manual manual manual
[31] manual manual
Levels: auto manual
▪ Datele din data frame pot fi accesate în mai multe moduri. Putem folosi
operatorul de indexare [ ] pentru a accesa părțile unui data frame prin
rânduri și coloane. De asemenea, putem apela variabile într-un data frame
după nume folosind operatorul $.
43
LABORATORUL 1 – INTRODUCERE ÎN R
▪ Atunci când selectăm în data frame, folosim 2 indici, separați printr-o virgulă.
Lăsarea unei valori necompletate implică "toate rândurile" sau "toate
coloanele", după caz.
▪ În cazul în care am creat un nou data frame în acest fel, este important să
notăm că R a copiat vectorii care alcătuiesc data frame. Deci acum avem hp
și car$hp. Este important să știm acest lucru, deoarece dacă schimbăm unul,
cealalt nu se schimbă.
> hp[1] <- 112 # am schimbat prima valoare din hp 110 cu 112
> hp[1] == car$hp[1]
[1] FALSE
▪ Într-un astfel de caz, ar fi o idee bună să eliminăm vectorii pe care i-am folosit
pentru a crea data frame, doar pentru a reduce posibilitatea de confuzie.
Putem face acest lucru folosind funcția rm().
44
LABORATORUL 1 – INTRODUCERE ÎN R
> car[[4]]
[1] manual manual manual auto auto auto auto auto auto auto
[11] auto auto auto auto auto auto auto manual manual manual
[21] auto auto auto auto auto manual manual manual manual manual
[31] manual manual
Levels: auto manual
> car$am
[1] manual manual manual auto auto auto auto auto auto auto
[11] auto auto auto auto auto auto auto manual manual manual
[21] auto auto auto auto auto manual manual manual manual manual
[31] manual manual
Levels: auto manual
> car[4]
am
1 manual
2 manual
...
32 manual
> car[4,]
cyl disp hp am
4 6 4.23 110 auto
> attach(car)
> hp
[1] 110 110 93 110 175 105 245 62 95 123 123 180 180 180 205 215 230
66 52
[20] 65 97 150 150 245 175 66 91 113 264 175 335 109
> mean(hp)
[1] 146.6875
45
LABORATORUL 1 – INTRODUCERE ÎN R
▪ Putem să combinăm două data frame împreună. Putem realiza acest lucru
folosind cbind() și rbind() (pentru legarea în coloană și, respectiv, pe rând).
Setul de date mtcars conține mai multe variabile care nu sunt în data frame-
ul car. Vom folosi cbind() pentru a combina cele două seturi de date.
> dim(car)
[1] 31 4
46
LABORATORUL 1 – INTRODUCERE ÎN R
> head(car)
cyl disp hp am mpg drat wt qsec vs gear carb
1 6 2.62 110 manual 21.0 3.90 2.620 16.46 0 4 4
2 6 2.62 110 manual 21.0 3.90 2.875 17.02 0 4 4
3 4 1.77 93 manual 22.8 3.85 2.320 18.61 1 4 1
4 6 4.23 110 auto 21.4 3.08 3.215 19.44 1 3 1
5 8 5.90 175 auto 18.7 3.15 3.440 17.02 0 3 2
6 6 3.69 105 auto 18.1 2.76 3.460 20.22 1 3 1
47
LABORATORUL 1 – INTRODUCERE ÎN R
6 IMPORTUL DE DATE
6.1 Tipuri de import de date
▪ R va căuta (sau crea) fișiere după nume în directorul de lucru, care este
folderul pe care alegeți să-l utilizați R.
▪ Utilizăm funcția getwd() pentru a vedea ce este directorul de lucru.
▪ Pentru a schimba directorul de lucru utilizăm funcția setwd("file/path/here")
> setwd("C:/Users/Tata/Desktop/DateR")
> getwd()
[1] "C:/Users/Tata/Desktop/DateR"
> my.data<-read.csv("C:/Users/Tata/Desktop/DateR/W101-2010.csv" ,
comm="#")
> names(my.data)
[1] "Time" "Place" "Bib" "Name" "Sponsor" "Category"
[7] "Cat.Place"
> dim(my.data)
[1] 270 7
48
LABORATORUL 1 – INTRODUCERE ÎN R
> summary(my.data)
Time Place Bib Name
8:28:50 : 2 Min. : 1.00 Min. : 1.00 Aaron.Hofelt : 1
10:00:22: 1 1st Qu.: 68.25 1st Qu.: 83.25 Adam.Naish : 1
10:01:41: 1 Median :135.50 Median :175.50 Allen.Runkle : 1
10:01:55: 1 Mean :135.50 Mean :170.34 Andrew.Carney : 1
10:02:38: 1 3rd Qu.:202.75 3rd Qu.:254.75 Andrew.Christman: 1
10:05:25: 1 Max. :270.00 Max. :333.00 Andrew.Freye : 1
(Other) :263 (Other) :264
Sponsor Category Cat.Place
- : 24 ClydeMen : 15 Min. : 1.00
Freeze.Thaw.Cycles: 9 MasterMen: 14 1st Qu.: 14.00
None : 4 OpenMen :182 Median : 47.50
Self : 4 OpenWomen: 16 Mean : 66.52
Bike.Line : 3 SSMen : 43 3rd Qu.:114.75
bikebarnracing.com: 3 Max. :182.00
(Other) :223
> str(my.data)
'data.frame': 270 obs. of 7 variables:
$ Time : Factor w/ 269 levels "10:00:22","10:01:41",..: 122 123 124 125
126 127 128 129 130 131 ...
$ Place : int 1 2 3 4 5 6 7 8 9 10 ...
$ Bib : int 1 2 322 321 5 6 264 7 71 313 ...
$ Name : Factor w/ 270 levels "Aaron.Hofelt",..: 121 41 203 126 19 43 136
225 201 266 ...
$ Sponsor : Factor w/ 194 levels "-","38.Special",..: 179 168 74 39 119 67 27
120 117 175 ...
$ Category : Factor w/ 5 levels "ClydeMen","MasterMen",..: 3 3 3 3 3 3 3 3 3
3 ...
$ Cat.Place: int 1 2 3 4 5 6 7 8 9 10 ...
49
LABORATORUL 1 – INTRODUCERE ÎN R
▪ Cu funcția read.table():
50