| title: “Lista de Exercicios II” |
| author: “Leonardo Istamilo Silva Ferreira.” |
| date: “2025-03-23” |
| output: |
| html_document: default |
#importando os dados:
dados <- read.table("C:/Users/Leonardo/Documents/RStudio/Lista II/Dados_Funcionarios.csv", header = TRUE, sep = ",", dec = ".")
# Mostrando as seis primeira linhas
head(dados)
## Funcionario Est.civil Inst Filhos Salario Anos Meses Regiao
## 1 1 solteiro 1o Grau NA 4.00 26 3 interior
## 2 2 casado 1o Grau 1 4.56 32 10 capital
## 3 3 casado 1o Grau 2 5.25 36 5 capital
## 4 4 solteiro 2o Grau NA 5.73 20 10 outro
## 5 5 solteiro 1o Grau NA 6.26 40 7 outro
## 6 6 casado 1o Grau 0 6.66 28 0 interior
# Calculando Frequencia Absoluta e Relativa
freq_abs <- table(dados$Est.civil)
freq_rel <- prop.table(freq_abs);
# Criando a tabela
library(gt)
tabela_freq <- data.frame(
Estado_Civil = names(freq_abs),
Frequencia_Absoluta = as.vector(freq_abs),
Frequencia_Relativa = as.vector(freq_rel)
)
# Criar a linha de total
total_linha <- data.frame(
Estado_Civil = "Total",
Frequencia_Absoluta = sum(tabela_freq$Frequencia_Absoluta),
Frequencia_Relativa = sum(tabela_freq$Frequencia_Relativa)
)
tabela_freq_com_total <- rbind(tabela_freq, total_linha)
# Mostrando a tabela com Frequencia Absoluta e relativa
tabela_freq_com_total %>%
gt() %>%
cols_label(
`Estado_Civil` = "Estado Civil ",
`Frequencia_Absoluta` = " Frequencia Absoluta ",
`Frequencia_Relativa` = " Frequencia Relativa",
) %>%
fmt_number(
columns = c(`Frequencia_Relativa`),
decimals = 4
) %>%
tab_style(
style = list(
cell_fill(color = "#f0f0f0"),
cell_text(weight = "bold")
),
locations = cells_body(
rows = nrow(tabela_freq_com_total)
)
)%>%
tab_options(
table.font.size = "14px",
column_labels.font.weight = "bold",
table.width = "80%"
)
| Estado Civil | Frequencia Absoluta | Frequencia Relativa |
|---|---|---|
| casado | 20 | 0.5556 |
| solteiro | 16 | 0.4444 |
| Total | 36 | 1.0000 |
library(kableExtra)
# Mostrando gráfico de barras
barplot(freq_abs,
main = "Distribuição por Estado Civil",
xlab = "Estado Civil",
ylab = "ni",
col = c("lightblue", "lightgreen"))
# Mostrando gráfico de pizza (setores)
porcentagens <- paste0(round(freq_rel*100, 1), "%")
pie(freq_abs,
main = "Distribuição por Estado Civil",
col = c("lightblue", "lightgreen"),
labels = paste(porcentagens),
cex = 0.8,
border = "white",
init.angle = 90
)
legend("topright",
legend = names(freq_abs),
fill = c("lightblue", "lightgreen"),
box.lty = 0)
# Calculando Frequencia Absoluta e Relativa
freq_abs_inst <- table(dados$Inst)
freq_rel_inst <- prop.table(freq_abs_inst)
# Criando a tabela
tabela_inst <- data.frame(
Grau_Instrucao = names(freq_abs_inst),
Frequencia_Absoluta = as.vector(freq_abs_inst),
Frequencia_Relativa = as.vector(freq_rel_inst)
)
# Criar a linha de total
total_linha <- data.frame(
Grau_Instrucao = "Total",
Frequencia_Absoluta = sum(tabela_inst$Frequencia_Absoluta),
Frequencia_Relativa = sum(tabela_inst$Frequencia_Relativa)
)
# Concatenar com a tabela original
tabela_inst_com_total <- rbind(tabela_inst, total_linha)
# Mostrar a tabela formatada
tabela_inst_com_total %>%
gt() %>%
cols_label(
Grau_Instrucao = "Grau de Instrução ",
Frequencia_Absoluta = " Frequência Absoluta ",
Frequencia_Relativa = " Frequência Relativa "
) %>%
fmt_number(
columns = c(Frequencia_Relativa),
decimals = 4
) %>%
tab_style(
style = list(
cell_fill(color = "#f0f0f0"),
cell_text(weight = "bold")
),
locations = cells_body(
rows = nrow(tabela_inst_com_total)
)
) %>%
tab_options(
table.font.size = "14px",
column_labels.font.weight = "bold",
table.width = "80%"
)
| Grau de Instrução | Frequência Absoluta | Frequência Relativa |
|---|---|---|
| 1o Grau | 12 | 0.3333 |
| 2o Grau | 18 | 0.5000 |
| Superior | 6 | 0.1667 |
| Total | 36 | 1.0000 |
# Mostrar gráfico de barras
barplot(freq_abs_inst,
main = "Distribuição por Grau de Instrução",
xlab = "Grau de Instrução",
ylab = "ni",
col = rainbow(length(freq_abs_inst)))
# Mostrar gráfico de pizza
porcentagens <- paste0(round(freq_rel_inst*100, 1), "%")
pie(freq_abs_inst,
main = "Distribuição por Grau de Instrução",
col = c("lightblue", "lightgreen", "salmon"),
labels = (porcentagens),
cex = 0.8,
border = "white",
init.angle = 90)
legend("topright",
legend = names(freq_abs_inst),
fill = c("lightblue", "lightgreen", "salmon"),
box.lty = 0)
dados$Filhos[is.na(dados$Filhos)] <- 0 #Substitui NA por 0 na coluna Filhos
# Calculando as frequências absoluta, relativa e acumulada
freq_abs_filhos = table(dados$Filhos)
freq_rel_filhos = prop.table((freq_abs_filhos))
freq_rel_acum_filhos <- cumsum(freq_rel_filhos)
# criando a tabela
tabela_filhos <- data.frame(
n_filhos = as.numeric(names(freq_abs_filhos)),
freq_abs_filhos = as.vector(freq_abs_filhos),
freq_rel_filhos = as.vector(freq_rel_filhos),
freq_rel_acum_filhos = as.vector(freq_rel_acum_filhos)
)
# Criar a linha de total
total_linha <- data.frame(
n_filhos = "Total",
freq_abs_filhos = sum(tabela_filhos$freq_abs_filhos),
freq_rel_filhos = sum(tabela_filhos$freq_rel_filhos),
freq_rel_acum_filhos = NA
)
# Concatenar a linha de total na tabela original
tabela_filhos_com_total <- rbind(tabela_filhos, total_linha)
# Mostrar a tabela formatada
tabela_filhos_com_total %>%
gt() %>%
cols_label(
n_filhos = "Número de Filhos",
freq_abs_filhos = "Frequência Absoluta",
freq_rel_filhos = "Frequência Relativa",
freq_rel_acum_filhos = "Frequência Relativa Acumulada"
) %>%
fmt_number(
columns = c(freq_rel_filhos, freq_rel_acum_filhos),
decimals = 4
) %>%
tab_style(
style = list(
cell_fill(color = "#f0f0f0"),
cell_text(weight = "bold")
),
locations = cells_body(
rows = nrow(tabela_filhos_com_total)
)
)%>%
tab_options(
table.font.size = "14px",
column_labels.font.weight = "bold",
table.width = "90%"
)
| Número de Filhos | Frequência Absoluta | Frequência Relativa | Frequência Relativa Acumulada |
|---|---|---|---|
| 0 | 20 | 0.5556 | 0.5556 |
| 1 | 5 | 0.1389 | 0.6944 |
| 2 | 7 | 0.1944 | 0.8889 |
| 3 | 3 | 0.0833 | 0.9722 |
| 5 | 1 | 0.0278 | 1.0000 |
| Total | 36 | 1.0000 | NA |
barplot(freq_rel_filhos,
main = "Distribuição do Número de Filhos - Frequência Relativa",
xlab = "Número de Filhos",
ylab = "fi",
col = "skyblue",
ylim = c(0, max(freq_rel_filhos) * 1.1))
plot(names(freq_rel_acum_filhos), freq_rel_acum_filhos,
type = "b",
main = "Distribuição do Número de Filhos - Frequência Relativa Acumulada",
xlab = "Número de Filhos",
ylab = "Fi",
pch = 19,
col = "red",
xaxt = "n")
axis(1, at = names(freq_rel_acum_filhos))
grid()
# Verificar valores máximo e mínimo
salario_min <- min(dados$Salario)
salario_max <- max(dados$Salario)
amplitude_total <- salario_max - salario_min
# Determinar número de classes (Regra de Sturges)
n_intervalos <- ceiling(log2(nrow(dados)) + 1)
# Calcular largura das classes
amplitude_intervalos <- amplitude_total / n_intervalos
# Sugestão de intervalos de classe
classes <- seq(from = salario_min,
to = salario_max + amplitude_intervalos,
by = amplitude_intervalos)
Salário mínimo: 4
Salário máximo: 23.3
Amplitude total: 19.3
Número de intervalos (Regra de Sturges): 7
Amplitude de cada intervalo: 2.76
4, 6.76, 9.51, 12.27, 15.03, 17.79, 20.54, 23.3, 26.06
# Criar histograma com intervalos calculadas
hist(dados$Salario,
breaks = classes, # Usando os intervalos calculados
main = "Distribuição de Salários dos Funcionários",
xlab = "Salário",
ylab = "ni",
col = "steelblue",
border = "white",
right = FALSE,
xaxt = "n")
axis(1, at = round(classes, 2), las = 2, cex.axis = 0.8)
grid(nx = NA, ny = NULL, lty = 2, col = "gray")
tab_contingencia <- table(dados$Est.civil, dados$Inst)
knitr::kable(tab_contingencia,
caption = "Tabela de Contingência: Estado Civil × Grau de Instrução",
col.names = c("1º Grau", "2º Grau", "Superior"))
| 1º Grau | 2º Grau | Superior | |
|---|---|---|---|
| casado | 5 | 12 | 3 |
| solteiro | 7 | 6 | 3 |
library(ggplot2)
ggplot(dados, aes(x = Inst, fill = Est.civil)) +
geom_bar(position = "dodge", alpha = 0.8) +
labs(title = "Distribuição por Grau de Instrução e Estado Civil",
x = "Grau de Instrução",
fill = "Estado Civil") +
scale_fill_manual(values = c("casado" = "#1f77b4", "solteiro" = "#ff7f0e")) +
theme_minimal()
ggplot(dados, aes(x = Inst, y = Salario, fill = Inst)) +
geom_boxplot() +
labs(title = "Distribuição Salarial por Grau de Instrução",
x = "Grau de Instrução",
y = "Salário") +
scale_fill_brewer(palette = "Pastel1") +
theme(legend.position = "none")
suppressPackageStartupMessages({
library(dplyr)
})
library(dplyr)
dados %>%
group_by(Inst) %>%
summarise(
Média = mean(Salario, na.rm = TRUE),
`Desvio Padrão` = sd(Salario, na.rm = TRUE),
.groups = 'drop'
) %>%
knitr::kable(digits = 2)
| Inst | Média | Desvio Padrão |
|---|---|---|
| 1o Grau | 7.84 | 2.96 |
| 2o Grau | 11.53 | 3.72 |
| Superior | 16.48 | 4.50 |
dados <- dados %>%
mutate(Idade = Anos + Meses/12)
head(dados) # Mostrando as 6 primeiras linhas da base de dados
## Funcionario Est.civil Inst Filhos Salario Anos Meses Regiao Idade
## 1 1 solteiro 1o Grau 0 4.00 26 3 interior 26.25000
## 2 2 casado 1o Grau 1 4.56 32 10 capital 32.83333
## 3 3 casado 1o Grau 2 5.25 36 5 capital 36.41667
## 4 4 solteiro 2o Grau 0 5.73 20 10 outro 20.83333
## 5 5 solteiro 1o Grau 0 6.26 40 7 outro 40.58333
## 6 6 casado 1o Grau 0 6.66 28 0 interior 28.00000
ggplot(dados, aes(x = Idade, y = Salario)) +
geom_point(color = "#3498db", size = 3, alpha = 0.7) +
geom_smooth(method = "lm", color = "#e74c3c", se = FALSE) +
labs(
title = "Relação entre Salário e Idade",
subtitle = "Dados dos Funcionários",
x = "Idade (Anos)",
y = "Salário"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold"),
axis.title = element_text(size = 12),
panel.grid.minor = element_blank()
) +
scale_y_continuous(labels = scales::number_format(big.mark = ".", decimal.mark = ","))
## `geom_smooth()` using formula = 'y ~ x'
correlacao <- cor(dados$Salario, dados$Idade, use = "complete.obs")
cat("Coeficiente de correlação entre Salário e Idade:", round(correlacao, 3))
## Coeficiente de correlação entre Salário e Idade: 0.365
# Cálculo das estatísticas básicas
salario_stats <- dados %>%
summarise(
Média = mean(Salario, na.rm = TRUE),
Variância = var(Salario, na.rm = TRUE),
Desvio_Padrão = sd(Salario, na.rm = TRUE),
Mediana = median(Salario, na.rm = TRUE),
Mínimo = min(Salario, na.rm = TRUE),
Máximo = max(Salario, na.rm = TRUE)
)
#Cálculo dos quartis (com a correção)
quartis <- quantile(dados$Salario, probs = c(0.25, 0.5, 0.75), na.rm = TRUE)
quartis_df <- data.frame(
Quartil = c("1º Quartil (25%)", "Mediana (50%)", "3º Quartil (75%)"),
Valor = as.numeric(quartis)
)
# Tabela de estatísticas básicas
salario_stats %>%
gt() %>%
fmt_number(decimals = 2) %>%
tab_header(title = "Estatísticas Descritivas do Salário") %>%
cols_label(
Média = "Média",
Variância = "Variância",
Desvio_Padrão = "Desvio Padrão",
Mediana = "Mediana",
Mínimo = "Mínimo",
Máximo = "Máximo"
)%>%
tab_options(
table.font.size = "14px",
column_labels.font.weight = "bold",
table.width = "80%"
)
| Estatísticas Descritivas do Salário | |||||
| Média | Variância | Desvio Padrão | Mediana | Mínimo | Máximo |
|---|---|---|---|---|---|
| 11.12 | 21.04 | 4.59 | 10.16 | 4.00 | 23.30 |
# Tabela de quartis
quartis_df %>%
gt() %>%
fmt_number(columns = "Valor", decimals = 2) %>%
tab_header(title = "Quartis do Salário") %>%
cols_label(
Quartil = "Quartil",
Valor = "Valor"
)%>%
tab_options(
table.font.size = "14px",
column_labels.font.weight = "bold",
table.width = "60%"
)
| Quartis do Salário | |
| Quartil | Valor |
|---|---|
| 1º Quartil (25%) | 7.55 |
| Mediana (50%) | 10.16 |
| 3º Quartil (75%) | 14.06 |