Aula de Estatística Bivariada

Author

Camila Oliveira

Published

November 29, 2024

Code
library(rmarkdown)
library(ggplot2)
library(dplyr)

Anexando pacote: 'dplyr'
Os seguintes objetos são mascarados por 'package:stats':

    filter, lag
Os seguintes objetos são mascarados por 'package:base':

    intersect, setdiff, setequal, union
Code
library(plotly)

Anexando pacote: 'plotly'
O seguinte objeto é mascarado por 'package:ggplot2':

    last_plot
O seguinte objeto é mascarado por 'package:stats':

    filter
O seguinte objeto é mascarado por 'package:graphics':

    layout
Code
library(corrplot)
corrplot 0.95 loaded
Code
library(ltm)
Carregando pacotes exigidos: MASS

Anexando pacote: 'MASS'
O seguinte objeto é mascarado por 'package:plotly':

    select
O seguinte objeto é mascarado por 'package:dplyr':

    select
Carregando pacotes exigidos: msm
Carregando pacotes exigidos: polycor
Code
library(MASS)
library(msm)
library(polycor)

Introdução

Nesta aula, vamos investigar as relações entre variáveis qualitativas e quantitativas, qualitativa e qualitativa, e quantitativa e quantitativa em um conjunto de dados relacionados à saúde e nutrição. Utilizaremos tabelas de contingência, gráficos e medidas estatísticas apropriadas para realizar esta análise

Code
# Definindo semente para reprodutibilidade
set.seed(12322)

# Criando conjunto de dados simulado
n <- 150
dados <- data.frame(
  Idade = round(rnorm(n, mean = 40, sd = 15)),
  IMC = round(rnorm(n, mean = 25, sd = 4), 1),
  Atividade_Fisica = factor(sample(c("Baixa", "Moderada", "Alta"), n, replace = TRUE)),
  Fumante = factor(sample(c("Sim", "Não"), n, replace = TRUE)),
  Colesterol = round(rnorm(n, mean = 200, sd = 30)),
  Pressão_Arterial = round(rnorm(n, mean = 120, sd = 15))
)

# Visualizando as primeiras linhas do conjunto de dados
head(dados)
  Idade  IMC Atividade_Fisica Fumante Colesterol Pressão_Arterial
1    16 29.3         Moderada     Sim        193              109
2    51 20.1            Baixa     Não        239              119
3    29 26.8             Alta     Não        235              144
4    57 27.0            Baixa     Não        203              113
5    40 26.3             Alta     Não        151              133
6    37 27.7            Baixa     Não        220               95

Relação entre Variáveis Qualitativas e Quantitativas

Exemplo: Relação entre Atividade Física e IMC

Para investigar a relação entre uma variável qualitativa (Atividade_Fisica) e uma quantitativa (IMC), podemos calcular estatísticas descritivas de IMC para cada nível de Atividade_Física.

Code
# Estatísticas descritivas do IMC por nível de Atividade Física
library(dplyr)
dados %>%
  group_by(Atividade_Fisica) %>%
  summarise(
    Média_IMC = mean(IMC),
    Mediana_IMC = median(IMC),
    Desvio_Padrão_IMC = sd(IMC)
  )
# A tibble: 3 × 4
  Atividade_Fisica Média_IMC Mediana_IMC Desvio_Padrão_IMC
  <fct>                <dbl>       <dbl>             <dbl>
1 Alta                  25.4        25.2              3.71
2 Baixa                 24.7        24.8              3.63
3 Moderada              24.8        25.2              4.04

The echo: false option disables the printing of code (only output is displayed)

Além disso, podemos visualizar essas relações usando um gráfico de boxplot.

Gráfico de boxplot para IMC por nível de Atividade Física

Code
# Gráfico de boxplot para IMC por nível de Atividade Física
library(ggplot2)

p<-ggplot(dados, aes(x = Atividade_Fisica, y = IMC, fill = Atividade_Fisica)) +
  geom_boxplot() +
  labs(title = "Boxplot de IMC por Nível de Atividade Física",
       x = "Nível de Atividade Física",
       y = "IMC") +
  theme_minimal()

p1<-ggplotly(p)

p1

Gráfico 1: Boxplot de IMC por Nível de Atividade Física

Interpretação:

O gráfico de boxplot exibe a distribuição do Índice de Massa Corporal (IMC) para cada nível de atividade física (“Baixa”, “Moderada”, “Alta”). Ele mostra os seguintes pontos principais:

  • Mediana (linha central): Representa o valor mediano de IMC em cada grupo de atividade física.

  • Os indivíduos com atividade física alta tendem a ter um IMC mediano de (25,20) igual ao medianp de atividade física moderada (25,20) qeu são um pouco maiores do que aqueles com atividade física baixa (24,85)

-Dispersão (caixa e bigodes): Indica a variação do IMC em cada grupo.

  • atividade física moderada (sd =3,710785) apresenta uma maior variação no IMC, sugerindo que pessoas com atividade física moderada têm IMCs mais variados, enquanto a atividade física baixa tem a menor dispersão (sd=3.626515).

  • Outliers (pontos fora da caixa e dos bigodes): Indivíduos com valores de IMC muito acima ou abaixo do esperado para cada grupo.

-Alguns outliers são visíveis no grupo de atividade física alta, indicando a presença de indivíduos com IMC muito alto e muito baixo neste grupo.

Conclusão: Há uma leve tendência de que, conforme aumenta o nível de atividade física, o IMC tende a diminuir, mas há também variações consideráveis dentro de cada grupo.

IMC está associado com a frequência de atividade física ?

Para investigar a associação entre uma variável qualitativa (como Atividade Física, caso seja dicotômica ou ordinal) e uma variável quantitativa contínua (como IMC), o coeficientie de correlação bisserial ou correlação polissérica são apropriados. Para calcular esses coeficientes no R, você pode usar pacotes como polycor, que oferece funções para obter tanto a correlação bisserial quanto a polissérica.

1. Correlação polissérica

Esse coeficiente é indicado se Atividade Física tiver mais de dois níveis ordenados (como “Nenhuma”, “Moderada”, “Alta”). Ele generaliza a correlação bisserial para uma variável qualitativa com categorias ordenadas e mede a associação entre uma variável contínua e uma qualitativa ordinal, assumindo uma normalidade latente subjacente.

Code
# Exemplo de dados para correlação polissérica
# Suponha uma variável contínua Y e uma variável ordinal X
polyserial_corr <- polyserial(dados$IMC,dados$Atividade_Fisica )

polyserial_corr
[1] -0.06350999

Interpretação dos Coeficentes de Correlação

Para interpretar os coeficientes de correlação bisserial e polissérica e testar sua significância, segue:

  1. **Correlação Polissérica ( $r_poly$): O coeficiente polissérico mede a associação entre uma variável contínua e uma variável ordinal, assumindo que a variável ordinal representa uma discretização de uma distribuição normal subjacente.
  • Valores altos de $r_ply$ (próximos de 1 ou -1) indicam uma associação forte entre a variável contínua e a variável ordinal, sugerindo uma mudança substancial nos valores médios ou na distribuição da variável contínua conforme as categorias da variável ordinal.

  • - Valores baixos (próximos de 0) indicam uma associação fraca ou inexistente, sugerindo que as categorias da variável ordinal não correspondem a variações sistemáticas na variável contínua.

Testes de Significância

Para verificar a significância desses coeficientes, você pode aplicar testes estatísticos apropriados que avaliam a hipótese nula de que a correlação é zero (ou seja, que não há associação entre as variáveis).

  1. Correlação Polissérica:

-A significância do coeficiente de correlação polissérica é normalmente testada via estimativas de erro padrão obtidas durante o ajuste da correlação. Essas estimativas podem ser usadas para construir um teste t:

\(z=\frac{r_p}{ErroP}\)

O coeficiente polissérico. Esse teste z pode ser usado para calcular o valor-p, assumindo uma distribuição normal padrão para o teste de significância.

No pacote polycor em R, a função polyserial() fornece uma estimativa do erro padrão para a correlação polissérica, permitindo realizar o teste de significância.

Esses métodos ajudam a avaliar se os coeficientes são estatisticamente diferentes de zero, confirmando a existência de uma associação significativa entre as variáveis contínua e qualitativa.

Code
# Extraia o valor de r_poly e o erro padrão

# Extraia o valor de r_p
r_p<- polyserial_corr

# Tamanho da amostra
n <- length(dados$IMC)

# Calcule o valor do teste t para r_b
t_value <- r_p*sqrt((n - 2)/(1 - r_p^2))

# Calcule o valor-p para o teste t
p_value <- 2 * pt(-abs(t_value), df = n - 2)

# Resultados
cat("Correlação Polisserial aproximada (r_pa):", r_p, "\n")
Correlação Polisserial aproximada (r_pa): -0.06350999 
Code
cat("Valor t:", t_value, "\n")
Valor t: -0.7741953 
Code
cat("Valor-p:", p_value, "\n")
Valor-p: 0.4400503 

Escolhido o nível de significância ,geralmente 5 % (0,05).

Hípoteses do Teste :

H0:Rp=0

H1:Rp≠0

Possíveis interpretações

Se o valor p<0,05, rejeita-se H0 e conclui-se que o coeficiente de correlação polissérico estimado é estattísticamente significativo .

Se o valor p0,05 , NÃO rejeita-se H0 e conclui-se que o coeficiente de correlação polissérico estimado NÃO É estatísticamente significativo .

Conclusão: para o teste aplicado: De acordo com o teste t , não reijeitamos a hipótese de que o coeficiente possérico estimado é igual a zero , logo , concluímos que a correlação estimada não é estatisticamente significativa.

Correlação bisserial

Esse coeficiente é adequado se Fumante for dicotômica (com dois níveis, como “Sim” e “Não”). Ele mede a associação entre uma variável contínua (como IMC) e uma variável binária que se supõe representar uma divisão de uma variável latente normal subjacente. O coeficiente bisserial estima a correlação subjacente assumindo que a variável dicotômica resulta de uma “dichotomização” de uma distribuição normal.

Code
# Exemplo de dados para correlação bisserial
# Suponha uma variável contínua Y e uma variável dicotômica X
biserial_corr <- biserial.cor(dados$IMC, dados$Fumante)

biserial_corr
[1] 0.01192548

Testando significancia

Code
# Extraia o valor de r_poly e o erro padrão

# Extraia o valor de r_p
r_b<- biserial_corr

# Tamanho da amostra
n <- length(dados$IMC)

# Calcule o valor do teste t para r_b
t_value <- r_b*sqrt((n - 2)/(1 - r_b^2))

# Calcule o valor-p para o teste t
p_value <- 2 * pt(-abs(t_value), df = n - 2)

# Resultados
cat("Correlação Bisserial  (r_b):", r_b, "\n")
Correlação Bisserial  (r_b): 0.01192548 
Code
cat("Valor t:", t_value, "\n")
Valor t: 0.14509 
Code
cat("Valor t:", t_value, "\n")
Valor t: 0.14509 
Code
cat("Valor-p:", p_value, "\n")
Valor-p: 0.8848372 

Testando a hipótese de Associação entre o hábito de fumar e atividade física - Teste Qui-quadrado

Pressuposições do Teste Qui-Quadrado

O teste qui-quadrado possui algumas pressuposições importantes que devem ser verificadas para garantir a validade do teste. Essas pressuposições são as seguintes:

1.Amostra Aleatória: A amostra de dados deve ser obtida por um processo de amostragem aleatória, garantindo que cada observação seja independente das outras.

2.Tamanho da Amostra Adequado: As frequências esperadas em cada célula da tabela de contingência devem ser maiores ou iguais a 5. Caso contrário, o teste qui-quadrado pode não ser apropriado.

3.Medida de Associação: O teste qui-quadrado mede a associação entre as variáveis, mas não indica a direção ou a magnitude dessa associação.

4.Variáveis Categóricas: As variáveis analisadas devem ser qualitativas (categóricas), e a análise se dá por meio de uma tabela de contingência.

Essas hipóteses e pressuposições são essenciais para realizar o teste qui-quadrado de forma correta e interpretar seus resultados adequadamente.

Hipóteses e Pressuposições para o Teste Qui-Quadrado

Nesta seção, descrevemos as hipóteses e as pressuposições envolvidas no teste qui-quadrado, aplicado para investigar a associação entre as variáveis “Fumar” e “Atividade Física”.

Hipóteses do Teste Qui-Quadrado

O teste qui-quadrado é utilizado para verificar se há uma associação entre duas variáveis qualitativas. No caso deste estudo, estamos interessados em avaliar a relação entre ser fumante e o nível de atividade física.

  • Hipótese Nula (H₀): As variáveis “Fumar” e “Atividade Física” são independentes, ou seja, a proporção de fumantes não difere entre os diferentes níveis de atividade física.

$ H_0:$ O hábito de fumar e Atividade Física são independentes. (Associação não significativa)

$ H_1:$ O hábito de fumar e Atividade Física são dependentes. (Associação significativa)

Code
tabela_contingencia <- table(dados$Fumante, dados$Atividade_Fisica)
 tabela_contingencia
     
      Alta Baixa Moderada
  Não   21    26       32
  Sim   22    26       23
Code
# Teste do Qui-Quadrado para verificar associação entre Fumar e Atividade Física
teste_qui <- chisq.test(tabela_contingencia)
teste_qui

    Pearson's Chi-squared test

data:  tabela_contingencia
X-squared = 1.0724, df = 2, p-value = 0.585

Interpretação dos Resultados

Após realizar o teste qui-quadrado, avaliamos o valor-p obtido:

  • Se o valor-p for menor que o nível de significância (geralmente 0,05), rejeitamos a hipótese nula, o que indica que existe uma associação significativa entre “Fumar” e “Atividade Física”.

  • Se o valor-p for maior a 0,05, não rejeitamos a hipótese nula, ou seja, não temos evidências suficientes para concluir que as variáveis são dependentes.

Conclusão: De acordo com teste qui-quadrado , o hábito de fumo não está associado com Atividade física ao nível de 5 % de significância .

Relação entre Variáveis Quantitativas

Neste exemplo, apresentamos três tipos de relação linear: Correlação PositivaCorrelação Negativa e Ausência de Correlação. Abaixo, as figuras são exibidas lado a lado para facilitar a visualização.

Correlação entre Colesterol e Pressão Arterial

Code
ggplot(dados, aes(x = Colesterol, y = Pressão_Arterial)) +
  geom_point() +
  geom_smooth(method = "lm", col = "blue", se = FALSE) +
  labs(title = "Gráfico de Dispersão: Colesterol vs Pressão Arterial",
       x = "Colesterol",
       y = "Pressão Arterial") +
  theme_minimal()
`geom_smooth()` using formula = 'y ~ x'

Correlação de Pearson

Code
# Correlação de Pearson entre Colesterol e Pressão Arterial
correlacao <- cor(dados$Colesterol, dados$Pressão_Arterial)
correlacao
[1] -0.04775125

Hipóteses e Pressuposições para a Correlação de Pearson

Nesta seção, descrevemos as hipóteses e pressuposições para a aplicação da correlação de Pearson, que é usada para medir a relação linear entre duas variáveis quantitativas. No exemplo, investigamos a relação entre as variáveis “Colesterol” e “Pressão Arterial”.

Hipóteses da Correlação de Pearson

A correlação de Pearson avalia a força e a direção da relação linear entre duas variáveis contínuas. Suas hipóteses são definidas da seguinte maneira:

  • Hipótese Nula (H₀): Não existe correlação linear entre as duas variáveis; o coeficiente de correlação populacional é igual a zero.

  • Hipótese Alternativa (H₁): Existe uma correlação linear entre as duas variáveis; o coeficiente de correlação populacional é diferente de zero.

Pressuposições da Correlação de Pearson

Para que a correlação de Pearson seja aplicada corretamente, as seguintes pressuposições devem ser atendidas:

  1. Linearidade: As duas variáveis devem apresentar uma relação linear. Isso pode ser verificado visualmente com um gráfico de dispersão. Se a relação entre as variáveis for não-linear, a correlação de Pearson não é adequada.

  2. Normalidade: As duas variáveis devem ser aproximadamente normalmente distribuídas, especialmente se o tamanho da amostra for pequeno. Essa pressuposição pode ser verificada através de testes de normalidade ou gráficos como o Q-Q plot.

  3. Teste de Shapiro Wilk

O teste de Shapiro-Wilk é usado para verificar a normalidade de uma distribuição, e ele testa as seguintes hipóteses:

  • Hipótese Nula (H₀): Os dados seguem uma distribuição normal.

  • Hipótese Alternativa (H₁): Os dados não seguem uma distribuição normal.

Code
# Q-Q plot
            qqnorm(dados$Colesterol, main = "Q-Q Plot para Verificação de Normalidade")
            qqline(dados$Colesterol, col = "red", lwd = 2)  # Adiciona a linha de referência

Code
# Exemplo de código em R para o teste de Shapiro-Wilk
shapiro.test(dados$Colesterol)

    Shapiro-Wilk normality test

data:  dados$Colesterol
W = 0.98987, p-value = 0.3551
Code
shapiro.test(dados$Pressão_Arterial)

    Shapiro-Wilk normality test

data:  dados$Pressão_Arterial
W = 0.99209, p-value = 0.5743
  1. Homocedasticidade: A variância dos valores ao longo da linha de regressão deve ser constante, ou seja, a dispersão dos pontos deve ser similar para todos os valores das variáveis. Caso contrário, pode haver heterocedasticidade, o que viola esta pressuposição.
Code
 # Aplicando o teste de Bartlett
  bartlett.test(dados$Colesterol~dados$Atividade_Fisica)

    Bartlett test of homogeneity of variances

data:  dados$Colesterol by dados$Atividade_Fisica
Bartlett's K-squared = 1.236, df = 2, p-value = 0.539

H0: afirma que todas as variâncias dos grupos são iguais. H1: sugere que pelo menos uma das variâncias é diferente.

Escala de Medição: Ambas as variáveis devem ser medidas em uma escala intervalar ou de razão (QUANTITATIVAS).

Cálculo e Interpretação da Correlação de Pearson

O coeficiente de correlação de Pearson (( r )) varia entre -1 e 1:

  • ( r = 1 ): Correlação linear perfeita positiva.

  • ( r = -1 ): Correlação linear perfeita negativa.

  • ( r = 0 ): Nenhuma correlação linear.

Interpretação dos Resultados

A magnitude e a direção da correlação são determinadas pelo valor de ( r ):

  • Correlação forte: Quando ( r ) está próximo de -1 ou 1, indicando uma forte relação linear.

  • Correlação fraca: Quando ( r ) está próximo de 0, indicando uma fraca ou inexistente relação linear.

  • Significado do sinal: Se ( r ) for positivo, a relação entre as variáveis é direta (aumento de uma variável corresponde ao aumento da outra). Se ( r ) for negativo, a relação é inversa (aumento de uma variável corresponde à diminuição da outra).

Essas hipóteses e pressuposições são fundamentais para realizar a análise de correlação de Pearson corretamente e interpretar seus resultados de forma adequadaConclusão : O gráfico de pontos e coeficiente de correlação de Pearson (r) indicam que a correlação entre o nível de Colesterol e a Pressão arterial é fraca .

Code
# Testa se existe correlacao entre o consumo de sorvete e a temperatura
cor.test(
  x = dados$Colesterol, 
  y = dados$Pressão_Arterial, 
  method = "pearson"
)

    Pearson's product-moment correlation

data:  dados$Colesterol and dados$Pressão_Arterial
t = -0.58158, df = 148, p-value = 0.5617
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.2064330  0.1133779
sample estimates:
        cor 
-0.04775125 

Após calcular a correlação, o valor-p associado ao teste pode ser utilizado para verificar a significância estatística:

  • Se o valor-p for menor que o nível de significância (geralmente 0,05), rejeitamos a hipótese nula e concluímos que existe uma correlação linear significativa entre as duas variáveis.

  • Se o valor-p for maior ou igual a 0,05, não rejeitamos a hipótese nula, o que indica que não há evidências suficientes de uma correlação linear significativa entre as variáveis.

Conclusão : De acordo com o teste de correlação, as variáveis Colesterol e Pressão arterial não estão correlacionadas significativamente, ao nível de 5% de significância

Matriz de correlação - Variáveis Misturadas

Code
#Transformando todas as variáveis em numéricas

dados$Idade <- as.numeric(dados$Idade)
dados$IMC <- as.numeric(dados$IMC)
dados$Atividade_Fisica <- as.numeric(dados$Atividade_Fisica)
dados$Fumante <-  as.numeric(dados$Fumante)
dados$Colesterol <- as.numeric(dados$Colesterol)
dados$Pressão_Arterial <- as.numeric(dados$Pressão_Arterial)
 names(dados)
[1] "Idade"            "IMC"              "Atividade_Fisica" "Fumante"         
[5] "Colesterol"       "Pressão_Arterial"
Code
library(psych)

Anexando pacote: 'psych'
O seguinte objeto é mascarado por 'package:ltm':

    factor.scores
O seguinte objeto é mascarado por 'package:polycor':

    polyserial
Os seguintes objetos são mascarados por 'package:ggplot2':

    %+%, alpha
Code
Mmixed <- mixedCor(data=dados, p=3, c= c(1,2,5,6),d=4, smooth = F,correct = 0)
Code
Mmixed
Call: mixedCor(data = dados, c = c(1, 2, 5, 6), p = 3, d = 4, smooth = F, 
    correct = 0)
Warning in abbreviate(colnames(R), minlength = minlength): abbreaviate usado
com caracteres não-ASCII
                 Idade IMC   Atv_F Fumnt Clstr Prs_A
Idade             1.00                              
IMC              -0.14  1.00                        
Atividade_Fisica -0.10 -0.06  1.00                  
Fumante          -0.03 -0.01 -0.11  1.00            
Colesterol       -0.08 -0.02  0.02 -0.09  1.00      
Pressão_Arterial  0.00 -0.08 -0.10  0.14 -0.05  1.00
Code
str(Mmixed)
List of 6
 $ rho  : num [1:6, 1:6] 1 -0.1437 -0.1015 -0.0261 -0.0761 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:6] "Idade" "IMC" "Atividade_Fisica" "Fumante" ...
  .. ..$ : chr [1:6] "Idade" "IMC" "Atividade_Fisica" "Fumante" ...
 $ rx   : 'psych' num [1:4, 1:4] 1 -0.14365 -0.07608 0.00119 -0.14365 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:4] "Idade" "IMC" "Colesterol" "Pressão_Arterial"
  .. ..$ : chr [1:4] "Idade" "IMC" "Colesterol" "Pressão_Arterial"
 $ poly :List of 2
  ..$ rho: num 1
  ..$ tau: NULL
 $ tetra:List of 2
  ..$ rho: num 1
  ..$ tau: NULL
 $ rpd  : num [1, 1] -0.11
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr "Atividade_Fisica"
  .. ..$ : chr "Fumante"
 $ Call : language mixedCor(data = dados, c = c(1, 2, 5, 6), p = 3, d = 4, smooth = F, correct = 0)
 - attr(*, "class")= chr [1:2] "psych" "mixed"

Observação: Variáveis Poli, são variáveis categóricas com mais de dois níveis

A função mixedCor requer que todas as variáveis sejam de natureza numérica (Quantitativa).

Argumentos da função mixedCor:

p = posição de variáveis categóricas com mais de 2 níveis presentes no conjunto de dados;

c = posição variáveis contínuas no conjunto de dados;

d = posição variáveis categóricas com 2 níveis (dicotômica) presentes no conjuntos de dados.

Code
Rho<-Mmixed[["rho"]] #Considerando apenas os coeficientes de correlação (rho)
Rho<-round(Rho, 2) #Considerar 2 casas após a vírgula
Rho<-as.data.frame(Rho) #Transformando o conjunto com os valores do coenficiente em "planilha".
Code
library(ggcorrplot)
Warning: pacote 'ggcorrplot' foi compilado no R versão 4.4.2
Code
Correlogram<-ggcorrplot(Rho, type = "upper", lab = TRUE)

library(plotly)
Correlogram<-ggplotly(Correlogram)
Correlogram