Esse documento possui o objetivo de familiarizar os estudantes com o software R através de um roteiro didático, que fornecerá as funções utilizadas para a resolução dos problemas, mas não os resultados, a fim de que esses sejam obtidos pelo próprio aluno. O roteiro foi baseado no site The Analysis of Biological Data (2nd ed). Além disso, perguntas norteadoras serão utilizadas para instigar a interpretação dos resultados. Ressalta-se que o propósito deste documento não é ensinar a realizar análises e explicar as funções utilizadas. Nos materiais didáticos do PMG-DEST já existe um documento com tal objetivo, a apostila Análises em Bioestatística Básica: Uma introdução ao software R.
Os dados utilizados nas análises estatísticas serão os dados do Vigitel de 2019. O Vigitel faz parte do Sistema de Vigilância de Fatores de Risco para Doenças Crônicas Não Transmissíveis (DCNT) do Ministério da Saúde, com o objetivo de coletar dados para conhecer a situação de saúde da população. A pesquisa é realizada através de questionário aplicado por ligação telefônica para moradores das capitais brasileiras e Distrito Federal. Para ter acesso a mais informações sobre o vigitel, relatórios e questionários, clique aqui, para acessar aos bancos de dados, clique aqui.
<p align="justify">Pelo fato dos dados estarem em documento Excel será necessário utilizar um pacote do R chamado "readxl" para realizar a leitura dos mesmos. Portanto, inicialmente instale o pacote através da função "install.packages("readxl")". Abra o pacote com a função "library(readxl)" e armazene os dados na memória do R por meio da função "dados \<- read_excel("vigitel")". O nome do arquivo quando baixado será "Vigitel-2019-peso-rake.xls" e deve ser renomeado. Além disso, o arquivo deve estar no diretório de trabalho ou deve-se colocar o endereço completo da pasta em que o arquivo dos dados está. Veja na apostila <a href="http://www.est.ufmg.br/~monitoria/Material/Apostila_Bioestatistica_R.pdf" target="_blank"> Análises em Bioestatística Básica: Uma introdução ao software R</a> como mudar o diretório de trabalho do R.</p>
Com o intuito de tornar o banco de dados menor e assim agilizar o processamento das análises no software, optou-se por utilizar os dados apenas das capitais da região sudeste. Esse ajuste é bem simples e pode ser feito no próprio Excel:
Clique na aba "Dados" > Clique na opção "Filtro" > Vá até até a variável "cidade" (linha 1, coluna D) > Clique na setinha ao lado da variável "cidade" > Selecione apenas os número 3, 21, 24 e 26 (Belo Horizonte, Rio de Janeiro, São Paulo e Vitória, respectivamente) > Copie a tabela filtrada e crie um novo documento no Excel com esses dados > Salve o documento com o nome vigitel_sudeste.xlsx.
O novo banco de dados criado deve ser utilizado para seguir este roteiro. Lembre-se de salva-lo no seu diretório para que o R consiga detectar o mesmo para realizar as análises.
Outro ajuste necessário foi a “remoção” das respostas “777” e “888” (principalmente para variáveis numéricas), presente em diversas variáveis, para representar as respostas “não sabe” e “não quis responder”. Utilize os códigos abaixo para retirar o código para os valores faltantes “missing” da análise de dados e não influenciar o resultado final.
Lembre-se de abrir o banco de dados inicialmente:
library(readxl)
vigitel_sudeste <- read_excel("vigitel_sudeste.xlsx")
No RStudio, é possível importar os dados através do botão ‘Import Dataset’ no menu ‘Environmnet’ no lado direito do software.
Excluindo o código dos “missing” no banco de dados:
vigitel_sudeste$q9[vigitel_sudeste$q9==777]=NA
vigitel_sudeste$q9[vigitel_sudeste$q9==888]=NA
vigitel_sudeste$q11[vigitel_sudeste$q11==777]=NA
vigitel_sudeste$q11[vigitel_sudeste$q11==888]=NA
vigitel_sudeste$q35[vigitel_sudeste$q35==888]=NA
vigitel_sudeste$q61[vigitel_sudeste$q61==888]=NA
vigitel_sudeste$q69[vigitel_sudeste$q69==777]=NA
vigitel_sudeste$q69[vigitel_sudeste$q69==888]=NA
vigitel_sudeste$q75[vigitel_sudeste$q75==777]=NA
vigitel_sudeste$q76[vigitel_sudeste$q76==777]=NA
vigitel_sudeste$r133a[vigitel_sudeste$r133a==777]=NA
vigitel_sudeste$r133a[vigitel_sudeste$r133a==888]=NA
vigitel_sudeste$r133b[vigitel_sudeste$r133b==777]=NA
vigitel_sudeste$r133b[vigitel_sudeste$r133b==888]=NA
As tabelas e gráficos são excelentes para organizarmos nossos dados de forma resumida e visual, assim facilitando a interpretação dos mesmos.
Uma característica que pode ser de interesse, é o sexo dos indivíduos entrevistados, para isso podemos criar uma pequena tabela separando os indivíduos entre o sexo masculino e feminino. Outras perguntas de interesse são listadas abaixo com os respectivos comandos para obter dados capazes de responde-las.
A maior parte dos entrevistados é do sexo masculino ou do sexo feminino?
Resolva essa questão criando uma tabela com a seguinte função:
table(vigitel_sudeste$q7, dnn= c("Sexo"))
Pode ser de interesse saber a frequência relativa, para isso utilize a função abaixo:
prop.table(table(vigitel_sudeste$q7, dnn= c("Sexo")))
A proporção de pessoas que não praticaram exercício físico ou esporte nos últimos 3 meses é maioria entre os entrevistados?
A palavra “proporção” na pergunta direciona para utilizarmos a função de tabela com frequência relativa:
prop.table(table(vigitel_sudeste$q42, dnn= c("Exercício/Esporte")))
Pensando em avaliar relação entre variáveis podemos criar tabelas de contingência, por exemplo:
table(vigitel_sudeste$q42, vigitel_sudeste$q7, dnn = c("Exercício/Esporte", "Sexo"))
Deve-se utilizar a frequência relativa para que seja possível fazer uma comparação justa entre os sexos.
Qual sexo apresenta maior frequência relativa de pessoas que praticaram exercício ou algum esporte nos últimos 3 meses??
Nessa função será combinado os argumentos utilizados nas questões anteriores para obter uma tabela com mais informações:
prop.table(table(vigitel_sudeste$q42, vigitel_sudeste$q7, dnn = c("Exercício/Esporte", "Sexo")), margin = 2)
O argumento “margin = 2” indica que o percentual foi calculado em função do total de cada coluna, que neste caso é a variável exercício (q42).
Qual a faixa de peso que apresenta maior frequência?
Para trabalhar com variáveis contínuas, crie uma nova variável com faixas de valores:
peso_categorizado <- cut(vigitel_sudeste$q9, breaks = c(30,50,70,90,110,130,150,170,190), labels = c("31-50","51-70","71-90","91-110","111-130","131-150", "151-170","171-190"))
Agora com a variável criada anteriormente é possível utilizar as demais funções já trabalhando com as faixas de valores, veja:
table(peso_categorizado)
Além dessas funções já presentes no R, pode-se instalar pacotes que possibilitam criar tabelas mais detalhadas e organizadas, como o caso do pacote “summarytools”, que apresenta frequência absoluta, relativa e acumulada, bem como a soma em cada coluna. Instale o pacote para realizar as próximas tabelas
.
library(summarytools)
Qual a frequência relativa de pessoas que tem diabetes?
A função para obter a frequência relativa é bem simples:
freq(vigitel_sudeste$q76, headings = FALSE, report.nas = FALSE)
Neste pacote as tabelas de contingência também são mais detalhadas:
Qual a frequência relativa de pessoas com diabetes e que utilizam algum medicamento em comprimido para o controle da doença?
Esse pacote também permite criar tabelas com duas variáveis através da função abaixo:
ctable(x = vigitel_sudeste$q76, y = vigitel_sudeste$r133a, prop = "r", headings = FALSE, dnn= c("Diabetes", "Medicamento"))
Qual a frequência relativa de pessoas com diabetes, mas que não utilizam insulina?
Resolva com a mesma função utilizada na questão anterior se atentando a variável pedida.
ctable(x = vigitel_sudeste$q76, y = vigitel_sudeste$r133b, prop = "r", headings = FALSE, dnn= c("Diabetes", "Insulina"))
As funções do pacote “summarytools” também funcionam para as variáveis numéricas que foram categorizadas.
Qual seria a faixa de peso que englobaria pelo menos 50% das respostas?
Outro pacote com opções de criar tabelas é o “descriptr”, que torna muito prático a criação de faixas de valores (categorias) para variáveis numéricas contínuas (as faixas não limitam casa decimal, frequência acumulada pode ser do que 100%). Instale e abra o pacote para construir a próxima tabela.
Qual faixa de peso apresenta maior frequência neste estudo ?
Veja como é simples obter a tabela sem precisar criar uma nova variável categorizada:
library(descriptr)
ds_freq_table(vigitel_sudeste, q9, 6)
O último valor como argumento da função refere-se a quantidade de faixas que serão criadas.
Os gráfico são ótimos para ilustrar e resumir os dados de forma visual e atrativa, facilitando a interpretação dos dados.
A maioria das pessoas na amostra consomem bebidas alcoólicas?
O gráfico de setores é ótimo para variáveis com apenas duas resposta, veja:
pie(prop.table(table(vigitel_sudeste$q35)), labels = c("sim","não"), main = "Consumo de bebida alcoólica")
Qual a etnia predominante na amostra dessa pesquisa?
Uma forma de solucionar esta questão é através do gráfico de barras. É possível também utilizar os dados já em frequência relativa.
barplot(prop.table(table(vigitel_sudeste$q69)), main = "Etnia")
Perceba que uma barra apresenta o valor 80, e o mesmo não é código para nenhuma resposta, sendo um provável erro de digitação dos dados. Para retirá-lo utilize o mesmo argumento utilizado para retirar as respostas “777” e “888”:
vigitel_sudeste$q69[vigitel_sudeste$q69==80]=NA
Repita a função agora com os nomes de cada variável resposta nas barras:
barplot(prop.table(table(vigitel_sudeste$q69)), names.arg = c("Branca", "Preta", "Amarela", "Parda", "Indígena"), main = "Etnia")
Existem mais pessoas com diabetes ou hipertensão?
Colocar gráficos lado a lado é possível através da função abaixo:
par(mfrow=c(1,2))
barplot(table(vigitel_sudeste$q75), main = "Hipertensão", names.arg = c("sim", "não"))
barplot(table(vigitel_sudeste$q76), main = "Diabetes", names.arg = c("sim", "não"))
A altura dos entrevistados possui uma distribuição simétrica? Existem valores atípicos?
O gráfico de boxplot é ideal para ilustrar o que foi pedido na questão e pode ser feito com a seguinte função:
boxplot(vigitel_sudeste$q11, main = "Bloxpot para altura dos entrevistados")
A distribuição de altura dos entrevistados é próxima a uma distribuição normal?
Crie um histograma para avaliar a distruição desses dados com a função abaixo:
hist(vigitel_sudeste$q11, main = "Histograma para altura", xlab = "Altura em cm", ylab = "Frequência")
O peso e a altura estão relacionados?
O diagrama de dispersão é utilizado para ilustrar relação entre duas variáveis, e no R é feito com a função “plot”, veja:
plot(vigitel_sudeste$q11, vigitel_sudeste$q9, main = "Gráfico de Dispersão (Altura vs Peso)", xlab = "Altura", ylab = "Peso")
A síntese numérica é bastante útil, uma vez que torna capaz de resumir os diversos valores obtidos em um único número que, de determinada forma, represente a amostra estudada.
Entre os fumantes, qual a média de cigarros fumados por dia?
Calcular a média quando se tem muitos valores pode ser trabalhoso, mas no R pode ser feito rapidamente com a função “mean”.
mean(vigitel_sudeste$q61, na.rm = TRUE)
O argumento “na.rm” será bastante utilizado no tópico de síntese numérica, sua função é remover os valores “NA” (Not Available), ou seja, valores não disponíveis no banco de dados. Nessa variável em questão existem respostas “NA” pois no banco de dados existem pessoas que não fumam, portanto, não respondem essa pergunta. Quando a variável não possui “NA” não é necessário utilizar este argumento, uma vez que o argumento “na.rm= FALSE” é um padrão predefinido para a função..
Em média homens fumam mais do que mulheres?
É possível calcular a média dois grupos simultaneamente com o seguinte código:
by(vigitel_sudeste$q61, vigitel_sudeste$q7, mean, na.rm = TRUE)
Qual a mediana da idade na amostra?
A mediana pode ser encontrada da seguinte forma:
quantile(vigitel_sudeste$q6, probs = 0.5)
Qual a idade representa o 1º quartil dessa amostra?
A função para encontrar a mediana pode ser utilizada para os demais quartis, alterando o valor no argumento “probs”.
quantile(vigitel_sudeste$q6, probs = 0.25)
Qual o valor do 3º quartil da idade na amostra?
Por fim faça o mesmo para o 3º quatil.
quantile(vigitel_sudeste$q6, probs = 0.75)
Descreva as principais medidas de resumo para a variável idade. Qual a maior e menor idade da amostra?
A função abaixo obtem algumas medidas de resumo com apenas um código.
summary(vigitel_sudeste$q6)
Com base no desvio padrão, o peso tem maior variação em homens ou mulheres?
Novamente utilize a função “by”, mas desta vez com o argumento “sd”, indicando o calculo do desvio padrão.
by(vigitel_sudeste$q9, vigitel_sudeste$q7, sd, na.rm = TRUE)
Um peso de 191kg é atípico neste estudo?
Será necessário utilizar o escore z para solucionar essa questão.
z = (191-mean(vigitel_sudeste$q9, na.rm = TRUE))/sd(vigitel_sudeste$q9, na.rm = TRUE)
z
Para responder considere que valores maiores que 2, ou menores que -2 são considerados valores atípicos.
Qual a variável que apresenta maior variabilidade, peso ou altura?
Por meio do coeficiente de variação é possível comparar variáveis com unidades de medidas diferentes.
cv_peso = (sd(vigitel_sudeste$q9, na.rm = TRUE)*100/mean(vigitel_sudeste$q9, na.rm = TRUE))
cv_peso
cv_altura = (sd(vigitel_sudeste$q11, na.rm = TRUE)*100/mean(vigitel_sudeste$q11, na.rm = TRUE))
cv_altura
O quão forte é a relação linear entre peso e altura?
Podemos responder essa questão calculando a coeficiente de correlação de pearson através da seguinte função:
cor(vigitel_sudeste$q11, vigitel_sudeste$q9)
Considere para responder: 0<|r|<0,4 correlação fraca; 0,4=<|r|<0,7 correção moderada; 0,7=<|r|<1 correlação forte; e |r|=1 correlação perfeita.
1. Crie um gráfico de setores para avaliar qual a frequência de pessoas com diabetes que utilizam insulina.
2. Nessa amostra, em média os homens são mais pesados do que as mulheres?
3. Qual a quantidade de pessoas do sexo feminino possuem hipertensão neste estudo?
4. A variável peso apresenta distribuição próxima da normal?
5. A variável idade apresenta maior variabilidade em comparação a variável número de cigarros fumados por dia?
6. Quantas pessoas possuem etnia indígena?
7. Qual a faixa de altura que engloba pelo menos 70% da altura dos entrevistados? Crie 8 intervalos de mesmo tamanho para responder esta pergunta.
8. As variáveis idade e peso possuem correlação fraca, moderada ou forte?
9. Qual o percentual de pessoas com hipertensão?
10. Existem valores atípicos para a variável idade?
11. Qual o maior e menor número de cigarros fumados por dia entre os fumantes?
12. Qual a quantidade de pessoas que possuem altura entre 151cm a 170cm?
13. Qual a idade média dos participantes da amostra?
14. Qual a frequência relativa de pessoas da etnia parda no estudo?
15. Crie um gráfico de setores para ilustrar a frequência de pessoas com diabetes que utilizam ou não insulina.
16. A altura de 120cm é um valor atípico nesta amostra?
17. Qual a altura mediana das pessoas na amostra?
18. Avalie visualmente se a idade apresenta correlação com o número de cigarros fumados por dia?