那之后怎么检验出它们是什么关联呢
时间: 2023-12-05 08:04:39 浏览: 26
在卡方检验中,如果P-value小于设定的显著性水平(通常是0.05),则拒绝原假设,即认为自变量和因变量之间存在关联性。但是,这只是判断是否存在关联性,并不能说明关联性的具体类型。
为了进一步研究变量之间的关系类型,可以进行Cramer's V检验。Cramer's V是一个反映关联强度的指标,取值范围为0到1,值越大表示关联越强。如果Cramer's V的值为0,表示两个变量之间不存在关联;如果Cramer's V的值为1,表示两个变量之间存在完全的关联。一般来说,Cramer's V的值在0.1到0.3之间表示关联较弱,0.3到0.5之间表示关联中等,大于0.5表示关联强。
下面是代码实现:
```python
import pandas as pd
from scipy.stats import chi2_contingency
from scipy.stats import cramers_v
# 读取数据集
df = pd.read_csv('ObesityDataSet_raw_and_data_sinthetic.csv')
# 选择需要分析的变量
cols = ['Age', 'family', 'FAVC', 'FCVC', 'CH2O', 'CALC', 'NObeyesdad']
df_selected = df[cols]
# 将连续变量转化为分类变量
df_selected['Age'] = pd.cut(df_selected['Age'], bins=[0, 18, 35, 60, 200], labels=['0-18', '18-35', '35-60', '60+'])
df_selected['CH2O'] = pd.cut(df_selected['CH2O'], bins=[0, 2, 3, 4, 30], labels=['0-2', '2-3', '3-4', '4+'])
df_selected['CALC'] = pd.cut(df_selected['CALC'], bins=[0, 1000, 2000, 3000, 10000], labels=['0-1000', '1000-2000', '2000-3000', '3000+'])
# 执行卡方检验和Cramer's V检验
for col in cols[:-1]:
crosstab = pd.crosstab(df_selected[col], df_selected['NObeyesdad'])
chi2, p, dof, expected = chi2_contingency(crosstab)
print(col)
print('Chi-square test statistic: ', chi2)
print('P-value: ', p)
print('Degrees of freedom: ', dof)
print('Expected values: \n', expected)
print('Cramer\'s V: ', cramers_v(crosstab))
print('-------------------------')
```
输出的结果中,Cramer's V表示关联强度。如果Cramer's V的值在0.1到0.3之间,表示关联较弱;如果Cramer's V的值在0.3到0.5之间,表示关联中等;如果Cramer's V的值大于0.5,表示关联强。