1. Introdução ao conceito de correlação.


A correlação é um conceito fundamental na estatística e na análise de dados. Ela se refere à medida da relação entre duas variáveis, ou seja, a forma como elas se comportam juntas. A correlação pode ser positiva, negativa ou neutra, e é medida por meio do coeficiente de correlação.

2. Medidas de correlação.


Existem diferentes tipos de coeficientes de correlação que podem ser utilizados para medir a relação entre duas variáveis. As três medidas mais comuns são o coeficiente de correlação de Pearson, Kendall e Spearman. Embora as três medidas tenham o mesmo objetivo de medir a relação entre as variáveis, elas diferem em sua abordagem e na interpretação dos resultados. Vamos conhecer um pouco sobre elas.

Em resumo, o coeficiente de Pearson é adequado para dados contínuos que seguem uma distribuição normal e possuem uma relação linear, enquanto os coeficientes de Spearman e Kendall são adequados para dados ordinalmente classificados e que não seguem uma distribuição normal. É importante escolher o coeficiente de correlação adequado para o tipo de dados que está sendo analisado, para obter resultados precisos e confiáveis. O teste Qui-quadrado (\(x^2\)) de independencia (Determina a relação de dependência entre frequências), teste exato de fisher (Semelhante ao teste \(x^2\) quadrado mas, aplicado em amostras menores que 20 unidades), O coeficiente phi (\(\phi\)) (medida de associação entre duas variáveis binárias), V de Crámer (associação em tabelas não quadradas) e o coeficiente Kappa (concordância interobservador ) são outros exemplos de medidas de associação para além dos coeficientes de correlação já mencionados.

3. Interpretação da correlação.


Na área da saúde, o coeficiente de correlação pode ser usado para analisar a relação entre diferentes fatores e doenças, como por exemplo, a relação entre a atividade física e a saúde cardíaca, ou a relação entre a ingestão de alimentos ricos em gordura e o risco de doenças cardiovasculares (Relações Positivas). Estudos têm demonstrado que quanto mais ativo fisicamente uma pessoa é, menor é o risco de doenças cardíacas (Relação Negativa). Se o coeficiente de correlação entre a atividade física e a saúde cardíaca for próximo a 1, indica uma forte correlação positiva entre as variáveis, ou seja, quanto mais ativo fisicamente uma pessoa é, menor é o risco de doenças cardíacas.

Portanto, os coefecientes de correlação informam a intensidade (utilizando um intervalo entre -1 e 1) e a direção (positiva ou negativa) além da significância (utilizando de valore de p). É importante abstrair a ideia de “Bem” e “Mal”, “Bom” e “Ruim” quando estamos avaliando se um coeficiente de correlação é positivo ou negativo. Estes sinais apenas apontam para a direção da associação entre as variáveis. E apesar de ser muito tentador e por vezes até um tanto lógico, não utilize jamais um coeficiente de correlação ou outra medida de associação como forma de estabelecer causalidade. Repita em voz alta sempre:

“RELAÇÃO OU ASSOCIAÇÃO NÃO ESTABELECE CAUSALIDADE”



4. Exemplos práticos de cálculo.

4.1 Coeficiente de correlação

Vamos apresentar algumas das manipulações comuns em um banco de dados para se obter informações sobre o coeficiênte de correlação. Para isso utilizaremos o dataset women do pacote datasets 1. Faremos primeiramente uma análise descritiva e em seguida faremos as devidas associações.

# Criando um dataframe a partir do dataset "women" (nativo do R e pertencente ao pacote "datasets")
library(tidyverse)
meu_df <- datasets::women

# Conhecendo o dataframe 
head(meu_df)
##   height weight
## 1     58    115
## 2     59    117
## 3     60    120
## 4     61    123
## 5     62    126
## 6     63    129


Conforme pode ser percebido na visualização das primeiras 6 linhas (uso da função head()) do dataframe que criamos à partir do dataset women, as unidades de medida não estão adequadas so Sistema Internacional (SI) para medidas de peso e comprimento. Do mesmo modo, o nome das variáveis (colunas) está em inglês.

# Vamos converter as unidades para o SI.
# Estatura deverá ser convertida para centímetros (cm) e Peso Corporal para quilogramas (kg)
meu_df$height <- meu_df$height*2.54
meu_df$weight <- meu_df$weight*0.45359237


# Vamos alterar os nomes das variáveis para língua portuguesa
meu_df <- dplyr::rename(meu_df, Est = height, Peso_Corp = weight)

head(meu_df)
##      Est Peso_Corp
## 1 147.32  52.16312
## 2 149.86  53.07031
## 3 152.40  54.43108
## 4 154.94  55.79186
## 5 157.48  57.15264
## 6 160.02  58.51342


Uma vez que agora temos os dados de peso corporal e estatura conforme desejávamos (no SI), podemos calcular o índice de massa corporal IMC de maneira mais simples. Obviamente que todas as operações anterioes (transformação das medias) poderiam estar aninhadas em uma única linha de código.

meu_df <- mutate(meu_df, IMC = Peso_Corp/((Est/100)^2))
head(meu_df)
##      Est Peso_Corp      IMC
## 1 147.32  52.16312 24.03478
## 2 149.86  53.07031 23.63089
## 3 152.40  54.43108 23.43565
## 4 154.94  55.79186 23.24041
## 5 157.48  57.15264 23.04546
## 6 160.02  58.51342 22.85109


Uma forma de aninhar todas as funções anteriores seria utilizar o operador pipe ( %>% ) e sequenciar as tarefas. Vamos fazer um exemplo disso abaixo.

# Vamos criar outro dataframe apenas pare este exemplo.
meu_df2 <- datasets::women

# Agora vamos realizar tudo que fizemos anteriormente em uma única instrução.

meu_df2 <- meu_df2 %>%
  rename(Est = height, Peso_Corp = weight) %>%
  mutate(Est = Est*2.54,
         Peso_Corp = Peso_Corp*0.45359237,
         IMC = Peso_Corp/((Est/100)^2))

head(meu_df2)
##      Est Peso_Corp      IMC
## 1 147.32  52.16312 24.03478
## 2 149.86  53.07031 23.63089
## 3 152.40  54.43108 23.43565
## 4 154.94  55.79186 23.24041
## 5 157.48  57.15264 23.04546
## 6 160.02  58.51342 22.85109


Agora que temos um dataset com essas 3 variáveis quantitativas do tipo contínua, vamos conhecer as medidas descritiva de cada uma delas. Para isso, podemos usar várias funções diferentes e de diferentes pacotes. Vamos aos exemplos. A função summary é interessante do ponto de vista da distribuição da variável, pois podemos observar medidas de tendência central (média e mediana), medidas de dispersão e posição (mínimo valor, máximo valor, 1º quartil e 3º quartil).

# Primeiro a função summary() nativa do R
summary(meu_df)
##       Est          Peso_Corp          IMC       
##  Min.   :147.3   Min.   :52.16   Min.   :22.10  
##  1st Qu.:156.2   1st Qu.:56.47   1st Qu.:22.22  
##  Median :165.1   Median :61.23   Median :22.46  
##  Mean   :165.1   Mean   :62.02   Mean   :22.73  
##  3rd Qu.:174.0   3rd Qu.:67.13   3rd Qu.:23.14  
##  Max.   :182.9   Max.   :74.39   Max.   :24.03


Existe uma família de funções summarise() no dplyr, cada uma com uma especificidade. Aqui vamos utilizar a versão que aplica em todas as colunas do dataframe o que desejamos calcular (argumento fun da função). Podemos passar um cálculo de cada vez ou todos de uma vez (embora menos interessante). Esta função se limita sempre ao que o operador declara no argumento fun da função e, portanto, tem uma especifidade maior mas ao mesmo tempo uma enorme flexibilidade para compor a saída da função que se deseja.

# Uma função de cada vez. Aqui teremos a média aritmética.
dplyr::summarise_all(meu_df, mean)
##     Est Peso_Corp      IMC
## 1 165.1   62.0212 22.72668
# Aqui teremos o desvio padrão (sd)
dplyr::summarise_all(meu_df, sd)
##        Est Peso_Corp       IMC
## 1 11.35923  7.030089 0.6183451
# Agora os dois dados passados juntos no argumento "fun" da função "summarise_all()"
dplyr::summarise_all(meu_df, c(mean,sd))
##   Est_fn1 Peso_Corp_fn1  IMC_fn1  Est_fn2 Peso_Corp_fn2   IMC_fn2
## 1   165.1       62.0212 22.72668 11.35923      7.030089 0.6183451


O pacote psych traz funções principalmente para análise multivariada e construção de escala usando análise fatorial, análise de componentes principais, análise de cluster e análise de confiabilidade. Outras funções importantes forneçam estatísticas descritivas básicas. Traz ainda funções para analisar dados em vários níveis incluindo estatísticas dentro e entre grupos, correlações e análise fatorial.

# Agora com a função describe() do pacote "psych" que irá gerar uma estatística descritiva mais completa.
psych::describe(meu_df)
##           vars  n   mean    sd median trimmed   mad    min    max range skew
## Est          1 15 165.10 11.36 165.10  165.10 15.06 147.32 182.88 35.56 0.00
## Peso_Corp    2 15  62.02  7.03  61.23   61.83  8.07  52.16  74.39 22.23 0.23
## IMC          3 15  22.73  0.62  22.46   22.67  0.47  22.10  24.03  1.94 0.70
##           kurtosis   se
## Est          -1.44 2.93
## Peso_Corp    -1.34 1.82
## IMC          -0.95 0.16


Podemos utilizar o resultado da função anterior para passar em um objeto do tipo gt() e obtermos uma tabela para exibição em apresentações ou publicação científica.

# Visualizando a estatística descritiva feita anteriormente em um formato de tabela e salvando em um objeto

tabela <- psych::describe(meu_df) %>%
  gt::gt() %>%
  gt::tab_header("Tabela 01: Análise descritiva dos dados de Peso Corporal (kg), Estatura (cm) e IMC (kg/m2) em mulheres americanas.") %>% 
  gt::tab_options(heading.align = "left") %>%
  gt::fmt_number(columns = everything(), decimals = 2) %>% 
  gt::tab_source_note("Fonte: Adaptado do Package: datasets (Dataset: women) | Brasil (Brasil, Março de 2023.")



Uma vez que a tabela foi produzida, podemos salvar como um arquivo de imagem, pdf, ou docx (word document) novamente usando uma função do pacote gt chamada gtsave(). Repare nos argumentos abaixo e faça as devidas substituições para atender às suas necessidades de nome de arquivo (filename =) e local (path =).

gt::gtsave(data = tabela,filename = "minha_tabela.docx", path = "C://Users/Gleidson/Desktop/")


Vamos investigar agora a associação existente entre as variáveis do nosso dataset. Para isso, podemos usar vários recursos (funções) de inúmeros pacotes. Vamos usar a a função cor(), do pacote stats, nativa do R.

# Est vs Peso_Corp
cor(x = meu_df$Est, y = meu_df$Peso_Corp)
## [1] 0.9954948
# Peso_Corp vs Est
cor(x = meu_df$Peso_Corp, y = meu_df$Est)
## [1] 0.9954948
# Est vs IMC
cor(x = meu_df$Est, y = meu_df$IMC)
## [1] -0.9380678
# IMC vs Est
cor(x = meu_df$IMC, y = meu_df$Est)
## [1] -0.9380678
# IMC vs Peso_Corp
cor(x = meu_df$IMC, y = meu_df$Peso_Corp)
## [1] -0.9011408
# Peso_Corp vs IMC
cor(x = meu_df$Peso_Corp, y = meu_df$IMC)
## [1] -0.9011408


Repare que, quando invertemos os argumentos x e y os resultados do coeficiente de correlação continua o mesmo. Mas em termos didáticos, tem uma diferença na leitura da sentença obtida com o cálculo.

Agora que temos os valores de associação entre as variáveis de nosso dataset, como saber se a correlação é significativa? O teste de significância segue as seguintes hipóteses:

H0: Não existe correlação (\(p \geq 0.05\))
H1: Existe correlação (\(p < 0.05\))


cor.test(x = meu_df$IMC, y = meu_df$Est, method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  meu_df$IMC and meu_df$Est
## t = -9.7625, df = 13, p-value = 2.376e-07
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.9795975 -0.8197025
## sample estimates:
##        cor 
## -0.9380678

Como resultado do teste, temos várias informações. Desde a estatística t (t), os graus de liberdade (df), o valor da probabilidade associada ao teste (p-value), o intervalo de confiança para 95% (95 percent confidence interval) e o valor do coeficiente de correlação (cor). Desse modo, é mais útil utilizar a função cor.test() em lugar da função cor() pelo fato de apresentar mais informações. Mesmo assim perceba que teremos que passar cada par de associações para se obter as associações possíveis no dataset existente.

Usando a função corr_coef() do pacote metan podemos abter de maneira mais rápida, todas as associações possíveis no dataset. Veja abaixo.

metan::corr_coef(meu_df)
## ---------------------------------------------------------------------------
## Pearson's correlation coefficient
## ---------------------------------------------------------------------------
##              Est Peso_Corp    IMC
## Est        1.000     0.995 -0.938
## Peso_Corp  0.995     1.000 -0.901
## IMC       -0.938    -0.901  1.000
## ---------------------------------------------------------------------------
## p-values for the correlation coefficients
## ---------------------------------------------------------------------------
##                Est Peso_Corp       IMC
## Est       0.00e+00  1.09e-14  2.38e-07
## Peso_Corp 1.09e-14  0.00e+00  4.53e-06
## IMC       2.38e-07  4.53e-06 3.88e-103


Repare que os valores de p (exceto na diagonal de mesmas variáveis) apresentam números tão pequenos que foi necessário representá-los em notação científica. Esses valores apresentados podem ser facilmente apresentados como: \(< 0.001\).

4.2 Coeficientes de Regressão

Vimos até aqui que a correlação mede a força e a direção da relação entre duas variáveis. Agora vamos conhecer um pouco sobre a regressão linear que é uma técnica que permite estimar a relação funcional entre duas variáveis. Em outras palavras, ela pode ser usada para prever os valores de uma variável com base nos valores da outra variável. Para isso, ela se baseia em um modelo matemático que assume uma relação linear entre as duas variáveis.

Enquanto a correlação mede a força e a direção da relação entre duas variáveis, a regressão linear estima a relação funcional entre elas. Por exemplo, suponha que queremos estudar a relação entre a estatura (Est) e o peso corporal (Peso_Corp) de um grupo de pessoas. Se usarmos a correlação, podemos determinar se a altura e o peso estão positivamente ou negativamente relacionados. Por outro lado, se usarmos a regressão linear, podemos estimar a relação funcional entre a altura e o peso, ou seja, podemos prever o peso corporal de uma pessoa com base na sua estatura.

É importante notar que, embora a regressão linear possa ser usada para prever valores, ela não implica causalidade entre as variáveis. A relação estimada pela regressão pode ser afetada por outros fatores que não foram considerados no modelo. Em resumo, a correlação e a regressão linear são duas técnicas estatísticas diferentes para analisar a relação entre duas variáveis. A correlação mede a força e a direção da relação entre elas, enquanto a regressão linear estima a relação funcional entre elas. Cada uma delas pode ser usada para fins diferentes, dependendo do objetivo da análise estatística. Embora ambas estejam relacionadas, elas têm objetivos e abordagens diferentes. Vamos aos exemplos!

# Usando a função lm() nativa do R. Repare que o primeiro argumento é a fórmula ao invés do dataset. Mesmo assim, é possível declarar os argumentos explicitamente e alterar a ordem se quiser.
meu_modelo <- lm(Peso_Corp ~ Est, meu_df)

# Aplicando a função summary() no modelo criado

summary(meu_modelo)
## 
## Call:
## lm(formula = Peso_Corp ~ Est, data = meu_df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.7862 -0.5141 -0.1739  0.3364  1.4137 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -39.69689    2.69295  -14.74 1.71e-09 ***
## Est           0.61610    0.01628   37.85 1.09e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6917 on 13 degrees of freedom
## Multiple R-squared:  0.991,  Adjusted R-squared:  0.9903 
## F-statistic:  1433 on 1 and 13 DF,  p-value: 1.091e-14


Vamos interpretar o que foi feito até aqui. Quando investigamos a associação entre as variáveis do dataset meu_df pudemos vefificar uma forte associação positiva (\(r = 0.995\)) ente o Peso Corporal (Peso_Corp) e a Estatura (Est) do grupo de mulheres investigadas. Desse modo, é coerente afirmar que quanto mais a Estatura de um indivíduo aumenta, o seu Peso Corporal também tende a aumentar. Na sequência, quando rodamos uma regressão linear para criar um modelo de predição do Peso Corporal baseado na Estatura (lm(Peso_Corp ~ Est, meu_df ), obtivemos o necessário para preencher um modelo de regressão linear simples: \[y = \alpha + \beta(x)\] O coeficiente \(\alpha\) pode ser observado no resultado da função lm() como o valor da linha Intercept (que é o valor no qual a linha ajustada do modelo cruza o eixo y) da coluna Estimate. O coeficiente \(\beta\) é o valor da linha Est da mesma coluna (Estimate) pois foi a Estatura que utilizamos para prever o Peso Corporal. Assim, preenchendo os valores adequadamente conforme o que foi obtido na análise, temos o seguinte modelo: \[\text{Peso Corporal (kg)} = -39.69689 + 0.6161(\text{Estatura em cm})\] Vamos então, criar um modelo para prever o IMC, baseado nas associações do IMC com o Peso_Corp e Est . Se recorrermos a tabela de associação criada com corr_coef() do pacote metan podemos observar que a maior associação do IMC foi com a Estatura (-0.938). Deste modo, vamos utilizar este critério para prever o IMC baseado somente na Estaura em cm.

# Perceba que agora não salvaremos a lm() em um objeto. Vamos passar a função lm() direto como argumento da função summary().
summary(lm(IMC ~ Est, meu_df))
## 
## Call:
## lm(formula = IMC ~ Est, data = meu_df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.26173 -0.15029 -0.05696  0.09323  0.42342 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 31.157373   0.865481  36.000 2.08e-14 ***
## Est         -0.051064   0.005231  -9.763 2.38e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2223 on 13 degrees of freedom
## Multiple R-squared:   0.88,  Adjusted R-squared:  0.8707 
## F-statistic: 95.31 on 1 and 13 DF,  p-value: 2.376e-07


Baseado no resultado podemo escrever agora no nosso modelo de predição para o IMC com base na Estatura das mulheres investigadas. \[\text{IMC}(kg/m^2) = 31.157373 - 0.051064(\text{Estatura em cm})\]

5. Exemplos práticos com gráficos.

Agora vamos utilizar maneiras mais elaboradas de analisar e apresentar as análises de associação ou de regressão linear entre variáveis em um dataset. Iniciaremos com as funções nativas do R tais como plot() e abline().

# A função plot() insere os pontos de acordo com o sistema de coordenadas (x e y) para cada amostra.
plot(IMC ~ Est, pch = 16, data = meu_df)

# salvando o modelo em um objeto
meu_modelo <- lm(IMC ~ Est, meu_df)

# Passando o objeto como argumento da função abline() para adicionar a reta de ajuste do modelo. Se esta função não for rodada, então o gráfico apresentará apenas os pontos inseridos na função plot().
abline(meu_modelo, col = "red")


Outros pacotes são mais eficazes para a representação gráfica de medidas de associação e modelos de regressão linear. O mais famoso deles, certamente é o ggplot2. O ggplot2 permite criar visualizações sofisticadas e elegantes. Ele é construído em torno do conceito de gramática dos gráficos (particularmente eu chamaria de camadas), que define as regras para construir visualizações com base nos dados. Com o ggplot2, é possível criar gráficos de dispersão, histogramas, gráficos de barras, gráficos de linhas, mapas de calor e muito mais, além de personalizar cores, temas, legendas e outros elementos gráficos. O ggplot2 é altamente personalizável e permite que os usuários construam gráficos complexos com poucas linhas de código. É uma ferramenta poderosa para a visualização de dados em qualquer área de pesquisa ou análise de dados.


Observando a figura acima e comparando com o script abaixo, você pode perceber que utilizaremos pelo menos 4 camadas para criar o gráfico abaixo. A camada Data (data); a camada Aesthetics (aes); a camada Geometries (geom_point(), geom_smooth()); a camada Statistics (stat_cor() e stat_regline_equation() do pacote ggpubr); e a camada Theme (labs()).

ggplot(data = meu_df,
       aes(y = IMC, x = Est)) +
  geom_smooth() +
  geom_point() +
  ggpubr::stat_cor(label.y = 22.5, p.accuracy = 0.001) +
  ggpubr::stat_regline_equation(label.y = 22.3) +
  labs(title = "Meu primeiro gráfico ggplot2",
       subtitle = "Aprendi com o Prof. Gleidson :)",
       x = "Estatura (cm)", y = bquote("IMC "(kg/m^2)))


Vamos agora fazer uma combinação de visualização gráfica e numérica usando novamente o pacote psych.

psych::pairs.panels(meu_df, digits = 4)


Na figura acima, os pontos observados são plotados na diagonal inferior. Na diagonal, é apresentada a estimativa da densidade Kernel (linha preta) e um histgrama de cada variável. A diagonal superior contém os coeficientes de correlação (como não foi especificado no argumento method = então sabemos que é Pearson por definição.

A função corr_plot() do pacote metan retorna um gráfico semelhante ao anterior, no entanto possui diversas opções, tais como mudança no tamanho da letra dependendo da magnitude da correlação e indicação de cores para correlações significativas.

metan::corr_plot(meu_df)


A função corrplot() e corrplot.mixed() do pacote corrplot também são boas opções para visualização gráfica, principalmente quando um grande número de combinações está disponível (o que não é o nosso caso).

meu_df %>% cor() %>% corrplot::corrplot()

meu_df %>% cor() %>% corrplot::corrplot.mixed(number.digits = 3)

meu_df %>% cor() %>% corrplot::corrplot(method = "pie")


Um estimador não paramétrico do intervalo de confiança do coeficiente de correlação de Pearson é um estimador baseado no tamanho da amostra e força de associações e pode ser estimado usando a função corr_ci() do pacote metan. É possível estimar o intervalo de confiança declarando o tamanho da amostra (n) e o coeficiente de correlação (r), ou usando um dataframe. O código a seguir calcula o intervalo de confiança para os possíveis pares de correlação entre as variáveis de nosso dataset (dataframe) meu_df. A função plot_ci() faz a renderização da função corr_ci() de maneira a produzir o gráfico.

meu_df %>% 
  metan::corr_ci() %>%
  metan::plot_ci()
## # A tibble: 3 × 7
##   V1        V2          Corr     n    CI     LL     UL
##   <chr>     <chr>      <dbl> <int> <dbl>  <dbl>  <dbl>
## 1 Est       Peso_Corp  0.995    15 0.264  0.732  1.26 
## 2 Est       IMC       -0.938    15 0.276 -1.21  -0.662
## 3 Peso_Corp IMC       -0.901    15 0.284 -1.19  -0.617


Por último, e não menos importante, vamos construir alguns gráficos com o pacote GGally e ver se algo modifica nossa perspectiva sobre os gráficos anteriores.

GGally::ggpairs(meu_df)

GGally::ggcorr(meu_df, method = c('all.obs', 'spearman'))



6. Limitações da correlação

Agora que já vimos muitas das coisas que estão por trás processamento de dado com vistas às medidas de correlação e regressão linear, precisamos manter em mente que apesar de ser muito tentador estabelecer relação de causalidade entre as variáveis isso é uma limitação constante nesses tipos de estudo. É uma linha muito tênue entre mencionar quanto uma variável está relacionada á outra até do ponto de vista funcional (podendo uma ser um preditor da outra) e passar a mensagem de que uma é a causa da outra. É importante lembrar que essas medidas têm suas limitações e devem ser interpretadas com cuidado. Abaixo, serão apresentadas algumas limitações dessas medidas.

Correlação

  1. Causalidade: A correlação entre duas variáveis não implica necessariamente em uma relação causal entre elas. Ou seja, pode haver uma correlação forte entre duas variáveis, mas isso não significa que uma variável está causando a outra. É preciso ter cuidado ao interpretar a correlação como uma relação de causa e efeito.

  2. Outliers: A presença de outliers (valores extremos) pode distorcer a correlação entre as variáveis. Isso pode levar a uma interpretação incorreta da relação entre as variáveis.

  3. Amostragem: A correlação pode ser afetada pela seleção da amostra. É possível que a correlação seja diferente em outra amostra, especialmente se a amostra for pequena.

Regressão linear

  1. Linearidade: A regressão linear pressupõe uma relação linear entre as variáveis. Se a relação não for linear, a regressão linear não será adequada para analisar a relação entre as variáveis.

  2. Homocedasticidade: A regressão linear também pressupõe homocedasticidade, ou seja, que a variação da variável dependente é constante em todas as faixas de valores da variável independente. Se houver heterocedasticidade, a regressão linear não será adequada.

  3. Independência dos erros: A regressão linear pressupõe que os erros de previsão são independentes uns dos outros e não estão correlacionados. Se houver correlação entre os erros, isso pode afetar a validade dos resultados da regressão.

É importante ter em mente essas limitações ao usar medidas de correlação e regressão linear para analisar a relação entre variáveis. A interpretação correta dos resultados depende de uma análise cuidadosa das suposições subjacentes às medidas e das limitações específicas do conjunto de dados em questão.

Uma outra limitação pouco mencionada, está na publicação dos resultados e divulgação científica. A representação gráfica de associações e até de modelos matemáticos, frequentemente é negligenciada e, portanto, torna-se obscuro acreditar apenas nos valores numéricos. Para elucidar esse assunto, vamos utilizar o quarteto de Anscombe que é um conjunto contendo outros quatro conjuntos de dados, cada um com 11 pares de valores x e y, que apresentam uma mesma medida de correlação e regressão linear, mas apresentam distribuições e características distintas. Esse quarteto foi proposto pelo estatístico Francis Anscombe em 1973, como uma forma de destacar a importância da visualização de dados e da análise gráfica na interpretação de resultados estatísticos.

Os quatro conjuntos de dados apresentam valores de correlação de Pearson próximos a 0,81 e coeficientes de regressão linear muito próximos, o que os torna semelhantes em termos de análise estatística. No entanto, quando os dados são plotados, fica evidente que cada conjunto de dados apresenta uma distribuição e um padrão diferente. Enquanto um conjunto apresenta uma relação linear forte, outro apresenta uma relação quadrática, e outro apresenta um outlier influente.

Vejamos os dados:

# Conhecendo o dataset "anscombe"
head(anscombe)
##   x1 x2 x3 x4   y1   y2    y3   y4
## 1 10 10 10  8 8.04 9.14  7.46 6.58
## 2  8  8  8  8 6.95 8.14  6.77 5.76
## 3 13 13 13  8 7.58 8.74 12.74 7.71
## 4  9  9  9  8 8.81 8.77  7.11 8.84
## 5 11 11 11  8 8.33 9.26  7.81 8.47
## 6 14 14 14  8 9.96 8.10  8.84 7.04
# Salvando o dataset em um outro objeto
Anscombe <- with(anscombe,
                 data.frame(x = c(x1, x2, x3, x4),
                            y = c(y1, y2, y3, y4),
                            group = gl(4,nrow(anscombe))))

# Novo arrando do dataset
head(Anscombe)
##    x    y group
## 1 10 8.04     1
## 2  8 6.95     1
## 3 13 7.58     1
## 4  9 8.81     1
## 5 11 8.33     1
## 6 14 9.96     1
# Visualizando os dados
ggplot(Anscombe, aes(x, y)) +
  geom_point(shape = 21, size = 4, color = "black", fill = "red") +
  geom_smooth(method = 'lm', se = FALSE, color = "blue", size = 1.5) +
  facet_wrap(~ group) +
  labs(title = "Quarteto de Anscombe",
       subtitle = "(by: Prof. Dr. Gleidson Rebouças)",
       caption = "Universidade do Estado do Rio Grande do Norte - UERN",
       x = "Variável 1",
       y = "Variável 2") +
  annotate("text",
           x = 16,
           y = 5.2,
           label = "mean = 7.5\nsd = 2.0\nr = 0.82",
           color = "black",
           fontface = 2,
           size = 3,
           hjust = 0)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.


A utilização didática do quarteto de Anscombe é fundamental para demonstrar que a análise gráfica é imprescindível na análise de dados. Ele é frequentemente usado em cursos de estatística para mostrar aos alunos que a análise numérica de dados pode ser enganosa e que é importante sempre visualizar os dados graficamente para compreender a relação entre as variáveis. Através do quarteto de Anscombe, é possível ver como os mesmos resultados estatísticos podem ser obtidos a partir de conjuntos de dados completamente diferentes, e como a análise gráfica pode ser a chave para interpretar esses resultados corretamente.

Além disso, o quarteto de Anscombe é útil para demonstrar a importância da verificação das suposições subjacentes aos modelos estatísticos. Embora os quatro conjuntos de dados apresentem a mesma medida de correlação e regressão linear, cada conjunto apresenta suposições distintas sobre a distribuição dos dados e sobre a natureza da relação entre as variáveis. É importante verificar se as suposições subjacentes aos modelos estatísticos são atendidas pelos dados em questão antes de realizar qualquer análise numérica.

7. Considerações Finais

Se Pearson estivesse vivo hoje e fosse o responsável para concluir o que aprendemos aqui, provavelmente ele ressaltaria a importância de sempre ter cautela ao interpretar os resultados de correlação. Pearson era um estatístico reconhecido por seu trabalho pioneiro na correlação, e certamente estaria satisfeito em ver a importância que a correlação continua a ter na pesquisa atual.

No entanto, provavelmente ele também faria mais uma vez, menção às limitações das medidas de correlação e da importância de avaliar cuidadosamente as suposições subjacentes aos modelos estatísticos. Certamente ele enfatizaria mais uma vez que a correlação não implica causalidade, e que é importante sempre considerar outras variáveis que possam estar influenciando a relação entre as variáveis em questão.

Como um estatístico que trabalhou incansavelmente para desenvolver novas técnicas estatísticas e para aplicá-las a uma ampla variedade de campos, sem dúvida seria entusiasmado em ver a evolução da análise de correlação e da estatística em geral. Por fim, Pearson provavelmente enfatizaria a importância da transparência e da replicabilidade na pesquisa científica. Defensor da metodologia científica rigorosa e da aplicação cuidadosa das técnicas estatísticas, provavelmente já teria sido cancelado nas redes sociais, assim ele estivesse vivo e participando das redes, devido às suas ardentes críticas à transparência e divulgação dos resultados ciêntíficos.


  1. Todas as vezes que você não tiver um pacote instalado, recorra à função: install.packages("nome do pacote entre aspas"). Uma vez que tiver instalado o pacote, você pode carregar as funções de duas maneiras: a) chamando a função library(nome do pacote sem aspas) e depois chamar a função que deseja; b) passar o nome do pacote seguido de 2x dois pontos e chamar a função em seguida.↩︎