Avaliação 01
Packages
options(warn=-1)
library(factoextra)## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(MASS)
library( rgl )
library(magick)## Linking to ImageMagick 6.9.12.3
## Enabled features: cairo, freetype, fftw, ghostscript, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fontconfig, x11
library(plot3D)
library(psych)##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(knitr)
library(readr)
library(DataExplorer)
options(warn=0)Carregando os dados
URL = file.path('data','data.csv')
data = read.csv(URL, sep = ';')Separando banco de variáveis continuas
continuos = c("Previous.qualification..grade.","Admission.grade",names(data)[22:33],
"Unemployment.rate", "Inflation.rate", "GDP")
data_c = data[continuos]
dim(data_c)## [1] 4424 17
colnames(data_c) = c('PrevQualifiGrade', "AdmissionGrade","1stCredited",
"1stEnrolled","1stEvaluations",
"1stApproved","1stGrade","1stWithoutEva",
"2ndCredited",
"2ndEnrolled","2ndEvaluations",
"2ndApproved","2ndGrade","2ndWithoutEva",
colnames(data_c)[15:17])Questão 01: Comum a todos
Q 1.1: Quantas componentes principais devem ser mantidas e qual o percentual da variação total explicada por elas.
pca1 = prcomp(data_c, scale = T);P = pca1$rotation ;sdev = pca1$sdev
# raiz quadrada dos autovalores
summary(pca1)## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.4837 1.4511 1.27095 1.22168 1.14510 1.00394 0.87358
## Proportion of Variance 0.3629 0.1239 0.09502 0.08779 0.07713 0.05929 0.04489
## Cumulative Proportion 0.3629 0.4867 0.58174 0.66953 0.74666 0.80595 0.85084
## PC8 PC9 PC10 PC11 PC12 PC13 PC14
## Standard deviation 0.79442 0.67014 0.64151 0.60664 0.46453 0.41599 0.37124
## Proportion of Variance 0.03712 0.02642 0.02421 0.02165 0.01269 0.01018 0.00811
## Cumulative Proportion 0.88797 0.91438 0.93859 0.96024 0.97293 0.98311 0.99122
## PC15 PC16 PC17
## Standard deviation 0.30397 0.18919 0.14519
## Proportion of Variance 0.00544 0.00211 0.00124
## Cumulative Proportion 0.99665 0.99876 1.00000
fviz_eig(pca1, ncp=dim(data)[2])Apartir da aplicação do PCA, e analisando tanto o resultado da proporção acumulada das variancas explicadas pelo PCA e o plot dos mesmos usando o screeplot, tomaremos apenas 5 componentes, obtendo um percentual da variação total explicada por elas de 74,67%.
Q 1.2: As componentes mantidas são interpretáveis?
round(P[,1:5], 4)## PC1 PC2 PC3 PC4 PC5
## PrevQualifiGrade 0.0000 0.1760 0.6381 -0.0887 -0.1449
## AdmissionGrade 0.0096 0.1737 0.6368 -0.1006 -0.1947
## 1stCredited 0.3007 -0.2676 0.0563 -0.3401 -0.0836
## 1stEnrolled 0.3643 -0.1487 -0.0150 -0.1384 -0.0078
## 1stEvaluations 0.3035 -0.1627 -0.0390 0.1558 0.0737
## 1stApproved 0.3653 0.1634 0.0126 -0.0368 0.0007
## 1stGrade 0.2545 0.4010 -0.0341 0.2980 0.0345
## 1stWithoutEva 0.0470 -0.3949 0.1956 0.4648 -0.1608
## 2ndCredited 0.3003 -0.2705 0.0538 -0.3366 -0.0875
## 2ndEnrolled 0.3530 -0.0987 -0.0295 -0.0874 0.0092
## 2ndEvaluations 0.2963 -0.0572 -0.0710 0.2182 0.0375
## 2ndApproved 0.3410 0.2246 0.0115 0.0175 0.0035
## 2ndGrade 0.2536 0.4161 -0.0361 0.2806 0.0116
## 2ndWithoutEva 0.0233 -0.3714 0.1672 0.4875 -0.1703
## Unemployment.rate 0.0221 -0.0179 0.1972 0.0099 0.6587
## Inflation.rate -0.0015 -0.0328 0.0155 -0.1519 0.1959
## GDP -0.0056 0.1615 -0.2560 -0.0914 -0.6253
Sim, são interpretaveis as componentes 1 e 5.
Q 1.3: Se sim, qual a interpreteção dessas componentes principais?
Podemos notar que a primeira componente 1 aparenta ser uma combinação linear diretamente proporcional à soma das unidades curriculadas pagas no semestre. Além disso, para a componente 5, podemos notar um possivel indice que é ponderando, de forma diretamente proporcional, baseado nas taxas de desemprego e na taxa de inflação, mas inversamente proporcional ao GDP (PIB).
Q 1.4: Analise as componentes principais graficamente.
- Plot’s da dispersão par a par nas componentes
# Graficos de dispersao dos dois ultimos CP's
y1 = as.matrix(data_c)%*%pca1$rotation[,1];y2 = as.matrix(data_c)%*%pca1$rotation[,2]
y3 = as.matrix(data_c)%*%pca1$rotation[,3];y4 = as.matrix(data_c)%*%pca1$rotation[,4]
y5 = as.matrix(data_c)%*%pca1$rotation[,5]
group = as.factor(data$Target)
plot(y1,y2,pch=15,lwd=2,asp=1, col=group)
legend("topleft",legend = levels(factor(group)),
pch = 19,col = factor(levels(factor(group)))) plot(y1,y3,pch=15,col=group,lwd=2,asp=1)
legend("topleft",legend = levels(factor(group)),
pch = 19,col = factor(levels(factor(group)))) plot(y1,y4,pch=15,col=group,lwd=2,asp=1)
legend("topleft",legend = levels(factor(group)),
pch = 19,col = factor(levels(factor(group)))) plot(y1,y5,pch=15,col=group,lwd=2,asp=1)
legend("topleft",legend = levels(factor(group)),
pch = 19,col = factor(levels(factor(group)))) plot(y2,y3,pch=15,col=group,lwd=2,asp=1)
legend("topleft",legend = levels(factor(group)),
pch = 19,col = factor(levels(factor(group)))) plot(y2,y4,pch=15,col=group,lwd=2,asp=1)
legend("topleft",legend = levels(factor(group)),
pch = 19,col = factor(levels(factor(group)))) plot(y2,y5,pch=15,col=group,lwd=2,asp=1)
legend("topleft",legend = levels(factor(group)),
pch = 19,col = factor(levels(factor(group)))) plot(y3,y4,pch=15,col=group,lwd=2,asp=1)
legend("topleft",legend = levels(factor(group)),
pch = 19,col = factor(levels(factor(group)))) plot(y3,y5,pch=15,col=group,lwd=2,asp=1)
legend("topleft",legend = levels(factor(group)),
pch = 19,col = factor(levels(factor(group)))) plot(y4,y5,pch=15,col=group,lwd=2,asp=1)
legend("topleft",legend = levels(factor(group)),
pch = 19,col = factor(levels(factor(group))))
legend("topleft",legend = levels(factor(group)),
pch = 19,col = factor(levels(factor(group)))) Apartir dos plots de disperção acima, par a par entre as componentes principais escolhidas, podemos notar que para todas as combinações, exceto a combinação entre \(y_3\) e \(y_5\), foi possivel ver uma discrepância entre dois grupos, Dropout e Graduate, porém o grupo Enrolled torna-se mais dificil separar por meio das componentes.
Quando olhamos para as componentes 1, 2 e 5, onde temos possiveis interpretações de seus valores, em especial para os gráficos de dispersão \(y_1\) vs \(y_2\), \(y_2\) vs \(y_5\) e \(y_5\) vs \(y_1\), podemos notar uma separação entre as classes Dropout e Graduate, podendo ser explicada pela interpretação desses componentes, por exemplo, o componente \(y_5\) pode ser um indice ponderado por taxas como taxa de desemprego, taxa de inflação e PIB.
- Q-Q plot das componentes
# Graficos de dispersao dos dois ultimos CP's
par(mfrow=c(1,2))
qqnorm(y1,main="Normal Q-Q Plot y_1");qqnorm(y2,main="Normal Q-Q Plot y_2")par(mfrow=c(1,2))
qqnorm(y3,main="Normal Q-Q Plot y_3");qqnorm(y4,main="Normal Q-Q Plot y_4")par(mfrow=c(1,1))
qqnorm(y5,main="Normal Q-Q Plot y_5")Acima podemos ver os gráficos Q-Q Plot por component. A primeira vista, podemos notar que o gráfico referente a segunda componente apresentou o maior numero de pontos sobre postos sobre a reta y=x, porém para as outras componentes o cenario é distinto, em mais especial ainda para a primeira componente, onde possui muitas perturbações,
- Outros gráficos
fviz_pca_ind(pca1,
col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
legend.title = "Representation"
)## Warning: ggrepel: 4414 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
No gráfico acima, podemos notar uma que no 2º quadrante os valores da representação são maiores, além de apresentar uma efeito maior, em modulo, da componente 1, com uma leve importancia dos valores da componente 2 em modulo, mas já para o terceiro quadranto, conseguimos notar uma influencia quase constante da componente 1, mas uma forte influencia em modulo da componente 2.
fviz_pca_var(pca1,
axes=c(1,2),
col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
legend.title = "Contribution"
)Para o gráfico das variaveis acima, da componente 1 versus a componente 2, podemos notar que as variaveis relacionadas a quantidade de componentes curriculares que os estudantes pagaram no primeiro e segundo semestre, possuem uma forte contribuição de ambas as componentes, valendo ressaltar que no quadrante 1, as variaveis tiveram um efeito direto e positivo das componentes 1 e 2, e no segundo quadrante uma influencia negativa de ambas. Isso pode evidenciar uma possivel justificativa para explicar a discrepancia do grupo Dropout, que são os desistentes do curso, ou seja, a quantidade de disciplinas que eles pagam podem ser importantes para a decisão do mesmo de permanecer ou sair do curso.
fviz_pca_var(pca1,
axes=c(1,5),
col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
legend.title = "Contribution"
)## Warning: ggrepel: 6 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
Acima podemos ver outro gráfico semelhante ao anterior, porém agora comparando as componentes 1, que tinhamos falado no começo do estudo das componentes que pode ter a interpretação de uma combinação linear diretamente proporcional a quantidade de unidades curriculares que o estudante esta cursando, versus a componente 5, que pode ser interpretada como um possivel indice, ponderado diretamente pela taxa de desemprego e a taxa de inflação, menos o GDP, que seria o PIB. Dessa forma, podemos notar novamente uma tendencia das variaveis relacionadas a numero de componentes curriculares que os estudantes pagaram fortemente dependente da componente 1, mas uma importancia quanse nula da componente 5; além disso, podemos notar a questão da interpretação da componente 5, onde tempos uma relação forte dela sobre as variaveis de taxa de desemprego e taxa de inflação, e uma relação forte negativa com o GDP.
Podemos notar uma possivel interpretação para isso, que a taxa de desemprego, taxa de inflação, e o GDP podem contribuir diretamente para a decisão do estudante de uma possivel desistencia ou não.
fviz_pca_biplot(pca1,
repel = TRUE,
col.var = "#2E9FDF",
col.ind = "#696969"
)## Warning: ggrepel: 4415 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
No gráfico acima podemos notar denovo a relação das variáveis relacionada a numero de unidades curriculares que os estudantes estao pagando ou pagaram no primeiro e segundo semestre com as componentes 1 e 2.
fviz_pca_ind(pca1,
col.ind = data$Target,
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
addEllipses = TRUE,
ellipse.type = "confidence",
legend.title = "Engine shape",
repel = TRUE
)## Warning: ggrepel: 4414 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
Acima podemos notar algo importante, para os quadrantes 1 e 2, podemos notar uma proporção maior da classe de graduate, aparentando ter uma relação positiva no primeiro quadrante para ambas as componentes com a classe graduate, e no segundo quadrante uma relação negativa com ambas componentes. Da mesma forma, no terceiro quadrante podemos notar uma uma prevalência maior da classe dropout, com uma relação quase constante da componente 1 e uma relação negativa com a componente 2.
fviz_pca_ind(pca1,
axes=c(1,5),
col.ind = data$Target,
palette = c("#00AFBB", "#E7B800", "#FC4E07"),
addEllipses = TRUE,
ellipse.type = "confidence",
legend.title = "Engine shape",
repel = TRUE
)## Warning: ggrepel: 4418 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
O gráfico acima possui algumas informações muito importante, podemos notar que a combinação entre as componentes 1 e 5 de fato aparentam dividir muito bem os grupos dropout e graduate, com a presença de alguns outliers. O grupo graduate aparenta ter uma relação direta e positiva com a componente 1, e o grupo dropout aparenta ter uma relação forte negativa com a componente 1.
fviz_pca_biplot(pca1,
repel = TRUE,
col.var = "black",
col.ind = as.factor(data$Target),
addEllipses = TRUE,
legend.title = "Transmissão"
)## Warning: ggrepel: 4414 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
Acima podemos ver a relação das componentes com as variaveis e as elipsoides para cada grupo. Podemos notar mais ainda que existe uma diferença grande entre os grupos dropout e graduate, porém o grupo enrolled aparenta ter interceção com ambos os grupos.
fviz_pca_biplot(pca1,
axes=c(1,5),
repel = TRUE,
col.var = "black",
col.ind = as.factor(data$Target),
addEllipses = TRUE,
legend.title = "Transmissão"
)## Warning: ggrepel: 4420 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
## Warning: ggrepel: 7 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
Acima podemos notar as duas elipses dos grupos graduate e dropout, e além disso a elipsoide relacionada ao grupo enrolled, que de fato aparenta ter interceção com ambos os grupos. No gráfico acima também podemos notar a discrepância entre os grupos, com respeito a componente 1, em especial para os grupos mais distintos, dropout e graduate.
Analisando primeiramente o gráfico
Q 1.5: Há possíveis outliers?
Sim. Ao analisarmos alguns scatterplots, podemos listar alguns possiveis outliers nos seguintes pares:
(y\(_1\), y\(_1\)): possiveis outliers em \(y_1\);
(\(y_1\), \(y_4\)): possiveis outliers em \(y_1\);
(\(y_1\), \(y_5\)): possiveis outliers em \(y_1\);
(\(y_2\), \(y_4\)): possiveis outliers em \(y_2\);
(\(y_2\), \(y_5\)): possiveis outliers em \(y_5\);
(\(y_3\), \(y_5\)): possiveis outliers em \(y_3\);
(\(y_4\), \(y_5\)): possiveis outliers em \(y_4\).
Questão 11: Predict students’ dropout and academic success
- Verifique a distribuição das observações de acordo com a variável resposta do problema original (target). Realize análises adicionais (relativas ao tópico) que julgar pertinentes.
plot(y1,pch=3,lwd=1, col=group,
ylab=expression(y[1]))
legend("topleft",legend = levels(factor(group)),
pch = 3,col = factor(levels(factor(group))))plot(y2,pch=3,lwd=1, col=group,
ylab=expression(y[2]))plot(y3,pch=3,lwd=1, col=group,
ylab=expression(y[3]))plot(y4,pch=3,lwd=1, col=group,
ylab=expression(y[4]))plot(y5,pch=3,lwd=1, col=group,
ylab=expression(y[5]))plot(y2,pch=3,lwd=1, col=group)Quando analisamos o comportamento da primeira componente separado pelos grupos, conseguimos ver que a as observações dos grupos Graduate e Dropout aparentam ser separaveis, mas o grupo Enrolled aparenta ter fortes semelhanças com o grupo Graduate.
O comportamento do paragrafo passado repete-se para quase todas as componentes, exceto para as componentes \(y_3\), \(y_4\) e \(y_5\), ondem os grupos estão aparentemente sobrepostos, para com respeito a esses componentes.
# x, y, z variables
scatter3D(y1, y2, y5, pch = 18, theta = 20, phi = 20,
main = "Y_1, Y_2, Y_5", xlab = expression(Y[1]),
ylab =expression(Y[2]), zlab = expression(Y[5]))require(rgl)
options(warn=-1)
df <- data.frame(y1, y2, y5)
df$target<- factor(data$Target)
plot3d(df$y1, df$y2, df$y5, col=as.numeric(df$target), radius = .2,
xlab='y_1',ylab='y_2',
zlab='y_5')
#movie3d(spin3d(axis = c(0,0,1), rpm = 4), duration = 15, fps = 50,
# dir = ".",type = "gif")
options(warn=0)Acima podemos ver o gráfico 3D, com os eixos separados pela primeira, segunda e quinta componente. Para o primeiro gráfico, notamos em tons mais avermelhados valores da componente 5 mais proxima de 0 e em mais azul, valores maiores em modulo. Além disso, podemos notar que a primeira componente pode ser, entre as 3 componentes, a que apresentou maior capacidade de dividir os grupos, isso sendo evidenciando no segundo gráfico principalmente, onde aparentemente conseguimos passar um hiper plano para dividir o grupo dropout dos outros grupos.