Sunteți pe pagina 1din 12

ANALIZA DATELOR

-PROIECT-
Analiza factorilor

STUDENȚI: CHIRIȚĂ ANDREI


CIUCĂ MIHAELA-IONELA
Grupa 1058
În analiza factorială a datelor am utilizat 10 din cei 12 indicatori utilizați în analiza
componentelor principale. Am ales să eliminăm acei factori care aveau o interpretare
economică diferită de a celorlalți.

Indicatorii pe care i-am luat în considerare sunt următorii numerotați la fel ca în datele
introduse în R:

1. Cheltuielile guvernamentale pentru sănătate(procent din PIB)

2. Cazuri de tuberculoză(per 100 000)

3. Rata mortalității materne(per 100 000 oameni), definită ca moartea unei femei în timpul
sarcinii sau în termen de 42 de zile de la încheierea sarcinii, indiferent de durata și locul sarcinii,
din orice cauză legată sau agravată de sarcină sau de desfășurarea acesteia, dar nu din cauze
accidentale.

4. Rata mortalității cauzate de accidente rutiere(per 100 000)

5. Rata mortalității nou-născuților(per 1 000) = moartea tuturor nou-născuților care au până în


28 de zile de viață

6. Rata mortalității infantile(per 1 000), fiind moartea copiilor care au până într-un an de zile

7. Cauze ale morții: boli transmisibile, starea maternală, prenatală și nutrițională(procent din
total)

9. Cauze ale morții: boli netransmisibile(procent din total)

10. Cheltuieli private pe cap de locuitor(US $)

12. Mortalitatea din cauza bolilor cardio-vasculare, cancerului și diabetului(procente)


Pentru a putea realiza analiza componentelor principale este necesară standardizarea datelor.
După ce am realizat standardizarea am realizat matricea de corelație a datelor standardizate.
La pasul următor vom construi inversa matricei corelațiilor.

La pasul următor vom crea matricea corelațiilor parțiale și îi vom denumi liniile și coloanele în
funcție de numele inițiale ale indicatorilor noștrii.

Următoarea etapă este calcularea indicelui KMO pentru a stabili în ce măsură se justifică analiza
factorială a setului de date.
După cum se poate observa întâi calculăm numărătorul fracției, denumit kmo.num, apoi
numitorul, denumit kmo.denom, în final facem raportul celor două și obținem indicele KMO.
Acesta are valoarea de aproximativ 0,75, valoare mai mare de 0,5 și apropiată de 1 ceea ce
indică faptul că analiza factorială este justificată în cazul setului de date ales.

În continuare vom realiza și testul Barlett de sfericitate pentru a stabili dacă analiza factorială
este justificată.

Enunțarea ipotezelor:

H0: Variabilele sunt ortogonale deci crearea unor factori comuni, cu alte cuvine analiza
factorială este nejustificată.

H1:Variabilele au cel puțin un factor comun.

Pentru a respinge ipoteza H0 este nevoie ca χcalculat > χtabelar sau ca p value < 0,05, dacă aceste
condiții sunt respectate vom accepta ipoteza H1, în cazul în care nu sunt respectate vom accepta
ipoteza H0.

Se poate observa din scriptul de mai sus că am calculat valoarea lui χtabelar pentru 45 de grade
de libertate. Am obținut această valoare pentru formula p(p-1)/2 unde p reprezintă numărul de
indicatori luați în calcul. Astfel 10*(10-1)/2=45.

340,7799>61,56623 adică valoarea lui χcalculat > χtabelar , ceea ce înseamnă că respingem ipoteza
nulă și acceptăm ipoteza H1, anume că analiza factorială este justificată.

La pasul următor vom identifica factorii comuni, folosind functia factanal, care
funcționează după metoda verosimilității maxime:
Există 2 ipoteze

H0: Modelul este valid

H1: Modelul nu este valid

Analizăm p-value, iar dacă valoarea acestuia este mai mare decât 0,05, atunci acceptăm
ipoteza H0, cea care susține că modelul este valid

 Pas1: Alegem 2 factori:

fit.2 <- factanal(date_std, factors=2, rotation="varimax")

fit.2

Pentru aceștia am obținut un p-value<0.05

 Pas2: Alegem 3 factori:

fit.3 <- factanal(date_std, factors=3, rotation="varimax")

fit.3

Pentru aceștia am obținut p-value>0.05

Așadar, ne oprim aici, concluzionând ca trei factori sunt suficienți


Identificăm valorile cele mai apropiate de 1

Acestea corespund variabilelor

I4- Rata mortalității cauzate de accidente rutiere(per 100 000)

I5- Rata mortalității nou-născuților(per 1 000) = moartea tuturor nou-născuților care au până în
28 de zile de viață

I9- Cauze ale morții: boli netransmisibile(procent din total)

Mai departe, vom calcula scorurile factoriale pe care le punem într-un data frame pentru
a fi mai ușor de vizualizat

fit.3_scores<-date_std %*% solve(cor(date_std))%*% fit.3$loadings

fit.3_scores
df=data.frame(a[ ,1 ],fit.3_scores)

View(df)
Script

date<- read.table("try3.txt", header=TRUE, sep = "\t")

nume_obs=date[1]

View(date)

date_std <- scale(date[2:11],scale=TRUE)

View(date_std)

R=cor(date_std)

View(R)

invR <- solve(R)

View(invR)

#extragerea coef corel partiala

A <- matrix(1,nrow(invR),ncol(invR)) #definim matricea

for (i in 1:nrow(invR)){

for (j in (i+1):ncol(invR)){

#deasupra diag
A[i,j] <- invR[i,j]/sqrt(invR[i,i]*invR[j,j])

#sub diagonala

A[j,i] <- A[i,j]

colnames(A) <- colnames(date_std)

rownames(A) <- colnames(date_std)

View(A)

print(A)

kmo.num <- sum(R^2) - sum(diag(R^2))

kmo.denom <- kmo.num + (sum(A^2) - sum(diag(A^2)))

kmo <- kmo.num/kmo.denom

print(kmo)

# Testul bartlett de sfericitate - scrierea functiei

bart<-function(date){

R<-cor(date)

p<-ncol(date)

n<-nrow(date)

chi2<- -((n-1)-((2*p)+5)/6 ) * log(det(R))

df<-(p*(p-1)/2)

print(df)
crit<-qchisq(.95,df) #critical value

p<-pchisq(chi2,df,lower.tail=F) #pvalue

cat("Bartlett's test of sphericity: X2(",df,")=",chi2,", p=",

round(p,6),sep="" )

bart(date_std)

?pchisq() ### Functia repartitie

qchisq(0.05,45,lower.tail=F) #valoarea din tabel

fit.2 <- factanal(date_std, factors=2, rotation="varimax")

#varimax se ref la maximizarea sumei variantelor adica patratelor corelatiilor dintre variabile
si factori

print(fit.2, digits = 2, cutoff = .2, sort = TRUE) #cutof nu vad nimic sub limita
inclusa, digits spune cate zec sa avem, sort sorteaza dupa coef fact

fit.3 <- factanal(date_std, factors=3, rotation="varimax")

print(fit.3, digits = 2, cutoff = .2, sort = TRUE) #cutof nu vad nimic sub limita
inclusa, digits spune cate zec sa avem, sort sorteaza dupa coef fact

colnames(fit.3$loadings)<-c("Indicator4","Indicator5","Indicator9")

print(loadings(fit.3), digits=2, cutoff=0.2, sort=TRUE)

library(corrplot)

corrplot(fit.3$loadings, method = "circle")


fit.3_coef<-solve(fit.3$correlation)%*%fit.3$loadings

fit.3_coef

fit.3_scores<-date_std %*% solve(cor(date_std))%*% fit.3$loadings

fit.3_scores

df=data.frame(a[ ,1 ],fit.3_scores)

View(df)biplot(df[,1:2],fit.3$loadings[,1:2],cex = c(0.7,0.8))

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