gpt4 book ai didi

python - 我们可以使用 python 为 chisquare 测试生成列联表吗?

转载 作者:太空狗 更新时间:2023-10-30 02:11:07 27 4
gpt4 key购买 nike

我正在使用 scipy.stats.chi2_contingency 方法来获取卡方统计数据。我们需要传递频率表,即列联表作为参数。但是我有一个特征向量,想自动生成频率表。我们有这样的功能吗?我目前是这样做的:

def contigency_matrix_categorical(data_series,target_series,target_val,indicator_val):
observed_freq={}
for targets in target_val:
observed_freq[targets]={}
for indicators in indicator_val:
observed_freq[targets][indicators['val']]=data_series[((target_series==targets)&(data_series==indicators['val']))].count()
f_obs=[]
var1=0
var2=0
for i in observed_freq:
var1=var1+1
var2=0
for j in observed_freq[i]:
f_obs.append(observed_freq[i][j]+5)
var2=var2+1
arr=np.array(f_obs).reshape(var1,var2)
c,p,dof,expected=chi2_contingency(arr)
return {'score':c,'pval':p,'dof':dof}

其中数据系列和目标系列是列值,另外两个是指标名称。谁能帮忙?谢谢

最佳答案

您可以使用 pandas.crosstab 从 DataFrame 生成列联表。来自文档:

Compute a simple cross-tabulation of two (or more) factors. By default computes a frequency table of the factors unless an array of values and an aggregation function are passed.

下面是一个用法示例:

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

# Some fake data.
n = 5 # Number of samples.
d = 3 # Dimensionality.
c = 2 # Number of categories.
data = np.random.randint(c, size=(n, d))
data = pd.DataFrame(data, columns=['CAT1', 'CAT2', 'CAT3'])

# Contingency table.
contingency = pd.crosstab(data['CAT1'], data['CAT2'])

# Chi-square test of independence.
c, p, dof, expected = chi2_contingency(contingency)

下面的数据

生成下面的contingency

然后,scipy.stats.chi2_contingency(contingency) 返回 (0.052, 0.819, 1, array([[1.6, 0.4],[2.4, 0.6]])).

关于python - 我们可以使用 python 为 chisquare 测试生成列联表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24767161/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com