D'Inflation de la Variance du Facteur en Python

Je suis en train de calculer le facteur d'inflation de la variance (VIF) pour chaque colonne dans un simple jeu de données dans python:

a b c d
1 2 4 4
1 2 6 3
2 3 7 4
3 2 8 5
4 1 9 4

J'ai déjà fait cela dans R en utilisant le vif fonction de la usdm bibliothèque qui donne les résultats suivants:

a <- c(1, 1, 2, 3, 4)
b <- c(2, 2, 3, 2, 1)
c <- c(4, 6, 7, 8, 9)
d <- c(4, 3, 4, 5, 4)

df <- data.frame(a, b, c, d)
vif_df <- vif(df)
print(vif_df)

Variables   VIF
   a        22.95
   b        3.00
   c        12.95
   d        3.00

Cependant, lorsque je fais la même chose en python à l'aide de la statsmodel vif fonction, mes résultats sont:

a = [1, 1, 2, 3, 4]
b = [2, 2, 3, 2, 1]
c = [4, 6, 7, 8, 9]
d = [4, 3, 4, 5, 4]

ck = np.column_stack([a, b, c, d])

vif = [variance_inflation_factor(ck, i) for i in range(ck.shape[1])]
print(vif)

Variables   VIF
   a        47.136986301369774
   b        28.931506849315081
   c        80.31506849315096
   d        40.438356164383549

Les résultats sont très différents, même si les entrées sont les mêmes. En général, les résultats de l'statsmodel VIF fonction semblent être mauvais, mais je ne sais pas si c'est parce que de la façon dont je l'appelle ou si c'est un problème avec la fonction elle-même.

J'espérais que quelqu'un pourrait m'aider à comprendre si j'ai eu tort d'appeler la statsmodel fonction ou d'expliquer les écarts dans les résultats. Si c'est un problème avec la fonction alors, y a-VIF alternatives en python?

OriginalL'auteur Nizag | 2017-03-07