Seu relatório reprodutível: Antes de iniciarmos o laboratório, lembre-se de mudar seu “working directory” para a pasta que contém os arquivos necessários para a realização do laboratório. Em seguida, baixe o modelo de relatório R Markdown que será utilizado neste laboratório, por meio do comando abaixo, e abra o documento correspondente; basta clicar no arquivo lab2.Rmd. Lembre-se que todos os seus códigos e respostas devem estar neste documento.:

download.file("https://passeioaleatorio.com/datalab/labs/rmd/lab2.Rmd", destfile = "lab2.Rmd")

Algumas pessoas definem a Estatística como a ciência que tem por objetivo transformar informação em conhecimento. O primeiro passo no processo é sumarizar e descrever a informação bruta - os dados. Neste laboratório, você obterá novos conhecimento sobre saúde pública gerando sumários gráficos e numéricos de um conjunto de dados coletados pelo Centro para o Controle e Prevenção de Doenças (Centers for Disease Control and Prevention, CDC). Como esse conjunto de dados é extenso, ao longo do caminho você também aprenderá as habilidades indispensáveis de processamento de dados e organização de subconjuntos.

Uma nota sobre expectativas: Para cada exercício e questões por sua conta, inclua qualquer resultado relevante (tabelas, sumários, gráficos) em suas respostas. Lembre-se que para isso basta inserir seus códigos do R em um código chunk e apertar Knit HTML.

Começando

O Sistema de Monitoramento de Fatores de Risco Comportamental (Behavioral Risk Factor Surveillance System, BRFSS) é uma pesquisa anual realizada por telefone com 350.000 pessoas nos Estados Unidos. Como seu nome implica, o BRFSS foi desenvolvido para identificar fatores de risco na população adulta e relatar tendências emergentes na saúde. Por exemplo, os respondentes são indagados sobre sua dieta e atividades físicas semanais, seu diagnóstico de HIV/AIDS, uso provável de tabaco, e mesmo seu nível de cobertura por planos de saúde. O website do BRFSS http://www.cdc.gov/brfss contém uma descrição completa desta pesquisa, incluindo as questões que motivaram o estudo e muitos resultados interessantes derivados dos dados.

Nós nos focaremos em uma amostra aleatória de 20.000 pessoas do BRFSS conduzida em 2000. Ainda que existam mais de 200 variáveis neste conjunto de dados, nós trabalharemos com um subconjunto menor.

Começamos importando os dados das 20.000 observações para dentro do espaço de trabalho do R. Depois de inicializar o RStudio, entre com o seguinte comando.

load(url("https://passeioaleatorio.com/datalab/dados/cdc.RData"))

O conjunto de dados cdc que aparece em seu espaço de trabalho é uma matriz de dados, onde cada linha representa um caso e cada coluna representa uma variável. Lembre-se que o R denomina este formato de dados como banco de dados (data frame), que será um termo utilizado ao longo dos laboratórios.

Para visualizar o nome das variáveis, digite o comando

names(cdc)

Este comando retorna os nomes saude, atfisica, planosaude, fumar100, altura, peso, pdesejado, idade, e genero. Cada uma dessas variáveis corresponde a uma questão que foi feita na pesquisa. Por exemplo, para saude, os respondentes foram indagados sobre sua saúde geral, respondendo excelente, muito bom, bom, razoável ou ruim. A variável atfisica indica se o respondente se exercitou no último mês (1) ou não (0). Da mesma forma, planosaude indica se o respondente tem alguma forma de cobertura por plano de saúde (1) ou não (0). A variável fumar100 indica se o respondente fumou pelo menos 100 cigarros ao longo da vida. As variáveis altura, peso, pdesejado, idade e genero registram a altura (em polegadas), o peso (em libras), o peso desejado (em libras), a idade (em anos) e o gênero, respectivamente.

Em tese, você poderia verificar toda a base de dados de só uma vez digitando seu nome no console, mas isso pode não ser muito sábio neste caso. Sabemos que cdc tem 20.000 linhas, portanto verificar o conjunto de dados inteiro significa inundar sua tela. Uma função bastante útil para dar uma rápida olhada no seu conjunto de dados, ver suas dimensões e os tipos de dados é a função str.

str(cdc)

Note que o R chama as categorias das variáveis de factor e a quantidade de categorias de levels. Você também poderá dar pequenas espiadas nos dados utilizando os comandos head (que mostra as primeiras linhas de dados),

head(cdc)

tail (que mostra as últimas linhas de dados),

tail(cdc)

ou as técnicas de construção de subconjuntos que você aprenderá no decorrer do laboratório.

  1. Há quantos casos neste conjunto de dados? Quantas variáveis? Para cada variável, identifique seu tipo de dado (p.e., qualitativa, discreta). Não se baseie apenas nas saídas do R, pense também na natureza instrínseca das variáveis.

Descrevendo Distribuições

Histogramas

O questionário do BRFSS é um tesouro enorme de informações. Um primeiro passo útil em qualquer análise é destilar toda essa informação em algumas estatísticas sumárias e gráficos.

Vamos começar olhando alguns histogramas. Nós podemos criar um histograma da idade dos respondentes com o seguinte comando:

qplot(x = idade, data = cdc, geom = "histogram")

Esta função diz ao R para plotar a idadeno eixo-x. Além disso, a entrada geom (abreviação para geometric object) diz ao R o tipo de gráfico a ser plotado.

Na realidade, uma vez que o padrão de geometria para uma única variável numérica é um histograma, poderíamos obter o mesmo gráfico omitindo o termo “histogram” que escolhe a geometria da variável:

qplot(x = idade, data = cdc)

Outro comentário interessante se deve ao fato do R reportar suas análises no idioma inglês. Como você pode notar, no caso do histograma, o eixo-x é descrito de acordo com o nome originário do conjunto de dados enquanto o eixo-y recebe a descrição count (número de observações para o intervalo correspondente). Caso você queira mudar os nomes apresentados nos eixos do gráfico plotado, basta indicar ao R o nome desejado:

qplot(x = idade, data = cdc, xlab = "Idade", ylab = "Observações")

Também é possível adicionar um título ao gráfico ao incluir a entrada main e o título correspondente:

qplot(x = idade, data = cdc, xlab = "Idade", ylab = "Observações", main = "Histograma da Idade")

Histogramas costumam ser uma boa maneira de enxergar a forma da distribuição de uma variável, mas esta forma pode variar dependendo do número de intervalos escolhido (ou a amplitude de cada intervalo) para representar cada barra do histograma. Você pode definir facilmente a amplitude de cada intervalo ao indicá-lo ao R por meio da entrada binwidth:

qplot(x = idade, data = cdc, geom = "histogram", binwidth = 1)
qplot(x = idade, data = cdc, geom = "histogram", binwidth = 20)

É uma boa ideia explicitar em seu código todas as opções ao invés de aceitar as entradas padrões do R. Isso lhe permitirá a construção de gráficos mais informacionais e esteticamente mais agradáveis. Por exemplo, suponha que você queira a cor azul (blue em inglês) para seu histograma. Isto pode ser feito com o comando abaixo:

qplot(x = idade, data = cdc, geom = "histogram", binwidth = 1, fill=I("blue"))

Você também pode adicionar contornos pretos (black em inglês) a cada barra do gráfico à partir do comando:

qplot(x = idade, data = cdc, geom = "histogram", binwidth = 1, fill=I("blue"), col=I("black"))

Além disso, podemos adicionar transparência ao gráfico por meio do comando abaixo:

qplot(x = idade, data = cdc, geom = "histogram", binwidth = 1, fill=I("blue"), col=I("black"), alpha=I(.4))

Existem diversas possibilidades para alterar a estética dos seus gráficos e, para tal, nós o incentivamos a procurar informações à respeito dos comandos do R assim como do pacote ggplot2. Por fim, é bastante comum que queiramos construir um histograma onde o eixo-y contenha uma medida de altura adequada, de tal modo que a área de cada bloco seja correspondente à frequência relativa do intervalo que representa a base do bloco, ao invés do número de observações. Neste caso, não podemos nos basear no formato do comando qplot, mas o pacote ggplot2 nos oferece alternativas interessantes e podemos obter esse gráfico com o comando abaixo:

ggplot(cdc, aes(x=idade)) + 
    geom_histogram(aes(y=..density..), 
                   binwidth=1, fill="blue",alpha=.4,col="black") +
    labs(title="Histograma da Idade") +
    labs(x="Idade", y="Altura")

Observe que utilizamos o comando ggplot no lugar de qplot, mas as entradas são similares. Por exemplo, aes indica ao R quais as variáveis correspondentes a cada eixo, geom_histogram indica ao R a geometria do histograma (no caso, escolhemos a densidade para o eixo-y) e as demais entradas são bastante similares às que comentamos nos gráficos anteriores. O comando + indica ao R que ao gráfico serão adicionadas novas informações adiante. Poderíamos, inclusive, adicionar uma linha com a densidade estimada ao último gráfico com o comando:

ggplot(cdc, aes(x=idade)) + 
    geom_histogram(aes(y=..density..), 
                   binwidth=1, fill="blue",alpha=.4,col="black") +
    labs(title="Histograma da Idade") +
    labs(x="Idade", y="Altura")+
    geom_density(col="red")

Estatísticas Descritivas

Como um exemplo simples, a função summary retorna um sumário numérico: mínimo, primeiro quartil, mediana, média, segundo quartil, e máximo.

Para a variável peso, este sumário é dado por:

cdc %>%
  select(peso) %>%
  summary()

Uma nota sobre direcionamento: Note que nós podemos ler essas três linhas de código da seguinte maneira: “Escolha a base de dados cdc e a direcione por meio da função select. Usando esta função, selecione a variável peso e direcione esta variável à função summary

O operador %>% é chamado de operedor de direcionamento. Basicamente, ele pega a saída da linha corrente e a direciona à linha de código seguinte.

Uma vez que o R também funciona como uma calculadora elegante, se você quiser calcular a distância interquartil (Q3-Q1) para o peso dos respondentes, você pode se basear na saída do comando acima e então digitar

190 - 140

Você também pode criar a sua própria lista de estatísticas descritivas escolhendo aquelas que te interessam, assim como as variáveis que deseja visualizar usando a função summarise

cdc %>%
  summarise(media_pe = mean(peso), dp_pe = sd(peso), media_al = mean(altura), dp_al = sd(altura))

ou calcular uma estatística descritiva individualmente com o comando

  mean(cdc$peso)
  median(cdc$altura)

Note que na função summarise nós criamos uma lista de quatro elementos. Os nomes desses elementos são definidos pelo usuário, por exemplo mean_pe, dp_pe, etc. e você pode alterá-los como quiser (apenas não utilize espaço entre seus nomes). Ao calcular estas estatísticas o R também exige que você conheça as chamadas das funções. Algumas chamadas úteis para estatísticas descritivas numéricas únicas seguem abaixo com seu significado:

  • mean - calcula a média
  • median - calcula a mediana
  • sd - calcula o desvio padrão amostral
  • var - calcula a variância amostral
  • IQR - calcula a distância interquantil
  • range - calcula o mínimo e o máximo
  • min - calcula o mínimo
  • max - calcula o máximo

Uma outra funcionalidade bastante útil é você ser capaz de calcular estatísticas descritivas para várias categorias no seu banco de dados. Por exemplo, nós podemos calcular as estatísticas desejadas separadamente para os grupos masculino e feminino usando a função group_by:

cdc %>%
  group_by(genero) %>%
  summarise(media_pe = mean(peso), dp_pe = sd(peso), media_al = mean(altura), dp_al = sd(altura))

Aqui, primeiramente agrupamos os dados por gênero, e calculamos as estatísticas descritivas.

  1. Calcule a mediana e a distância interquantil da variável peso, separadamente, para pessoas que se exercitaram ou não no último mês.

Tabelas

Ainda que faça sentido descrever uma variável quantitativa como peso em termos destas estatísticas, o que fazer com variáveis qualitativas? Nós podemos considerar a frequência da amostra ou a distribuição relativa de frequência. A função table faz isso por você contando o número de vezes que cada tipo de resposta é dada. Por exemplo, para ver o número de pessoas que fumaram 100 cigarros ao longo de sua vida, digite

cdc %>%
  select(fumar100) %>%
  table()

ou então verifique a distribuição da frequência relativa digitando

cdc %>%
  select(fumar100) %>%
  table()/20000

Perceba como o R automaticamente divide todas as entradas na tabela por 20.000 no comando acima. Isso é similar a algo que observamos no último laboratório; quando multiplicamos ou dividimos um vetor por um número, o R aplica essa ação a todas as entradas dos vetores. Como vimos acima, isso também funciona para tabelas. Em seguida, criamos um gráfico de barras para as entradas na tabela:

qplot(x = fumar100, data = cdc)
  1. Calcule a distribuição da frequência relativa para as variáveis genero e saude. Quantos homens compõem a amostra? Qual proporção da amostra diz estar com saúde excelente?

O comando table pode ser utilizado para criar tabelas de contingência também. Por exemplo, para examinar quais participantes fumaram separadamente por gênero, podemos usar os comandos abaixo.

cdc %>%
  select(genero, fumar100) %>%
  table()
  1. a. Qual percentual de fumantes são homens? Qual percentual de fumantes são mulheres? b. Dentre os homens, qual o percentual dos que são fumantes? Dentre as mulheres, qual o percentual das que são fumantes? c. Qual par de estatísticas é mais útil para determinar se é mais provável um homem ou uma mulher ser fumante? Justifique sua resposta.

Visualizando relações

Entre duas variáveis quantitativas

No último laboratório nós visualizamos a relação entre duas variáveis numéricas usando gráficos de dispersão. Como um rápido lembrete, vamos criar mais um desses gráficos:

qplot(x = peso, y = altura, data = cdc, geom = "point")

Uma medida importante que nos dá informação de como duas variáveis numéricas estão relacionadas é a correlação. Podemos calcular a correlação entre duas variáveis numéricas por meio do comando cor. Abaixo calculamos a correlação entre as variáveis peso e altura:

cor(cdc$peso,cdc$altura)

Com base no gráfico de dispersão e na medida de correlação, como você explica a relação entre essas variáveis?

Entre duas variáveis qualitativas

Para criar um gráfico de barras segmentado nós podemos utilizar as seguintes opções.

qplot(x = genero, fill = fumar100, data = cdc)

ggplot(cdc, aes(genero, fill = fumar100)) +
  geom_bar(position = "fill")
  1. Qual a diferença entre os dois gráficos? Qual deles é mais útil para comparar a proporção de homens e mulheres fumantes?

Entre uma variável quantitativa e uma qualitativa

A finalidade de um boxplot é proporcionar um esboço de uma variável com o propósito de comparar as categorias existentes. Portanto, podemos, por exemplo, comparar as alturas de homens e mulheres com

qplot(y = altura, x = genero, data = cdc, geom = "boxplot")

Há uma nova notação para a geometria aqui. Nós pedimos ao R para plotar os boxplots da altura em relação aos gêneros masculino e feminino que estão descritos no banco de dados.

Vamos considerar uma nova variável que não aparece diretamente neste conjunto de dados: o Índice de Massa Corporal (IMC) (https://pt.wikipedia.org/wiki/%C3%8Dndice_de_massa_corporal).

O IMC é uma razão entre peso e altura calculado segundo a fórmula:

\[ IMC = \frac{peso}{altura^2}\]

Como nossos dados não estão nas unidades métricas (quilogramas e metros) e sim nas unidades imperiais ( libras e polegadas) multiplicamos a primeira fórmula por 703 (que é o valor aproximado de conversão das unidades métricas para imperiais) obtendo a fórmula

\[ IMC = \frac{peso~(lb)}{altura~(in)^2} * 703 \]

Agora, podemos usar a função mutate para adicionar uma nova variável, relativa ao IMC, ao conjunto de dados cdc:

cdc <- cdc %>%
  mutate(imc = (peso / altura^2) * 703)

Perceba que a primeira linha acima representa uma simples aritmética, mas é aplicada para todos os 20.000 números do conjunto de dados cdc. Ou seja, para cada um dos 20.000 participantes, pegamos seu peso, dividimos pelo quadrado de sua altura e multiplicamos por 703. O resultado são 20.000 valores de IMC, um para cada respondente. Essa é uma das razões pela qual gostamos do R: ele nos permite realizar cálculos como esse utilizando expressões bem simples.

Agora nós podemos utilizar esta nova variável em nossa análise. Por exemplo, vamos criar uma sequência de boxplots da variável imc à partir das categorias da variável saude.

qplot(y = imc, x = saude, data = cdc, geom = "boxplot")

O que nos diz a figura relativa a essa sequência de boxplots?

  1. Escolha outra variável qualitativa do banco de dados e verifique como ela se relaciona ao IMC. Liste a variável que você escolheu, explique por que você pensou que ela poderia ter alguma relação com o IMC, construa uma sequência de boxplots à partir das categorias da variável e indique o que o gráfico parece sugerir.

Subconjuntos

É bastante comum agruparmos, em subconjuntos, elementos individuais do banco de dados que possuam características específicas. Nós podemos fazer isso facilmente por meio da função filter e uma série de operadores lógicos. Os operadores lógicos mais comuns na análise de dados são

Usando esses operadores, nós podemos criar um subconjunto do banco de dados cdc relativo apenas aos homens e, então, salvar esta filtragem em um novo conjunto de dados chamado homens:

homens <- cdc %>%
  filter(genero == "m")

Aqui nós criamos um novo objeto, chamado homens. O símbolo especial <- realiza uma tarefa, tomando a saída de um comando de linha e salvando-o em um novo objeto que você definiu.

Nós podemos dar uma olhada neste objeto clicando sobre o banco de dados homens que aparece em seu ambiente de traballho (Environment), ou podemos usar o comando head para dar uma espiada nas sua primeiras linhas:

head(homens)

Este novo conjunto de dados contém as mesma variáveis de antes, apenas com um número menor de linhas. Nós também poderíamos dizer ao R para manter algumas variáveis específicas usando a função select que foi introduzida anteriormente, mas isto não é relevante no momento uma vez que iremos focar na criação de subconjuntos do banco de dados.

Você poderá utilizar diversas dessas condições conjuntamente aos condicionadores & and |. O condicionador & corresponde à intersecção. A grosso modo, podemos dizer que & é equivalente a e. Nos comandos abaixo, agrupamos em um banco de dados os indivíduos que são homens e possuem mais de trinta anos:

homens_e_30mais <- cdc %>%
  filter(genero == "m" & idade > 30)

Já o condicionador | corresponde à união e, podemos dizer, que é equivalente a ou. O comando abaixo agrupa os indivíduos do conjunto de dados que são homens ou possuam mais de 30 anos:

homens_ou_30mais <- cdc %>%
  filter(genero == "m" | idade > 30)

À princípio, você pode usar esses condicionadores na quantidade e da maneira que decidirem para formar subconjuntos. Se estes agrupamentos tem interpretações práticas é uma outra questão.

  1. Crie um novo objeto menos23_fumante relativo àqueles que possuem menos de 23 anos e já fumaram 100 cigarros em seu tempo de vida. Escreva o comando que você utilizou para criar este novo objeto e apresente o número de casos que atendem a esse critério.

Recapitulando

A esta altura, fizemos uma boa primeira exposição sobre a análise das informações contidas no questionário BRFSS. Nós descobrimos uma associação interessante entre fumo e gênero, e nós podemos comentar algo a respeito da relação entre a avaliação de saúde em geral dada pelas pessoas e seu próprio IMC. Nós também nos apropriamos de ferramentas computacionais essenciais – estatísticas descritivas, subconjuntos e gráficos – que nos servirão bem ao longo deste curso.


Por sua conta

  • Crie um gráfico de dispersão da variável peso em relação ao peso desejado. Descreva a relação entre essas duas variáveis.

  • Vamos considerar uma nova variável: a diferença entre o peso desejado (pdesejado) e o peso atual (peso). Crie esta nova variável subtraindo as duas colunas na base de dados e atribuindo-as a um novo objeto chamado pdif.

  • Que tipo de dados estão contidos na variável pdif? Se uma observação de pdif é 0, o que isso implica em relação ao peso atual e desejado de uma pessoa? E se o valor de pdif for positivo ou negativo?

  • Descreva a distribuição de pdif em termos de sua posição central, forma e variação, incluindo qualquer gráfico que você usar. O que isso nos diz sobre como as pessoas se sentem a respeito do seu peso atual?

  • Utilizando estatísticas numéricas e uma sequência de boxplots, determine se homens tendem a ver seu peso diferentemente das mulheres.

  • Agora chegou a hora de usar a criatividade. Encontre a média e o desvio padrão de peso e determine qual a proporção de pesos que estão a um desvio padrão da média. E a dois desvios padrões da média?

Este é um produto da OpenIntro que é liberado sob uma Creative Commons Attribution-ShareAlike 3.0 Unported. Este laboratório foi adaptado para a OpenIntro por Andrew Bray e Mine Çetinkaya-Rundel da Duke University de um laboratório escrito por Mark Hansen da UCLA Statistics e readaptado por Jhames Sampaio ao curso de Probabilidade e Estatística da Universidade de Brasília à partir de uma primeira tradução de Erikson Kaszubowski da Universidade Federal de Santa Catarina.