Este relatório apresenta análises com R utilizando gráficos e referências.
Exercício 1
1.1 Imagem gerada no R
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 4.0.3 ✔ tibble 3.3.0
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.1.0
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
ggplot(mtcars, aes(x = mpg)) +geom_histogram(bins =10, fill ="lightsteelblue", color ="white") +labs(title ="Distribuição do consumo de combustível (mpg)", x ="Milhas por galão",y ="Frequência" )
Para este trabalho, foi utilizada a base de dados airquality, que já está disponível no próprio R, o que facilita a análise sem precisar importar arquivos externos.
Essa base contém informações sobre a qualidade do ar e condições climáticas em Nova York, incluindo variáveis numéricas como Ozone, Wind, Solar.R e Temp, além da variável Month, que representa os meses do ano e pode ser tratada como categórica.
A variável principal escolhida para análise foi Ozone, pois ela está diretamente relacionada à qualidade do ar e pode ser influenciada por fatores climáticos como temperatura e vento.
Outro ponto importante é que essa base possui valores ausentes em algumas variáveis, o que torna a análise mais realista, já que problemas com dados faltantes são comuns em situações do mundo real.
A expectativa é identificar possíveis relações entre as condições climáticas e os níveis de ozônio, além de observar variações ao longo dos meses do ano.
Exercício 3
Utilizando o pacote gtsummary, foi realizada uma descrição estatística da base de dados airquality.
Essa etapa permite visualizar rapidamente medidas como média, mediana, valores mínimos e máximos, além da presença de dados faltantes.
library(gtsummary)tbl_summary(airquality)
Characteristic
N = 1531
Ozone
32 (18, 64)
Unknown
37
Solar.R
205 (115, 259)
Unknown
7
Wind
9.7 (7.4, 11.5)
Temp
79 (72, 85)
Month
5
31 (20%)
6
30 (20%)
7
31 (20%)
8
31 (20%)
9
30 (20%)
Day
16 (8, 23)
1Median (Q1, Q3); n (%)
A partir da tabela gerada, observa-se que variáveis numéricas como Ozone, Wind, Temp e Solar.R foram resumidas por meio da mediana e dos quartis, permitindo entender a distribuição dos dados.
Também foi possível identificar a presença de valores ausentes em algumas variáveis, como Ozone e Solar.R, o que reforça a necessidade de cuidados no tratamento dos dados.
A variável Month apresenta distribuição equilibrada entre os meses analisados, indicando um conjunto de dados bem distribuídos temporalmente.
Exercício 4
Foi construído um gráfico de calor (heatmap) para analisar a correlação entre a variável de interesse (Ozone) e as demais variáveis numéricas de base airquality.
library(tidyverse)#Remover NAs para calcular correlaçãodados <-na.omit(airquality)#Matriz de correlação apenas com variáveis numéricascor_matriz <-cor(dados[, c("Ozone", "Solar.R", "Wind", "Temp", "Day")])#Transformar em formato longo para ggplotcor_long <-as.data.frame(as.table(cor_matriz))#Heatmapggplot(cor_long, aes(Var1, Var2, fill = Freq)) +geom_tile() +scale_fill_gradient2(low ="blue", mid ="white", high ="red", midpoint =0) +labs(title ="Heatmap de correlação - Airquality",x ="",y ="" ) +theme_minimal()
Exercício 5
5.1 O que é uma distribuição normal
Uma distribuição normal é uma distribuição de probabilidade simétrica em formato de sino, onde a maioria dos valores se concentra em torno da média. Nela, média, mediana e moda são aproximadamente iguais, e a dispersão dos dados segue um padrão previsível.
5.2 Histograma + densidade (3 variáveis)
Foram escolhidas as variáveis Ozone, Wind e Temp por serem numéricas e representarem aspectos importantes da qualidade do ar e condições climáticas.
O número de bins foi definido como 10, pois oferece um equilíbrio entre detalhamento e suavização da distribuição, evitando gráficos muito “quebrados” ou excessivamente suavizados.
library(tidyverse)dados <-na.omit(airquality)#Ozoneggplot(dados, aes(x = Ozone)) +geom_histogram(aes(y =after_stat(density)), bins =10, fill ="skyblue", color ="white") +geom_density(color ="red") +labs(title ="Ozone")
#Windggplot(dados, aes(x = Wind)) +geom_histogram(aes(y =after_stat(density)), bins =10, fill ="lightgreen", color ="white") +geom_density(color ="red") +labs(title ="Wind")
#Tempggplot(dados, aes(x = Temp)) +geom_histogram(aes(y =after_stat(density)), bins =10, fill ="plum", color ="white") +geom_density(color ="red") +labs(title ="Temp")
5.3 Gráfico Q-Q
qqnorm(dados$Ozone, main ="Q-Q Plot Ozone")qqline(dados$Ozone, col ="red")
qqnorm(dados$Wind, main ="Q-Q Plot Wind")qqline(dados$Wind, col ="red")
qqnorm(dados$Temp, main ="Q-Q Plot Temp")qqline(dados$Temp, col ="red")
5.4 Teste de normalidade (Shapiro-Wilk)
shapiro.test(dados$Ozone)
Shapiro-Wilk normality test
data: dados$Ozone
W = 0.87355, p-value = 2.846e-08
shapiro.test(dados$Wind)
Shapiro-Wilk normality test
data: dados$Wind
W = 0.98076, p-value = 0.1099
shapiro.test(dados$Temp)
Shapiro-Wilk normality test
data: dados$Temp
W = 0.98007, p-value = 0.09569
5.5 Conclusão
Com base nos histogramas, gráficos Q-Q e no teste de Shapiro-Wilk, observa-se que as variáveis não seguem perfeitamente uma distribuição normal.
Wind e Temp apresentam distribuições mais próximas da normalidade, enquanto Ozone apresenta maior assimetria e afastamento da curva normal.
Os resultados do teste Shapiro-Wilk reforçam essa conclusão, indicando que algumas variáveis não seguem normalidade estrita, o que é comum em dados reais.
Exercício 6
Neste exercício foram levantadas hipóteses relacionadas à variável de interesse (Ozone) e outras variáveis da base airquality. Para cada hipótese, foram realizados gráficos, estatísticas descritivas e testes estatísticos.
Hipótese 1: Ozone aumenta com a temperarura (Temp)
Gráfico
ggplot(dados, aes(x = Temp, y = Ozone)) +geom_point(color ="plum") +geom_smooth(method ="lm", se =FALSE, color ="red", formula = y ~ x)
Teste
cor.test(dados$Ozone, dados$Temp)
Pearson's product-moment correlation
data: dados$Ozone and dados$Temp
t = 10.192, df = 109, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.5888139 0.7829869
sample estimates:
cor
0.6985414
Hipótese 2: Ozone diminui com o vento (Wind)
Gráfico
ggplot(dados, aes(x = Wind, y = Ozone)) +geom_point(color ="plum") +geom_smooth(method ="lm", se =FALSE, color ="red", formula = y ~ x)
Teste
cor.test(dados$Ozone, dados$Wind)
Pearson's product-moment correlation
data: dados$Ozone and dados$Wind
t = -8.0897, df = 109, p-value = 9.089e-13
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.7170298 -0.4810192
sample estimates:
cor
-0.6124966
Hipótese 3: Ozone varia entre os meses (Month)
Gráfico
ggplot(dados, aes(x =factor(Month), y = Ozone)) +geom_boxplot(fill ="plum")
Teste
tapply(dados$Ozone, dados$Month, summary)
$`5`
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.00 11.00 18.00 24.12 32.50 115.00
$`6`
Min. 1st Qu. Median Mean 3rd Qu. Max.
12.00 20.00 23.00 29.44 37.00 71.00
$`7`
Min. 1st Qu. Median Mean 3rd Qu. Max.
7.00 36.25 60.00 59.12 79.75 135.00
$`8`
Min. 1st Qu. Median Mean 3rd Qu. Max.
9.0 25.5 45.0 60.0 84.5 168.0
$`9`
Min. 1st Qu. Median Mean 3rd Qu. Max.
7.00 16.00 23.00 31.45 36.00 96.00
Hipótese 4: Dias mais quentes têm maior dispersão de Ozone
Gráfico
ggplot(dados, aes(x = Temp, y = Ozone)) +geom_point(color ="plum")
Teste
cor.test(dados$Temp, dados$Ozone)
Pearson's product-moment correlation
data: dados$Temp and dados$Ozone
t = 10.192, df = 109, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.5888139 0.7829869
sample estimates:
cor
0.6985414
Hipótese 5: Relação entre Solar.R e Ozone
Gráfico
ggplot(dados, aes(x = Solar.R, y = Ozone)) +geom_point(color ="plum") +geom_smooth(method ="lm", se =FALSE, color ="red", formula = y ~ x)
Teste
cor.test(dados$Solar.R, dados$Ozone)
Pearson's product-moment correlation
data: dados$Solar.R and dados$Ozone
t = 3.8798, df = 109, p-value = 0.0001793
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.173194 0.502132
sample estimates:
cor
0.3483417
Conclusão
Com base nas análises realizadas, observa-se que a variável Ozone apresenta relação positiva com a temperatura e relação negativa com a velocidade do vento. Além disso, há variações entre os meses do ano, sugerindo comportamento sazonal.
As correlações e testes estatísticos reforçam as relações observadas visualmente nos gráficos, permitindo uma compreensão mais clara dos fatores associados à qualidade do ar.
Exercício 7
A completude indica a proporção de valores não ausentes em cada variável da base.
Variavel Completude
Ozone Ozone 100
Solar.R Solar.R 100
Wind Wind 100
Temp Temp 100
Month Month 100
Day Day 100
Conclusão
As variáveis da base apresentam diferentes níveis de completude. Algumas, como Wind e Temp, possuem quase todos os valores preenchidos, enquanto Ozone apresenta uma quantidade maior de valores ausentes.
Isso é comum em dados reais e mostra a importância de verificar e tratar valores faltantes antes de fazer análises mais avançadas ou modelos estatísticos.
Exercício 8
Foi realizada uma imputação simples dos valores faltantes utilizando a média das variáveis numéricas. Essa abordagem substitui os valores ausentes por um valor representativo da distribuição dos dados.
Após a imputação de valores faltantes, foi possível observar que todas as variáveis da base passaram a apresentar ausência total de dados faltantes. Isso indica que o tratamento foi aplicado corretamente, permitindo que as análises continuem sem perda de informações.
Exercício 9
Foram construídos dois modelos de regressão linear para explicar a variável Ozone. O objetivo é comparar o desempenho dos modelos e selecionar o mais adequado.
Modelo 1 (simples)
modelo1 <-lm(Ozone ~ Temp, data = dados_imputados)summary(modelo1)
Call:
lm(formula = Ozone ~ Temp, data = dados_imputados)
Residuals:
Min 1Q Median 3Q Max
-40.922 -17.459 -0.874 10.444 118.078
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -147.6461 18.7553 -7.872 2.76e-12 ***
Temp 2.4391 0.2393 10.192 < 2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 23.92 on 109 degrees of freedom
Multiple R-squared: 0.488, Adjusted R-squared: 0.4833
F-statistic: 103.9 on 1 and 109 DF, p-value: < 2.2e-16
Call:
lm(formula = Ozone ~ Temp + Wind + Solar.R, data = dados_imputados)
Residuals:
Min 1Q Median 3Q Max
-40.485 -14.219 -3.551 10.097 95.619
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -64.34208 23.05472 -2.791 0.00623 **
Temp 1.65209 0.25353 6.516 2.42e-09 ***
Wind -3.33359 0.65441 -5.094 1.52e-06 ***
Solar.R 0.05982 0.02319 2.580 0.01124 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 21.18 on 107 degrees of freedom
Multiple R-squared: 0.6059, Adjusted R-squared: 0.5948
F-statistic: 54.83 on 3 and 107 DF, p-value: < 2.2e-16
Comparação dos modelos
O critério utilizado para comparação foi o R² ajustado, que indica a proporção da variabilidade explicada pelo modelo penalizando variáveis irrelevantes.
Escolha do melhor modelo
O modelo escolhido foi o Modelo 2, pois apresentou melhor capacidade de explicação da variável Ozone.
Teste do modelo final
par(mfrow =c(2,2))plot(modelo2)
Conclusão
O modelo final indica que variáveis como Temp, Wind e Solar.R têm influência na variável Ozone, mostrando a relação entre condições climáticas e qualidade do ar.
Exercício 10
Este relatório está disponível no RPubs no seguinte endereço: