pandas 中二进制变量之间的相关性
Correlation between binary variables in pandas
我正在尝试使用 Cramer 统计计算二元变量之间的相关性:
def cramers_corrected_stat(confusion_matrix):
chi2 = ss.chi2_contingency(confusion_matrix)[0]
n = confusion_matrix.sum()
phi2 = chi2/n
r,k = confusion_matrix.shape
phi2corr = max(0, phi2 - ((k-1)*(r-1))/(n-1))
rcorr = r - ((r-1)**2)/(n-1)
kcorr = k - ((k-1)**2)/(n-1)
return np.sqrt(phi2corr / min( (kcorr-1), (rcorr-1)))
但是我不知道如何在我的数据集中应用上面的代码:
CL UP NS P CL_S
480 1 0 1 0 1
1232 1 0 1 0 1
2308 1 1 1 0 1
1590 1 0 1 0 1
497 1 1 0 0 1
... ... ... ... ... ...
1066 1 1 1 0 1
1817 1 0 1 0 1
2411 1 1 1 0 1
2149 1 0 1 0 1
1780 1 0 1 0 1
非常感谢您的指导
您创建的函数不适合您的数据集。
所以,使用下面给出的follow函数cramers_V(var1,var2)
。
from scipy.stats import chi2_contingency
def cramers_V(var1,var2):
crosstab =np.array(pd.crosstab(var1,var2, rownames=None, colnames=None)) # Cross table building
stat = chi2_contingency(crosstab)[0] # Keeping of the test statistic of the Chi2 test
obs = np.sum(crosstab) # Number of observations
mini = min(crosstab.shape)-1 # Take the minimum value between the columns and the rows of the cross table
return (stat/(obs*mini))
使用该函数的示例代码如下。
cramers_V(df["CL"], df["NS"])
如果您想计算数据集的所有可能对,请使用此代码。
import itertools
for col1, col2 in itertools.combinations(df.columns, 2):
print(col1, col2, cramers_V(df[col1], df[col2]))
我正在尝试使用 Cramer 统计计算二元变量之间的相关性:
def cramers_corrected_stat(confusion_matrix):
chi2 = ss.chi2_contingency(confusion_matrix)[0]
n = confusion_matrix.sum()
phi2 = chi2/n
r,k = confusion_matrix.shape
phi2corr = max(0, phi2 - ((k-1)*(r-1))/(n-1))
rcorr = r - ((r-1)**2)/(n-1)
kcorr = k - ((k-1)**2)/(n-1)
return np.sqrt(phi2corr / min( (kcorr-1), (rcorr-1)))
但是我不知道如何在我的数据集中应用上面的代码:
CL UP NS P CL_S
480 1 0 1 0 1
1232 1 0 1 0 1
2308 1 1 1 0 1
1590 1 0 1 0 1
497 1 1 0 0 1
... ... ... ... ... ...
1066 1 1 1 0 1
1817 1 0 1 0 1
2411 1 1 1 0 1
2149 1 0 1 0 1
1780 1 0 1 0 1
非常感谢您的指导
您创建的函数不适合您的数据集。
所以,使用下面给出的follow函数cramers_V(var1,var2)
。
from scipy.stats import chi2_contingency
def cramers_V(var1,var2):
crosstab =np.array(pd.crosstab(var1,var2, rownames=None, colnames=None)) # Cross table building
stat = chi2_contingency(crosstab)[0] # Keeping of the test statistic of the Chi2 test
obs = np.sum(crosstab) # Number of observations
mini = min(crosstab.shape)-1 # Take the minimum value between the columns and the rows of the cross table
return (stat/(obs*mini))
使用该函数的示例代码如下。
cramers_V(df["CL"], df["NS"])
如果您想计算数据集的所有可能对,请使用此代码。
import itertools
for col1, col2 in itertools.combinations(df.columns, 2):
print(col1, col2, cramers_V(df[col1], df[col2]))