均值的 T 检验 pandas

T-test on the means pandas

我正在使用 Movielens 数据集,我想对男性和女性用户的平均收视率值进行 t 检验。

import pandas as pd
from scipy.stats import ttest_ind

users_table_names= ['user_id','age','gender','occupation','zip_code']
users= pd.read_csv('ml-100k/u.user', sep='|', names= users_table_names)
ratings_table_names= ['user_id', 'item_id','rating','timestamp']
ratings= pd.read_csv('ml-100k/u.data', sep='\t', names=ratings_table_names)
rating_df= pd.merge(users, ratings)

males = rating_df[rating_df['gender']=='M']
females = rating_df[rating_df['gender']=='F']

ttest_ind(males.rating, females.rating)

我得到以下结果:

Ttest_indResult(statistic=-0.27246234775012407, pvalue=0.7852671011802962)

这是执行此操作的正确方法吗?结果好像有点奇怪。

提前致谢!

如果您没有指定参数 equal_var 和默认情况下,它在 the scypi ttest_ind().

上为 True

因此您可以将统计测试表示为:

  • 原假设 (H0):男性和女性的记录值之间没有差异,或者换句话说,均值相似。 (µMale == µFemale)。
  • 备择假设(H1):男性和女性的记录值之间存在差异,或者换句话说,均值不相似(µMale > µFemale 和 µMale < µFemale,或简称 µMale != µFemale)

显着性水平是您测试中的任意定义,例如 0.05。如果您获得了一个小的 p 值,小于您的显着性水平,您可以反驳原假设 (H0),从而证明备择假设 (H1)。

在您的结果中,p 值为 ~0.78,否则您无法反驳 H0。因此,您可以假设均值相等。

考虑到样本的标准偏差如下,您最终可以将测试定义为 equal_var = False:

>> males.rating.std()
1.1095557786889139
>> females.rating.std()
1.1709514829100405

>> ttest_ind(males.rating, females.rating, equal_var = False)
Ttest_indResult(statistic=-0.2654398046364026, pvalue=0.7906719538136853)

这也证实了原假设 (H0)。

如果您使用 stats model ttest_ind(),您还可以获得 t 检验中使用的自由度:

>> import statsmodels.api as sm
>> sm.stats.ttest_ind(males.rating, females.rating, alternative='two-sided', usevar='unequal')
(-0.2654398046364028, 0.790671953813685, 42815.86745494558)

您在结果中到底发现了什么奇怪的地方?