## ## Exemplo 1: dados dos desempenhos de alunos de duas turmas de CE-003 ## ## importando arquivo, o arquivo deve estar na área/diretório/pasta de trabalho do R ce003 <- read.csv2("ce003-201101.csv", row.names=1) ## aumentando o numero de colunas visualização no terminal options(width=120) ## vendo a dimensão dos dados (numero de alunos e de variáveis) dim(ce003) ## exibindo os seis primeiros registros head(ce003) ## Classificar cada uma das variáveis(QL: non. ou ord. / QT: disc. ou cont.)!! ## ## Tabelas e Gráficos para um atributo qualitativo nominal ## ## tabela de frequencias with(ce003, table(ResultadoFinal)) ## os nívies estão em ordem alfabética, mas podem ser reorganizados: ce003$ResultadoFinal <- factor(ce003$ResultadoFinal, lab=c("R-FALTA", "Aprovado", "Reprovado"), lev=c("R-FALTA", "Aprovado", "Reprovado")) class(ce003$ResultadoFinal) levels(ce003$ResultadoFinal) ## note a mudança na ordem dos valores na tabela with(ce003, table(ResultadoFinal)) ## tabelas para outras variáveis qualitativas with(ce003, table(Sexo)) with(ce003, prop.table(table(Sexo))) with(ce003, prop.table(table(Turma))) ## Criando uma nova variável com ano de ingresso a partir do GRR ce003 <- transform(ce003, ano=as.numeric(substr(rownames(ce003), 4, 7))) with(ce003, table(ano)) ## a tabela pode ser armazenada em um objeto tb <- with(ce003, table(ResultadoFinal)) ## e o objeto pode ser visualizado a qualquer momento tb ## frequencias relativas (em porcentagem) round(100*with(ce003, prop.table(tb)), dig=1) ## recalculando excluindo os reprovados por falta with(ce003[ce003$ResultadoFinal != "R-FALTA",], prop.table(table(ResultadoFinal))) ## outra forma de fazer seleção with(subset(ce003, ResultadoFinal != "R-FALTA"), prop.table(table(ResultadoFinal))) ## excluindo os níveis não incluídos na seleção (tb1 <- with(droplevels(subset(ce003, ResultadoFinal != "R-FALTA")), prop.table(table(ResultadoFinal)))) ## podemos criar um novo objeto com um subconjunto dos dados ce003a <- droplevels(subset(ce003, ResultadoFinal != "R-FALTA")) dim(ce003) ## todos alunos dim(ce003a) ## apenas n"ao reprovados por faltas ## gráficos pie(tb) ## todos os dados pie(tb1) ## sem considerar reprovados por faltas ## várias variáveis par(mfrow=c(2,3), mar=c(0.5,0.5,0.5,0.5)) # dividindo a janela gráfica em 6 e reduzindo as margens # todos os dados with(ce003, pie(table(Sexo))) with(ce003, pie(table(Turma))) with(ce003, pie(table(ResultadoFinal))) # excluindo reprovados por falta with(ce003a, pie(table(Sexo))) with(ce003a, pie(table(Turma))) with(ce003a, pie(table(ResultadoFinal))) par(mfrow=c(1,1), mar=c(3.5,3.5,0.5,0.5)) ## ## Tabelas e Gráficos para o cruzamento de 2 atributos qualitativos ## ## Tabelas cruzadas (note que o parentesis ao redor do comando imprime o resultado) (tbT.R <- with(ce003, table(Turma, ResultadoFinal))) ## porcentagens gerais, por linha e por coluna ## veja qual faz mais sentido para discussão que se quer fazer! (tbT.R1 <- prop.table(tbT.R)) (tbT.R2 <- prop.table(tbT.R, mar=1)) (tbT.R3 <- prop.table(tbT.R, mar=2)) ## algumas diferentes opções de gráficos de barras, adequados a variáveis ordinais barplot(tbT.R) barplot(prop.table(tbT.R, mar=2)) barplot(t(tbT.R)) barplot(t(tbT.R), beside=T, legend=T) barplot(tbT.R2) barplot(t(tbT.R2)) ## acessando a documentação das funções com help() ou ? help(barplot) ?prop.table ## os identificadores dos indivíduos são os nomes das linhas do objeto de dados rownames(ce003) ## Outros tipos variáveis ## Não faz muito sentodo fazer uma tabela para a Média Final... with(ce003, table(MediaFinal)) ## ... que deve então ser tratada com uma variável contínua ## e pode ter os valores agrupados em classes para montar uma tabela de frequencias with(ce003, table(cut(MediaFinal, br=(0:10)*10))) with(ce003, table(cut(MediaFinal, include.l=T,br=(0:5)*20))) with(ce003, table(MediaFinal)) with(ce003, table(cut(MediaFinal, breaks=(0:5)*20, include.l=T))) with(ce003, table(cut(MediaFinal, breaks=(0:10)*10, include.l=T))) ## Graficamente, a tabela é represetnada pelo histograma with(ce003, hist(MediaFinal)) ## podemos ver como a função hist() define classes e agrupa os dados: histMF <- with(ce003, hist(MediaFinal)) str(histMF) ## e podemos modificar a opção padrão do número de classes ## no contexto deste exemplo faz sentido forçar as classes irem até a nota máxima de 100 with(ce003, hist(MediaFinal, br=(0:10)*10)) with(ce003, hist(MediaFinal, br=(0:20)*20)) ## e pode-se definir intervalos de classe desiguais... with(ce003, hist(MediaFinal, br=c(0, 20, 30, 40, 50, 60, 70, 100))) ## ... notando que neste caso as áreas (e nao as alturas!!!) são proporcionais às frequencias ## variáveis numéricas podem ser resumidas por diversos tipos de medidas ## com e sem reprovados por falta: summary(ce003$MediaFinal) summary(ce003a$MediaFinal) var(ce003$MediaFinal, na.rm=T);var(ce003a$MediaFinal) # variância sd(ce003$MediaFinal, na.rm=T);sd(ce003a$MediaFinal) # desvio padrão ## coeficientes de variação 100*sd(ce003$MediaFinal, na.rm=T)/mean(ce003$MediaFinal, na.rm=T) 100*sd(ce003a$MediaFinal, na.rm=T)/mean(ce003a$MediaFinal, na.rm=T) ## par(mfrow=c(2,2)) with(ce003, {hist(MediaFinal, prob=T, xlim=c(0,100), ylim=c(0,0.025), panel.first=lines(density(MediaFinal, na.rm=T)));rug(MediaFinal)}) with(ce003, boxplot(MediaFinal, ylim=c(0,100))) with(ce003, stem(MediaFinal)) with(ce003a, {hist(MediaFinal, prob=T, xlim=c(0,100), ylim=c(0,0.025), panel.first=lines(density(MediaFinal, na.rm=T)));rug(MediaFinal)}) with(ce003a, boxplot(MediaFinal, ylim=c(0,100))) with(ce003a, stem(MediaFinal)) par(mfrow=c(1,1)) ## quartis e quantis with(ce003, fivenum(MediaFinal)) with(ce003a, fivenum(MediaFinal)) with(ce003, quantile(MediaFinal, na.rm=T)) with(ce003a, quantile(MediaFinal, na.rm=T)) with(ce003, quantile(MediaFinal, prob=c(0, 0.1, 0.2, 0.5, 0.8, 0.9, 1), na.rm=T)) with(ce003a, quantile(MediaFinal, prob=c(0, 0.1, 0.2, 0.5, 0.8, 0.9, 1), na.rm=T)) ## ## Análise Bivariadas ## ## Quantitativa vs Qualitativa ## Gráficos relacionando variáveis e comparando grupos par(mfrow=c(1,2)) with(ce003, boxplot(MediaFinal~Turma, ylim=c(0,100))) with(ce003a, boxplot(MediaFinal~Turma, ylim=c(0,100))) ## largura das caixas variando de acordo com os tamanhos de amostra with(ce003, boxplot(MediaFinal~Turma, varwidth=T, ylim=c(0,100))) with(ce003a, boxplot(MediaFinal~Turma, varwidth=T, ylim=c(0,100))) par(mfrow=c(1,1)) ## e resumos numéricos para cada grupo with(ce003, by(MediaFinal,Turma, summary)) with(ce003, by(MediaFinal, Turma, function(x){c(DesvioPadrao=sd(x, na.rm=T), Var=var(x, na.rm=T), CV=100*sd(x, na.rm=T)/mean(x, na.rm=T))})) par(mfrow=c(1,2)) with(ce003, boxplot(MediaFinal~Turma, varwidth=T, ylim=c(0,100))) with(ce003, points(1:2, tapply(MediaFinal, Turma, mean, na.rm=T), col=2)) with(ce003a, boxplot(MediaFinal~Turma, varwidth=T, ylim=c(0,100))) with(ce003a, points(1:2, tapply(MediaFinal, Turma, mean, na.rm=T), col=2)) par(mfrow=c(1,1)) ## Qualitativa vs Qualitativa with(ce003, table(Turma, ResultadoFinal)) with(ce003, addmargins(table(Turma, ResultadoFinal))) ## percentuais gerais, por linha e por coluna with(ce003, prop.table(table(Turma, ResultadoFinal))) with(ce003, prop.table(table(Turma, ResultadoFinal), mar=1)) with(ce003, prop.table(table(Turma, ResultadoFinal), mar=2)) ## visualizações gr/aficas das tabelas plot(with(ce003, prop.table(table(Turma, ResultadoFinal)))) plot(with(ce003, prop.table(table(Turma, ResultadoFinal), mar=1))) plot(with(ce003, prop.table(table(Turma, ResultadoFinal), mar=2))) ## estatística chi^2 de associação (chi2 <- with(ce003,chisq.test(Turma, ResultadoFinal))$stat) ## coeficientes de contingência sqrt(chi2/(chi2+nrow(ce003))) sqrt((chi2/nrow(ce003))/((nlevels(ce003$Turma)-1)*(nlevels(ce003$ResultadoFinal)-1))) ## calculo do chi^2 passo a passo QlQl <- function(var1, var2){ n <- length(var1) tb1 <- table(var1); tb2 <- table(var2) tbRes <- array(0, dim=c(length(tb1), length(tb2), 4), dimnames=list(names(tb1), names(tb2), c("Observado","Esperado","Diferenca", "DQP"))) tbRes[,,"Observado"] <- table(var1, var2) tbRes[,,"Esperado"] <- outer(table(var1), table(var2))/n tbRes[,,"Diferenca"] <- tbRes[,,"Observado"] - tbRes[,,"Esperado"] tbRes[,,"DQP"] <- (tbRes[,,"Diferenca"]^2)/tbRes[,,"Esperado"] chi2 <- sum(tbRes[,,"DQP"]) C <- sqrt(chi2/(chi2+n)) T <- sqrt((chi2/n)/((length(tb1)-1)*((length(tb2)-1)))) return(list(tabelas = tbRes, associacao = c(ChiQuadrado=chi2,C=C,T=T))) } with(ce003, QlQl(Turma, ResultadoFinal)) ## novamente excluindo R-FALTA with(ce003a, table(Turma, ResultadoFinal)) with(ce003a, addmargins(table(Turma, ResultadoFinal))) ## percentuais gerais, por linha e por coluna with(ce003a, prop.table(table(Turma, ResultadoFinal))) with(ce003a, prop.table(table(Turma, ResultadoFinal), mar=1)) with(ce003a, prop.table(table(Turma, ResultadoFinal), mar=2)) ## visualizações graficas das tabelas plot(with(ce003a, prop.table(table(Turma, ResultadoFinal)))) plot(with(ce003a, prop.table(table(Turma, ResultadoFinal), mar=1))) plot(with(ce003a, prop.table(table(Turma, ResultadoFinal), mar=2))) ## estatística chi^2 de associação (chi2 <- with(ce003a,chisq.test(Turma, ResultadoFinal))$stat) ## coeficientes de contingência sqrt(chi2/(chi2+nrow(ce003a))) sqrt((chi2/nrow(ce003a))/((nlevels(ce003a$Turma)-1)*(nlevels(ce003a$ResultadoFinal)-1))) ## quantitativa vs quantitativa names(ce003) ## Relação entre Prova 1 e média final with(ce003, table(cut(Prova1, br=(0:4)*25), cut(MediaFinal, br=(0:4)*25))) with(ce003, plot(Prova1, MediaFinal)) with(ce003, cor(Prova1,MediaFinal, use="pair")) with(ce003, plot(Faltas,MediaFinal)) #with(ce003[complete.cases(ce003),], {plot(Faltas,MediaFinal) ; lines(lowess(MediaFinal ~ Faltas))}) with(ce003, cor(Faltas, MediaFinal, use="pair")) with(ce003, cor(Faltas, MediaFinal, use="pair", method="spearman")) with(ce003, cor(Faltas, MediaFinal, use="pair", method="kendall")) with(ce003, plot(log(Faltas),MediaFinal)) ## Vários pares plot(ce003[,c("Prova1","Prova2","Prova3","MediaFinal")]) cor(ce003[,c("Prova1","Prova2","Prova3","MediaFinal")], use="pair") plot(ce003a[,c("Prova1","Prova2","Prova3","MediaFinal")]) cor(ce003a[,c("Prova1","Prova2","Prova3","MediaFinal")], use="pair")