Recently Published
Análise de Agrupamento e Discriminante
library(readxl)
dados <- read_excel("C:/Users/moura/Downloads/AnaliseAD2.xlsx")
X <- dados[, c("APTOTAL", "AP1", "AP2", "AP3", "P", "SAEBM", "SAEBLP", "IDEB")]
grupo <- as.factor(dados$GRE)
library(MASS)
library(scatterplot3d)
# Cores para os grupos
cores <- rainbow(length(levels(grupo)))
# Gráfico 3D
scatterplot3d(
dados$SAEBM,
dados$SAEBLP,
dados$IDEB,
color = cores[grupo],
pch = 19,
main = "Distribuição 3D das GREs",
xlab = "SAEB Matemática",
ylab = "SAEB Língua Portuguesa",
zlab = "IDEB"
)
legend("topleft", legend = levels(grupo), col = cores, pch = 19, bty = "n")
library(tidyverse) ; library(gridExtra)
dados %>% dplyr::select(SAEBLP, SAEBM, IDEB, APTOTAL) %>%
GGally::ggpairs(aes(color = grupo)) +
scale_colour_manual(values = c("darkorange", "purple", "cyan4")) +
scale_fill_manual(values = c("darkorange", "purple", "cyan4")) +
theme_bw()
# Execução da função
m1 <- lda(X, grupo, CV = TRUE)
summary(m1)
# Segundo modelo (ressubstituiçãoo)
m2 <- lda(grupo ~ SAEBLP+SAEBM+IDEB+APTOTAL,data = X)
# Matriz de confus?o (ressubstitui??o)
m2class <- predict(m2, X)$class
tabela2 <- xtabs(~ m2class + grupo, data = X)
cat("\n Matriz de confusão (com ressubstituição):")
tabela2
cat("\n Acerto (%) = \n", levels(grupo), "\n",
diag(tabela2) / colSums(tabela2) * 100)
cat("\n Acerto global (%) =", sum(diag(tabela2)) /24 *100)
cat("\n Funções discriminantes: \n")
coef(m2)
cat("\n Razão dos desvios padrão entre e intragrupos para cada FD =")
m2$svd
# Escores das observações
FD <- as.matrix(dados[, c("APTOTAL", "SAEBM", "SAEBLP", "IDEB")]) %*% coef(m2)
dim(FD)
# Centroides dos grupos e escores dos centróides
m2$means
(FDb <- m2$means %*% coef(m2))
# Gráfico de pontos de FD1
stripchart(FD[, 1] ~ grupo, pch = 20, xlab = "Função discriminante 1",
ylab = "Grupos",col = c("black","blue","red"), method = "stack", data = X)
points(FDb[, 1], (1:length(m2$lev)) + 0.05, pch = 13, col = c("black","blue","red"), cex = 1.5)
# Histograma de FD1
ldahist(FD[, 1], grupo)
# Histograma de FD2
ldahist(FD[, 2], grupo, col = "red")
# Gráfico de dispersão de FD1 e FD2
plot(FD[, 1], FD[, 2], pch = 20, col = rep(c(1,2,3),each=50),
xlab = "Função discriminante 1", ylab = "Função discriminante 2")
points(FDb[, 1], FDb[, 2], pch = 13, col = 1:3, cex = 1.5)
text(FDb[, 1], FDb[, 2], m2$lev)
# Médias por grupos
aggregate(dados[, c("APTOTAL", "SAEBM", "SAEBLP", "IDEB")], list(grupo), mean)
aggregate(dados[, c("APTOTAL", "SAEBM", "SAEBLP", "IDEB")], list(grupo), sd)
par(mar=c(4,4,1,1))
plot(m2)
## Uma ótica mais IA
library(tidyverse)
library(caret)
library(MASS)
# Particionando os dados em treinamento (80%) e teste (20%)
set.seed(123)
treino = dados$GRE %>% createDataPartition(p = 0.8, list = FALSE)
dtreino = dados[treino, ]
dteste = dados[-treino, ]
# Estimate preprocessing parameters
preproc = dtreino %>% preProcess(method = c("center", "scale"))
# Transforando os dados usando os parâmetros estimados
dtreino2 = preproc %>% predict(dtreino)
dteste2 = preproc %>% predict(dteste)
# aplicando a análise discriminante
m22 <- lda(dtreino2$GRE~., data = dtreino2)
# Obtendo as predições
pred <- m22 %>% predict(dteste2)
# Matriz de confusão
tcL = table(dteste2$GRE, pred$class)
dimnames(tcL) <- list(Observados = c("15ª GRE", "18ª GRE","5ª GRE"), "Predictos (cv)" = c("15ª GRE", "18ª GRE","5ª GRE"))
print(round(tcL))
sum(diag(prop.table(tcL)))
# Acurácia da aplicação
mean(pred$class==dteste2$GRE)
# Saída!
m22
plot(m22)
names(pred)
# Classes preditas
pred$class
# Probabilidades preditas de associação à classe
pred$posterior
# Discriminantes lineares
pred$x
lda.data = cbind(dtreino2, predict(m22)$x)
ggplot(lda.data, aes(LD1, LD2)) +
geom_point(aes(color = GRE)) + theme(legend.position = "bottom")
ggplot(lda.data, aes(LD1, LD2, color = GRE)) +
geom_point() +
theme(legend.position = c(0.6, 0.05), # x, y (0,0 é o canto inferior esquerdo)
legend.justification = c(0.5, 0.05))
library(MASS)
install.packages("MLmetrics")
library(MLmetrics)
help = ifelse(dteste2[,1] == "15ª GRE",1,0)
Accuracy(pred$posterior[,1],help)
library(mda) # install.packages("mda")
# Discriminante via misturas
m24 = mda(GRE~., data = dtreino2) ; m24
# Predições
pred3 = m24 %>% predict(dteste2)
# Matriz de confusão
tcM = table(dteste2$GRE, pred3)
dimnames(tcM) <- list(Observados = c("15ª GRE", "18ª GRE","5ª GRE"), "Predictos (cv)" = c("15ª GRE", "18ª GRE","5ª GRE"))
print(round(tcM))
sum(diag(prop.table(tcM)))
# Model accuracy
mean(pred3 == dteste2$GRE)
# Gráfico exploratório da LDA ou QDA
install.packages("klaR")
library(klaR)
partimat(grupo ~ SAEBLP+SAEBM+IDEB+APTOTAL,data=X,method="lda")
partimat(grupo ~ SAEBLP+SAEBM+IDEB+APTOTAL,data=X,method="qda")
densityplot(~ pred$x[,1], groups=dteste2$GRE,bw=1,xlab="Discriminante",ylab="Densidade",
auto.key = list(space = "right", points = FALSE, lines = TRUE,
title = "GRE", cex.title = 1))
library(pROC)
resposta <- factor(ifelse(dteste2$GRE == "15ª GRE", 1, 0), levels = c(0,1))
HLDL = roc(resposta,pred$posterior[,1])
plot(HLDL)