Documente Academic
Documente Profesional
Documente Cultură
Recapitulare---------------------------------------------------------------
clienti<-read.csv("matrice_seminar.csv",header=TRUE, sep=",")
attach(clienti)
summary(clienti)
hist(clienti[ ,3]) #asimetrie la dreapta -> predomina valorile mici, dar exista
cateva valori mari
plot(Age)
boxplot(Age) #exista 2 persoane care au varsta mult diferita de medie (~80)
quantile(Age)
plot(density(Invoice))
cor(Age, MinR)
plot(Age, MinR)
cor(Age, MinC)
plot(Age, MinC)
abline(lm(MinC~Age), col='red')
clientiN<-clienti[ ,-c(1,2,4,5,13)]
c<-round(cor(clientiN),2) #rotunjim cu 2 zecimale matricea de corelatie
# coef 0.67 intre invoice si extracost -> cei care au valori mari ale facturilor,
au si extra cost mare
library(corrplot)
dim(sni)
c<-round(cor(sni),2)
View(c)
install.packages("corrplot")
library(corrplot)
?corrplot()
windows()
corrplot(c, type="upper")
install.packages("Hmisc")
c2<-rcorr(as.matrix(sni))
corrplot(c2$r, type="upper", p.mat=c2$P, sig.level=0.05, insig="blank")
install.packages("PerformanceAnalytics")
chart.Correlation(sni, histogram=TRUE)
install.packages("ggplot2")
library(ggplot2)
ggplot(sni, aes(x=I221, y=I113))+geom_point(shape=16, size=4,col="red",
alpha=0.4)+geom_text(label=row, names(sni), size=3, vjust=0, hjust=0)
# Seminar 3 ---------------------------------------------------------------
#1 STANDARDIZATI variabilele
sni<-read.csv("nis.csv", header=TRUE, sep=",")
m<-sni[ ,c(1,2,8,10,11,12,13)]
?scale()
ms<-scale(m) #standardizare variabile
# Seminar 1
Recapitulare---------------------------------------------------------------
clienti<-read.csv("matrice_seminar.csv",header=TRUE, sep=",")
attach(clienti)
summary(clienti)
hist(clienti[ ,3]) #asimetrie la dreapta -> predomina valorile mici, dar exista
cateva valori mari
plot(Age)
boxplot(Age) #exista 2 persoane care au varsta mult diferita de medie (~80)
quantile(Age)
plot(density(Invoice))
cor(Age, MinR)
plot(Age, MinR)
cor(Age, MinC)
plot(Age, MinC)
abline(lm(MinC~Age), col='red')
clientiN<-clienti[ ,-c(1,2,4,5,13)]
c<-round(cor(clientiN),2) #rotunjim cu 2 zecimale matricea de corelatie
# coef 0.67 intre invoice si extracost -> cei care au valori mari ale facturilor,
au si extra cost mare
library(corrplot)
# Seminar 2 Operatii cu matrici -------------------------------------------
dim(sni)
c<-round(cor(sni),2)
View(c)
install.packages("corrplot")
library(corrplot)
?corrplot()
windows()
corrplot(c, type="upper")
install.packages("Hmisc")
c2<-rcorr(as.matrix(sni))
corrplot(c2$r, type="upper", p.mat=c2$P, sig.level=0.05, insig="blank")
install.packages("PerformanceAnalytics")
chart.Correlation(sni, histogram=TRUE)
install.packages("ggplot2")
library(ggplot2)
ggplot(sni, aes(x=I221, y=I113))+geom_point(shape=16, size=4,col="red",
alpha=0.4)+geom_text(label=row, names(sni), size=3, vjust=0, hjust=0)
# Seminar 3 ---------------------------------------------------------------
#1 STANDARDIZATI variabilele
sni<-read.csv("nis.csv", header=TRUE, sep=",")
m<-sni[ ,c(1,2,8,10,11,12,13)]
?scale()
ms<-scale(m) #standardizare variabile
#TEMA
#8 GENERATI 6000 de valori dintr o distributie normala de medie 3 si abatere std
1,2
#asezati aceste valori intr o matrice cu 1000 randuri
# calculati , matricea produselor incrucisate (impartim la nr de observatii =1000)
si comparam cu matricea de covarianta
# Seminar 4 ---------------------------------------------------------------
#N(3,1.2)
set.seed(123)
x<-rnorm(6000,3,1.2)
m<- matrix(x, nrow=100,ncol=6)
mc<-scale(m,center=TRUE, scale=F)
pi<-t(mc)%*%mc
1/1000*pi #comparam cu matricea de covarianta
cov(mc)
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#de construit o matrice de date in care sa avem cel putin 30 de obiecte descrise de
cel putin 8 variabile (30 linii, 8 coloane)
#exemplu: luam tari, judete, regiuni, modele de masini/laptopuri, filme, produse ->
sunt liniile
#variabilele trebuie sa descrie aceste obiecte:
#entitati judete: date despre educatie,
#entitati firme: date financiare, date despre resursa umana, domeniul de activitate
#laptopuri: caracteristici tehnice, pret
#cel putin 8 variabile NUMERICE
#pt a fi numerica, o variabila trebuie sa aiba o plaja mare de valori
#de adus matricea data viitoare + deja calculata matricea de corelatie
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
acp<-princomp(m,cor=TRUE)
summary(acp)
acp$loadings
#loadings = coeficientii folositi pt obtinerea combinatiilor liniare sau vectorii
proprii ai matricei de cov
c<-cor(m)
eigen(c)
scoruri<-acp$scores
biplot(acp)
-
# Seminar 5
11.11.2019--------------------------------------------------------------
acp<-princomp(m,cor=TRUE)
summary(acp)
acp$loadings
scoruri<-acp$scores
c<-cor(m)
eigen(c) #valorile proprii ale matricei de corelatie
#-3.77=0.39*(-1.12)+0.2*(-1.86)+0.44*(-1.43)+0.44*(-1.11)+0.06*(-1.04)+0.44*(-
1.91)+0.44*(-2.12)
load<-acp$loadings
#daca din load extragem prima coloana -il obtinem pe fi1
Ro<-ms[22, ]
fi1<-load[ ,1]
fi1
summary(acp)
#cat la suta din informatie preiau primele 3 componente ? = 0.83 (cumulative
proportion)
screeplot(acp, type="l")
#daca am trasa in acest grafic o dreapta verticala - putem spune ca dupa componenta
3 panta va fi clar nesemnificativa
#matricea factor:
cor(m, scoruri[ ,1:3])
#Indicatorul 111 se coreleaza putrernic cu prima comp principala (0.76)
# I112 se coreleaza negativ, dar puternic cu comp3 (-0.78)
#prima componenta principala preia informatie din indicatorii 111,211,221,223,311
#comp 2 se coreleaza puternic cu 222 (0.84)
#indicatorul 222 este reflectat de a doua comp principala
biplot(acp)
#grafic ox=comp 1; oy=comp2; in interior=tarile; cu rosu=valori initiale
install.packages("factoextra")
install.packages("ggplot2")
library(factoextra)
install.packages("FactoMineR")
library(FactoMineR)
?PCA()
acp2<-PCA(m) #grafic=cercul corelatiilor - ne arata corelatiile cu primele doua
comp principale
#pe axa ox = corelatia cu comp1
#oy=cor cu comp2
summary(acp2)
install.packages("FactoMineR")
library(FactoMineR)
?PCA()
#matricea factor:
mfactor<-cor(m, scoruri[ ,(1:3)])
acp2$var #scorurile
#
#
#
# daca ne uitam la vectorul I112 vedem ca e f mic => informatia nu este
preluata ....
#din cercul corelatiilor: obs ca cu cat unghiul dintre variabile este mai mic, cu
atat sunt mai corelate
#var 221 se coreleaza puternic cu 211
#output summary(acp2): 112 -> cos2, dim1 =0.159 ; dim2=0.130 : suma lor este f
departe de 1 -> de aceea lungimea vectorului este atat de mica
#la 222: 0.017+0.718 ~1
#cu cat suma se apropie de 1, cu atat acea variabila este mai bine reprezentata in
spatiu
#valoarea cos2 insumata pe coloane: este lambda1 = varianta primei componente
principale
#contributia fiecarei variabile la varianta componentei principale: pe coloana lui
ctr
#pt variabila 111 contributia la varianta comp principale =15,78% =raport intre
cos2 si suma tuturor valorilor cos2 =0.591/(lambda=3.74)
#------------------------
#pt proiect
library(ggplot2)
acp<-princomp(m,cor=TRUE)
acp$loadings
scoruri<-acp$scores
scoruri<-as.data.frame(scoruri) #transf in data frame
install.packages("psych")
library(psych)
data(bfi)
describe(bfi)
m<-as.data.frame(bfi)
#trebuie sa ne pastra primele 25 de variabile si sa eliminam valorile nule (n/a)
variabile<-m[ ,1:25]
variabile<-na.omit(variabile) #curatam n/a -urile
#---------------------
#2 teste care ne arata daca se justifica sau nu aplicarea analizei factoriale
#adica: exista sau nu factori ascunsi/latenti?
#testul KMO si B
#Kaiser-Meyer-Olkin
#
# daca KMO: 0.9-1 ->excelent, 0.8-0.9 ->foarte bine, 0.7-0.8 ->bine, 0.6-0.7-mediu,
0.5-0.6 -mediocru, <0.5 -> nu avem factori latenti
#de preferat >0.7
# 3 variabile : x, y, z
#calc coef de corelatie partiala (x,y) -> not pxy
#coef de cor -> not rxy (Person)
#vom calcula coef de cor dintre x si y, eliminand influentele care ar putea veni de
la factorul z
#METODA 1 Calculul coef de cor partiala
#modelxz<-lm(x~z) #am estimat cum il influenteaza z pe x
#modelyz<-lm(y~z)
#x=a+bz+epsilon
#reziduurile modelului (epsilon ) arata influenta factorilor
#rxz<-resid(modelxz)
#ryz<-resid(modelyz)
#p<-cor(rxz,ryz)
modelxz<-lm(x~z)
modelyz<-lm(y~z)
rxz<-resid(modelxz)
ryz<-resid(modelyz)
p<-cor(rxz,ryz)
# cor=0.3 , p=0.29 -> z nu influenta variabilele x si y
#METODA 2
# R - matricea de corelatie
# calculam inversa ei, not A= R^(-1)
# pij = -aij/ radical(aii*ajj)
m<-cbind(x,y,z)
r<-cor(m)
a<-solve(r) #solve -> calc inversa unei matrici
pxy<- -a[1,2]/sqrt(a[1,1]*a[2,2])
#---------------------
install.packages("rela")
library(rela)
teste<-paf(as.matrix(variabile))
teste$KMO #extragem valoarea indicelui KMO
#KMO =0.84 -> putem sa extragem fatorii latenti/ascunsi
data(bfi)
describe(bfi)
m<-as.data.frame(bfi)
install.packages("rela")
library(rela)
teste$Bartlett
?cortest.bartlett()
r<-cor(variabile[ ,-26])
cortest.bartlett(r)
#p.value arata probabilitatea de a gresi atunci cand respingem ipoteza nula
# p.value = 1.4977e-30 - foarte mic -> respingem ipoteza nula =>
#se preteaza analiza factoriala pe aceste date
#urmeaza sa vedem care sunt acei factori comuni care trebuie extrasi
install.packages("GPArotation")
library(GPArotation)
#reprezentare schematica
fa.diagram(factori1r)
variabilef<-cbind(variabile, scoruri)
is.factor(variabile$gender) #variabila gender e categoriala?
mean(variabilef$PA1[variabilef$gender==1])
mean(variabilef$PA5[variabilef$gender==1])
#Ce face analiza factoriala?:
#prin intermediul unor intrebari care sugereaza de ex agreabilitatea - am reusit sa
estimam acest factor (pe care altfel nu l am fi putut calcula)
#------------------
#pt proiect: prima parta ACP
#a doua: analiza factoriala
#putem utiliza aceleasi date, dar trebuie sa plecam de la o ipoteza
#sa presupunem ca exista un factor comun si sa incercam sa il extragem
#-----------------------
install.packages("ca")
library(ca)
tabel<-smoke
describe(smoke)
#pe linii: pozitia in cadrul companiei (M- management; E- angajati; S-senior; J-
junio; SC-secretariat)
#coloane: cat de mult fumeaza
# output ROWS
#in acest output, toate valorile sunt inmultite cu 1000 (nu am 57, am 0.0057)
# mass - frecveenta marginala relativa
#frecventa absoluta - este o valoare
#frecventa relativa - este un procent
# mass (SM) = nr de SM/total respondenti
plot(analiza)
#in grafic SE e foarte aproape de categoria none - in general, SE se incadreaza in
categoria nefumatorilor
# JM se acoziaza cu heavy
#JE se asociaza cel mai frecvent cu categoria de fumatori mediu
# nu exista asocieri evidente pt SC si SM, dar par sa fie mai aproape de categoria
none
#daca punctele se apropie de centru -> nu influenteaza (se comporta ca media)
#####################
#pt proiect: trebuie sa ne transformam datele numerice in categoriale
# ex: avem pt tari procente de cunostinte IT si Rata somajului -> impartim in
categorii: mici, medii, mari (pe intervale)
skillc<-rep(0,32)
skillc[Skills>70]<-"H"
skillc[Skills<=70 & Skills>61]<- "M"
skillc[Skills<=61] <- "L"
quantile(Unempl, probs=c(0.33,0.66))
unemplc<-rep(0,32)
unemplc[Unempl>3.5]<-"UH"
unemplc[Unempl<=3.5 & Skills>1.9]<- "UM"
unemplc[Unempl<=1.9] <- "UL"
tcontingenta<-table(skillc, unemplc)
ac<-ca(tcontingenta)
summary(ac)
plot(ac)
m<-cbind(ystd,ustd)
row.names(m)<-c("Ro","Fr","De","Bg","It","Es")
#-------------------
#elementele din matricea d = distantele ->s-au calculat cu distanta euclidiana
#d(Fr,Ro) = radical din( (-0.19-1.2)^2+(0.45+1.22)^2 )
#d(omega1-4, omega2 )
#pt a calcula distantele dintre doua clase care au mai multe obiecte folosim
anumiti algoritmi
#PAS2:
# minimul distantelor = 0.18 -> (omegaa2, omega5)
#unim in aceeasi clasa: omega2-5={Fr, It}
#omwga1-4={Rp, Bg}
#omega3={De}
#omega6={Es}
# ...
#-------------------------
ierarhie<-hclust(d, method="centroid")
plot(ierarhie)
#graficul arata ca la 0.10 am unit RO cu BG
#la 0.18 am unit Fr cu It
# ~0.4 am unit De si Es
# 0.75 am unit cele doua clase compuse (Fr si It cu De si Es)
# la 2.4 am unit toate clasele
#efectuam o taietura acolo unde saltul din punctul deb vedere al distantei de
agregare este mare
# Raman 2 clase: Ro-Bg si Fr-It-De-Es
solutie<-cutree(ierarhie, k=2)
table(solutie)
solutie