Sunteți pe pagina 1din 15

# 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))

boxplot(Invoice,horizontal=TRUE) #boxplot intors

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 -------------------------------------------

adresa<-file.path("F:\\facultate\\an3 sem 1\\Analiza datellor\\sem2")


sni<-read.table(file.path(adresa,"nis.txt"),header=TRUE,sep="\t",row.names=1)

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

#media si abaterea std pt ms[ ,1]


round(mean(ms[ ,1]),2)
round(sd(ms[ ,1]), 2)

#2 calc matricea de corelatie/ covarianta pt


r1<-round(cor(m))
r2<-round(cor(ms))
c1<-round(cov(m))
c2<-round(cov(ms))

#matricea de corelatie este aceiasi si pt date reale si pt date standardizate


#ptc ea masoara legatura dintre ele (iar noi am scazut sau impartit la aceasi
constanta cand am standardizxat)

#c2 la fel ca r1 si r2 -> daca lucrez pe date standardizate matricea de corelatie e


identica cu matricea de covarianta
#-> atunci cand lucram pe date std nu are imp cu ce matrice lucram (ptc sunt
acelasi - corelatie/covarianta)

#3 CaLCULATI vectorii si valorii proprii pt matricea de ccorelatie (r1)


e<-eigen(r1) #valorile si vectorii proprii
e
lamda<-e$values[1]
v1<-e$vectors[ ,1]

#4 CALCULATI norma primului vector propriu


norma<-sqrt(sum(v1^2))

#5 costruiti o combinatie liniara cu variabilele standardizate (din ms ), folosind


coef dati de primul vector propriu
#v1=(-0.39 -0.20 -0.44 0.06 -0.44 -0.44)
ic<-ms[,1](-0.39)+ms[,2](-20)+ms[,3](-0.44)+ms[,7](-0.44)
ms[,1]
#icBe=0.11*(-0.39)+0.56*(-0.20)+0.63*(-0.44)+..+1.47*(-0.44)
ic<-ms%*%v1
#29*1= 28,7 col; 7 linii, o coloana
ic

#construiti o functie care transforma variabilele din mattricea m prin impartirea


fiecarei variabile la media sa
#mresc=m/M
rescalare<-function(x){xs<-x/mean(x)
return(xs)}#aplicam functia pe rpima coloana
mrescalat<-apply(m,2,rescalare)#aplicam pe matrricea m pe fiecare coloana functia
rescalare

#calculati matricea produselor incrucisate pentru matricea variabilelor centrate


#sa scad media fara sa ikmpart la abaterea std
mc<-scale(m,center=TRUE,scale=FALSE)
#matricea produselor incrucisate x transpus*x
pi<-t(mc)%*%mc
pi
pi/7#nu la nr de variabile, ci la n, numarul de obs
c1
c2
cov(mc)
#compar cov cu pi/7

#generati 6000 de valori dintr o distributie normala de medie 3 si abatere standard


1,2
#asezati aceste valori intr o matrice cu 1000 de randuri
#aplicati pe aceasta noua matrice matericea prod incrucisate
pi/28
cov(xc)

#generarea a 6000 de valori


X<-rnorm(6000, mean=3, sd=1.2)
#matrice cu 1000 de randuri
M=matrix(X, nrow=1000, byrow=TRUE)
M
View(M)
Mc<-scale(M,center=TRUE,scale=FALSE)
Pi<-t(Mc)%*%Mc
Pi
View(Pi)

# 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))

boxplot(Invoice,horizontal=TRUE) #boxplot intors

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 -------------------------------------------

adresa<-file.path("F:\\facultate\\an3 sem 1\\Analiza datellor\\sem2")


sni<-read.table(file.path(adresa,"nis.txt"),header=TRUE,sep="\t",row.names=1)

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

#media si abaterea std pt ms[ ,1]


round(mean(ms[ ,1]),2)
round(sd(ms[ ,1]), 2)

#2 calc matricea de corelatie/ covarianta pt


r1<-round(cor(m))
r2<-round(cor(ms))
c1<-round(cov(m))
c2<-round(cov(ms))

#matricea de corelatie este aceiasi si pt date reale si pt date standardizate


#ptc ea masoara legatura dintre ele (iar noi am scazut sau impartit la aceasi
constanta cand am standardizxat)

#c2 la fel ca r1 si r2 -> daca lucrez pe date standardizate matricea de corelatie e


identica cu matricea de covarianta
#-> atunci cand lucram pe date std nu are imp cu ce matrice lucram (ptc sunt
acelasi - corelatie/covarianta)
#3 CaLCULATI vectorii si valorii proprii pt matricea de ccorelatie (r1)
e<-eigen(r1) #valorile si vectorii proprii
e
lamda<-e$values[1]
v1<-e$vectors[ ,1]

#4 CALCULATI norma primului vector propriu


norma<-sqrt(sum(v1^2)) #1

#5 costruiti o combinatie liniara cu variabilele standardizate (din ms ), folosind


coef dati de primul vector propriu (v1)
v1 #!!!!! EU AM ALTE VALORI :(
# v1=(-0.39 -0.20 -0.44 -0.44 0.06 -0.44 -0.44)
IC<- ms[ ,1]* (-0.39)+ms[ ,2](-0.20)+ms[ ,3](-0.44)+ms[ ,4](-0.44)+ms[ ,5]*0.06+ms[
,6](-0.44)+ms[ ,7]*(-0.44)
# mai sus vedem ce presupune combinatia liniara
#dar avem o modalitate mai simpla in R
IC<-ms%*%v1

#6 CONSTRUITI o functie care transforma variabilele din matricea m prin impratirea


fiecarei varibile la media sa
rescalare<-function(x){ xs<-x/mean(x)
return (xs)}
rescalare(m[ ,1]) #aplicam functia pe prima coloana
mresc<-apply(m,2,rescalare) #aplicam pe maatricea m pe fiecare coloana (2-
dimensiunea=coloanele) functia rescalare

#7 CALCULATI matricea produselor incrucisate pentru matricea variabilelor centrate


(mc)
mc<-scale(m,center=TRUE,scale=FALSE) #am centrat -> am obtinut o matrice a
variabilelor centrate, matrice de medie 0?
pi<-t(mc)%*%mc #matricea produselor incrucisate
# %*% - inmultire matrici
pi/28 # impartim la nr de observatii

#comparati matricea pi/7 cu matricea de covarianta initiala


cov(mc)

#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)

sni<-read.csv("nis.csv", header=TRUE, sep=",")


m<-sni[ ,c(1,2,8,10,11,12,13)]
round(cor(m), 2)
# cor(I211, I221) =0.8
#in tarile in care ch publice cu cercetarea sunt mari, si ch private cucercetarea
sunt mari
#COR(I311, I223)=0.76
#in tarile in care ponderea firmelor care ofera formare este ridicata, observam ca
si ponderea firmelor care au introdus inovare este ridicata
#variabila I222 nnu se coreleaza cu celelalte variabile, se coreleaza negativ cu
223, dar slab

# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#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
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#pe datele noastre exista corelatie puternica, adica avem redundanta si se


justifica aplicarea metodei analizei componentelor principale (ACP)

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)

#diferenta intre loadings si eigen -> eigen arata si semnul


#daca pe un vect propriu il inmultim cu o constanta -> ramane tot vector propriu

scoruri<-acp$scores
biplot(acp)

-
# Seminar 5
11.11.2019--------------------------------------------------------------

sni<-read.csv("nis.csv", header=TRUE, sep=",")


m<-sni[ ,c(1,2,8,10,11,12,13)]

acp<-princomp(m,cor=TRUE)
summary(acp)

acp$loadings
scoruri<-acp$scores

#selectam o tara -> Romania -linia 22


#spunem primele 3 scoruri : -3.77 ; -0.35; 1.82
# Z22,1 = -3.77
#Z1=X*fi1

#fi1= 0.39; 0.2; 022; 0.44; 0.44; ; 0.44; 0.44 -Transpus


#valorile fi le gasim in acp (princomp)

#loadings -> vectorii proprii = coeficientii utilizati in agregare

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)

ms<-scale(m,center=TRUE,scale=TRUE) #valori standardizate


#RO (-1.12; -1,86; -1,43; -1.11; -1.04; -1.91; -2.12) #valori initiale in matricea
standardizata

load<-acp$loadings
#daca din load extragem prima coloana -il obtinem pe fi1

Ro<-ms[22, ]
fi1<-load[ ,1]
fi1

Ro%*%fi1 #=-3.70 (-3.77)

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

#criterii pt a decide cate componente principale pastram: procent info, screeplot,


criteriul lui Kaiser
#pastram 3 comp principale
#am plecat de la matrice de 28 linii si 7 col - am ajuns la matrice de 28 linii si
3 col

#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

#I111 Absolventi de doctorat la 1000 locuitori


#I112 Ponderea populatiei cu studii superioare (grupa 25-34ani)
#I211 Cheltuieli publice cu Cercetarea % PIB
#I221 Cheltuieli private cu cercetarea dezvoltarea
#I222 Cheltuieli destinate inovarii
#I223 Ponderea intreprinderilor care ofera formare (competente IT)
#I311 Ponderea intreprinderilor care au introdus cel putin un produs inovator

biplot(acp)
#grafic ox=comp 1; oy=comp2; in interior=tarile; cu rosu=valori initiale

#trebuie sa avem cele 3 componente in grafic


#TEMA:
#1 Reprez un grafic cu 3 dimensiuni (comp1, 2, 3)
#2 Fol functia ggplot2 (ox=comp1, oy=comp 2,iar comp 3 e reflectata in grafic prin
dimensiunea punctului care da tara respectiva)

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)

# Seminar 6 18.11.2019 --------------------------------------------------


sni<-read.csv("nis.csv", header=TRUE, sep=",")
m<-sni[ ,c(1,2,8,10,11,12,13)]

install.packages("FactoMineR")
library(FactoMineR)
?PCA()

acp2<-PCA(m) #obtinem cercul corelatiilor


summary(acp2)
#obtinem valoriile proprii
#si pt fiecare variabila obtinem si un set de informatii

#var I222 este negatic corelata cu C1(slab corelata) si pozitiv corelata cu


C2(puternic)

#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

date<-read.csv("daate.csv", header=TRUE, sep=",")


c<-round(cor(date[ ,2:10]),2)

#acolo unde coef de cor e >0.9 -> eliminam o variabila


#trebuie sa scot land area/forest area sau surface area
#cu cat contribuie agricultura la PIB
#PIB, populatia ocupata cu agricultura
#---------------------------

library(ggplot2)
acp<-princomp(m,cor=TRUE)
acp$loadings
scoruri<-acp$scores
scoruri<-as.data.frame(scoruri) #transf in data frame

ggplot(scoruri, aes(x=scoruri[ ,1], y=scoruri[ ,2]))+geom_point(size=10*scoruri[ ,


3], shape=16) +geom_text(label=row.names(m)) #10* -> pt a mari punctele

# Seminar7 25.11.2019 -----------------------------------------------------

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)

#Generam niste date


set.seed(1)
x<-rnorm(100)
set.seed(2)
e<-rnorm(100)
y<-0.6*x+ e
set.seed(3)
z<-rnorm(100)
cor(x,y)

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

# Seminar 8 2.12.2019 ----------------------------------------------------


install.packages("psych")
library(psych)

data(bfi)
describe(bfi)

m<-as.data.frame(bfi)

install.packages("rela")
library(rela)

#trebuie sa ne pastra primele 25 de variabile si sa eliminam valorile nule (n/a)


#update: pastram 26 de variabile pt ca ne e mai usor sa comparam cv??? la scoruri
#dar in analiza stergem ultima coloana
variabile<-m[ ,1:26]
variabile<-na.omit(variabile) #curatam n/a -urile

#folosim functia paf pt a extrage valoarea indicelui KMO


teste<-paf(as.matrix(variabile[ ,-26]))
teste$KMO #extragem valoarea indicelui KMO
#KMO = [0,1]
# KMO = 0.84865
#pe aceste date se preteaza analiza factoriala -> putem sa extragem cel putin un
factor ascuns
#exista factori care sa explice variatia ....

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)

factori1<-fa(variabile[ ,-26], nfactors = 5, rotate="none", fm="pa") #fm= metoda ;


pa=principal analysis
q1<-factori1$loadings
#ideal ar fi ca uitandu-ne in loadigs sa putem grupa variabilele (ne trebuie
corelatii mari)

factori2<-fa(variabile[ ,-26], nfactors = 5, rotate="none", fm="ml") #fm= metoda ;


ml= metoda verosimilitatii maxime
#la ml - se construieste o functie de verosimilitate maxima
q2<-factori2$loadings
#nu ne ajuta loadings ptc avem corelatii mici

# aplicam rotatia axelor


factori1r<-fa(variabile[ ,-26], nfactors = 5, rotate="Varimax", fm="pa")
q1r<-factori1r$loadings
#factorii incep sa se aseze, matricea arata mai aerisit
#putem sa identificam ce reprezinta fiecare din cei 5 factori
# pe factorul PA3 se grupeaza C -urile => PA3 reprezinta constiinciozitatea
#PA5 agreabilitate ( se grupeaza A -urile)

print(factori1r$loadings, cutoff=0.3) #afiseaza coef mai mari ca 3

#reprezentare schematica
fa.diagram(factori1r)

#scoruri - pt fiecare individ (linie) obtii un scor ....


scoruri<-factori1r$scores
hist(scoruri[ ,1]) #PA2

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
#-----------------------

# Seminar 9 9.12.2019 ---------------------------------------------------

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

#vrem sa testam daca exista o corelatie intre tipul jobului si categoria de


fumatori
# in cazul in care observ ca cele doua variabile se asociaza, ne intereseaza sa
vedem cum -> sa obtinem harta din analiza ...

# H0: variabilele categoriale sunt independente


#H1: var cat sunt corelate
# testul hi^2
# inertia = hi^2 /n

chisq.test(tabel) # testul hi^2


# P-value= 0.1718 ->sansele de a gresi cand respingem ipoteza nula = 17,18%
#suntem intr-o zona de incertitudine: nu putem nici sa respingem, nici sa acceptam
ipoteza nula
# respingem <10%; acceptam>80%

#aplicam analiza de corespondenta


analiza<-ca(tabel)
summary(analiza)
#eigenvalues - valorile proprii (obtinute din descompunerea tabelului de
contingenta)
#nr maxim de dimensiuni pe care il putem creea: =3 ->minimul dintre ..
#valoare proprie a unei componente principale - varianta acelei componente
#prima componenta preia 87.8% din inertie

# 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

#qlt - calitatea reprezentarii in noul spatiu


# ia valori in [0,1]
# 1- calitatea f buna a reprezentarii
#inr - contributia categoriei la inertia totala
# care dintre categoriile de angajati contribuie cel mai mult la inertia totala -
SE - ptc variatia este cea mai mare pe categoriile de fumatori

#k=1 -prima dimensiune


# pe coloanele k - avem coordonatele in noul spatiu
# categoria SM, in noul spatiu, va fi de coordonate -0.0066 si -0.0194

#cor - corelatia fiecarei categorii cu axa


#92 - cor dintre SM si dimensiunea 1

#ctr - contributia axei respective la inertia punctului (categoriei reprezentate)

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)

indicatori<-read.table("indicatori.txt", header=TRUE, row.names=1, sep="\t")


attach(indicatori)
quantile(Skills, probs=c(0.33,0.66)) # impartim in 3 clase
# [0-61%) - nivel scazut al competentelor
#[61-70%] - nivel mediu al comp
#(70-100]% - nivel crescut

skillc<-rep(0,32)
skillc[Skills>70]<-"H"
skillc[Skills<=70 & Skills>61]<- "M"
skillc[Skills<=61] <- "L"

skillc<-factor(skillc, levels=c("L", "M", "H")) # transf in var factoriala


table(skillc)

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"

unemplc<-factor(unemplc, levels=c("UL", "UM", "UH"))

tcontingenta<-table(skillc, unemplc)
ac<-ca(tcontingenta)
summary(ac)
plot(ac)

# Seminar 10 16.12.2019 ------------------------------------------------------


#Analiza cluster
#6 obiecte, 2 variabile standardizate
ystd<-c(1.2,-0.19,-1.05,1.25,-0.37,-0.82)
ustd<-c(-1.22,0.45,0.96,-1.31,0.49,0.62)

m<-cbind(ystd,ustd)
row.names(m)<-c("Ro","Fr","De","Bg","It","Es")

#la analiza cluster folosim distantele dintre obiecte


library(cluster)
d<-dist(m)

#-------------------
#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 )

#aplicam un alg ierarhic de clusterizare

#Exemplu: Metoda centroidului


#Pas 0: se contruiesc atatea clase cate obiecte am
# omega1={Ro}
#omega2={Fr}
#omega3={De}
#omega4={Bg}
#omega5={It}
#omega6={Es}

#Comasam 2 clase -> le alegem pe baza distantelor


#miu(d)=0.10
#omega1,4={Ro,Bg}
#omega2={Fr}
#omega3={De}
#omega5={It}
#omega6={Es}

#Refac matricea distantelor (matrice formata din cele 5 clase)

#d(omega1-4, omega2 )
#pt a calcula distantele dintre doua clase care au mai multe obiecte folosim
anumiti algoritmi

#Metoda centroidului: presupune ca voi calcula centroidul fiecarei clase, iar


distanta dintre cele 2 clase va fi distanta euclidiana dintre cei doi centroizi
#centroidul clasei omega 1-4: m1-4=( (1.2+1.25)/2; [(-1.22)+(-1.31)]/2)) -vector
de medii

#d(omega1-4, omega2)=d((1.22,-1.26),(-0.19,0.45))= radical ( (1.22+0.19)^2+(-1.26-


0.45)^2 ) =2.21
#d(omega1-4,omega3)=3.17
#d(omega1-4,omega5)=2.36
#d(omega1-4,omega6)=2.77

#PAS2:
# minimul distantelor = 0.18 -> (omegaa2, omega5)
#unim in aceeasi clasa: omega2-5={Fr, It}
#omwga1-4={Rp, Bg}
#omega3={De}
#omega6={Es}

#!!! algoritmul se termina cand toate obiectele sunt in aceeasi clasa


#Refacem matricea distantelor:

#alta metoda ????


#pt cei mai apropiati vecini: min{2.17, 2.73, 2.27, 2.42,}

# ...

#-------------------------

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

# Faptul ca clasa Ro-Bg s-a unit ultima si la o distanta f mare cu celelalte


clase -> arata discrepanta

#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

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