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.
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.
O coeficiente de correlação de Pearson é o mais comum e é usado para medir a correlação entre duas variáveis que têm uma relação linear. Ele varia de -1 a 1, onde -1 indica uma correlação negativa perfeita, 0 indica nenhuma correlação e 1 indica uma correlação positiva perfeita. Este coeficiente é sensível a valores extremos e requer que as variáveis tenham uma distribuição normal ou aproximadamente normal.
O coeficiente de correlação de Spearman \((\rho)\), por outro lado, é usado para medir a correlação entre duas variáveis que não têm uma relação linear. Em vez de medir a relação entre os valores brutos das variáveis, ele mede a relação entre os seus valores de classificação. Ele varia de -1 a 1, onde -1 indica uma correlação negativa perfeita, 0 indica nenhuma correlação e 1 indica uma correlação positiva perfeita. O coeficiente de correlação de Spearman é menos sensível a valores extremos e não requer que as variáveis tenham uma distribuição normal.
O coeficiente de correlação de Kendall (\(\tau\) de Kendall) é semelhante ao coeficiente de Spearman, mas é usado quando as variáveis são classificadas ordinalmente e há empates nos dados. Ele mede a relação entre os pares de dados que são classificados da mesma forma nas duas variáveis. O coeficiente de Kendall varia de -1 a 1, onde -1 indica uma correlação negativa perfeita, 0 indica nenhuma correlação e 1 indica uma correlação positiva perfeita.
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.
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”
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\).
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})\]
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'))
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.
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.
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.
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.
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.
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.
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.
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.
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.↩︎