Introdução

Problema de Pesquisa

O Acidente Vascular Cerebral (AVC), também conhecido como derrame cerebral, constitui uma das mais graves emergências médicas e representa um desafio crítico para a saúde pública global. De acordo com a Organização Mundial da Saúde (OMS), o AVC é a segunda principal causa de morte no mundo, sendo responsável por aproximadamente 11% de todos os óbitos anuais. No Brasil, dados da Sociedade Brasileira de AVC (SOBRAVC) reforçam essa realidade, apontando o AVC como a segunda maior causa de morte e a principal causa de incapacidade funcional no país.

Diversos fatores de risco estão associados à ocorrência do AVC, incluindo hipertensão arterial, diabetes mellitus, dislipidemia, tabagismo, sedentarismo, consumo excessivo de álcool e histórico familiar da doença. Embora possa acometer indivíduos de todas as faixas etárias, a incidência do AVC aumenta significativamente após os 65 anos, especialmente em pessoas com histórico de doenças cardiovasculares.

As consequências do AVC são frequentemente devastadoras, tanto para os indivíduos afetados quanto para seus familiares e para o sistema de saúde. Estima-se que cerca de 70% dos pacientes que sofrem AVC não retornam ao trabalho, e 50% tornam-se dependentes de outras pessoas para realizar atividades básicas do cotidiano, gerando graves impactos socioeconômicos e sobrecarga nos serviços públicos de saúde.

O tempo é um fator decisivo no prognóstico do paciente. A probabilidade de recuperação completa é consideravelmente maior quando o tratamento é iniciado nas primeiras três horas após o início dos sintomas. Nesse intervalo, o uso de medicações trombolíticas pode reverter o bloqueio do fluxo sanguíneo cerebral, reduzindo o risco de sequelas neurológicas irreversíveis.

Portanto, o diagnóstico precoce e preciso é fundamental para que medidas terapêuticas eficazes sejam aplicadas com agilidade. Para isso, é necessário que as equipes médicas estejam capacitadas a reconhecer rapidamente os sinais clássicos da doença, como fraqueza ou formigamento súbito em um lado do corpo, dificuldade para falar ou compreender a fala, desvio da boca e perda súbita de visão.

Nesse contexto, a análise de dados clínicos e demográficos surge como uma ferramenta poderosa para auxiliar na prevenção e no diagnóstico precoce do AVC. O uso de bases de dados como o Stroke Prediction Dataset oferece uma oportunidade valiosa para a identificação de padrões e correlações entre variáveis de saúde e a ocorrência de AVCs. A partir da aplicação de técnicas de inteligência artificial e aprendizado de máquina, é possível desenvolver modelos preditivos capazes de antecipar o risco individual de AVC com maior precisão.

Essa abordagem pode ser aplicada em diferentes frentes:

  • Educação e prevenção: Auxiliar na conscientização da população sobre os principais fatores de risco, incentivando a adoção de hábitos saudáveis e a realização de exames preventivos;
  • Apoio clínico: Apoiar profissionais da saúde na identificação precoce de pacientes em grupos de risco, promovendo intervenções personalizadas e preventivas;
  • Agilidade no diagnóstico: Contribuir para otimizar o processo diagnóstico, reduzindo o tempo de resposta médica e aumentando a taxa de sucesso nos tratamentos de urgência.

Em suma, o uso inteligente e ético de dados pode desempenhar um papel crucial na redução da mortalidade e morbidade por AVC, transformando a maneira como a medicina preventiva é conduzida e ampliando a capacidade de resposta dos sistemas de saúde.

Dataset

O presente projeto tem como objetivo a análise de dados relacionados à ocorrência de AVC (Acidente Vascular Cerebral), utilizando o dataset intitulado “Stroke Prediction Dataset”, disponível na plataforma Kaggle. O dataset contém 5.110 registros de pacientes e está estruturado com 12 variáveis que abrangem informações demográficas, comportamentais e clínicas.

O conjunto de dados foi publicado por Federico Soriano com a finalidade de apoiar a construção e validação de modelos de machine learning que visam a prevenção precoce do AVC, uma condição médica grave e uma das principais causas de morte e incapacidade em escala global.

Link do Dataset

Pacotes Necessários

Os pacotes a seguir são necessários para a execução do código que você verá nesse projeto. Sem eles, o código aqui demonstrado não será executado com sucesso.

Pacotes Utilização
library(rmarkdown) Utilizado na conversão de arquivo em R em diversos formatos
library(rmdformats) Customização do template gerado pelo rmarkdown
library(knitr) Para geração de tabelas
library(kableExtra) Para manipular estilos de tabela de forma fácil.
library(dplyr) Para manipulação avançada dos DataFrames
library(readr) Para manipular arquivos
library(viridis) Para seleção de paleta de cores utilizada nos gráficos
library(ggplot2) Para visualização de gráficos

Preparação dos Dados

Nessa seção você encontrará com detalhes as operações que foram realizadas para normalizar o dataset.

Carregamento dos Dados

Como foi descrito na Introdução, os dados aqui utilizados foram adquiridos juntos ao Kaggle e consistem de processos relacionados a Acidente Vascular Cerebral.

Link para download

Leitura do arquivo

Nesta etapa, foi realizada a importação do dataset “Stroke Prediction Dataset”, que contém informações clínicas e demográficas de pacientes. Por ser necessário estar logado no Kaggle para realizar o download, o arquivo CSV foi obtido previamente e salvo localmente.

Em seguida, foi feita uma leitura inicial dos dados com o objetivo de compreender sua estrutura, tipos de variáveis e verificar os primeiros registros. Essa análise é essencial para o planejamento das etapas seguintes, como tratamento de dados, análise exploratória e modelagem.

# Leitura dos dados
dados <- read_csv("C:\\Dev\\R\\Projeto\\healthcare-dataset-stroke-data.csv")

Visualização dos dados

A base de dados utilizada neste projeto possui 12 colunas e 5.110 registros. As variáveis presentes representam informações relevantes para a análise de risco de AVC, incluindo fatores demográficos, históricos médicos e hábitos de vida. As colunas estão nomeadas da seguinte forma: id, gender, age, hypertension, heart_disease, ever_married, work_type, Residence_type, avg_glucose_level, bmi, smoking_status e stroke.

A seguir, apresentamos uma visualização dos primeiros registros da base de dados:

# Visualizar os primeiros registros
head(dados) %>%
  kable("html", align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F) %>%
  scroll_box(width = "100%", height = "auto")
id gender age hypertension heart_disease ever_married work_type Residence_type avg_glucose_level bmi smoking_status stroke
9046 Male 67 0 1 Yes Private Urban 228.69 36.6 formerly smoked 1
51676 Female 61 0 0 Yes Self-employed Rural 202.21 N/A never smoked 1
31112 Male 80 0 1 Yes Private Rural 105.92 32.5 never smoked 1
60182 Female 49 0 0 Yes Private Urban 171.23 34.4 smokes 1
1665 Female 79 1 0 Yes Self-employed Rural 174.12 24 never smoked 1
56669 Male 81 0 0 Yes Private Urban 186.21 29 formerly smoked 1

Descrição dos Dados

Os dados utilizados neste projeto foram originalmente coletados com o objetivo de prever a ocorrência de Acidente Vascular Cerebral (AVC) com base em características clínicas e demográficas dos pacientes. O conjunto de dados inclui variáveis como idade, sexo, histórico médico e hábitos de vida que podem influenciar a probabilidade de um AVC.

  • Propósito Original: Prever a ocorrência de AVC.

  • Fonte: Disponível no Kaggle.

  • Data de Coleta: Não especificada na fonte.

  • Número de Variáveis: 12 variáveis.

  • Peculiaridades dos Dados:

    • Valores Ausentes: Há dados ausentes na coluna bmi, representando ausência de informação sobre o índice de massa corporal de alguns pacientes.
    • Variáveis do Conjunto:
      • id: Identificador único de cada paciente.
      • gender: Gênero do paciente.
      • age: Idade do paciente.
      • hypertension: Indica se o paciente possui hipertensão (1 = sim, 0 = não).
      • heart_disease: Indica se o paciente tem doenças cardíacas (1 = sim, 0 = não).
      • ever_married: Indica se o paciente já foi casado.
      • work_type: Tipo de ocupação/trabalho do paciente.
      • Residence_type: Tipo de residência (urbana ou rural).
      • avg_glucose_level: Nível médio de glicose no sangue.
      • bmi: Índice de massa corporal (kg/m²).
      • smoking_status: Status do hábito de fumar (fumante atual, ex-fumante, nunca fumou ou desconhecido).
      • stroke: Variável alvo. Indica se o paciente sofreu AVC (1 = sim, 0 = não).

Conversão para Fator

Algumas variáveis da base representam categorias, como o tipo de trabalho, estado civil ou gênero dos pacientes. Para que essas informações sejam interpretadas corretamente durante a análise, é necessário convertê-las para um formato categórico. Essa conversão facilita a organização dos dados, melhora a visualização dos resultados e garante que essas variáveis sejam tratadas de forma adequada nas etapas seguintes da análise.

# Converter variáveis categóricas para fator
dados$gender <- as.factor(dados$gender)
dados$ever_married <- as.factor(dados$ever_married)
dados$work_type <- as.factor(dados$work_type)
dados$Residence_type <- as.factor(dados$Residence_type)
dados$smoking_status <- as.factor(dados$smoking_status)
dados$stroke <- as.factor(dados$stroke)
dados$bmi <- as.numeric(dados$bmi)

Limpeza dos Dados

A coluna bmi apresenta alguns valores ausentes, o que pode impactar a qualidade das análises. Para lidar com isso, é necessário tratar esses dados faltantes. As abordagens mais comuns são remover as linhas com valores ausentes ou substituí-los por medidas estatísticas, como a média ou a mediana da coluna.

# Verificar a quantidade de valores ausentes
sum(is.na(dados$bmi))
## [1] 201
# Substituir valores ausentes pela média do BMI
dados$bmi[is.na(dados$bmi)] <- mean(dados$bmi, na.rm = TRUE)

Dataset Final

Após o carregamento e tratamento de dados ausentes, obtemos o conjunto final de dados pronto para análise. Nesta etapa, os dados estão limpos, com os tipos de variáveis devidamente ajustados e sem valores ausentes que possam comprometer a análise. A seguir, visualizamos os primeiros registros do dataset processado:

head(dados) %>%
  kable("html", align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "responsive", "condensed"), 
                full_width = F) %>%
  scroll_box(width = "100%", height = "auto")
id gender age hypertension heart_disease ever_married work_type Residence_type avg_glucose_level bmi smoking_status stroke
9046 Male 67 0 1 Yes Private Urban 228.69 36.60000 formerly smoked 1
51676 Female 61 0 0 Yes Self-employed Rural 202.21 28.89324 never smoked 1
31112 Male 80 0 1 Yes Private Rural 105.92 32.50000 never smoked 1
60182 Female 49 0 0 Yes Private Urban 171.23 34.40000 smokes 1
1665 Female 79 1 0 Yes Self-employed Rural 174.12 24.00000 never smoked 1
56669 Male 81 0 0 Yes Private Urban 186.21 29.00000 formerly smoked 1

Análise dos Dados

As análises realizadas serão divididas em tópicos, acompanhadas de sua motivação, para com isso guiar as análises realizadas na base utilizada.

Análise da Incidência de AVC

# Tabela de incidência de AVC
haveStroke <- table(dados$stroke)
haveStrokePrcnt <- round((haveStroke/nrow(dados) * 100), 2)

# Labels para o gráfico
lbls <- paste(c("Não", "Sim"), haveStrokePrcnt, "%", sep=" ")

# Gráfico de pizza
pie(table(dados$stroke), labels = lbls, main = "Proporção de Quadros de AVC", col = c("salmon", "lightgreen"))
legend("topright", legend = c("Pacientes que não apresentaram AVC", "Pacientes que apresentaram AVC"), cex = 0.8, fill = c("salmon", "lightgreen"))

Com base no gráfico, observamos que cerca de 4,87% das pessoas do conjunto de dados foram acometidas por AVC. A partir desse valor geral, podemos investigar se determinadas variáveis apresentam uma proporção acima da média de casos de AVC. Um bom ponto de partida é analisar a relação entre idade e ocorrência de AVC. Antes disso, vamos verificar se a variável de idade apresenta valores discrepantes, utilizando um diagrama de caixa (boxplot) para essa avaliação.

Perfil Etário dos Pacientes

# Diagrama de caixa da faixa etária por AVC
boxplot(age ~ stroke, data = dados, ylab = "Idade", xlab = "AVC (0=Não, 1=Sim)", main = "Dispersão da Faixa Etária", col =  c("lightblue", "lightcoral"))

# Histograma da faixa etária para casos confirmados de AVC
hist(filter(dados, stroke == 1)$age, main = "Histograma de Quadros Confirmados de AVC X Faixa Etária ", xlab = "Idade", ylab = "Número de Ocorrências", col = viridis(10))

O diagrama de caixa mostra que a distribuição das idades no conjunto de dados não apresenta discrepâncias significativas, como valores extremos ou atípicos relevantes. A dispersão é relativamente homogênea entre pessoas com e sem AVC.

Já o histograma, focado apenas nos casos confirmados de AVC, revela uma concentração maior de ocorrências em faixas etárias mais elevadas, especialmente a partir dos 50 anos. Isso sugere uma associação entre o avanço da idade e o aumento da incidência de AVC, reforçando a idade como um fator de risco importante a ser observado.

# Criando variável auxiliar para manipular e gerar o gráfico
aux <- dados

# Calcular a década de idade arredondada para baixo
aux <- mutate(aux, Decada = (floor(age / 10)) * 10)

# Filtrar casos onde ocorreu AVC (stroke == 1)
agexStrokeT <- aux %>%
  filter(stroke == 1) %>%
  group_by(Decada) %>%
  summarise(Freq = n())

# Calcular o total de casos por década
agexStroke <- aux %>%
  group_by(Decada) %>%
  summarise(Total = n())

# Unir os dados de casos de AVC com o total por década
agexStrokeT <- left_join(agexStrokeT, agexStroke, by = "Decada")

# Calcular a porcentagem de AVC por década de idade
agexStrokeT <- mutate(agexStrokeT, Percentage = (Freq / Total) * 100)

# Plotar usando ggplot2 com a paleta de cores viridis
ggplot(data = agexStrokeT, aes(x = as.factor(Decada), y = Percentage)) +
  geom_line(color = viridis(1), size = 1.2, group = 1) +  # linha conectando os pontos
  geom_point(color = viridis(1), size = 3) +   # pontos de dados
  labs(x = "Idade", y = "Porcentagem de AVC (%)", 
       title = "Porcentagem de AVC por Década de Idade") +
  scale_x_discrete(breaks = unique(agexStrokeT$Decada)) +  # define os intervalos no eixo x
  ylim(0, 30) +  # limite do eixo y
  theme_minimal() + # estilo do tema do gráfico
  theme(plot.title = element_text(hjust = 0.5))

Nesse gráfico temos a porcentagem de casos de AVC em relação ao total de pessoas em cada década de idade. A visualização revela um padrão claro: a partir dos 50 anos, a proporção de indivíduos com AVC ultrapassa a média geral do conjunto de dados, indicando um aumento progressivo no risco conforme a idade avança. Esse comportamento reforça o papel da idade como um dos principais fatores de risco para AVC, com a incidência crescendo de forma consistente nas faixas etárias mais elevadas.

Distribuição por Gênero

# Preparar dados para distribuição de gênero no estudo
genderPrcnt <- round((table(dados$gender) / nrow(dados)) * 100, 2)
dataGender <- data.frame(
  gender = names(genderPrcnt),
  percent = as.numeric(genderPrcnt)
)
dataGender$gender <- factor(dataGender$gender, levels = c("Male", "Female", "Other"), labels = c("Homens", "Mulheres", "Outros"))

# Gráfico de barras para distribuição de gênero no estudo
p1 <- ggplot(data = dataGender, aes(x = gender, y = percent, fill = gender)) +
  geom_bar(stat = "identity", color = "white") +
  scale_fill_viridis(discrete = TRUE, option = "C", labels = c("Homens", "Mulheres", "Outros")) +
  theme_minimal() +
  theme(legend.position = "top", legend.title = element_blank(), plot.title = element_text(hjust = 0.5)) +
  labs(title = "Distribuição de Gêneros no Estudo", x = "Gênero", y = "Percentual") +
  geom_text(aes(label = paste0(percent, "%")), vjust = -0.5, size = 3.5)

# Mostrar o gráfico de barras para distribuição de gênero
print(p1)

# Preparar dados para distribuição de gênero entre os casos de AVC
genderXStroke <- filter(dados, stroke == 1)
genderXStrokePrcnt <- round((table(genderXStroke$gender) / nrow(genderXStroke)) * 100, 2)
dataGenderXStroke <- data.frame(
  gender = names(genderXStrokePrcnt),
  percent = as.numeric(genderXStrokePrcnt)
)
dataGenderXStroke$gender <- factor(dataGenderXStroke$gender, levels = c("Male", "Female", "Other"), labels = c("Homens", "Mulheres",  "Outros"))

# Gráfico de barras para distribuição de gênero entre os casos de AVC
p2 <- ggplot(data = dataGenderXStroke, aes(x = gender, y = percent, fill = gender)) +
  geom_bar(stat = "identity", color = "white") +
  scale_fill_viridis(discrete = TRUE, option = "C", labels = c("Homens", "Mulheres", "Outros")) +
  theme_minimal() +
  theme(legend.position = "top", legend.title = element_blank(), plot.title = element_text(hjust = 0.5)) +
  labs(title = "Distribuição de Gêneros entre os Casos de AVC", x = "Gênero", y = "Percentual") +
  geom_text(aes(label = paste0(percent, "%")), vjust = -0.5, size = 3.5)

# Mostrar o gráfico de barras para distribuição de gênero entre os casos de AVC
print(p2)

O primeiro gráfico apresenta a proporção de participantes por gênero no conjunto de dados. Os dados são divididos em três categorias: Mulheres, Homens e Outros, e os valores representam o percentual de cada grupo em relação ao total de registros. Esse gráfico nos dá uma visão da composição demográfica do estudo e ajuda a identificar possíveis desequilíbrios de representação entre os gêneros.

O segundo gráfico mostra a distribuição de gênero apenas entre os indivíduos que tiveram AVC. Assim como no gráfico anterior, os dados são apresentados em porcentagens, permitindo uma comparação direta com a distribuição geral.

Ao comparar os dois gráficos, observamos que a distribuição de gênero entre os casos de AVC é bastante semelhante à distribuição geral da base de dados. Essa semelhança indica que não há uma diferença substancial na ocorrência de AVC entre os gêneros, pelo menos dentro deste conjunto de dados. Ou seja, o risco relativo de AVC entre homens e mulheres parece ser equilibrado nesta amostra.

Ocupação dos Pacientes

# Filtrar os dados para casos confirmados de AVC
stroke_cases <- filter(dados, stroke == 1)

# Criar uma tabela de frequência para os tipos de ocupações
work_type_counts <- table(stroke_cases$work_type)
work_type_df <- as.data.frame(work_type_counts)
colnames(work_type_df) <- c("work_type", "count")

# Mapeamento dos tipos de ocupações para português
work_type_df$work_type <- factor(work_type_df$work_type, 
                                 levels = c("children", "Govt_job", "Never_worked", "Private", "Self-employed"), 
                                 labels = c("Crianças", "Funcionário Público", "Nunca Trabalhou", "Privado", "Autônomo"))

# Criar o gráfico de barras com ggplot2 e viridis
p <- ggplot(data = work_type_df, aes(x = work_type, y = count, fill = work_type)) +
  geom_bar(stat = "identity", color = "white") +
  scale_fill_viridis(discrete = TRUE, option = "D") +
  theme_minimal() +
  theme(legend.position = "none") +
  labs(title = "Tipo de Ocupação de Pacientes com Quadros de AVC Confirmados", 
       x = "Tipo de Ocupação", y = "Número de Casos") +
  geom_text(aes(label = count), vjust = -0.5, size = 3.5)

# Mostrar o gráfico
print(p)

A distribuição dos casos confirmados de AVC sugere uma possível relação com o tipo de ocupação. Observa-se uma concentração expressiva entre trabalhadores do setor privado (149 casos) e autônomos (65 casos), além de ocorrências entre funcionários públicos (33 casos). Esses números indicam que a atividade profissional pode ser um fator relevante a ser considerado, especialmente em ocupações associadas a níveis elevados de estresse ou jornadas prolongadas de trabalho.

Estado Civil dos Pacientes

# Função para rotular os valores de AVC
stroke_labels <- function(stroke_status) {
  if (stroke_status == 0) {
    return("Sem quadros de AVC")
  } else {
    return("Com quadros de AVC")
  }
}

# Filtrar casos onde o paciente já foi casado
haveEM <- filter(dados, ever_married == "Yes")
haveEMPrcnt <- round((table(haveEM$stroke) / nrow(haveEM)) * 100, 2)
dataEM <- data.frame(
  stroke = as.factor(names(haveEMPrcnt)),
  percent = as.numeric(haveEMPrcnt)
)
dataEM$stroke <- factor(dataEM$stroke, levels = c("0", "1"), labels = c("Pacientes Casados sem quadros de AVC", "Pacientes Casados com quadros de AVC"))

# Gráfico de pizza para pacientes casados
p1 <- ggplot(data = dataEM, aes(x = "", y = percent, fill = stroke)) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar(theta = "y") +
  scale_fill_viridis(discrete = TRUE, option = "E") + 
  theme_void() +
  theme(legend.position = c(0.9, 0.9), legend.title = element_blank(), legend.text = element_text(size = 8), plot.title = 
          element_text(hjust = 0.5)) +
  geom_text(aes(label = paste0(percent, "%")), position = position_stack(vjust = 0.5), size = 3) +
  labs(title = "Pacientes Casados")

# Mostrar o gráfico para pacientes casados
print(p1)

# Filtrar casos onde o paciente nunca foi casado
dHaveEM <- filter(dados, ever_married == "No")
dHaveEMPrcnt <- round((table(dHaveEM$stroke) / nrow(dHaveEM)) * 100, 2)
dataNoEM <- data.frame(
  stroke = as.factor(names(dHaveEMPrcnt)),
  percent = as.numeric(dHaveEMPrcnt)
)
dataNoEM$stroke <- factor(dataNoEM$stroke, levels = c("0", "1"), labels = c("Pacientes solteiros sem quadros de AVC", "Pacientes solteiros com quadros de AVC"))

# Gráfico de pizza (pie chart) para pacientes solteiros
p2 <- ggplot(data = dataNoEM, aes(x = "", y = percent, fill = stroke)) +
  geom_bar(stat = "identity", width = 1, color = "white") + 
  coord_polar(theta = "y") +
  scale_fill_viridis(discrete = TRUE, option = "E") + 
  theme_void() +  
  theme(legend.position = c(0.9, 0.9), legend.title = element_blank(), legend.text = element_text(size = 8), plot.title = 
          element_text(hjust = 0.5)) +  
  geom_text(aes(label = paste0(percent, "%")), position = position_stack(vjust = 0.5), size = 3) +
  labs(title = "Pacientes Solteiros")

print(p2)

O primeiro gráfico, mostra a distribuição de AVC entre pacientes casados. Já o segundo gráfico, representa a mesma análise, porém aplicada aos pacientes solteiros. Em termos comparativos, observa-se uma leve tendência de maior incidência de AVC entre os pacientes casados. No entanto, essa diferença não é suficientemente expressiva em relação à média geral, não indicando, isoladamente, uma correlação significativa com o estado civil. Ainda assim, o dado pode ser útil em análises mais amplas que considerem múltiplos fatores associados.

Frequência de Hipertensão

haveHypertension <- filter(dados, hypertension == 1)

# Tabela de contagem de AVC por estado de hipertensão
avc_counts <- count(haveHypertension, stroke)

# Calcular porcentagens
avc_counts <- mutate(avc_counts, Percent = round(n / sum(n) * 100, 2))

# Definir os rótulos das categorias
avc_counts$stroke <- factor(avc_counts$stroke, levels = c(0, 1),
                            labels = c("Hipertensos sem quadros de AVC", "Hipertensos com quadros de AVC"))

# Criar o gráfico
ggplot(avc_counts, aes(x = "", y = Percent, fill = stroke)) +
  geom_bar(stat = "identity", width = 1, color = "black") +
  scale_fill_brewer(palette = "Set2") + 
  coord_polar("y", start = 0) +
  labs(x = NULL, y = "Porcentagem", 
       title = "Distribuição de AVC entre Pacientes Hipertensos") +
  theme_minimal() +
  theme(axis.text = element_blank(),
        axis.title = element_blank(),
        panel.grid = element_blank()) +
  geom_text(aes(label = paste0(Percent, "%")), position = position_stack(vjust = 0.5))

O gráfico mostra que 13,25% dos pacientes com hipertensão sofreram AVC, enquanto 86,75% não apresentaram a condição. Essa taxa é quase três vezes maior que a média geral do conjunto de dados, indicando que a hipertensão é um possível fator de risco para AVC. Ainda assim, essa proporção é menor que a observada em pessoas acima de 70 anos, sugerindo que idade e hipertensão podem estar associados ao aumento do risco.

Pacientes com Ataques Cardíacos

# Filtra os dados para manter apenas pacientes com histórico de ataques cardíacos
haveHD <- filter(dados, heart_disease==1)
# Calcula a porcentagem de pacientes com e sem AVC entre os que tiveram ataques cardíacos
haveHDPrcnt <- round((table(haveHD$stroke)/nrow(haveHD)*100),2)

# Prepara os rótulos com os percentuais  
lbls<-paste(c("",""),haveHDPrcnt)
lbls<-paste(lbls,"%",sep="")

# Gera o gráfico de pizza com a proporção de AVC entre pacientes com histórico de ataques cardíacos  
pie(table(haveHD$stroke),lbls,main = "Pacientes com Histórico de Ataques Cardíacos",col = c("lightgreen", "salmon"))
# Adiciona legenda ao gráfico
legend("topright",legend = c("Pacientes sem quadros de AVC","Pacientes com quadros de AVC" ), cex = 0.8,fil=c("lightgreen", "salmon"))

O gráfico de pizza apresenta a proporção de AVC entre pacientes com histórico de ataques cardíacos. Observa-se que 17,03% desses pacientes sofreram AVC, o que representa quase quatro vezes a média geral do conjunto de dados. Esse valor também é ligeiramente superior à taxa observada entre pessoas com mais de 70 anos, reforçando a hipótese de que ataques cardíacos estão associadas a um maior risco de AVC.

Níveis Glicêmicos e Ocorrência de AVC

# Filtrar os dados para casos confirmados de AVC
stroke_cases <- filter(dados, stroke == 1)

# Criar o histograma com ggplot2
p <- ggplot(stroke_cases, aes(x = avg_glucose_level)) +
  geom_histogram(bins = 30, fill = c("gray62"), color = "white", alpha = 0.8) +
  labs(title = "Histograma de Quadros Confirmados de AVC x Média de Glicose",
       x = "Nível Médio de Glicose", y = "Número de Ocorrências") +
  theme_minimal()

# Mostrar o gráfico
print(p)

O gráfico indica que a maioria dos pacientes apresenta níveis de glicose dentro de faixas consideradas normais, com poucos casos de glicose elevada. Isso sugere que, neste conjunto de dados, a glicose alta não se destaca como um fator determinante para o aumento do risco de AVC.

IMC e Ocorrência de AVC

# Filtrar os dados para casos confirmados de AVC
stroke_cases <- filter(dados, stroke == 1)

# Criar o histograma com ggplot2
p <- ggplot(stroke_cases, aes(x = bmi)) +
  geom_histogram(bins = 30, fill = c("steelblue1"), color = "white", alpha = 0.8) +
  labs(title = "Histograma de Quadros Confirmados de AVC x IMC",
       x = "IMC", y = "Número de Ocorrências") +
  theme_minimal()

# Mostrar o gráfico
print(p)

# Criar dados para o gráfico
imc_levels <- c("Abaixo do peso", "Peso normal", "Sobrepeso", "Obesidade")
imc_range <- c("< 18.5", "18.5 - 24.9", "25 - 29.9", ">= 30")

# Criar um data frame com as categorias de IMC e obesidade
imc_data <- data.frame(imc_levels, imc_range)

# Reordenar os níveis de imc_range para a ordem desejada
imc_data$imc_range <- factor(imc_data$imc_range, levels = c("< 18.5", "18.5 - 24.9", "25 - 29.9", ">= 30"))

# Criar o gráfico de barras com ggplot2
p <- ggplot(imc_data, aes(x = imc_range, y = imc_levels, fill = imc_levels)) +
  geom_bar(stat = "identity", color = "black") +
  scale_fill_viridis_d(option = "B", begin = 0.1, end = 0.9) +
  labs(title = "Classificação de IMC e Obesidade",
       x = "IMC",
       y = "Classificação") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Mostrar o gráfico
print(p)

Os gráficos mostram que a maior incidência de AVC ocorre entre indivíduos com sobrepeso ou obesidade, evidenciando a importância desses fatores de saúde como possíveis contribuintes para o risco de AVC.

Conclusão

A partir dos dados apresentados nos gráficos e análises, podemos destacar alguns insights relevantes sobre a ocorrência de AVC no dataset. Inicialmente, observamos que a porcentagem geral de casos de AVC é aproximadamente 4,87%, o que nos permite investigar parâmetros que possam apresentar uma incidência maior do que a média. Ao analisar a idade dos pacientes, verificamos que a distribuição não mostra discrepâncias significativas; no entanto, a maioria dos casos de AVC ocorre em indivíduos a partir dos 30 anos, com um aumento significativo após os 50 anos, indicando um aumento do risco com a idade.

Além disso, observamos que a hipertensão apresenta uma taxa de 13,25% de casos de AVC, quase três vezes a média geral. Essa taxa é ainda mais elevada em pessoas com mais de 70 anos, destacando a correlação entre idade avançada e incidência de AVC. Em relação ao estado civil, embora haja uma incidência maior entre os casados em comparação aos solteiros, essa diferença não é suficiente para justificar um estudo mais aprofundado desse atributo.

Quanto ao gênero, tanto a distribuição no dataset quanto entre os casos confirmados de AVC são semelhantes, sugerindo que não há uma disparidade significativa na ocorrência de AVC entre homens e mulheres. Já em relação ao tipo de trabalho, observamos um número considerável de casos entre trabalhadores do setor privado e autônomos, além de funcionários públicos, indicando que o ambiente de trabalho pode ser um fator relevante, especialmente em ocupações que possam envolver maior estresse ou carga intensa.

Finalmente, os níveis de glicose mostram uma predominância em valores aceitáveis, sugerindo que altos níveis de glicose não são um fator de risco significativo para AVC. Por outro lado, a maior incidência de AVC entre indivíduos classificados como sobrepeso ou obesos destaca a importância desses fatores de saúde na predisposição a esses eventos.

Embora esta análise tenha sido útil para os propósitos de um projeto de Análise de Dados em um período limitado, é importante ressaltar que a origem deste conjunto de dados não é confirmada. Para uma análise mais aprofundada e precisa, seria preferível utilizar um conjunto de dados coletado em colaboração com uma organização de saúde, de maneira sistemática. Além disso, seria essencial realizar uma análise mais profunda das interações entre os diferentes atributos.