Correlação Entre Duas Variáveis: cor()
A correlação pergunta: quando uma variável sobe, a outra tende a subir também (positiva), a descer (negativa) ou a fazer o que bem entender (perto de zero)? No R isso é uma chamada:
A resposta é cerca de −0,87: carros mais pesados têm consumo pior, e a relação é forte. Esse número único é o coeficiente de correlação de Pearson, universalmente escrito como r.
Lendo o r
O coeficiente sempre fica entre −1 e +1. O sinal dá a direção; a magnitude dá a força:
| |r| | Leitura típica | | --- | --- | | 0,0 – 0,2 | desprezível | | 0,2 – 0,4 | fraca | | 0,4 – 0,6 | moderada | | 0,6 – 0,8 | forte | | 0,8 – 1,0 | muito forte |
Trate essas faixas como pontos de partida para uma conversa, não como lei - na física um r de 0,6 é decepcionante, na psicologia é o auge de uma carreira. Duas propriedades que vale internalizar: r não tem unidades (correlacionar peso-em-toneladas com mpg dá o mesmo r que peso-em-quilos com mpg, porque r é calculado sobre valores padronizados), e r mede apenas associação linear - uma relação perfeitamente em forma de U pode ter r ≈ 0.
E a frase que precisa ser dita: correlação não é causalidade. Vendas de sorvete e mortes por afogamento se correlacionam fortemente ao longo dos meses do ano - não porque sorvete afogue pessoas, mas porque o verão impulsiona os dois. Uma correlação te diz que duas variáveis se movem juntas; ela é silenciosa sobre o porquê. Talvez x cause y, talvez y cause x, talvez uma terceira coisa (a estação, neste caso) cause ambos. Decidir entre essas opções exige experimentos ou raciocínio causal cuidadoso, não um r maior.
Spearman e Kendall: Quando Pearson É a Ferramenta Errada
Pearson trabalha com os valores brutos, o que o torna sensível a outliers e cego a relações curvas. O argumento method alterna para alternativas baseadas em postos:
Spearman substitui cada valor pelo seu posto e depois calcula Pearson sobre os postos. Como y sempre cresce conforme x cresce, todos os postos se alinham e Spearman reporta exatamente 1 - o tamanho do outlier deixa de importar, apenas sua posição. Recorra a Spearman quando os dados forem ordinais (escalas de pesquisa), fortemente assimétricos, ou quando a relação for monotônica mas não reta. Kendall responde a uma pergunta semelhante a partir de pares concordantes/discordantes; é mais robusto em amostras pequenas mas mais lento, e Spearman é o padrão comum.
A Matriz de Correlação
Para varrer relações entre muitas variáveis de uma vez, entregue várias colunas numéricas ao cor():
Cada variável contra todas as outras, com 1s na diagonal (tudo se correlaciona perfeitamente consigo mesmo) e uma imagem espelhada em torno dela. Arredondar para duas casas importa mais do que parece - a matriz sem arredondamento é uma parede de dígitos, e o objetivo de uma matriz é ser examinada. Aqui o exame mostra que mpg se correlaciona negativamente com as três (carros mais pesados, mais potentes e com motores maiores queimam mais combustível), enquanto wt, hp e disp são todos fortemente positivos entre si - um agrupamento de variáveis de "carro grande" que vai importar quando você chegar à regressão linear e às suas dores de cabeça com multicolinearidade.
Valores Ausentes: o Argumento use
Com dados ausentes, o padrão do cor() é retornar NA em vez de adivinhar:
use = "complete.obs"descarta toda linha que contenha qualquerNAe depois calcula a matriz inteira com os sobreviventes. Consistente, mas perdulário - umwtausente também remove aquela linha do parmpg–hp.use = "pairwise.complete.obs"calcula cada célula a partir de todas as linhas em que aquele par está presente. Aproveita mais dados, mas células diferentes se apoiam em subconjuntos diferentes, o que pode, muito ocasionalmente, produzir uma matriz que não é internamente consistente.
Para um ou dois NAs soltos qualquer um serve; apenas diga qual você usou.
É Significativa? cor.test()
cor() dá um número mas nenhuma noção de se ele poderia ser ruído. cor.test() roda o teste de hipótese:
Percorra a saída bloco a bloco:
- t = −9.56, df = 30 - a estatística do teste. A hipótese nula é que a correlação verdadeira é zero; o r observado é convertido em uma estatística t com n − 2 graus de liberdade (32 carros − 2).
- p-value = 1.29e-10 - se a correlação verdadeira fosse zero, a probabilidade de ver um r tão distante de zero em uma amostra de 32 seria cerca de 0,0000000001. Isso é evidência esmagadora de que a associação é real - mas lembre-se: o p-valor fala sobre se r difere de zero, não sobre se a relação é grande ou causal.
- 95 percent confidence interval: −0.93 a −0.74 - a faixa plausível para a correlação verdadeira. Muitas vezes mais útil que o p-valor: até a ponta otimista desse intervalo é uma correlação negativa forte.
- sample estimates: cor = −0.87 - o mesmo número que
cor()te deu.
Amostras pequenas merecem respeito extra aqui: com n = 10, correlações de ±0,5 aparecem por sorte com uma frequência alarmante, e o intervalo de confiança largo vai te dizer isso. Reporte o intervalo, não apenas o p-valor.
Vendo com os Olhos: Sempre Plote
Um coeficiente de correlação comprime uma relação inteira em um número, e a compressão pode esconder curvatura, agrupamentos ou um único ponto fazendo todo o trabalho. Antes de confiar em qualquer r, olhe o gráfico de dispersão:
plot(mtcars$wt, mtcars$mpg) # one pair
pairs(mtcars[, c("mpg", "wt", "hp", "disp")]) # every pair in the matrix
pairs() desenha uma grade de gráficos de dispersão correspondente à sua matriz de correlação - a forma mais rápida de checar que os números significam o que você pensa. Para gráficos de matriz polidos no estilo mapa de calor, o pacote corrplot (install.packages("corrplot"), depois corrplot(cor(m))) é a ferramenta padrão.
O Que Você Leva Daqui
cor(x, y)dá o r de Pearson: o sinal é a direção, a magnitude é a força, sempre em [−1, 1], sem unidades.- A correlação mede o co-movimento linear e não diz nada sobre causalidade - uma terceira variável escondida é sempre uma candidata.
method = "spearman"para postos: dados ordinais, outliers, relações monotônicas mas curvas.cor(df)em colunas numéricas dá a matriz; apliqueround(, 2)nela e preste atenção ao argumentouse =quando houver dados ausentes.cor.test(x, y)acrescenta o p-valor e um intervalo de confiança - reporte o intervalo.- Sempre olhe o gráfico de dispersão antes de acreditar no número.
A seguir: quando a pergunta afia de "eles se movem juntos?" para "a média deste grupo é diferente da daquele?" - o teste t.
Perguntas frequentes
Como calcular a correlação no R?
cor(x, y) retorna o coeficiente de correlação de Pearson entre dois vetores numéricos. Passe um data frame de colunas numéricas - cor(df) - para obter a matriz de correlação completa. Para um p-valor e um intervalo de confiança, use cor.test(x, y).
Como obter o p-valor de uma correlação no R?
cor() sozinho não fornece um - use cor.test(x, y). Sua saída inclui a estatística t, os graus de liberdade, o p-valor para a hipótese nula de que a correlação verdadeira é zero, um intervalo de confiança de 95% e o coeficiente estimado.
Qual é a diferença entre a correlação de Pearson e a de Spearman?
Pearson (o padrão) mede associação linear sobre os valores brutos. Spearman primeiro converte os valores em postos, então mede se a relação é consistentemente crescente ou decrescente (monotônica), e é bem menos sensível a outliers. Use cor(x, y, method = "spearman") para dados ordinais, dados assimétricos ou relações curvas mas monotônicas.
Como lidar com valores NA no cor()?
Por padrão, cor() retorna NA se qualquer valor estiver ausente. Passe use = "complete.obs" para descartar antes as linhas com qualquer valor ausente, ou use = "pairwise.complete.obs" em uma matriz para usar, para cada par de variáveis, todas as linhas em que ambas estão presentes.