library(dplyr)
library(ggplot2)
library(plotly)
library(fdth)
library(boot)Relatório de Análise de Dados – EST 128
1 Identificação do grupo
- Disciplina: EST 128 – Pacotes Estatísticos II
- Grupo: 2
- Integrantes: Ana Beatriz Ferreira e Silva, Paula Amano Yoshisato e Raquel de Deus Mendonça
- Base de dados utilizada: Saúde Clínica
2 1. Introdução
A análise estatística de dados é uma ferramenta importante para compreender características de uma população ou fenômeno, permitindo descrever informações, identificar padrões e apoiar a tomada de decisões. Neste trabalho, foi utilizada uma base de dados contendo informações relacionadas a saúde de pacientes, contemplando variáveis demográficas, hábitos de vida e indicadores clínicos, como sexo, faixa etária, atividade física, horas de sono, índice de massa corporal (IMC), pressão sistólica, colesterol HDL, adesão ao tratamento e risco cardiometabólico.
O objetivo deste trabalho é realizar uma análise exploratória e estatística da base de dados, por meio de técnicas descritivas e inferenciais, buscando caracterizar os dados, investigar possíveis relações entre as variáveis e obter conclusões a partir das informações disponíveis.
3 2. Leitura e inspeção inicial da base
# Ajuste o nome do arquivo conforme a base do grupo
dados <- read.csv("grupo2_saude_clinica.csv", stringsAsFactors = FALSE)
head(dados) #visualizar primeiras linhas id_paciente sexo faixa_etaria atividade_fisica horas_sono imc
1 1 M 30-44 Moderada 7.0 29.7
2 2 F 45-60 Moderada 7.8 27.9
3 3 F 18-29 Baixa 8.7 34.8
4 4 F 30-44 Moderada 6.3 22.5
5 5 F 18-29 Moderada 8.0 20.6
6 6 M 18-29 Baixa 6.8 24.1
pressao_sistolica hdl adesao_tratamento risco_cardiometabolico
1 123 47.4 Media Baixo
2 142 42.8 Media Alto
3 149 50.9 Media Alto
4 100 45.2 Media Baixo
5 119 55.8 Alta Baixo
6 126 52.9 Baixa Baixo
dim(dados) #número de linhas e colunas[1] 96 10
names(dados) #nomes das variáveis [1] "id_paciente" "sexo" "faixa_etaria"
[4] "atividade_fisica" "horas_sono" "imc"
[7] "pressao_sistolica" "hdl" "adesao_tratamento"
[10] "risco_cardiometabolico"
str(dados) #estrutura das variáveis'data.frame': 96 obs. of 10 variables:
$ id_paciente : int 1 2 3 4 5 6 7 8 9 10 ...
$ sexo : chr "M" "F" "F" "F" ...
$ faixa_etaria : chr "30-44" "45-60" "18-29" "30-44" ...
$ atividade_fisica : chr "Moderada" "Moderada" "Baixa" "Moderada" ...
$ horas_sono : num 7 7.8 8.7 6.3 8 6.8 6.6 7.8 7.5 4.9 ...
$ imc : num 29.7 27.9 34.8 22.5 20.6 24.1 26.8 28 26 29.8 ...
$ pressao_sistolica : int 123 142 149 100 119 126 118 140 119 135 ...
$ hdl : num 47.4 42.8 50.9 45.2 55.8 52.9 62 55 51.4 57.2 ...
$ adesao_tratamento : chr "Media" "Media" "Media" "Media" ...
$ risco_cardiometabolico: chr "Baixo" "Alto" "Alto" "Baixo" ...
summary(dados) #resumo inicial id_paciente sexo faixa_etaria atividade_fisica
Min. : 1.00 Length:96 Length:96 Length:96
1st Qu.:24.75 Class :character Class :character Class :character
Median :48.50 Mode :character Mode :character Mode :character
Mean :48.50
3rd Qu.:72.25
Max. :96.00
horas_sono imc pressao_sistolica hdl
Min. :4.000 Min. :17.00 Min. : 90.0 Min. :25.00
1st Qu.:6.400 1st Qu.:24.88 1st Qu.:115.0 1st Qu.:45.38
Median :7.050 Median :27.90 Median :124.0 Median :50.55
Mean :7.017 Mean :27.52 Mean :125.5 Mean :51.41
3rd Qu.:7.725 3rd Qu.:29.73 3rd Qu.:136.0 3rd Qu.:57.90
Max. :9.400 Max. :37.00 Max. :159.0 Max. :73.50
adesao_tratamento risco_cardiometabolico
Length:96 Length:96
Class :character Class :character
Mode :character Mode :character
colSums(is.na(dados)) #verificar valores ausentes id_paciente sexo faixa_etaria
0 0 0
atividade_fisica horas_sono imc
0 0 0
pressao_sistolica hdl adesao_tratamento
0 0 0
risco_cardiometabolico
0
sum(duplicated(dados)) #verificar registros duplicados[1] 0
sapply(dados, class) #classe das variáveis id_paciente sexo faixa_etaria
"integer" "character" "character"
atividade_fisica horas_sono imc
"character" "numeric" "numeric"
pressao_sistolica hdl adesao_tratamento
"integer" "numeric" "character"
risco_cardiometabolico
"character"
Inicialmente, a base de dados foi importada para o R usando a função read.csv(). Em seguida, foi realizada uma inspeção inicial com o objetivo de conhecer a estrutura dos dados e verificar possíveis inconsistências antes do início das análises.
A base é composta por 96 observações e 10 variáveis, sendo formada por variáveis qualitativas e quantitativas. A inspeção permitiu identificar nomes das variáveis, seus respectivos tipos de dados e obter um resumo estatístico das variáveis numéricas.
Também foi realizada a verificação da existência de valores ausentes e de registros duplicados. Além disso, foram identificadas as classes de cada variável, etapa importante para definir os procedimentos de preparação dos dados e análise estatísticas mais adequadas.
4 3. Organização e preparação dos dados
# Inserir aqui os procedimentos de preparação dos dados
# Categorias
unique(dados$sexo)[1] "M" "F"
unique(dados$faixa_etaria)[1] "30-44" "45-60" "18-29"
unique(dados$atividade_fisica)[1] "Moderada" "Baixa" "Alta"
unique(dados$adesao_tratamento)[1] "Media" "Alta" "Baixa"
unique(dados$risco_cardiometabolico)[1] "Baixo" "Alto"
# Conversão para fatores
dados$sexo <- factor(dados$sexo)
dados$faixa_etaria <- factor(
dados$faixa_etaria,
levels = c("18-29","30-44","45-60"),
ordered = TRUE
)
dados$atividade_fisica <- factor(
dados$atividade_fisica,
levels = c("Baixa","Moderada","Alta"),
ordered = TRUE
)
dados$adesao_tratamento <- factor(
dados$adesao_tratamento,
levels = c("Baixa","Media","Alta"),
ordered = TRUE
)
dados$risco_cardiometabolico <- factor(
dados$risco_cardiometabolico,
levels = c("Baixo","Alto"),
ordered = TRUE
)
sapply(dados, class)$id_paciente
[1] "integer"
$sexo
[1] "factor"
$faixa_etaria
[1] "ordered" "factor"
$atividade_fisica
[1] "ordered" "factor"
$horas_sono
[1] "numeric"
$imc
[1] "numeric"
$pressao_sistolica
[1] "integer"
$hdl
[1] "numeric"
$adesao_tratamento
[1] "ordered" "factor"
$risco_cardiometabolico
[1] "ordered" "factor"
# Base para análise
dados_analise <- dados
# Conferência final
str(dados_analise)'data.frame': 96 obs. of 10 variables:
$ id_paciente : int 1 2 3 4 5 6 7 8 9 10 ...
$ sexo : Factor w/ 2 levels "F","M": 2 1 1 1 1 2 1 2 1 2 ...
$ faixa_etaria : Ord.factor w/ 3 levels "18-29"<"30-44"<..: 2 3 1 2 1 1 1 2 2 3 ...
$ atividade_fisica : Ord.factor w/ 3 levels "Baixa"<"Moderada"<..: 2 2 1 2 2 1 2 2 1 1 ...
$ horas_sono : num 7 7.8 8.7 6.3 8 6.8 6.6 7.8 7.5 4.9 ...
$ imc : num 29.7 27.9 34.8 22.5 20.6 24.1 26.8 28 26 29.8 ...
$ pressao_sistolica : int 123 142 149 100 119 126 118 140 119 135 ...
$ hdl : num 47.4 42.8 50.9 45.2 55.8 52.9 62 55 51.4 57.2 ...
$ adesao_tratamento : Ord.factor w/ 3 levels "Baixa"<"Media"<..: 2 2 2 2 3 1 3 2 2 3 ...
$ risco_cardiometabolico: Ord.factor w/ 2 levels "Baixo"<"Alto": 1 2 2 1 1 1 1 2 1 1 ...
summary(dados_analise) id_paciente sexo faixa_etaria atividade_fisica horas_sono
Min. : 1.00 F:48 18-29:31 Baixa :29 Min. :4.000
1st Qu.:24.75 M:48 30-44:32 Moderada:48 1st Qu.:6.400
Median :48.50 45-60:33 Alta :19 Median :7.050
Mean :48.50 Mean :7.017
3rd Qu.:72.25 3rd Qu.:7.725
Max. :96.00 Max. :9.400
imc pressao_sistolica hdl adesao_tratamento
Min. :17.00 Min. : 90.0 Min. :25.00 Baixa:19
1st Qu.:24.88 1st Qu.:115.0 1st Qu.:45.38 Media:40
Median :27.90 Median :124.0 Median :50.55 Alta :37
Mean :27.52 Mean :125.5 Mean :51.41
3rd Qu.:29.73 3rd Qu.:136.0 3rd Qu.:57.90
Max. :37.00 Max. :159.0 Max. :73.50
risco_cardiometabolico
Baixo:63
Alto :33
# Salvar base pronta
write.csv(dados_analise,
"dados_preparados.csv",
row.names = FALSE)Após a leitura da base, foi realizada a preparação dos dados para facilitar as análises posteriores.
Conversão das variáveis categóricas para fator: As variáveis sexo, faixa_etaria, atividade_fisica, adesao_tratamento e risco_cardiometabolico foram convertidas para o tipo fator para que o R as reconhecesse como variáveis categóricas, permitindo a realização correta das análises.
Definição da ordem das categorias: Nas variáveis ordinais foi definida a ordem dos níveis, preservando a sequência natural das categorias e facilitando as análises que consideram essa ordenação.
5 4. Análise descritiva univariada
Selecione variáveis relevantes da base e apresente: - tabelas de frequência para variáveis qualitativas; - medidas de posição, dispersão e forma para variáveis quantitativas; - gráficos adequados.
5.1 4.1 Variáveis qualitativas
# Exemplo: tabela de frequência
# dados %>% count(nome_variavel)Interprete os resultados.
5.2 4.2 Variáveis quantitativas
# Exemplo: medidas resumo
# mean(dados$variavel)
# median(dados$variavel)
# sd(dados$variavel)
# IQR(dados$variavel)# Exemplo: gráfico
# ggplot(dados, aes(x = variavel)) +
# geom_histogram(bins = 20)Interprete os resultados.
6 5. Análise descritiva bivariada
Escolha relações relevantes entre duas variáveis e apresente tabelas, gráficos e interpretações.
Sugestões: - qualitativa × qualitativa; - qualitativa × quantitativa; - quantitativa × quantitativa.
# Inserir análises bivariadasInterprete os resultados.
7 6. Procedimento inferencial
Utilizou-se modelo ANOVA (Análise de Variância) para veriifcar se existiam diferenças nas médias dos indicadores de saúde (IMC, pressão arterial sistólica e colesterol HDL) entre os pacientes com distintos níveis de adesão ao tratamento (baixa, média e alta).
7.1 6.1 Formulação do problema
Pergunta: Há diferenças nas médias de IMC, pressão arterial sistólica (PAS) e HDL entre pacientes com níveis diferentes de adesão ao tratamento?
Hipóteses:
Ho: as médias da variável (IMC, PAS ou HDL) são iguais entre os níveis de adesão ao tratamento
HA: pelo menos uma das médias é diferente
A análise de variância é a adequada para comparar médias de três ou mais grupos. Nestas análises adotou-se nível de significância de 5%.
7.2 6.2 Execução
### Procedimento inferencial (ANOVA)
##Visualizar os dados
#IMC
ggplot(dados_analise, aes(x = adesao_tratamento, y = imc, fill = adesao_tratamento)) +
geom_boxplot() +
labs(
title = "IMC por adesão ao tratamento",
x = "Adesão ao tratamento",
y = "IMC (kg/m²)"
) +
theme_bw()#PAS
ggplot(dados_analise, aes(x = adesao_tratamento, y = pressao_sistolica, fill = adesao_tratamento)) +
geom_boxplot() +
labs(
title = "PAS por adesão ao tratamento",
x = "Adesão ao tratamento",
y = "Pressão arterial sistólica (PAS)"
) +
theme_bw()#HDL
ggplot(dados_analise, aes(x = adesao_tratamento, y = hdl, fill = adesao_tratamento)) +
geom_boxplot() +
labs(
title = "HDL por adesão ao tratamento",
x = "Adesão ao tratamento",
y = "HDL (mg/dL)"
) +
theme_bw()##Ajustar modelo ANOVA
#IMC
modelo_anova1 <- aov(imc ~ adesao_tratamento, data = dados_analise)
summary(modelo_anova1) Df Sum Sq Mean Sq F value Pr(>F)
adesao_tratamento 2 36.1 18.06 1.013 0.367
Residuals 93 1658.4 17.83
#PAS
modelo_anova2 <- aov(pressao_sistolica ~ adesao_tratamento, data = dados_analise)
summary(modelo_anova2) Df Sum Sq Mean Sq F value Pr(>F)
adesao_tratamento 2 279 139.5 0.715 0.492
Residuals 93 18155 195.2
#HDL
modelo_anova3 <- aov(hdl ~ adesao_tratamento, data = dados_analise)
summary(modelo_anova3) Df Sum Sq Mean Sq F value Pr(>F)
adesao_tratamento 2 688 344.2 3.4 0.0376 *
Residuals 93 9416 101.2
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Tabela resumo dos modelos ANOVA
resumo_anova <- data.frame(
Variavel = c("IMC", "Pressão arterial sistólica", "HDL"),
F = c(
summary(modelo_anova1)[[1]]$`F value`[1],
summary(modelo_anova2)[[1]]$`F value`[1],
summary(modelo_anova3)[[1]]$`F value`[1]
),
p_valor = c(
summary(modelo_anova1)[[1]]$`Pr(>F)`[1],
summary(modelo_anova2)[[1]]$`Pr(>F)`[1],
summary(modelo_anova3)[[1]]$`Pr(>F)`[1]
)
)
#Arredondar os resultados
resumo_anova$F <- round(resumo_anova$F, 2)
resumo_anova$p_valor <- round(resumo_anova$p_valor, 3)
resumo_anova Variavel F p_valor
1 IMC 1.01 0.367
2 Pressão arterial sistólica 0.71 0.492
3 HDL 3.40 0.038
#Apresentar tabela
library(gt)
gt(resumo_anova) |>
fmt_number(columns = c(F, p_valor), decimals = 3) |>
tab_header(
title = "Resultados da ANOVA")| Resultados da ANOVA | ||
| Variavel | F | p_valor |
|---|---|---|
| IMC | 1.010 | 0.367 |
| Pressão arterial sistólica | 0.710 | 0.492 |
| HDL | 3.400 | 0.038 |
##comparações múltiplas com Tukey
TukeyHSD(modelo_anova3) Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = hdl ~ adesao_tratamento, data = dados_analise)
$adesao_tratamento
diff lwr upr p adj
Media-Baixa 6.9876316 0.3100769 13.665186 0.0380880
Alta-Baixa 6.3553343 -0.4088370 13.119506 0.0701418
Alta-Media -0.6322973 -6.0988400 4.834245 0.9590430
7.3 6.3 Interpretação
Os modelos ANOVA mostraram que não haviam diferenças estatisticamente significativas nas médias de IMC (p = 0,367) e pressão sistólica (p = 0,492), segundo níveis de adesão ao tratamento. Entretanto, foi observada diferença estatisticamente significativa nas médias de HDL segundo à adesão ao tratamento (p = 0,038). Por conseguinte, realizou-se comparações múltiplas com Tukey, que demonstrou que paciente com adesão média apresentaram médias de HDL maiores do que aqueles com baixa adesão (diferença média = 6,99 mg/dL; IC95%: 0,31 a 13,67; p=0,038).
8 7. Simulação numérica ou bootstrap
Aplicou-se bootstrap para estimar a distribuição amostral do HDL.
8.1 7.1 Objetivo da etapa computacional
O bootstrap consiste em realizar sucessivas reamostragens, com reposição, a partir da amostra original, o que permiti avaliar a variabilidade da média e obter uma estimativa de seu erro-padrão e de seu intervalo de confiança. Nesta análise foram realizadas 2.000 reamostragens
8.2 7.2 Código
## Bootstrap da média de HDL
set.seed(123)
medias_boot <- replicate(
2000,
mean(sample(dados_analise$hdl, size = nrow(dados_analise), replace = TRUE))
)
mean(medias_boot)[1] 51.38818
sd(medias_boot)[1] 1.036071
#Resumo
resumo_boot <- data.frame(
Media = mean(medias_boot),
Erro_padrao = sd(medias_boot),
IC95_inf = quantile(medias_boot,0.025),
IC95_sup = quantile(medias_boot,0.975)
)
round(resumo_boot,2) Media Erro_padrao IC95_inf IC95_sup
2.5% 51.39 1.04 49.34 53.39
8.3 7.3 Apresentação dos resultados
##Histograma
boot_df <- data.frame(media_boot = medias_boot)
#Grafico
ggplot(boot_df,
aes(x = media_boot)) +
geom_histogram(
bins = 20,
fill = "steelblue",
color = "white"
) +
labs(
title = "Distribuição bootstrap da média do HDL",
x = "Média bootstrap do HDL (mg/dL)",
y = "Frequência"
) +
theme_bw()A distribuição bootstrap das médias de HDL foi aproximadamente simétrica e centrada na média observada. A média estimada foi de 51,39 mg/dL, com erro-padrão de 1,04 mg/dL e intervalo de confiança de 95% de 49,34 a 53,39 mg/dL, indicando boa precisão da estimativa.
9 8. Conclusão
Apresente uma conclusão final do relatório, destacando: - principais achados; - limitações da análise; - possíveis desdobramentos.
10 9. Referências
Liste as referências utilizadas, quando houver.