Relatório de Análise de Dados – EST 128

Autor

Tiago Resende

library(dplyr)
library(ggplot2)
library(plotly)
library(fdth)
library(boot)

1 Identificação do grupo

  • Disciplina: EST 128 – Pacotes Estatísticos II
  • Integrantes: Tiago Resende
  • Base de dados utilizada: Base Grupo1 - desempenho acadêmico

2 1. Introdução

Temos uma base de dados que apresenta contem informações de 90 estudantes, contendo diversas informações como turma, modalidade e notas. o objetivo se baseia em identificar se o alunos podem ter notas diferentes a depender que caracteristícas como a turma, horas de estudo e frequência nas aulas.

3 2. Leitura e inspeção inicial da base

# Ajuste o nome do arquivo conforme a base do grupo
dados <- read.csv("C:/Users/tiago/Downloads/grupo1_desempenho_academico.csv", stringsAsFactors = FALSE)

head(dados)
  id_estudante turma modalidade horas_estudo_semanais frequencia_pct
1            1     B Presencial                   6.7             88
2            2     C    Hibrida                   9.2             78
3            3     C    Hibrida                  12.6             81
4            4     B    Hibrida                   5.3             91
5            5     A    Hibrida                   9.7             81
6            6     A    Hibrida                  12.9             88
  projetos_concluidos uso_monitoria nota_programacao aprovado
1                   3           Sim              9.7      Sim
2                   3           Nao              9.2      Sim
3                   6           Sim             10.0      Sim
4                   5           Nao              7.9      Sim
5                   1           Nao              8.4      Sim
6                   4           Sim             10.0      Sim
dim(dados)
[1] 90  9
names(dados)
[1] "id_estudante"          "turma"                 "modalidade"           
[4] "horas_estudo_semanais" "frequencia_pct"        "projetos_concluidos"  
[7] "uso_monitoria"         "nota_programacao"      "aprovado"             
str(dados)
'data.frame':   90 obs. of  9 variables:
 $ id_estudante         : int  1 2 3 4 5 6 7 8 9 10 ...
 $ turma                : chr  "B" "C" "C" "B" ...
 $ modalidade           : chr  "Presencial" "Hibrida" "Hibrida" "Hibrida" ...
 $ horas_estudo_semanais: num  6.7 9.2 12.6 5.3 9.7 12.9 4.2 10.8 9.8 12.5 ...
 $ frequencia_pct       : int  88 78 81 91 81 88 86 83 100 92 ...
 $ projetos_concluidos  : int  3 3 6 5 1 4 3 2 1 2 ...
 $ uso_monitoria        : chr  "Sim" "Nao" "Sim" "Nao" ...
 $ nota_programacao     : num  9.7 9.2 10 7.9 8.4 10 7.5 8.6 9 10 ...
 $ aprovado             : chr  "Sim" "Sim" "Sim" "Sim" ...
summary(dados)
  id_estudante         turma        modalidade horas_estudo_semanais
 Min.   : 1.00   Length   :90   Length   :90   Min.   : 3.400       
 1st Qu.:23.25   N.unique : 3   N.unique : 3   1st Qu.: 7.700       
 Median :45.50   N.blank  : 0   N.blank  : 0   Median : 9.900       
 Mean   :45.50   Min.nchar: 1   Min.nchar: 6   Mean   : 9.716       
 3rd Qu.:67.75   Max.nchar: 1   Max.nchar:10   3rd Qu.:11.575       
 Max.   :90.00                                 Max.   :20.000       
 frequencia_pct   projetos_concluidos   uso_monitoria nota_programacao
 Min.   : 61.00   Min.   :0.000       Length   :90    Min.   : 5.700  
 1st Qu.: 82.25   1st Qu.:2.000       N.unique : 2    1st Qu.: 8.700  
 Median : 87.00   Median :3.000       N.blank  : 0    Median : 9.550  
 Mean   : 86.71   Mean   :2.944       Min.nchar: 3    Mean   : 9.146  
 3rd Qu.: 92.00   3rd Qu.:4.000       Max.nchar: 3    3rd Qu.:10.000  
 Max.   :100.00   Max.   :7.000                       Max.   :10.000  
      aprovado 
 Length   :90  
 N.unique : 2  
 N.blank  : 0  
 Min.nchar: 3  
 Max.nchar: 3  
               

A base contém 9 variáveis, cada uma com 90 observações, dessas 9, 3 são compostas por números inteiros, 4 são variáveis qualitativas e as outras duas são compostas por números reais. Os principais cuidados para a realização da analise é entender a natureza de cada variável e como elas se correlacionam entre si e a partir daí escolher metodos adequados de analise e inferência.

4 3. Organização e preparação dos dados

Inicialmente criamos novas variáveis para agrupar as variaveis notas, horas de estudo e presença.

#criando variáveis de faixa para horas de estudo na semana,notas em programação
# e faixa de presença

dados_2 <- dados %>%
  mutate(
    faixa_horas = case_when(
      horas_estudo_semanais < 4 ~ "Baixa",
      horas_estudo_semanais < 7.5 ~ "Média",
       TRUE ~ "Alta"
    ),
    faixa_notas = case_when(
      nota_programacao < 6 ~ "Ruim",
      nota_programacao < 8 ~ "Intermediario",
      TRUE ~ "Alta"
    ),
    faixa_presenca = case_when(
      frequencia_pct < 6 ~ "Infrequente",
    frequencia_pct < 75 ~ "Intermediaria",
    TRUE ~ "Frequente"
    )
  )

Como as variáveis, nota, frequência e horas de estudo tem características continuas, podemos agrupa-las para conduzir a análise.

5 4. Análise descritiva univariada

Estudamos a seguir as variáveis turma, modalidade, monitoria e aprovados, presente na base de dados.

5.1 4.1 Variáveis qualitativas

#Verificando o número de alunos por turma
dados %>%
  count(turma)
  turma  n
1     A 38
2     B 24
3     C 28
#número de alunos por modalidade
dados %>%
  count(modalidade)
  modalidade  n
1    Hibrida 29
2 Presencial 44
3     Remota 17
#número de alunos que usaram ou não monitoria
dados %>%
  count(uso_monitoria)
  uso_monitoria  n
1           Nao 56
2           Sim 34
#número de alunos aprovados ou reprovados
dados %>%
  count(aprovado)
  aprovado  n
1      Nao  1
2      Sim 89

Temos nas três turmas A, B e C, cada uma contem respectivamente 38, 24 e 28 alunos. Nas três modalidades existentes na base a Hibrida tem 29 alunos, a presencial 44 e a remota 17. Dos 90 alunos apenas 34 utilizaram monitoria. Sendo de todos os 90 alunos apenas 1 foi reprovado.

ggplot(dados, aes(x= turma, fill = turma))+
geom_bar(color = "black")+ 
  scale_fill_manual(values = c(
    "A" = "darkturquoise",
    "B" = "darkviolet",
    "C" = "darkseagreen"
  ))+
labs( title = "Distribuição das turmas", 
x = "Turmas", 
y = "Frequência" 
)+ 
theme_minimal()

Podemos notar pelo gráfico acima que a maioria dos alunos fazem parte da turma A, sendo a C em segunda com maior quantidade e a B com menor quantidade de alunos.

ggplot(dados, aes(x = uso_monitoria, fill = uso_monitoria))+
  geom_bar(color = "black")+
  scale_fill_manual(
    name = "Uso de monitoria",
    values = c(
    "Sim" = "chartreuse",
    "Nao" = "brown1"
  ))+
  labs(
    title = "Distribuição do uso de monitoria",
    x = "Uso de monitoria",
    y = "Frequência"
    )+
  theme_minimal()

Nesse gráfico podemos ver a distribuição do uso de monitoria, onde se percebe que a maioria dos alunos não fez uso da monitoria disponivel.

freq_aprovado <- dados %>%
  count(aprovado) %>%
  mutate(prop = n / sum(n),
         percentual = round(100 * prop, 1))
ggplot(freq_aprovado, aes(x = "", y = n, fill = aprovado))+
  geom_col(color = "white")+
  coord_polar(theta = "y")+
  labs(title = "Gráfico de setores de aprovados",
       x = NULL,
       Y = NULL
       )+
  theme_void()

Pelo gráfico acima podemos visualizar como a grande maioria dos alunos conseguiram a aprovação.

ggplot(dados, aes(x = modalidade, fill = modalidade)) +
  geom_bar(color = "black") +
  coord_flip() +
  theme_minimal()

Pelo gráfico de barras acima podemos ver que a modalidade presencial e significamente mais popular que as outras duas, notando que a modalidade hibrida foi mais popular que a remota.

5.2 4.2 Variáveis quantitativas

mean(dados$horas_estudo_semanais) #média de horas de estudo semanais
[1] 9.715556
mean(dados$nota_programacao) #média das notas em programação
[1] 9.145556
mean(dados$projetos_concluidos) #média de projetos
[1] 2.944444
sd(dados$horas_estudo_semanais) #desvio padrão das horas de estudo semanais
[1] 3.029774
sd(dados$nota_programacao) #desvio padrão das notas em programação
[1] 1.024329
sd(dados$projetos_concluidos) #desvio padrão dos projetos concluidos
[1] 1.794881
#distância interquartilica
IQR(dados$horas_estudo_semanais)
[1] 3.875
IQR(dados$nota_programacao)
[1] 1.3
IQR(dados$projetos_concluidos)
[1] 2
max(dados$horas_estudo_semanais)
[1] 20
min(dados$horas_estudo_semanais)
[1] 3.4

A média de horas de estudo semanais é 9,7 horas, enquanto a média de notas em programação foi 9,1 pontos e a média de projetos concluidos por aluno é 3. Os desvios padrões dessas variáveis foram respectivimante 3, 1 e 1,7. Já as distâncias interquartilicas foram 3,9, 1,3 e 2 respectivamente.

fdt(dados$nota_programacao, start = 5, end = 10, h = 1)
ggplot(dados, aes(x = "" ,y = nota_programacao)) +
   geom_boxplot(fill = "gray60",color = "black"
     )+
  labs(
    title = "Boxplot das notas em programação",
    y = "Notas em programação",
    x = " "
  )+
  theme_minimal()

Vemos as notas ficaram concentradas entre aproximadamente 8,5 e 10, com alguns outliers abaixo de 7 e uma mediana das notas em torno de 9,5.

fdt(dados$horas_estudo_semanais, start = 1, end = 20 )
ggplot(dados, aes(x = horas_estudo_semanais))+
  geom_histogram(
    bins=20,
    fill = "darkred",
    color = "white"
  )+
  labs(
    title = "Distribuição das horas de estudo",
    x = "Horas de estudo semanais",
    y = "frequência"
  )+
  theme_minimal()

Podemos ver que a distribuição das horas de estudo semanais se concentram em torno de 10 horas com muito pouco casos acima de 15.

  ggplot(dados, aes(x = projetos_concluidos))+
  geom_bar(fill = "peachpuff", color = "black")+
  labs(
    title = "Distribuição do número de projetos concluidos",
    x = "Número de projetos conluidos",
    y = "Frequência"
  )+theme_minimal()

O número de projetos concluidos se concentra em torno de 1 a 3 projetos. Há poucos estudantes sem projetos ou com um número de projetos igual ou maior que 6, o que indica que a maioria dos alunos realizaram uma quantidade razoável de projetos.

ggplot(dados, aes(x = frequencia_pct))+
  geom_histogram(
    bins = 20,
    fill = "slateblue1",
    color = "white"
  )+
  labs(
    title = "Dsitribuição da frequência",
    x = "Frequência em porcentagem",
    y = "Frequência"
  )+
  theme_minimal()

Conforme vemos a frequência de presença dos alunos se concentra entre 80% e até cerca de 95%, com menor frequência em 100% e abaixo de 75%.

6 5. Análise descritiva bivariada

Selecionamos as variáveis criadas anteriormente para compara-las a variável turma. Após isso comparamos possiveis variaveis que possam impactar a variável nota.

table(dados_2$turma, dados_2$faixa_notas)
   
    Alta Intermediario Ruim
  A   29             8    1
  B   19             5    0
  C   28             0    0

Percebemos que a turma A é a que apresenta a maior quantidade de alunos com nota alta em programação

table(dados_2$turma, dados_2$modalidade)
   
    Hibrida Presencial Remota
  A      14         15      9
  B       6         14      4
  C       9         15      4

Pela tabela acima percebemos que a turma a quantidade de alunos em cada turma apresentava apresenta bastante disversidade nas modalidades existentes.

table(dados_2$turma, dados_2$faixa_horas)
   
    Alta Baixa Média
  A   29     1     8
  B   16     0     8
  C   25     0     3

Percebemos que foi notado que a turma A tem a maior quantidade de alunos que dedicam uma alta quantidade de horas aos estudos e ao mesmo tempo o contém o unico aluno com baixa quantidade de horas de estudos.

ggplot(dados_2, aes(x = faixa_horas, fill = faixa_notas)) +
  geom_bar(position = "dodge") +
  labs(
    title = "Faixa de horas de estudo versus faixa de nota",
    x = "Faixa de horas de estudo",
    y = "Frequência",
    fill = "Faixa de notas"
  ) +
  theme_minimal()

Podemos visualizar que a faixa com altas horas de estudos teve maior maior parte das das altas notas, vemos também que apenas a faixa com uma quantidade média de horas de estudo teve notas com desempenho ruim.

ggplot(dados, aes( x = modalidade, y = nota_programacao,
                   fill = modalidade))+
  geom_boxplot()+
  scale_fill_manual(values = c(
    "Hibrida" = "aquamarine" ,
    "Presencial" = "cadetblue",
    "Remota" = "chocolate2"
  )
  )+
  labs(
    title = "Notas de programação por modalidade",
    x = "Modalidades",
    y = "Notas em Programação"
  )+
  theme_minimal()

Vemos pelo boxplot acima que que a modalidade hibrida apresentou uma mediana maior que as outras duas modalidades, tendo também apresenta a menor variabilidade e amplitude e com dois valores de outliers, onde a modalidade presencial teve uma mediana ainda acima da modalidade hibrida e maior aplitude com 3 valores de outliers, sendo a hibrida a modalidade com maior variabilidade. Embora pelo boxplot mostrou que a variabilidade das notas em todas as modalidades sejam altas ainda assim houve alguns valores relativamente baixos.

ggplot(dados, aes( x = turma,  y = nota_programacao,
                   fill = turma))+
  geom_boxplot()+
  scale_fill_manual(values = c(
    "A" = "lavender",
    "B" =  "khaki2",
    "C" =  "lightcyan"  
  )
  )+
  labs(
    title = "Nota em programação por turma",
    x = "Turmas",
    y = "Notas em programação"
  )+
  theme_minimal()

Analisando o boxplot vemos que a turma A apresenta a maior variabilidade e maior amplitude mais ainda com uma mediana menor que a da turma C que teve uma variabilidade muito menor e a menor amplitude entre as turmas, mas com a maior mediana de todas, sendo a turma B uma variabilidade não com alta assim como sua amplitude, mas a menor mediana de todas as turmas.

7 6. Procedimento inferencial

Iremos analisar a relação entre as variáveis horas de estudo semana, frequência nas aulas e número de projetos concluidos com a variável nota em programação.

7.1 6.1 Formulação do problema

Investigamos se as horas de estudo, número de propetos concluidos e frequência nas aulas pode ter impacto nas notas em programação dos alunos. Além de realizar ANOVA e teste de Tukey para verificar se turma ou modalidade impactam na a nota obtida em programação.

modelo_turma <- aov(nota_programacao ~ turma,
                    data = dados)

summary(modelo_turma)
            Df Sum Sq Mean Sq F value  Pr(>F)   
turma        2  10.35   5.175   5.422 0.00604 **
Residuals   87  83.03   0.954                   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
TukeyHSD(modelo_turma)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = nota_programacao ~ turma, data = dados)

$turma
           diff         lwr       upr     p adj
B-A -0.02214912 -0.62952631 0.5852281 0.9958403
C-A  0.72368421  0.14350628 1.3038621 0.0105128
C-B  0.74583333  0.09783023 1.3938364 0.0199407

Pela ANOVA feita acima vemos que existe dirença entre as turmas. E pelo teste de Tukey vemos que a turma C apresentou média de notas significamente diferente comparado as outras turmas.

modelo <- aov(nota_programacao ~ modalidade, data = dados)

summary(modelo)
            Df Sum Sq Mean Sq F value Pr(>F)
modalidade   2   3.85   1.923   1.868  0.161
Residuals   87  89.54   1.029               

Pela ANOVA vemos que não existe diferença significativa entre as notas obtidas em cada modalidade.

ggplot(dados, aes(x = horas_estudo_semanais, y = nota_programacao))+
  geom_point(color = "cyan", size = 3 , alpha = 0.8 )+
  geom_smooth(method = "lm", se = FALSE, color = "deeppink", linewidth = 1)+
  coord_cartesian(ylim = c(0, 10)) + #
  labs(
    title = "Horas de estudo semanais versus notas em programação",
    x = "Horas de estudo semanais",
    y = "Notas em programação"
  )+
  theme_minimal()
`geom_smooth()` using formula = 'y ~ x'

Percebemos que houve um grande número de alunos com nota máxima em programação, mas percebemos que existe uma forte correlação positiva entre o número de horas de estudo na semana e a nota alcançada em programação, indicando que alunos com mais horas de estudo tendem a tirar maiores notas.

ggplot(dados, aes(x = frequencia_pct, y = nota_programacao))+
  geom_point(color = "saddlebrown", size = 3, alpha = 0.8)+
  geom_smooth(method = "lm", se = F, color = "royalblue")+
  labs(
    title = "Frequência em aulas versus notas em programação",
    x = "Frequência em aulas em porcentagem",
    y = "Nota em programação"
  )+
  theme_minimal()
`geom_smooth()` using formula = 'y ~ x'

Notamos que a frequência em aulas está positivamente correlacionada com a nota em programa, embora não quanto a horas de estudo essa variável impacta o desempenho dos estudantes.

ggplot(dados, aes(x= projetos_concluidos, y = nota_programacao))+
  geom_point(color = "gold", size = 3, alpha = 0.8)+
  geom_smooth(method = "lm", se=F, color = "indianred")+
  labs(
    title = "Número de projetos concluidos versus nota",
    x = "Número de projetos concluidos",
    y = "Nota em programação"
  )+
  theme_minimal()
`geom_smooth()` using formula = 'y ~ x'

O número de projetos concluidos está positivamente correlacionado com as notas obtidas em programação.

7.2 6.3 Interpretação

Percebemos que as três variaveis selecionadas impactam de forma positiva as notas obtidas em programação.

8 7. Simulação numérica ou bootstrap

Será feito um bootstrap para estimar a variabilidade das notas.

8.1 7.1 Objetivo da etapa computacional

O bootstrap da média das notas tem como principal objetivo estimar a variabilidade da média amostral e construir um intervalo de confiança sem precisar assumir que a população segue uma distribuição normal.

8.2 7.2 Código

set.seed(123)

B <- 1000

media_boot <- numeric(B)

for(i in 1:B){
  amostra <- sample(dados$nota_programacao,
                    replace = TRUE)
  
  media_boot[i] <- mean(amostra)
}

8.3 7.3 Apresentação dos resultados

ggplot(data.frame(media_boot),
       aes(x = media_boot))+
  geom_histogram(color="black",
                 fill="lightblue",
                 bins=30)+
  labs(
    title="Distribuição Bootstrap da média das notas",
    x="Média das notas",
    y="Frequência"
  )+
  theme_minimal()

quantile(media_boot,
         c(0.025,0.975))
    2.5%    97.5% 
8.914417 9.335611 

Os resultados indicam que a média populacional para a variável nota em programação está entre 8,9 e 9,3.

9 8. Conclusão

Concluiu-se, a partir da análise dos dados, que as turmas possuem quantidades distintas de alunos, sendo a turma A a mais numerosa, seguida pelas turmas C e B. Também foi observado que as modalidades de ensino estão distribuídas entre as turmas, com predominância da modalidade presencial (44 alunos), seguida da híbrida (29 alunos) e da remota (17 alunos). Em relação ao desempenho, a média das notas em programação foi de aproximadamente 9,1 pontos, sendo observado apenas um aluno reprovado. A análise exploratória indicou que a frequência às aulas, o número de projetos concluídos** e as horas semanais de estudo apresentam associação positiva com as notas obtidas em programação, sugerindo que maiores valores dessas variáveis tendem a estar relacionados a um melhor desempenho acadêmico. Na análise inferencial, a ANOVA mostrou que as médias das notas diferem significativamente entre as turmas, enquanto não foram encontradas diferenças significativas entre as modalidades de ensino. O teste de Tukey revelou que a turma C apresentou média de notas significativamente superior às turmas A e B, não sendo observada diferença significativa entre as turmas A e B. Por fim, o procedimento de bootstrap, realizado com 1000 reamostragens, indicou que a média das notas apresentou baixa variabilidade amostral, reforçando a estabilidade da estimativa obtida e aumentando a confiança nos resultados apresentados ao longo da análise.