library(tidyverse)
── Attaching core tidyverse packages ──────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.3 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.0
✔ ggplot2 3.4.3 ✔ tibble 3.2.1
✔ lubridate 1.9.2 ✔ tidyr 1.3.0
✔ purrr 1.0.2 ── Conflicts ────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
As funcoes filter() e lag() do dplyr apresentam um conflito com as funcoes do mesmo nome no stats. Devo instalar um pacote que tem que resolve conflitos entre funcoes que estao em mais de um pacote.
library(conflicted)
conflict_prefer("filter", "dplyr")
[conflicted] Will prefer dplyr::filter over any other package.
conflict_prefer("lag", "dplyr")
[conflicted] Will prefer dplyr::lag over any other package.
O codigo acima da prioridade ao dplyr nas funcoes filter e dplyr
library(stats)
library(janitor) #
library(sgeostat)
library(mvoutlier)
library(summarytools)
escola <- read_csv("School_Attendance_by_Student_Group.csv", show_col_types = FALSE) |>
janitor::clean_names()
head(escola)
str(escola)
spc_tbl_ [2,019 × 12] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
$ district_code : chr [1:2019] "00000CT" "00000CT" "00000CT" "00000CT" ...
$ district_name : chr [1:2019] "Connecticut" "Connecticut" "Connecticut" "Connecticut" ...
$ category : chr [1:2019] NA "Homelessness" "Students With Disabilities" "Free/Reduced Lunch" ...
$ student_group : chr [1:2019] "All Students" "Students Experiencing Homelessness" "Students With Disabilities" "Free Meal Eligible" ...
$ x2021_2022_student_count_year_to_date : num [1:2019] 500285 1814 78417 168984 29905 ...
$ x2021_2022_attendance_rate_year_to_date: num [1:2019] 0.917 0.835 0.89 0.885 0.918 ...
$ x2020_2021_student_count : num [1:2019] 496092 1735 76487 176225 30886 ...
$ x2020_2021_attendance_rate : num [1:2019] 0.929 0.816 0.895 0.886 0.93 ...
$ x2019_2020_student_count : num [1:2019] 508346 3916 80365 193706 27507 ...
$ x2019_2020_attendance_rate : num [1:2019] 0.948 0.888 0.928 0.931 0.952 ...
$ reporting_period : chr [1:2019] "June 2022" "June 2022" "June 2022" "June 2022" ...
$ date_update : chr [1:2019] "07/22/2022" "07/22/2022" "07/22/2022" "07/22/2022" ...
- attr(*, "spec")=
.. cols(
.. `District code` = col_character(),
.. `District name` = col_character(),
.. Category = col_character(),
.. `Student group` = col_character(),
.. `2021-2022 student count - year to date` = col_double(),
.. `2021-2022 attendance rate - year to date` = col_double(),
.. `2020-2021 student count` = col_double(),
.. `2020-2021 attendance rate` = col_double(),
.. `2019-2020 student count` = col_double(),
.. `2019-2020 attendance rate` = col_double(),
.. `Reporting period` = col_character(),
.. `Date update` = col_character()
.. )
- attr(*, "problems")=<externalptr>
escola_sel <- escola |>
select(district_name, category, student_group, x2021_2022_student_count_year_to_date, x2021_2022_attendance_rate_year_to_date, x2021_2022_attendance_rate_year_to_date)
head(escola_sel)
NA
O dataset original te varias variaveis, decidi reduzir as variaveis para poder facilitar as minhas analises
str(escola_2021_2022) # Verificar a estrutura dos dados
tibble [1,818 × 5] (S3: tbl_df/tbl/data.frame)
$ nome_distrito : chr [1:1818] "Connecticut" "Connecticut" "Connecticut" "Connecticut" ...
$ categoria : chr [1:1818] "Homelessness" "Students With Disabilities" "Free/Reduced Lunch" "Free/Reduced Lunch" ...
$ grupo_estudante : chr [1:1818] "Students Experiencing Homelessness" "Students With Disabilities" "Free Meal Eligible" "Reduced Price Meal Eligible" ...
$ contagem_anual_estudantes: num [1:1818] 1814 78417 168984 29905 198889 ...
$ taxa_assiduidade : num [1:1818] 0.835 0.89 0.885 0.918 0.89 ...
- attr(*, "na.action")= 'omit' Named int [1:201] 1 14 20 32 41 53 59 71 78 90 ...
..- attr(*, "names")= chr [1:201] "1" "14" "20" "32" ...
escola_2021_2022 |>
dplyr::distinct() # Verificar linhas duplicadas
escola_2021_2022 |>
base::is.na() |> # Verificar a presenca de NA
base::data.frame() |>
head()
escola_2021_2022 |>
summarytools::descr() |> # Resumo estatistico
base::data.frame() |>
head(20)
NA
NA
escola_clean <- escola_2021_2022 |>
na.omit() |> # remocao de NA
janitor::clean_names() |> # Padronizar os nomes das colunas
dplyr::mutate(categoria = factor(categoria)) |>
dplyr::mutate(nome_distrito=factor(nome_distrito))
head(escola_clean)
NA
agregado_contagem <- escola_clean %>%
group_by(categoria) %>%
summarise(total_categoria = sum(contagem_anual_estudantes))
agregado_contagem
options(repr.plot.width = 8, repr.plot.height = 6)
ggplot(agregado_contagem, aes(x = categoria, y = total_categoria, fill = categoria)) +
geom_bar(stat = "identity") +
labs(x = "Categoria", y = "Total de Estudantes", title = "Total de Estudantes por Categoria")
library(ggplot2)
# Criar o gráfico de barras horizontal com cores
ggplot(agregado_contagem, aes(x = total_categoria, y = categoria, fill = categoria)) +
geom_bar(stat = "identity") +
scale_fill_viridis_d(option = "D") + # Aplicar as cores manualmente
labs(title = "Total de Estudantes por Categoria",
x = "Total de Estudantes",
y = "Categoria") +
theme_minimal()
NA
NA
Nesta análise, investigamos o impacto das categorias socioeconômicas e demográficas, incluindo ‘English Learner’, ‘Free/Reduced Lunch’, ‘Homelessness’, ‘Race/Ethnicity’ e ‘Students with Disabilities’, na taxa de assiduidade dos alunos de uma escola secundária. Nosso objetivo é identificar possíveis fatores que afetam a assiduidade dos alunos, fornecendo insights valiosos para aprimorar as políticas educacionais e programas de suporte. A análise combina métodos descritivos e estatísticos para explorar a relação entre essas categorias e a taxa de assiduidade, buscando entender como esses fatores podem influenciar o engajamento dos alunos com a escola.
Utilizarei métodos estatísticos, como ANOVA, regressão linear ou regressão logística, para avaliar a relação entre as categorias e a taxa de assiduidade.
ANOVA
Pressupostos da ANOVA
Analise de Normalidade
Hipótese nula (H0): Os dados seguem uma distribuição normal. (P-value ≥ 0.5)
Hipótese alternativa (H1): Os dados não seguem uma distribuição normal. (P-value < 0.5)
# Teste de Shapiro Wilk
shapiro_asseduidade <- stats::shapiro.test(escola_clean$taxa_assiduidade)
shapiro_asseduidade
Shapiro-Wilk normality test
data: escola_clean$taxa_assiduidade
W = 0.88566, p-value < 2.2e-16
O teste de normalidade de Shapiro-Wilk para a variável
taxa_assiduidade resultou em um valor de
estatística de teste (W) de aproximadamente 0.886 e um valor p muito
pequeno (menor que 2.2e-16). Isso indica que há evidências
estatisticamente significativas para rejeitar a hipótese nula de que os
dados seguem uma distribuição normal. Ou seja, a
taxa_assiduidade não segue uma
distribuição normal.
ggplot(escola_clean, aes(x = taxa_assiduidade)) + geom_histogram(bins = 20,
fill = "skyblue",
color = "black") + ggtitle("Distribuição da taxa de asseduidade")
A distribuição assimétrica e concentrada à direita dos seus dados sugere que eles não seguem uma distribuição normal, que é caracterizada por uma forma de sino simétrica.