首页 > 解决方案 > 对均值 pandas 的 T 检验

问题描述

我正在使用 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)

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

先感谢您!

标签: pandast-test

解决方案


使用您的代码,您正在考虑一个双边测试,假设总体具有相同的方差,一旦您没有指定参数equal_var并且默认情况下它在 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)。

如果您使用统计模型 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)

你到底发现了什么奇怪的结果?


推荐阅读