理解 scipy 在插入两列数据框而不是一列时的 shapiro 行为
Understand scipy's shapiro behavior when inserting two columns dataframe instead of one
我有类似这样的数据框:
codes=[1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3]
values=[702,713,701,721,705,715,703,712,706,710,702,715,698,718,704]
df = pd.DataFrame(list(zip(codes, values)),
columns =['code', 'val'])
>>>
code val
0 1 702
1 3 713
2 1 701
3 3 721
4 1 705
5 3 715
6 1 703
7 3 712
8 1 706
9 3 710
10 1 702
11 3 715
12 1 698
13 3 718
14 1 704
我想检查第 1 组和第 3 组的值之间是否存在显着差异。为此,我使用 scipy 的 shapiro 检验来检查数据是否呈正态分布。
我在我的原始代码中做了一些我认为是错误的事情:
shapiro1=stats.shapiro(df[df['code'] == 1]
>>>
ShapiroResult(statistic=0.6468859314918518, pvalue=4.644487489713356e-05)
shapiro3=stats.shapiro(df[df['code'] == 3]
>>>
ShapiroResult(statistic=0.6508359909057617, pvalue=0.00011963312863372266)
如您所见,我通过代码而不是值来过滤数据框,因此我插入了具有一个代码值和两列的数据框。
然后我做了一些我认为可以修复的事情:
stats.shapiro(df[df['code'] == 3]['val'])
>>>
ShapiroResult(statistic=0.967737078666687, pvalue=0.8816877007484436)
那么它不是正态分布的。
当我打印插入到 shapiro 的部分时:
df[df['code'] == 3]
我有两列数据框,它检查什么? “代码”分布?它们的一些组合?
我的问题在这里:
当我将 df 插入到 shapiro 测试的两列时,它会检查什么?
编辑:我已经能够添加更多列并运行对它们进行夏皮罗测试(仅使用随机数)
来自source on github, the first thing that happens on calling stats.shapiro()
is that the input is passed to numpy.ravel()
。此 returns 视图(如果可能)或数据的副本,作为扁平的、连续的一维数组。
基本上,它将所有列放入一个又大又长的桶中,然后继续计算 Shapiro-Wilk 检验。
我有类似这样的数据框:
codes=[1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3]
values=[702,713,701,721,705,715,703,712,706,710,702,715,698,718,704]
df = pd.DataFrame(list(zip(codes, values)),
columns =['code', 'val'])
>>>
code val
0 1 702
1 3 713
2 1 701
3 3 721
4 1 705
5 3 715
6 1 703
7 3 712
8 1 706
9 3 710
10 1 702
11 3 715
12 1 698
13 3 718
14 1 704
我想检查第 1 组和第 3 组的值之间是否存在显着差异。为此,我使用 scipy 的 shapiro 检验来检查数据是否呈正态分布。
我在我的原始代码中做了一些我认为是错误的事情:
shapiro1=stats.shapiro(df[df['code'] == 1]
>>>
ShapiroResult(statistic=0.6468859314918518, pvalue=4.644487489713356e-05)
shapiro3=stats.shapiro(df[df['code'] == 3]
>>>
ShapiroResult(statistic=0.6508359909057617, pvalue=0.00011963312863372266)
如您所见,我通过代码而不是值来过滤数据框,因此我插入了具有一个代码值和两列的数据框。
然后我做了一些我认为可以修复的事情:
stats.shapiro(df[df['code'] == 3]['val'])
>>>
ShapiroResult(statistic=0.967737078666687, pvalue=0.8816877007484436)
那么它不是正态分布的。
当我打印插入到 shapiro 的部分时:
df[df['code'] == 3]
我有两列数据框,它检查什么? “代码”分布?它们的一些组合?
我的问题在这里:
当我将 df 插入到 shapiro 测试的两列时,它会检查什么?
编辑:我已经能够添加更多列并运行对它们进行夏皮罗测试(仅使用随机数)
来自source on github, the first thing that happens on calling stats.shapiro()
is that the input is passed to numpy.ravel()
。此 returns 视图(如果可能)或数据的副本,作为扁平的、连续的一维数组。
基本上,它将所有列放入一个又大又长的桶中,然后继续计算 Shapiro-Wilk 检验。