1
resposta

Corr significante

Olá

Eu uso Stata com certa frequência e existe uma função mais robusta que corr a qual inclui o nivel de significancia da correlacao entre as variaveis

pwcorr x y, sig

https://www.stata.com/manuals/rcorrelate.pdf Existe algum comando similar em Python?

1 resposta

Olá Marcelo, tudo bem? Espero que sim!

Não há uma função específica que mostra o nível de significância da correlação entre as variáveis. Mas você consegue construir uma matriz com o p-valor atribuído a cada uma das correlações. Dessa forma você consegue juntar a informação das duas matrizes em uma única, contendo a correlação entre as variáveis e a qual nível de significância aquela correlação está atribuída.

Supondo que você possua um conjunto de dados armazenado em uma variável df. O código que gera a matriz de correlação das variáveis desse conjunto de dados df com o nível de significância atribuído pode ser encontrado a seguir:

import pandas as pd
from scipy.stats import pearsonr
import numpy as np

rho = df.corr()
pval = df.corr(method=lambda x, y: pearsonr(x, y)[1]) - np.eye(*rho.shape)
p = pval.applymap(lambda x: ''.join(['*' for t in [0.01,0.05,0.1] if x<=t]))
rho.round(2).astype(str) + p

A matriz de correlação é obtida fazendo df.corr()e é armazenada na variável rho.

A matriz dos p-valores pode ser obtida utilizando o método pearsonr() em conjunto com o método corr(). O método pearsonr() retorna uma tupla com o primeiro valor sendo a correlação e o segundo valor sendo o p-valor associado. Foi necessário subtrair uma matriz identidade, que é uma matriz com valores na diagonal igual a 1 e o restante dos valores iguais a 0, pois o método pearsonr() retorna um p-valor = 1 caso seja uma autocorrelação, ou seja, correlação entre a mesma variável.

Após isso, foi construída uma matriz p, aplicando uma função para transformar os p-valores em asteriscos. Caso o p-valor seja menor que 0.1, será utilizado 1 asterisco. Caso seja menor que 0.05, será acrescentado mais um asterisco, e caso seja menor que 0.01, será adicionado mais um aterisco. Portanto, teremos:

  • 1 asterisco para nível de significância de 0.10
  • 2 asteriscos para nível de significância de 0.05
  • 3 asteriscos para nível de significância de 0.01

Por fim, as duas matrizes foram concatenadas, a primeira matriz é a rho, que diz respeito à matriz de correlação, e a segunda é a matriz p, que contém a informação de asteriscos com base no nível de significância da correlação.

A seguir temos uma matriz de exemplo com o resultado final:

Matriz de correlação simétrica de 8 variáveis, apresentando o valor numérico de correlação e o nível de significância atribuído a cada correlação está sendo representado por asteriscos, onde 1 asterisco representa um nível de significância de 0.10, 2 asteriscos representam um nível de significância de 0.05 e 3 asteriscos representam um nível de significância de 0.01

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!