Sunteți pe pagina 1din 6

Instructiuni:

Construiti echipe de cate 2 sau cate 3 pentru a lucra exercitiile propuse. Rezultatele la fiecare cerinta le scrieti pe o
foaie (sau mai multe) de hartie (fie cu pixul, dar sa fie lizibil, fie in word), pe care treceti numele membrilor echipei si
o depuneti la unul din seminarele de pe 14 sau 17 ianuarie 2019 (ultima saptamana de curs). Nu este obligatoriu sa
fiti toti prezenti la seminar cand se depun rezolvarile. Puteti veni oricand in intervalul orar 8-14.

Pentru a folosi R Studio, aveti de descarcat si instalat intai R la link-ul urmator:

https://cloud.r-project.org/

Selectati sistemul folosit de voi (cel mai probabil Windows). Apoi intrati pe pagina ‘base’.

In cele din urma descarcati R (Download R for Windows), iar dupa ce se descarca, instalati urmand pasii normali.

Dupa ce instalati R, descarcati R studio de pe urmatorul link:

https://www.rstudio.com/products/rstudio/download/#download

Apoi, descarcati RStudio potrivit pentru sistemul vostru si instalati cand se termina descarcarea:

Asta ar trebui sa fie tot pentru descarcarea si instalarea RStudio. Daca aveti probleme, va rog sa comentati la
postarea de pe Facebook pentru a putea sa va raspund atat voua cat si colegilor care intampina dificultati
asemanatoare. Intrebarile le gasiti in fisierul R atasat, dar si in pagina urmatoare de word. Succes!
#Proiect pentru Seminarul Analiza de date

#Termen limita: 14-17 Ianuarie 2019.

#Predati proiectul la unul din seminarele din 14 sau 17 Ianuarie (orele 8-14),

#in format fizic - fie scris de mana, fie in Word - semnat de membrii echipei (2 sau 3).

#Pentru proiect vom folosi setul de date 'StudentsPerformance.csv'.

sp=read.csv('StudentsPerformance.csv')

str(sp)

#Set-ul de date se refera la notele obtinute de 1000 de studenti americani la examenele finale de liceu

#Acestia au avut 3 probe: Matematica, Scris si Citit. Notele obtinute (max 100) la aceste examene sunt date de
variabilele:

# math.score - nota la Matematica

# reading.score - nota la Citit

# writing.score - nota la Scris

#Au promovat doar cei care au luat peste 60 la fiecare materie in parte. Pentru a contoriza cine a promovat si cine
nu,

#construim urmatoarea variabila (dati run selectand tot de la randul 17 la 25)

sp$prom=rep(1,1000)

{for(i in 1:1000)

if ((sp$math.score[i]>=60)&(sp$reading.score[i]>=60)&(sp$writing.score[i]>=60))

{ sp$prom[i]<-1 }

else

{ sp$prom[i]<-0 }

}}

sp$prom=as.factor(sp$prom)

# prom - variabila ce are '0' pentru cei care au picat si '1' pentru cei care au promovat

# gender - genul studentului - 'female' sau 'male'

# race.ethnicity - etnicitatea sutdentului, sunt 5 categorii in total (A,B,C,D,E)

# parental.level.of.education - cea mai inalta diploma pe care au obtinut-o parintii studentului

# lunch - variabila ce contorizeaza ce tip de pranz aveau studentii la cantina - standard sau free/reduced

# test.preparation.course - variabila care ne spune daca studentul respectiv a urmat cursuri pregatitoare pt examene
sau nu
summary(sp)

#1.Uitandu-va la rezumat, raspundeti la urmatoarele intrebari:

#a) Care este proportia de femei din populatia de studenti?

#b) Care este cea mai des intalnita diploma a parintilor?

#c) Care este media notelor la Reading?

#d) Care este rata de promovabilitate?

#e) Aflati care studenti (dupa numarul randului pe care se afla) au luat nota 100 la matematica (folositi functia
'which')

#2. Vom studia mai multe regresii liniare folosind nota la examenul de scris ca variabila dependenta.

#a) Intai de toate, pentru a indeplini o cerinta a regresiei liniare, vrem sa verificam daca scorul la scris este distribuit
normal.

# Construiti histograma acestui scor. Spuneti daca histograma descrie o distributie normala si specificati media si
abaterea standard (mean, sd).

#b) Prima regresie pe care o incercam este cea unifactoriala - adica o singura variabila independenta. Construiti o
regresie liniara

#cu writing.score ca variabila dependenta si reading.score la variabila independenta (functia 'lm').

#Este o relatie semnificativa intre scris si citit? Scrieti coeficientul estimat si nivelul de semnificativitate.

#c) Acum, vrem sa vedem daca exista o relatie semnificativa intre scris si matematica. Inlocuiti reading.score cu
math.score si faceti o regresie noua.

#Comparati coeficientul pentru matematica cu cel pentru reading. Ce indica rezultatul?

#(Ganditi-va ce inseamna un coeficient mai mare; corelatii)

#d) Construiti matricea cu cele 3 scoruri:

matrice=cbind(sp$writing.score, sp$math.score, sp$reading.score)

#Aflati corelatiile dintre cele variabile, folosind functia 'cor'. Avem multicoliniaritate intre variabile? De ce?

#e) Construiti o regresie liniara cu urmatoarele variabile ca variabile independente:

# gender, race.ethnicity, parental.level.of.education , lunch, test.preparation.course.

#Ce variabile sunt nesimnificative?


#e) Folositi functia 'step'. Ce variabile vi se sugereaza sa eliminati?

#f) Pe baza regresiei obtinute la punctul e), specificati cu cate puncte (in medie), iau mai putin baietii decat fetele.

#De asemenea, cu cate puncte mai putin iau cei care nu au participat la cursuri pregatitoare de examen decat cei
care au participat.

#g) Creati aceeasi regresie ca la f), dar cu math.score ca variabila dependenta, in loc de writing.score.

# Care e diferenta intre baieti si fete la examenul de matematica? Comparati cu ce s-a obtinut inainte la scris.

# La ce examen au fost mai eficiente cursurile pregatitoare?

#3. Exercitiul acesta se refera la regresia logistica. Vom folosi 'prom' ca variabila dependenta, intrucat vrem sa aflam
care

#e probabilitatea ca un student sa promoveze (1), pe baza caracteristicilor sale.

#a) Descrieti modelul de baza si care este rata de acuratete a sa.

#b) Construiti regresia logistica simpla cu prom ca variabila dependenta si test.preparation.course variabila
independenta

#(nu uitati de family='binomial', iar data=sp la acest subpunct). Scrieti regresia logistica obtinuta cu coeficientii si
variabilele aferente.

#c) Scrieti formula functiei logit. Pe baza coeficientilor obtinuti la b) si inversa functiei logit, scrieti formula
probabilitatii extrase din regresie.

#d) Instalati pachetul "caTools" si dati run la restul de instructiuni de mai jos pentru a imparti datele noastre in
submultimile 'train' si 'test'.

install.packages("caTools")

library(caTools)

# Impartirea setului de date in training si test

set.seed(123) # Pentru ca de fiecare data sa obtineti acelasi lucru :-)

split = sample.split(sp$prom, SplitRatio = 0.80)

# Constructia celor doua submultimi

train = subset(sp, split==TRUE)


test = subset(sp, split==FALSE)

#La ce folosim fiecare dintre aceste doua submultimi?

#e) Construiti modelul de regresie logistica prom ~


gender+race.ethnicity+parental.level.of.education+lunch+test.preparation.course.

#(Nu uitati pentru ce foloseam submultimea 'train'). Dupa ce il construiti, folositi functia 'step' pe el.

#Ce model vi se sugereaza sa folositi?

#f) Construiti modelul sugerat de functia 'step'. Uitandu-va la summary-ul lui, care sunt cele mai semnificative (cu cel
mai mic p value) doua caracteristici

#pentru predictia promovarii examenelor? Faceti o mica analiza a contributiei pozitive sau negative a celor doua.

#g) Faceti predictia pe multimea 'test'. Construiti tabelul pt un prag de 0.5. Care este acuratetea regresiei pt acest
prag?

# Predictia pe multimea test

predictTest = predict(mydataLog, type="response", newdata=test)

# Confusion matrix - prag de 0.5

table(test$prom, predictTest > 0.5)

#h) Calculati acuratetea totala folosind pachetul ROCR. Comparati aceasta acuratete cu modelul de baza. Sunt
diferente mari?

# Acuratetea pe multimea test, pe baza de AUC

install.packages("ROCR")

library(ROCR)

# Functia de predictie

ROCRpred = prediction(predictTest, test$prom)

# Functia performanta

ROCRperf = performance(ROCRpred, "tpr", "fpr")

# Plot ROC curve

plot(ROCRperf, colorize=TRUE, print.cutoffs.at=seq(0,1,by=0.1), text.adj=c(-0.2,1.7))


# Calculul valorii AUC

auc = as.numeric(performance(ROCRpred, "auc")@y.values)

auc

#4. Examenele respective sunt date la nivel national. Cei 1000 de studenti din baza de date reprezinta un esantion
dintr-un anumit oras al tarii.

#Vrem sa testam rezultate la nivelul intregii populatii. Pentru asta vom folosi un test t.

#a) Aflati xbar=media (mean) si sig=abaterea standard (sd) pentru variabila sp$math.score.Stiind ca n=1000 si
mu0=65, calculati t-ul aferent acestor date.

#b) Faceti un test unilateral la stanga, specificand: cele doua ipoteze, valoarea t critica pentru un nivel alpha=0.05,

#alegerea ipotezei corecte, atat pe baza comparatiei t-calculat cu t-critic, cat si p-value < alpha.

#c) La fel ca la b), pentru un test unilateral la dreapta.

#d) La fel ca la b), pentru un test bilateral.

#5. Aceasta este ultima intrebare, si se refera la a compara mediile de la examenul de citit, in functie de diferite
categorii.

#a) Comparati, folosind functia 't.test' diferentele de medii la examenul de citit intre baieti si fete.

#Care sunt cele 2 medii, si care e p-value aferent? E un rezultat semnificativ?

#b) Comparati, folosind functia 't.test' diferentele de medii la examenul de citit intre baietii si fetele care au urmat
orele de pregatire pentru examen.

#Care sunt cele 2 medii, si care e p-value aferent? E un rezultat semnificativ?

#c) Folosind functia 'aov' si apoi 'anova' pt acel 'aov', aflati daca exista diferente semnificative intre categoriile de
etnicitate. Scrieti valoare F aferenta.

#d) La fel ca la c), verificati un model anova in care se studiaza concomitent atat 'race.ethnicity' cat si
'parental.level.of.education' (folositi +).

#Care sunt cele doua p-value pentru fiecare variabila?

#e) Faceti un test anova intre modelul de la punctul c) si cel de la punctul d). Care e mai bun?

# Mult succes la acest proiect!