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

Autor

Ana Beatriz Ferreira e Silva, Paula Amano Yoshisato e Raquel de Deus Mendonça

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

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 bivariadas

Interprete 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.