Estatística Bivariada - NUT105 (Grupo 2)

Author

Thuany Martins Lazarino

Published

Invalid Date

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
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
library(corrplot)
corrplot 0.95 loaded
library(polycor)
Warning: pacote 'polycor' foi compilado no R versão 4.4.2
library(ltm)
Warning: pacote 'ltm' foi compilado no R versão 4.4.2
Carregando pacotes exigidos: MASS
Warning: pacote 'MASS' foi compilado no R versão 4.4.2

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

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

    select
Carregando pacotes exigidos: msm
Warning: pacote 'msm' foi compilado no R versão 4.4.2

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 à sapude e nutrição. Utilizaremos tabelas de contingência, gráficos e medidas estatísticas apropriadas para realizar esta análise.

#Semente:
set.seed(123)


# 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))
)

# Visualizar o conjunto de dados
head(dados)
  Idade  IMC Atividade_Fisica Fumante Colesterol Pressão_Arterial
1    32 28.2         Moderada     Sim        170              120
2    37 28.1            Baixa     Não        149               74
3    63 26.3             Alta     Não        253              137
4    41 21.0             Alta     Sim        154              110
5    42 24.5             Alta     Sim        194              123
6    66 23.9         Moderada     Sim        196              124

Observações:

  1. As medidas descritivas MÉDIA, MODA, MEDIANA, QUARTIS e PERCENTIS devem ser calculadas apartir de variáveis QUANTITATIVAS.
  2. Para variável QUALITATIVA ou CATEGÓRICA pode-se aplicar a medida descritiva MODA.

Relação entre VARIÁVEIS QUALITATIVAS e QUANTITATIVAS

Exemplo: relação entre Atividade Física e Índice de Composição Corporal (IMC)

Para examinar a associação enre a variável qualitativa (Atividade_Fisica) e a variável quantitativa (IMC), podemos utilizar análises estatísticas descritivas resultantes do cruzamento dessas variáveis. O uso de um gráfico boxplot representa uma ferramenta visual eficaz para fornercer evidências dessa relação, dessa forma, facilitando a interpretação das diferenças de distribuiçao do (IMC) entre os diferentes níveis de (Atividade_Fisica).

# 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                  24.7        24.1              3.68
2 Baixa                 26.0        25.5              3.76
3 Moderada              25.5        25.3              3.81

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

# 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 principais pontos como:

  • 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 maior IMC mediano um pouco menor (24,10) do que aqueles com atividade física moderada (25,30) e baixa atividade física (25,50).

  • Dispersão (caixas e bigodes): indicam a variação do IMC em cada grupo.

A atividade física mderada (desvio padrão = 3.814759) apresenta uma maior variação de valores de IMC, sugerindo que pessoas com atividade física moderada tem IMCs mais variados, enquanto a a atividade física alta (desvio padrão = 3.679909) tem menor dispersão.

  • Outliers (pontos fora da caixa e dos bigodes): são indivíduos que apresentam valores de IMC muito acima ou muito abaixo do esperado para cada grupo.

Alguns outliers são visíveis no grupo de atividade física alta e atividade física moderada, indicando a presença de indivíduos com IMC muito altos nesse 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.

O 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 coeficiente de correlação bisserail ou correlação polissérica são apropriados.

Para calcular esses coeficientes no R, você pode usar pacotes como polycor, que oferece funcções para obter tanto a correlação bisserial quanto a polissérica.

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

# 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.09627237

Interpretação dos Coeficientes de Correlação

Para interpretar os coeficientes de correlação bisserail 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 a variável ordinal representa uma discretização de uma distribuição subjacente.

Valores altos de ($r_poly$ - 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ína conforme as categorias da variável ordinal.

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

Teste 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= $

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 poluserial() 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 estatistitcamente diferentes de zero, confirmando a existência de uma associação significativa entre as variáveis contínua e qualitativa.

# 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.09627237 
cat("Valor t:", t_value, "\n")
Valor t: 1.17667 
cat("Valor-p:", p_value, "\n")
Valor-p: 0.2412165 

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

Hipóteses do teste:

\(HO = 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 é estatisticamente significativo.

  • Se o valor-p>0,05, NÃO rejeita H0 e conclui-se que o coeficiente de correlação polissérico estimado NÃO É ESTATÍSTITICAMENTE SIGNIFICATIVO.

CONCLUSÃO PARA O TESTE APLICADO: de acordo com o teste t não rejeitamos a hipótese de que o coeficiente polissérico estimado é igual a zero, logo, concluímos que a correlação estimada não pe estatísticamente significativa.

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

# 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.01596333
# 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.01596333 
cat("Valor t:", t_value, "\n")
Valor t: 0.1942271 
cat("Valor-p:", p_value, "\n")
Valor-p: 0.8462644 

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

Pressuposições do Teste de 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 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 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.

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ótese do Teste de 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 fpisica são dependentes. Associação significativa.

tabela_contingencia <- table(dados$Fumante, dados$Atividade_Fisica)
 tabela_contingencia
     
      Alta Baixa Moderada
  Não   26    24       21
  Sim   26    23       30
# 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.1862, df = 2, p-value = 0.5526

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

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

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

Hipóteses e Pressupossições para 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 Correalção de Pearson

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

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.

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.

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.

# 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

# 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.99304, p-value = 0.6833
shapiro.test(dados$Pressão_Arterial)

    Shapiro-Wilk normality test

data:  dados$Pressão_Arterial
W = 0.99097, p-value = 0.4551

Homocesdasticidade: a variância ao longo da linha da 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.

  # 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 = 0.466, df = 2, p-value = 0.7922

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

CONCLUSÃ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.

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 = 1.205, df = 148, p-value = 0.2301
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.06268358  0.25480460
sample estimates:
       cor 
0.09856814 

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

#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"
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
Mmixed <- mixedCor(data=dados, p=3, c= c(1,2,5,6),d=4, smooth = F,correct = 0)
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.16  1.00                        
Atividade_Fisica  0.11  0.10  1.00                  
Fumante           0.05 -0.02  0.10  1.00            
Colesterol        0.07 -0.13  0.09  0.02  1.00      
Pressão_Arterial -0.02 -0.02  0.07  0.05  0.10  1.00
str(Mmixed)
List of 6
 $ rho  : num [1:6, 1:6] 1 -0.162 0.1075 0.0484 0.0688 ...
  ..- 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.162 0.0688 -0.0164 -0.162 ...
  ..- 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.103
  ..- 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.

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".
library(ggcorrplot)
Correlogram<-ggcorrplot(Rho, type = "upper", lab = TRUE)

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