Category Archives: Statistic

R Workshops I hosted recently

I am hosting a small workshop every week for more than 2 months now at Bentley University.

Basically, I was introducing machine learning and data analytic using R. These workshops are about one hour and a half each time, and I usually would spend 7-8 hours preparing materials. I find that the process is actually extremely helpful to me as well.

The thing I am concerned the most is how I can use examples that is easy enough for people without much tech and math background to get enough intuition and understanding. Some of the people attend my workshop actually seldom do any coding in R( or any programming language),

I guess the fact that they still came every week is the best proof that I been doing a good job explaining procedures like cross-validation, bootstrapping or the algorithms behind K-means and decision trees or building intuitions of SVM and PCA.

If you are interested in taking a look at the materials for my workshops, you can find them here.

Rlogo

Here is an example slide for our workshop.

We will start doing Kaggle competitions from November, or at least... I will start doing that again in November and share my experiences.

 

The Analytic Edge Lecture code in Python Week3 Framingham Heart Study

Video 3

Read in the dataset

Look at structure

Randomly split the data into training and testing sets

Imputing the datasets

A simple strategy to impute the dataset, replace nans using the mean of that variable

Logistic Regression Model

I will be using scikit-learn this time

Predictions on the test set

Confusion matrix with threshold of 0.5

Accuracy

Baseline accuracy

Test set AUC

 

The Analytic Edge Lecture code in Python Week3 Modeling Expert

Video 4

Read in dataset

Look at structure

Table outcome

Baseline accuracy

 

Create training and testing sets

I will be using train_test_split from scikit-learn to split the dataset into training and testing sets

The data types returned by train_test_split in default is object, thus you need to convert them back when creating dataframes usingpandas

Also simply using train_test_split on the entire dataframe will not enforce the ration of 1 and 0 in the dependent variable in the splitted sets.  So it should be done separately for both cases and then merge the two cases back into one.

Logistic Regression Model Using statsmodels

Need to create a dummy variable for intercept

Make predictions on training set

Analyze predictions

I am taking advantage of the describe() and groupby() functions of DataFrame objects to do the calculations.

Video 5

Confusion matrix for threshold of 0.5

A little bit trickier to do the table

Sensitivity and specificity

Confusion matrix for threshold of 0.7

Sensitivity and specificity

Confusion matrix for threshold of 0.2

This time using confusion_matrix from scikit-learn

Sensitivity and specificity

Video 6

Performance function

Using metrics from scikit-learn

Plot ROC curve

I have given up on coloring the line... and the thresholds are not as nice as R's ROCR package.

plot

统计与R入门 IV 卡方检验、非参数统计和广义线性模型

  1. 包括内容:
  2. 卡方拟合度检验
  3. 卡方独立性检验
  4. 二元逻辑回归
  5. 非参数统计
  6. 广义线性模型

卡方拟合度检验(Chi-square goodness of fit tests)

卡方检验适用于结果变量为类别型变量的情况。 例如:结果变量为:有罪或无罪。

卡方拟合度检验用于判断不同类型结果的比例分布相对于一个期望分布的拟合程度。

例如,选举时,投票人对候选人是否有统计上显著的倾向性差异?(将观测到的选票分布情况与候选人平均分配所有选票进行对比)。

卡方的计算公式: χ2=Σ[(O-E)2/E]

其中:

  • O为观测值
  • E为期望值
  • df自由度为类别数量k-1

卡方检验实际上是一个零假说显著性检验,本例中的零假说为:投票者在投票时没有统计上显著的偏向性。

p值取决于卡方值和自由度两个因素 。

卡方分布如下图所示:

lecture_slides-Stats1.13.L19

效应值可以用Cramer's V或Phi,计算公式为: Φc=SQRT(χ2/N(k-1))

其中:

  • N是样本量
  • k是类别数

R示例:

数据是随机模拟出的,包含60个投票者对3个投票对象(A,B,C)的投票结果,并且包含了投票者的性别

因为是3个投票对象,每个投票对象获得选票的期望值为60/3=20

首先看一下数据的分布情况,再进行手动计算卡方:


unnamed-chunk-2

下面计算p值

R中可以利用chisq.test()来简化,但调用函数之前需要将对三个候选者的投票结果放在一个向量中,可以通过table()来实现:

从这里的p值可以看出,投票者的投票没有统计上显著的倾向性。

下面计算效应值:

对与这个效应值的解读,类似于回归分析中的相似性,0.2意味着效应并不强

卡方独立性检验(Chi-square test of independence)

检验的是,两个类别型变量之间是否有关系。

例如选举时,投票人的性别是否与他们对候选人的倾向性有关?

零假说为:投票人的性别与投票倾向无关

卡方的计算方法: χ2=Σ[(O-E)2/E]

其中:

  • O为观测值
  • E为期望值
  • df自由度为:(行数-1)×(列数-1),例如这里就为(性别数-1)*(候选人数-1)

期望值的计算方法为:E = (R/N)*C

以候选人A接受到的女性选的票期望为例,其中:

  • E为A接受到女性投票人的选票数量期望值
  • R女性投票人的总人数
  • N为总人数
  • C为投票给A的总人数

值仍旧取决于卡方值和自由度两个因素,。

R示例:

还是同样的数据,进行最原始的手动计算前先看一下数据的分布情况

unnamed-chunk-8
注意到女性选民和男性选民对候选者A的投票情况似乎有些差异,下面检验这个差异是否显著。

计算p值:

chisq.test()配合table()可使这一切更简单

p值表示性别与投票倾向没有统计上显著的关系。

计算效应值:

卡方独立性检验的有两个额外假设前提需要注意:

  • 每个类别组合都应该有适当量的数据
  • 类别与类别之间必须是独立的

二元逻辑回归(Binary Logistic regression)

适用于用一组连续型或类别型变量作为预测变量,预测二元结果变量。

二元逻辑回归与多元回归背后是相同的逻辑思维,只不过结果变量是类别型的变量,而且是二元的(例如:{+1,-1})。

逻辑回归的公式为:

ln(Yhat/(1-Yhat))=B0+Σ(BkXk)

  • 其中:
  • Yhat为结果变量的预测值
  • B0是截距
  • Yk是预测变量
  • Bk是非标准化的回归系数
  • (Y-Yhat)是残差
  • k是预测变量的数量

公式右边与多元回归完全一样,只有左边不一样。

下面介绍左边这项究竟是什么。

定义比值比(或称优势比,Odds ratio)为:P(outcome)/(1-P(outcome))。

例如:丢一个公正的铜板出现人头朝上的概率为0.5,相应的比值比为1。

丢一个公正的六面骰子,出现1朝上的概率为1/6,相应的比值比为1/5。

对比值比取自然对数便获得所谓的分对数(或称逻辑特,logit,log-odd):

Logit = ln(P(outcome)/(1-P(outcome)))

对上面的例子而言,丢铜板出现人头朝上的分对数为0,丢骰子出现1的分对数为-1.791659

分对数的值域为[-1,+1]

下图为逻辑斯曲线(logistic curve),横坐标对应于P(outcome)。

lecture_slides-Stats1.13.L20

二元逻辑回归中,可以以上述过程的逆过程,将预测的结果变量值转变回P(outcome)用于解读其物理意义。

例如用发表论文数(0,1,2...)预测是否能评上职称(0不能,1能),拟合二元逻辑回归模型后发现分对数值为0.39。

将其转换回比值比为1.48,解读为:每多发1篇论文,(评上职称的概率/没有评上的概率)这个比值比就增加1.48倍。

也可以进一步求出评上职称的概率大约为60%。

R示例

数据是Mock Jury研究数据,让实验者观看案件宣布审判的录影,结果变量是实际的审判结果,1代表赞成死刑,0代表不赞成死刑。

预测变量是对实验者的问卷结果,包括被审判人未来的危险程度等。

拟合一个二元逻辑回归模型,需要用到广义线性模型(generalized linear model,GLM*)

这里不多介绍模型的拟合过程,如果感兴趣可以见我机器学习笔记中逻辑回归相关内容。

http://www.ryanzhang.info/archives/994

同样的,对于二元逻辑回归,也可以进行各种显著性检验,包括:

  • 一个预测变量是否显著:例如:检验回归系数、比值比、Wald检验
  • 整个模型是否显著:例如:模型的卡方、wald检验
  • 比较两个模型之间的差异是否显著

上面的结果中每一个预测变量的回归系数都有对应的p值,其中有3个预测变量是显著的。

如果要检验整个模型是否显著可以与零模型(无预测变量)进行比较。


下面演示wald检验:

还可以检验整个模型预测结果的正确情况

数据变换(data transformationn)

在之前很多分析和检验中都有各种各样的前提假设,最常见的是:因变量或结果变量的正态分布。

然而现实中,很有可能遇到我们的数据不是正态分布的情况。

另一个常见的前提假设是:预测变量与结果变量之间呈现线性相关关系。

然而现实中,很有可能遇到变量间呈现非线性相关关系的情况。

为了处理这样的情况,可以对数据进行变换。

数据变换就是对所有的数据都使用一个函数,例如平方根函数(square root)、对数函数(logarithm)、逆转换(inverse)。

可以见我写的另一篇博文中的转变例子:http://www.ryanzhang.info/archives/1666

非参数统计(nonparametric statistics)

参数统计(parametric statistics)将样本的统计量用于推理总体的参数的统计方法

参数统计通常有各种各样的前提假设,如果这些前提假设中间有一项不满足的情况时,则样本的统计量将不能够用于对总体参数的推理。

非参数统计与参数统计不同,不假设数据和总体有任何结构特征。

对非参数统计不作过多介绍,感兴趣可以查阅相关资料。

这里只列举,非参数统计中对应于常见参数统计的分析方法:

  • 相关性分析:斯皮尔曼等级相关系数(Spearman’s rank correlation coefficient或Kendall's tau
  • 回归分析:非参数回归
  • 独立t检验:Mann-Whitney U test
  • 非独立t检验:Wilcoxan Signed-rank test
  • 方差分析:Kruskal-Wallis one-way、Friedman two-way
  • 卡方检验:McNemar's test、Fisher's exact test

广义线性模型(generalized linear model,GLM*)

广义线性模型是一般线性模型(general linear model)的一种扩展。

广义线性模型允许用于结果变量是非正态分布的情况,可以用于检验非线性关系的预测变量和结果变量之间的关系。

通常在无法通过简单的变换将数据转换为线性相关和正态分布时,可以采用广义线性模型。

广义线性模型是通过链接函数(link function)来使得其能推广至非线性相关和非正态分布的数据上的。

一个广义线性模型的例子便是上面提到的二元逻辑回归,其中逻辑特函数便是这样一个链接函数。

统计与R入门 III t检验和ANOVA方差分析

内容:

  1. 单样本t检验
  2. 非独立t检验
  3. 独立t检验
  4. 单因素方差分析
  5. 因素方差分析
  6. 重复测量方差分析

用t检验做分组比较(group comparision)

考虑如下随机实验设定:

  • 自变量是类别型变量:{安慰剂,疫苗}
  • 因变量是连续型变量:为生病几率

要比较注射安慰剂组的生病几率与注射疫苗组的生病几率,可以使用t检验。

t检验(student's t-test)
叫student's t-test的原因是:发明人William Gossett发表这篇文章的时候用的是笔名"Student"

z检验和t检验的区别:

  • z检验用于在总体标准差已知的情况下比较样本均值与总体均值

而t检验分为:

  1. 单样本t检验(single sample t-test):在总体标准差未知的情况下比较样本均值与总体均值
  2. 非独立t检验(dependent t-test):比较两个相关样本
  3. 独立t检验(independent t-test):比较两个独立样本

t值和z值的意义都是:

  • (观测值Observed-期望值Expected)/(标准误差SE)

下表列举了z检验和三种t检验之间的区别:

观测值 期望值 标准误差
Z检验 样本均值MX 总体均值MP 均值的标准误差SDX/SQRT(N)
单样本T检验 样本均值MX 总体均值MP 均值的标准误差SDX/SQRT(N)
独立T检验NA不一定等于NB 两个不同样本的差的均值M(A-B) 两个不同总体的差的均值M(PA-PB) 两个不同样本的差的标准误差SD(A-B)/SQRT(N)
非独立T检验NA=NB 两个样本均值之间的差(MA- MB) 两个总体均值之间的差(MPA-MPB) 两个样本标准误差平方和的根SQRT(SDA2/NA+SDB2/NB)

z检验和t检验中的p值计算方法取决于:

  1. 进行的是定向检验(directional)还是不定向检验(non-directional)
  2. 自由度(degrees of freedom)决定的t或z分布

举例:对于z检验,因为z检验的前提是总体的分布已知,如做不定向检验,且z>1.96,根据z分布,可知p<0.05,检验为不显著。

对于t检验,根据自由度,选择相应的t分布,根据选择的t分布和t值计算p值,判断检验结果

自由度的计算:

  • z检验:没有自由度
  • 单变量t检验:N-1
  • 非独立t检验:N-1
  • 独立t检验:(N1-1)+(N2-1)     是(两组样本数-1)的和

非独立t检验(denpendent t-test)

非独立t检验也称为:匹配t检验(paired samples t-test)
适用情况:

  • 两个样本都是对同一组对象的观测,例如:同一组人在锻炼之前和锻炼之后的体能情况比较

一个完整的分析应该包括如下几方面:

  1. 计算t值
  2. 计算p值
  3. 计算效应值(effect size),例如Cohen's d
  4. 计算置信区间

对应的计算方法:

  1. t=(M-0)/SE
  2. p值根据(1)t值(2)t分布(3)定向或非定向检验求出
  3. Cohen's d效应值 = M/SD
  4. 置信区间上下限:M+-t*SE

其中对于均值而言:

  • 标准误差SE=SD/SQRT(N),受到样本量的偏倚
  • cohen'sD效应值d=M/SD并不受样本量的影响,>1为显著

R示例:
所用的数据集包含了对5组对象的前后两次测验结果。

  • data$train表示了组的类别"0"代表受控组,"1"代表实验组
  • data$cond表示了每组分别进行了多少天的训练:control组是什么都没有做的,t08,t12,t17,t19分别代表不同的训练天数
  • data$pre,data$post分别是训练前后的测试值
  • data$gain=data$post - data$pre

对受控组(data$train==“0”)的前后两次测试值进行检验
利用公式计算t值

计算p值

计算Cohen's d

计算置信区间

利用R的t.test()函数和cohensD()来使得这一切更加简便

独立t检验(independent t-test)

独立t检验用于比较两个独立的样本,即:两组完全不同的对象,如一组为男人,一组为女人;或一组为健康人,一组为病人

R示例:

从之前的数据集中挑选两个实验组进行独立t检验,利用公式计算t值:

求p值

计算cohen's D

计算置信区间:

再次,让t.test()cohensD()让生活更加美好:


相对于非独立t检验,进行独立t检验时,需要多一步:检验方差同质性(homogeneity of variance)的前提假设

在上面的计算中,我们实际是将两组数据的标准差进行了联合(pool),这只在两组数据的方差相等时才可以进行

如果数据不满足方差同质性,则容易产生1型误差

检验方差同质性可以使用Levene's test

与检查平均值的t检验类似,Levene's检验是用零假说显著性检验检验方差的,如果检验结果显著则违背了方差同质性

如果发现违背了方差同质性,可以采取如下措施:

  • 采用Welch's precedure调整自由度和p值
  • 或者改为采用非参数检验(non-parametric)

此处就不展开介绍了

R示例 :

Levene's test可以利用car包裹中的leveneTest()函数

发现p值较大,不显著,因此进行独立t检验将不违背方差同质性

单因素方差分析(one-way ANOVA)

方差分析适用于:

  • 预测变量都是类别型变量,而结果是连续型变量的情形

方差分析通常用于分析通过随机实验获得的两组以上的数据,如:

  1. 组1:吃药
  2. 组2:吃安慰剂
  3. 组3:什么都不吃组

如果只有两组数据,仅需要使用t检验

方差分析中通常会采用零假说显著性检验,与t检验不同,方差分析中的p值是通过F值和F分布计算出的。

与t值类似,F值也是一个比例:

  • F=(组间方差)/(组内方差)=MSBetween/MSWithin=MSA/MSS/A
  • MSA=SSA/dfA
  • MSS/A=SSS/A/dfS/A
  • SSA=n×Σ(Yj-YT)2

其中Yj是每组的平均值,YT是总平均值

  • SSS/A=Σ(Yij-Yj)2

其中Yij是每组中的每一个值,YT是相应的组平均值

  • dfA = a-1
  • dfS/A = a(n-1)
  • dfTotal = N-1

其中a是组数,n是每组的观测对象数量,N是总的观测对象数量

与t检验和t族分布类似,F检验也有一个F族分布

F分布受两个因素影响:

  1. 每组的观测对象数量
  2. 组的数量

下图是F族分布示例:

lecture_slides-Stats1.13.L16

R示例:

对4组实验组进行单因素方差分析

利用公式计算F值 (一辈子手动这么算一次就够了,确实帮助理解公式)

利用R的aov()让生活更美好。

这里的零假说是:

  • 所有组都没有区别

这个p值表示,应该驳回零假说,结论是4个组是不同的。

与t检验类似,在零假说显著性检验后,还可以计算效应值(effect size)作为结论的辅助

  • R22
  • η2=SSA/SSTotal
  • SSTotal = Σ(Yij-YT)2

R示例:

计算效应值

同样也有函数可以调用:etaSquared()

下面回顾一下方差分析的前提假设:

  1. 结果变量是连续型的变量
  2. 结果变量是正态分布的
  3. 方差同质性(Homogeneity of variance),即所有组组内的方差与总体方差相等,同样可以用Levene's test来检验。

R示例:

实际上应该是进行方差分析之前就检验方差齐性,实际使用时注意

零假说是:方差一致。

这里的p值表示,不违背方差同质性。

事后检验(post hoc test)

如果我们对同一个数据集的多个变量间作很多组匹配检验,则会增加1型错误的概率。

因此在进行多组匹配检验后,需要进行事后检验。

有许多可以使用的事后检验方法,其核心思想都是对p值的判断标准进行调整。

两种类型的事后检验介绍可以见我的另一篇博文里的相关部分 :

 http://www.ryanzhang.info/archives/1602 

R示例:

仅以TukeyHSD事后检验做示例:

结果表明: 经过事后检验,组间差异均仍然是显著的

因素方差分析(factorial anova)

因素方差分析适用于:

  • 两个类别型自变量和一个连续型因变量

例如:研究开车时打电话对犯错的影响。

  • 自变量A是路程的难度(分成三个难度)
  • 自变量B是对话的难度(分成三个难度)
  • 因变量是开车时犯错的次数(数值)

可以进行3种检验:

  • 路程的难度是否影响犯错的次数
  • 对话的难度是否影响犯错的次数
  • 路程难度和对话难度的相互作用是否影响犯错的次数

会产生相应的3个F值:

  • FA
  • FB
  • FA×B

下面是一些因素方差分析的概念解释:

  1. 主要影响(main effect):一个自变量在另一个自变量的不同级别情况下的平均影响。例如,无论路程难度如何,对话的难度对犯错次数的影响。
  2. 交互影响(interaction effect):一个自变量在另一个自变量的不同级别情况下对因变量的不同影响。例如,在不同的路程难度下,同一级别的对话难度对犯错次数的影响。
  3. 简单影响(simple effect):一个自变量在另一个自变量的一个特定级别情况下对因变量的影响。例如,在难度为难的路程上,不同级别的对话难度对犯错次数的影响。

注意到主要影响和交互影响之间的事相互独立的

记住:因素方差分析是多元回归的一个特例,是由完全独立的预测变量的多元回归

因此,用韦恩图解释均方差之间的关系,没有相互包含的关系。

QQ截图20140104111932

方差分析采用的是一般线性模型(GLM)的框架,上面的例子为:

  • Y=B0+B1X1+B2X2+B3X3+e

其中:

  • X1=XA
  • X2=XB
  • X3=XA×XB

相应的三个F值计算方法如下:

  • FA=MSA/MSS/AB
  • FB=MSB/MSS/AB
  • FA×B=MSA×B/MSS/AB
  • MSA=SSA/dfA
  • MSB=SSB/dfB
  • MSA×B=SSA×B/dfA×B
  • MSS/AB=SSS/AB/dfS/AB
  • dfA=a-1
  • dfB=b-1
  • dfA×B=(a-1)(b-1)
  • dfS/AB=ab(n-1)
  • dfTotal=abn-1=N-1

在F值计算完后,需要:

  • 对主要影响:做事后检验
  • 对交互影响:利用单因素ANOVA或t检验进行简单影响的分析
  • 计算交互影响的效应值η2=SSeffect/SStotal

上式是完全η2的计算方法,大多时候人们会选择采用部分η2(partial eatSquared)

  • 部分η2=SSeffect/(SSeffect+SSS/AB

其原因是可以减少系统性误差。

最后是因素方差分析的前提假设,与之前一样的三条:

  1. 结果变量是连续型的变量
  2. 结果变量是正态分布的
  3. 方差同质性

R示例:

以上面举的开车错误的影响因素研究为例

  • $conversation是对话的不同难度
  • $driving是路程的不同难度
  • $errors是犯错的次数

检验方差同质性:

结果的p值表明:不违背方差同质性的前提假设

进行因素方差分析,手动计算就不演示了,与之前的单因素方差分析大同小异

直接调用aov()函数 :

三个p值都<0.05,即:

  • 路程难度对犯错有显著影响
  • 对话难度对犯错有显著影响
  • 路程和对话的相互作用对犯错有显著影响

如果像这样,发现了显著的交互影响,应该对简单影响进行分析

可以选择:不同级别难度的路程下,对话难度对犯错的影响是否显著

也可以选择:不同级别难度的对话下,路程难度对犯错的影响是否显著

只需要二选一即可,不需要都做

下面进行简单影响分析,分析在不同的路程难度情况下,对话难度对犯错的影响是否显著

结果表明:在不同级别难度的路程上,对话的难度对犯错都有显著影响

这个结论能够帮助解释为什么会有对话难度和路程难度之间的交互作用能够影响犯错的次数

检查效应值

Tukey's HSD事后检验:

重复测量方差分析(repeated measures ANOVA)

上面的单因素方差分析和因素方差分析都是组间比较,比较的是不同组之间的差异。

重复测量方差分析分析适用于:

  • 分析对一组对象在三种以上不同状态的不同观测。

重复测量方差分析的优点:

  1. 代价少,需要观测对象的数量少
  2. 有更强的统计分析能力,原因是系统性误差更小

分组比较时涉及两个偏差:

  1. 组间偏差
  2. 组内偏差

重复测量方差分析设计两个偏差:

  1. 组间偏差
  2. 观测对象与状态之间的交互作用导致的偏差

F值的计算公式为:

  • FA=MSA/MSA×S
  • MSA=SSA/dfA
  • MSAxS=SSAxS/dfAxS

重复测量方差分析的缺点:

  1. 需要决定不同状态的观测顺序排序,需要平衡处理
  2. 容易导致数据缺失
  3. 有额外的前提假设

平衡处理的作用是:消除观测顺序的影响

考虑对同一组观测对象进行两个状态的观测A1和A2,需要决定两种观测的顺序

一种方法是分组设计(blocked design)

  • 将观测对象随机分为两组,一组先A1后A2,另一组先A2后A1。

另一种方法是随机设计(randomized design):

  • 对不同状态的观测以一种随机的连续的方式进行如:A2,A1,A1,A2,A1.....

对于分组实验,如果观测状态有a种,则需要设计!a个组。!4=24就已经很难实现了,因此有一种改进方法叫拉丁方设计(latin squares design):

如a=3,用拉丁方方法,只有3种观测顺序:

  1. A1,A2,A3
  2. A2,A3,A1
  3. A3,A1,A2

这种方法虽然并不完美,但其中每种观测都在不同的观测顺序中出现了。

缺失数据可能造成的影响主要是在于:

  • 数据的缺失可能是有规律的,可能与其他变量有相关性关系

检验的方法是增加新的类型变量"缺失",缺失为0,不缺失为1

然后对"缺失"和其他自变量做t检验看是否显著

重复测量方差分析的额外的前提假设称为:球形假设(sphericity assumption):

球形假设包括两项内容:

  • 方差同质性
  • 协方差同质性

球形假设的检验方法为Mauchly's test

相应的也需要对p值进行调整,方法有Huyn-FeldtGreenhouse-Geisser

R演示:

将之前data种08.12.17.19四组对不同对象的观测想象成对同一组对象不同时期的观测结果。。。

对数据进行处理,人工加上subject号,重复测量方差分析一样aov()函数,需要额外注明交互影响:

首先显示的不同观测对象导致的偏差

然后显示的是观测对象和状态之间交互影响的统计结果,根据p值得值影响是显著的。

此后也需要做事后检验:

事后检验的逻辑都是对p值进行调节,减小1型误差

R默认的重复测量方差检验的事后检验使用的是Holm检验

也可以明确指明使用最严苛的Bonferroni

结果发现有一组(训练了19天河训练了17天的提高值)差异不再呈现显著性了。