Sunteți pe pagina 1din 19

Master AACPI

Introducere în R

R este un limbaj și un mediu dedicat analizei datelor și reprezentării grafice.


Limbajul R a preluat elemente din două limbaje existente și anume: S (Becker,
Chambers și Wilks) și Scheme (Sussman).

R este gratuit și se poate descărca de pe site-ul CRAN (Comprehensive R


Archieve Network):

http://cran.r-project.org/

Comenzile se scriu începând cu linia unde apare simbolul > (prompt) în cazul în
care se dorește executarea directă a instrucțiunilor din linia de comandă. O altă
opțiune, indicată în cazul unor programe mai lungi, este dată de folosirea

Lect. Maer Matei Monica Mihaela


Master AACPI

editorului R ce poate fi accesat pe calea: File-> New Script. Într-un astfel de


script se vor scrie toate comenzile iar pentru a executa o linie sau o secvență de
linii, acestea vor fi selectate și se va folosi combinația Ctrl+R. Liniile selectate
vor fi transferate în fereastra de comanda R și vor fi executate. Există o opțiunea
de salvare a unui script (File-> Save as).

Operatorul de atribuire în R este <- iar pentru a introduce comentarii ce vor fi


ignorate la executare se folosește simbolul #.

Exemplu:

Expresia următoare va atribui obiectului x valoarea 1.

X<-1 # x este un obiect numeric căruia i s-a asociat valoarea 1

După ce a fost scrisă expresie completă în Prompt, apăsarea tastei Enter va


conduce la executarea ei.

Introducerea datelor

Funcția scan- pemite introducerea datelor de la tastatura astfel

> input<-scan()

1: 1

2: 4

3: 44

4: 23

5: 75

6: 5

7:

Lect. Maer Matei Monica Mihaela


Master AACPI

> input

[1] 1 4 44 23 75 5

>

”[1]” indică faptul că input este un vector iar 1 este primul său element.

Generarea unui vector ce conține valori consecutive de la 1 la 50 se realizează


cu următoarea instrucțiune:

> x<-1:50 ## generarea primelor 50 numere întregi

>x

[1] 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] 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

Primul element din a doua linie este 27, de aceea la începutul liniei apare 27
încadrat de paranteze pătrate.

Numele unui obiect urmat de Enter va afișa conținutul acelui obiect. Varianta
alternativă este folosirea funcției print (nume_obiect).

Un vector se poate obține dacă se folosește funcția c de concatenare:

> x<-c(1,4,44,23,75,5)

>x

[1] 1 4 44 23 75 5

x<-c("a", "b", "c")

>x

[1] "a" "b" "c"

Lect. Maer Matei Monica Mihaela


Master AACPI

>x<-c(1+4i, 2+2i) # un vector cu 2 elemente numere complexe

Folosirea funcției vector() care are ca argumente: clasa și lungima vectorului

Evaluarea expresiei va conduce la crearea unui vector cu toate elementele nule.

> x<-vector("numeric", length= 5)

>x

[1] 0 0 0 0 0

Tipuri de date

În R există 5 tipuri de clase de obiecte (clase de bază)și anume:

- Caracter
- Numerice (reale)
- Întregi
- Complexe
- Logice (TRUE/ FALSE)

Vectorii sunt obiecte de bază în R ale căror elemente trebuie să aparțină


aceleași clase de obiecte. Pentru situațiile în care este necesară stocarea în
același obiect a unor informații ce aparțin unor clase diferite se va folosi
lista. Aceasta este o secvență de obiecte ce pot aparține unor clase
diferite.
Atributele unui obiect sunt:
- Denumire
- Dimensiune (de exemplu matrice, vector)
- Clasă
- Lungime

Lect. Maer Matei Monica Mihaela


Master AACPI

Obiectele pot fi trecute dintr-o clasă în alta cu ajutorul funcției as.*:


as.numeric(), as.character, as.logical(), as.complex().

Exemplul 1:

Considerăm vectorul x generat anterior cu funcția vector(), comanda :

as.character(x)

va conduce la obținerea unui vector cu cinci caractere

[1] "0" "0" "0" "0" "0"

Exemplul 2:

> x<-1:10

> class(x)

[1] "integer"

> x.n<-as.numeric(x)

> x.n

[1] 1 2 3 4 5 6 7 8 9 10

> x.c<-as.complex(x)

> x.c

[1] 1+0i 2+0i 3+0i 4+0i 5+0i 6+0i 7+0i 8+0i 9+0i 10+0i

Exemplul 3:

Transformările care nu au sens vor returna valoarea NA (not available)


plus un mesaj de eroare.

> x<-c("a","w")

Lect. Maer Matei Monica Mihaela


Master AACPI

> x.n<-as.numeric(x)

Warning message:

NAs introduced by coercion

> x.n

[1] NA NA

Exemplul 4: Transformarea unei variabile numerice continue în variabilă


categorială.

> is.factor(x)

[1] FALSE

> x.f<-factor(x)

> is.factor(x.f)

[1] TRUE

Exemplul 5: Crearea unei variabile categoriale

> x<-factor(c("high","low","low","high")) # se creează un vector de tip


categorial cu două nivele

>x

[1] high low low high

Levels: high low

> table(x) # funcția table va returna frecvențele pe fiecare categorie

high low

Lect. Maer Matei Monica Mihaela


Master AACPI

2 2

> attributes(x) # atributele obiectului x vor indica nivelele posibile și clasa din
care face parte obiectul

$levels

[1] "high" "low"

$class

[1] "factor"

Exemplul 3: Crearea unei variabile categoriale cu impunerea nivelului de bază


(față de care se va face comparația într-un model de tip logit) va presupune
folosirea celui de-al doilea argument al funcției factor() și anume levels:

> x<-factor(c("da","nu","da","nu","nu"),levels=c("nu","da")) # nivelul de baza


este “nu”, dacă argumentul levels ar fi fost ignorant atunci ordonarea
categoriilor s-ar fi făcut alfabetic

>x

[1] da nu da nu nu

Levels: nu da

Exemplul 6 Generarea unei variabile categoriale folosind funcția gl()

gl(n, k, length = n*k, labels = 1:n, ordered = FALSE)

Argumente:

n: numărul de categorii

k: numărul de repetări din fiecare categorie

length: lungimea outputului

Lect. Maer Matei Monica Mihaela


Master AACPI

labels: etichetele categoriilor

ordered: TRUE dacă variabila este ordinală și FALSE altfel

x<-gl(3,4,12,labels=c("rosu","verde","galben",ordered=FALSE))

>x

[1] rosu rosu rosu rosu verde verde verde verde galben galben

[11] galben galben

Levels: rosu verde galben FALSE

Matricea – o clasă specială de vectori în R care are un atribut numit


dimensiune care la rândul său este un vector de valori întregi de lungime 2,
prima reprezentând numărul de linii și cea de-a doua numărul de coloane (nrow,
ncol).

Pentru generarea unei matrici cu 3 linii și 2 coloane se va scrie următoarea


expresie:

Exemplul 1

> m<-matrix(nrow=3,ncol=2) # implicit toate valorile sunt NA, matricea fiind


goală

>m

[,1] [,2]

[1,] NA NA

[2,] NA NA

[3,] NA NA

> dim(m) # funcția dim returnează dimensiunea matrcei generate

Lect. Maer Matei Monica Mihaela


Master AACPI

[1] 3 2

> attributes(m) # funcția attributes returnează un vector reprezentând


dimensiunea matricei

$dim

[1] 3 2

Exemplul 2: Generarea unei matrici cu elemente nenule

m<-matrix(c(1,2,3,4,5,6),nrow=3,ncol=2) # în R elementele unei matrici sunt


completate pe coloane

>m

[,1] [,2]

[1,] 1 4

[2,] 2 5

[3,] 3 6

Exemplu 3: Generarea unei matrici, populând întâi un vector și apoi


specificând dimensiunea obiectului. Transformarea unui vector într-o
matrice.

> m<-1:6

> dim(m)<-c(3,2)

>m

[,1] [,2]

[1,] 1 4

[2,] 2 5

Lect. Maer Matei Monica Mihaela


Master AACPI

[3,] 3 6

Exemplul 4 Crearea matricilor prin concatenerea liniilor sau coloanelor. Se


folosesc funcțiile cbind() sau rbind().

> x<-c(1,2,3)

> y<-c(4,5,6)

> m<-cbind(x,y)

>m

xy

[1,] 1 4

[2,] 2 5

[3,] 3 6

> m<-rbind(x,y)

>m

[,1] [,2] [,3]

x 1 2 3

y 4 5 6

Referirea unei linii din matrice : m[i,].

Referirea unei coloane din matrice: m[,j].

Lect. Maer Matei Monica Mihaela


Master AACPI

Crearea listelor

Lista este un caz special de vector ale cărei elemente pot aparține unor clase
diferite.

x<-list(nume="Ionescu", vârsta= 30, angajat= TRUE)

>x

[[1]] # primul vector al listei are un element de tip caracter

[1] "Ionescu"

[[2]] # al doilea vector al listei conține un element din clasa numeric

[1] 30

[[3]] # al treilea vector al listei conține un element din clasa Logical

[1] TRUE

Pentru a testa dacă există valori lipsă într-un obiect din R se folosește funcția:
is.na()

Exemplu:

> x<-c(NA,2,4,NA) # a fost creat un vector care are valori lipsa pe prima
poziție și pe ultima

> is.na(x) # funcția va returna un vector de elemente din clasa logical ale căror
valori vor fi TRUE daca pe poziția respectivă există o valoare lipsă și FALSE
altfel

[1] TRUE FALSE FALSE TRUE

Funcția scan poate fi folosită și pentru a copia date din Excel, singura diferență
față de exemplul anterior constând în faptul că valorile nu mai sunt introduse de

Lect. Maer Matei Monica Mihaela


Master AACPI

la tastatură ci copiate (Ctrl +C) din excel iar pe prima linia (1:) se tasteaza
Ctrl+V.

Aceste opținui sunt folosite de regulă când datele ce doresc fi introduse sunt de
dimensiuni mici.

Citirea datelor în R - Data frame

Dataframe-ul este un obiect ce conține linii și coloane asemănător unei matrici.


Pe coloane se află valorile variabilelor iar rândurile reprezintă
observațiile/indivizii pentru care s-au măsurat variabilele respective. Altfel spus
dataframe-ul este o listă iar fiecare element al listei trebuie să aiba aceeași
lungime dar nu este obligatoriu ca toate elementele să aparțină aceleiași clase.

Memorie necesară:

Exemplu: Avem de importat un dataframe care are 500 000 de linii și 100 de
coloane. În cazul în care toate datele ar fi numerice necesarul de memorie ar fi
500000*100*8 bytes= 400000000 bytes= 400000000/220 MB=381,469 MB=
0.373 GB. Pentru a importa un dataframe de aceasta dimensiune sistemul va
avea nevoie de dublul acestei memorii.

Exemplu: Crearea unui dataframe

> x<-data.frame(Nume=c("Maria","Irina"),Varsta=c(25,26),status=c("da","nu"))
# se creează un dataframe ce conține trei obiecte din clase diferite

>x

Nume Varsta status

1 Maria 25 da

2 Irina 26 nu

> dim(x) # dimensiunea obiectului x este de 2 linii și 3 coloane

Lect. Maer Matei Monica Mihaela


Master AACPI

[1] 2 3

> class(x)

[1] "data.frame"

> class(x$status) # pentru a referi o coloană a dataframe-lui se folosește $

[1] "factor"

Diferența față de matrice constă în faptul că în dataframe variabilele pot fi


numerice continue sau categoriale, poti fi date de tip text, date
calendaristice, variabile logice.

Funcția read.table

Pentru fișiere de tipText (tab delimited)

Pasul 1: se stabilește directorul de lucru File-> Change dir..., selectându-se


folderul unde se află datele ce urmează a fi imporate. Tot aici vor fi salvate
outputurile produse.

Pasul2: Data<- read.table(“denumirefisier.txt”, header=TRUE, sep=”\t”)

Pasul 3: attach (data)

Pasul următor, după ce datele au fost importate constă în folosirea funcției


attach(data) pentru ca variabilele din baza de date să devină accesisibile în R cu
denumirile din fișierul initial.

Lect. Maer Matei Monica Mihaela


Master AACPI

Argumentele funcției read.table

- file:Numele fișierului ce trebuie importat


- header: TRUE , dacă fișierul are cap de tabel și FALSE altfel (prima linie
din tabel poate fi data de etichete sau de numele variabilelor iar dacă sunt
prezente acestea trebuiesc specificate)
- sep: specificarea modului în care coloanele sunt separate (“”,” ”
(spații),”\t” (tab delimited),
“,”(virgula), “;” (punct și virgulă))
- colClasses: un vector din clasa character ce va stabili clasa din care fac
parte obiectele fiecărei coloane. Pentru importarea bazelor de date foarte
mari este indicat să nu se omită acest argument pentru redcerea timpului
alocat importului. În cazul în care nu se cunoaște apartenența obiectelor la
clasă, se poate citi un număr redus de linii pentru a determina din ce clasă
face parte fiecare obiect.

Exemplu:

a<-read.table("firme.txt",header=TRUE,nrows=50) # se citesc doar primele 50


de linii pentru a putea identifica din ce clasă face parte fiecare coloană

> clase<-sapply(a,class) # vectorul clase va stoca clasa identificață pentru


fiecare coloană

> clase

Firma CAEN Profit Angajati

"factor" "factor" "numeric" "integer"

b<-read.table("firme.txt",header=TRUE,colClasses=clase), #vectorul clase este


folosit pentru a specifica clasele din care fac parte obiectele

- nrows: numărul de rânduri ale setului de date ce urmează a fi importat

Lect. Maer Matei Monica Mihaela


Master AACPI

- comment.char: caracterul care marchează un comentariu (pentru


reducerea timpului de importare a datelor, este recomandat ca în cazul în
care nu există comentarii, să se specific comment.char=” ”)
- skip: numărul primelor linii ce ar trebui omise
- stringsAsFactors: va stabili daca variabilele de tip character vor fi
considerate categoriale.

Funcția read.csv este asemănătoare funcției read.table, sepratorul fiind virgula.

Funcți str() va returna informații despre structura dataframe-ului. Este o


alternativă a comenzii summary().

Funcția split() oferă posibilitate restructurării data framelui după o anumită


coloană.

Exemplu:

s<-split(b,b$CAEN)

> str(s) # Va afișa o listă de obiecte, asociate fiecărui cod CAEN, pentru fiecare
specificându-se numărul de elemente din fiecare categorie și tipul variabilelor.

Importarea datelor din alte pachete statistice:

SPSS: read.spss(file.choose(),header=T)

STATA: read.dta()

Octave: read.octave

Funcția lapply are ca rezultat aplicarea unei anumite funcții pentru fiecare
element dintr-o listă. Rezultatul obținut este tot de tip listă.

lapply (lista, funcția)

Exemplu:

Lect. Maer Matei Monica Mihaela


Master AACPI

lapply(x,mean) # Dacă x conține 10 caracteristici numerice pentru un eșantion


formt din firme rezultatul va fi o listă cu 10 elemente

Dacă e x este o listă formată din mai multe matrici putem defini o funcție care să
extragă prima coloană din fiecare matrice astfel:

lapply(x, function (prima_coloana), prima_coloana[,1])

Funcția sapply simplifică outputul funcției lapply în sensul că nu returnează o


listă ci un vector sau o matrice.

Funcția apply

x<-matrix(rnorm(200), 20,10)

apply(x,2,mean) # calculează media pe fiecare coloană, al doilea argument


specificând pe care dintre dimensiuni să calculeze media

apply(x,1, quantile, probs=c(0.25, 0.75)) # rezultatul este o matrice

Simulări

set.seed (1)

rnorm (n, mean, sd) # generează n numere aleatoare dintr-o repartiție normală de
medie și abatere standard specificate

Funcția sample se folosește pentru extragere aleatoare dintr-o mulțime dată

sample(1:10,4)

sample(1:10) # permutare

sample (1:10, replace=TRUE) # generare cu revenire

Lect. Maer Matei Monica Mihaela


Master AACPI

Funcții pentru statistici descriptive:

Varianța: var()

Abatere standard: sd()

Medie: mean()

Cuantile: quantile()

Corelație: cor()

Covarianță: cov()

Reprezentare grafică

Pachetul graphics conținefuncții precum: plot, hist, boxplot

Argumente pentru funcția plot:

pch- simbolul reprezentat

lty- tipul liniei reprezentate (continuă sau întreruptă)

lwd- grosimea liniei

col- culoare

Lect. Maer Matei Monica Mihaela


Master AACPI

pch col

Funcțiile lines și points pot fi apelate doar dacă anterior a fost apelată funcția
plot

lines- adaugă linii pe grafic

points- adaugă puncte

dev.copy2pdf- graficul creat este copiat într-un fișier pdf

Exemplu:

plot(x,y,pch=".",lwd=29,col="red",xlab=" ", ylab="")

points(z,w,pch=".",lwd=29,col="blue")

legend(locator(1),c("nivel 1","nivel 2"),lty=c(1,1), col=c("red","blue"))

Lect. Maer Matei Monica Mihaela


Master AACPI

Aplicație:

Generați un data frame ce conține informații privind 500 de firme astfel:

- primul obiect este o variabilă numerică reprezentând un id al firmei și ia


valori de la 1 la 500
- activitatea firmelor se desfășoară în unul dintre domeniile: industrie,
agricultură, transporturi. În generarea domeniului de activitate se va ține
cont de următoarea structură: 50%, 20%, 30%
- dimensiunea firmelor: mici și mijlocii și mari. Structura care trebuie
respectată este 70%, 30%.
- Profitul firmelor va fi normal repartizat de medie 1000 și abatere standard
100 pentru firmele mici și de medie 2000 și abatere standard 150.
- Valoarea investițiilor va fi generată folosind următoarele ipoteze:
- I = 120+ 0.3 Profit+ e, 𝑒~𝑁(0,1)

1) Selectați aleator 20 de firme din această populație. Determinați


structura în funcție de domeniile de activitate
2) Pentru firmele din domeniul industrie calculați profitul mediu și
abaterea standard.
3) Reprezentați grafic dependența dintre profit și investiție. Calculați
coeficientul de corelație
4) Câte firme mari sunt în transporturi?

Lect. Maer Matei Monica Mihaela

S-ar putea să vă placă și