数据结果不显著时的处理方法

关于这个问题,我认为知乎上的一篇回答写的很精彩。

问题:在心理学实验中,当最终实验结果数据不显著时,研究者们通常会怎么做?

回答:

作者:Nan Zhu
链接:https://www.zhihu.com/question/25336205/answer/47172108
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

关于这个问题,个人觉得北师大郑健的文章可谓我所读到的最实诚且全面的回答了。作为一个(根据郑健的标准)节操少于5分的同道者,我在这里大言不惭地补充几句,顺便也试图以更加中立的态度来回答这个问题。郑健的文章告诉大家如何掉节操,我补充说一下如何把节操捡回来,免得不明真相的群众以后见到心理学家就当做人贩子群而殴之。

1.被试/数据
很多心理学研究者(尤其是许多不亲自在第一线做实验,或者只关心实验的“科学标准”,忽略了实验中也是在与打交道这重要的一点,或者不做预实验、不根据反馈调整实验方案的所谓“心理学家”们)习惯于把被试当成是一堆孤立的刺激接受器和数据输出器,忽略了(实际上有可能决定实验成败的)场景因素、主试因素、被试群体因素乃至时间因素,这也是许多研究出不了“显著”结果的原因之一。

删除被试/数据只发生在几种情况下:

(1)实验中只测量了少数几个重要因变量,而manipulation check的分析结果表明实验操纵对该被试没起到作用,因此果断删除(但注意不能因这个原因排除太多被试,尽量少于总被试数量的5%);

(2)通常问卷调查中会设置一些“陷阱”或“测谎题”,比如在自尊测量中混入以下问题:“我从小到大每次数学考试都得满分”;如果被试的回答是“非常赞同”,那多半是在说谎,一旦说谎或自相矛盾的情况过多,这名被试就需要被剔除,因为我们有理由对其别的回答的真实性也表示质疑;

(3)除了删除整个被试的全部数据外,有时我们会删除一个被试的少部分数据,尤其是在一些有比较明确的参照标准的反应时研究中,当被试的反应时过短或过长时,该试次(trial)的数据会被剔除(具体剔除标准要看这个试次中假定含有多少心理过程,一个简单反应通常不会超过2秒,但也几乎不可能短于50毫秒),但同样要注意,这一过程剔除的试次总数也不应占所有试次总数的很大比例,不然就说明你自己的研究有问题了;

(4)除非我们的目的就是希望了解大千世界中的无奇不有,想要探究行为的极限,不然心理学研究通常会排除异常值(outlier),而这包括了将样本中的极端被试剔除(根据我们所关心的维度,剔除平均值以上或以下2个或3个标准差以外的被试),或者将单个被试所有试次中的极端值剔除。包括SPSS等喜闻乐见的统计软件都拥有自动帮你找出极端值的选项。当然,从散点图上找也是一种很直观(但不够精确)的方法。

最后的最后需要说明的是,只有当你剔除了被试或数据点而故意没有在文章里说明时,这才是作弊行为;即使你的剔除做法是不恰当的,只要你一五一十地报告了,还是有坦白从宽的机会的。

关于伪造数据——这已经不是掉节操了。这是自欺欺人的最低境界。毫无疑问,在心理学领域,即使有最严格的同行评审,由于缺乏数据分享机制(部分源于对被试信息的必要保护),少量伪造数据是很难被觉察的。但是一旦伪造数据过多,露马脚是迟早的事情。第一,伪造的东西,别人是无法复制出来的,这势必阻碍你的学术影响力的传播,且不说等你真的名气大了,人们自会开始质疑你的研究的不可复制性;第二,很多伪造的数据不符合大数据的规律,在meta-analysis当中会表现欠佳,甚至会被明眼人看穿;第三,即使你自信做假做得天衣无缝,而且一点不问心有愧,那也请考虑一下一旦你事情曝光对于整个学界会造成什么样的影响——如果心理学研究都是不可信的,那么政府和私人机构也就没有动力投钱来资助这些研究,为了一个假货,所有的同行都得跟着遭殃。

2 变量转换/非参数检验
变量转换的主要目的并不是获得显著的结果——实际上,如果你的假设是错的而数据恰恰反映真实情况,那么你怎么转换也不能得到想要的显著结果。转换后的数据有了显著结果,只是说明你对数据形态的判断很可能是正确的;不过,有时即使不做转换,你还是可以通过别的检验方法获得“等价”的结果,比如不依赖于数据形态的非参数检验(non-parametric test)。

如果将依赖于数据形态(通常是正态分布)的参数检验用于实际上不符合假定的数据形态(正偏、负偏),研究结论犯第二类错误(明明有效应时却误以为没效应)的概率会大大增加,统计检验力(power)被削弱得所剩无几,此时得到不显著的结果明显是冤枉的。此时,变量转换有助于使数据形态回归正态。具体而言,Tabachnick和Fidell(2007)以及Howell(2007)分别建议,当数据偏离正态不太远时,用平方根或立方根转换,当数据偏离正态很远时,用对数转换;当数据正偏时,根据如下公式:x‘ = sqrt(x)或x‘ = lgx;当数据负偏时,先用C - x(C=max[x]+1)对数据进行反转再进行平方根或对数转换。 毫无疑问,变量转换在学界不是没有争议,但以我之见,如果聪明正确地使用变量转换,不仅不属于作弊掉节操,而且反倒是应当鼓励的,因为说不定经过转换后的数据恰恰揭示了以前不为人知的重大发现呢。

在郑健的文中指出了一条好思路——在分析结果时,为什么要拘泥于一种统计方法呢?的确,很多时候“结果不显著”只是“按照某种统计方法没有得到显著结果”。这常常也是由于许多统计方法本身依赖于正态分布的假定。因此,当你一没有很大的样本量,二没有足够“正”态的数据时,不妨试试非参数检验。典型的非参数检验包括卡方检验、Mann-Whitney检验、符号检验(代替独立样本t检验)、Kruskal-Wallis检验(代替ANOVA)等。但仍要注意,不同的检验仍然对数据类型有特定要求,毕竟,把性别当连续变量是不可能得到有意义的结果的,这时讨论显著不显著本身就没有意义。

非参数检验常常可以提高统计检验力,有效减少不显著焦虑症。这里不妨举个高端点的栗子。在做中介效应(或者叫间接效应)的检验时,传统的Sobel检验(作为一个基于正态分布的参数检验)常常得不到显著的结果,原因是Sobel检验的数值是由两个回归系数ab相乘得到的(见Sobel, 1987),而在数学上乘积的分布常常是正偏态的。所以Sobel检验通常只有在面对超大样本时才不需要担心第二类错误。这个错误的正态假设限制了Sobel检验的统计检验力,导致很多本可以发表的文章因数据无法满足一个不讲理的假定而黯然被拒(而这客观上为造假提供了动机)。然而,如今Sobel检验已经逐渐被新一代的bootstrap检验所代替(关于bootstrap在中介效应检验中的应用详见Preacher & Hayes, 2004, 2008;关于温忠麟等文章中所提到的中介效应检验方法为什么已经落伍了,也可参见Preacher & Hayes, 2004; Zhao, Lynch, & Chen, 2009)。Bootstrap是一个非参数方法。所谓bootstrap中介效应检验,简而言之,就是从你所收集的样本中,随机抽取(放回抽样)K个子样本,用这K个子样本分别计算ab的大小,并获得其95%置信区间,如果该置信区间不包括0,则说明中介效应存在。这个方法目前已可通过Hayes所开发的macro在SPSS或SAS上实现,AMOS、Mplus等结构方程软件也已容纳了bootstrap功能。

3 从显著性本身下手?
关于郑健所提到的“对显著性本身下手”,说实话我不是完全理解,也就更谈不上赞同了。毫无疑问,统计学界对于是否要坚守p < .05这个纯粹人为的标准始终存在争论,但大多数严肃的杂志都对marginal significance这种说法是嗤之以鼻的,因为使用这种说法本身就是一种非科学、不专业的态度(退一步说,你可以选择一个标准,管它是.05还是.01还是.08,但你至少要在一篇文章当中坚持到底,而不能树立好几个标准然后专挑合乎你的利益的标准说),所以绝对不能接受的做法是,当你需要它显著时,就接受p<.08,当你希望它不显著时,则又拒绝.05<p<.08。一个比较好的习惯是按照APA标准,在文章(非图表)中报告显著性p值时,报告p的实际大小,除非其小于.001或大于.10。至于到底这算是“显著”还是“边缘显著”还是“不显著”,聪明的读者自己会有所判断的。

对于不显著的交互作用或多组比较,一般是不会去看事后检验的(通常这种情况下事后检验也不会显著,但极少数情况下,可能会有交互作用接近显著,而事后检验显著的,此时你需要考虑的是,是不是因为你样本量太小导致统计检验力不足,导致本该显著的结果变成了不显著,倘若是这样,不嫌麻烦的话多收些数据就会顺利达到显著了)。

使用多种统计方法检验同一数据是可行的,而且未必是作弊。但正如前面提到的,不同统计方法对于数据类型有要求。而且,当你把连续变量拆分成分类变量时,通常会损失很多信息(和被试),此时你的统计检验力本身就会下降,除非你所取的两端数据(比如只取低于或高于均值一个标准差以上的数据)差别足够大,不然这样做不仅要冒着被批判的风险,还不一定能得到想要的显著结果。

多个因变量是否能提高获得显著结果的概率呢?还真的能。但是,这是因为对同一组数据同时检验很多假设时很容易提高第一类错误(实际上没有效应而误以为产生了效应)的可能性,即所谓的familywise error rate(FWER)。假如你对一组数据提出100个假设,即使每个假设都极其不靠谱,至少有1个显著的概率仍是高得吓人的。为了抵消这种第一类错误的来源,一种标准的处理方法(Bonferroni correction,参见wikipedia上的Bonferroni correction)是将α值除以假设检验的数量(比如,在郑健的例子中,如果使用积极、消极、积极减消极三种因变量,应该使用α=.05/3=.017的标准,而不是α=.05)。当然,如果你不打算报告“积极”、“消极”,而只打算报告“积极减消极”作为因变量的结果,那也不妨假设你只做了一个检验,而恰巧就显著了(这已经够掉节操的了),但如果你需要对你的第一个实验做概念重复,那你每次都得报告同一个因变量。如果后续实验中“积极减消极”这个因变量不显著了而别的因变量显著了,你就陷入了深深的矛盾当中——如果你用实验一的结果,实验二就不得用;如果用实验二的结果,实验一就不得用。所以,如果你想让一堆不靠谱的假设变得显著,请不要高兴得太早了。

根据郑健的说法,似乎得到显著的中介效应是件颇容易的事情。的确,如果不在意理论的严谨性,而且问卷中的变量够多,找出潜在的中介效应并不难。但这并不意味着这些中介效应就值得做成一篇好文章。毕竟,将一个变量界定成中介变量,需要有一个能站得住脚的理由。另外,有许多不明真相的同学误以为三个变量两两相关显著就一定能做出显著的中介效应了。可是,当自变量x与中介变量m的相关,m与因变量y的相关,以及x与y的相关都是正的时候,中介效应甚至有可能是负值(与假设完全相反),这是因为x与m的高相关性导致x与y的关系对中介效应造成了“net suppression"(见Zhao, Lynch, & Chen, 2009)。此外,按照温忠麟等(2004)的程序,实际上也就是按照最经典的中介效应分析程序,存在很多已经被后来的研究者指正的漏洞(比如,在没有m作为中介变量时y对x的回归系数显著但并不很大,而在加入m时变得不显著但也并不很小,此时不一定有中介效应;而即使y对x的回归系数在没有m时也不显著,也不说明中介效应不可能存在
,比如,有可能存在一正一负两个中介效应互相抵消,导致y对x的回归系数不显著)。正如我前面说的,经典的中介效应检验(Baron & Kenny, 1986)甚至Sobel检验的时代都已经过去了,如果你真的很想得到显著的结果,不妨尝试用bootstrap,毕竟这个方法能够有效提高统计检验力,从而让确实有效应的结果变得显著。有兴趣的读者请详阅Preacher and Hayes (2004)。

4 有什么情况下我们一定希望不显著?
期望p越大越好?这种情况不仅存在,而且还挺多,下面只举两个最普遍的例子。在察看结构方程模型(SEM)的拟合度指标时,我们希望卡方值不显著,因为这表明我们构建的模型符合我们的数据(否则我们就得对模型做修正)。但是,卡方值受到样本量的影响——实际上代表拟合指标的卡方值的计算公式中本身就含有N或者N-1,如此一来,当样本量足够大时,由模型计算得到的再生矩阵与从观察数据获得的协方差矩阵之间任何细小的差异都足以导致一个显著的卡方值,让人误以为模型不符合数据。为此,显然很有必要参照其它不受样本量影响的拟合指标,比如NNFI(最好大于.95),CFI(最好大于.95),RMSEA(最好<.05)等等。

在实验领域常用的分离范式(不仅仅用于心理学),常常会希望某一组的结果不显著而另一组显著。比如,假设是某药物能提高一个人的短时记忆(而不是普遍认知能力),那么以药物条件(使用该药物,或安慰剂)作为自变量,同时以一个短时记忆任务和一个不涉及短时记忆的认知推理任务作为因变量,对于前一个因变量我们期望得到显著结果,而后一个我们期望得到不显著的结果,不然我们就无法知晓这种药物的实际作用了。如果采用更严格的双分离范式,则需要检验A treatment对X有用而对Y没有用,而B treatment对Y有用而对X没有用。

5 在心理学研究中跌打滚爬多年的几点忠告
(1)Don‘t get too cute. 对于不规范的剔数据方式、偶尔报告些”边缘显著“、卖弄偶然发现的中介效应,这些卖卖萌可以,但是想杀入顶尖期刊,靠这些小伎俩就差之远矣。
(2)Be honest, at least with yourself. 不显著的结果,不值得你赌上整个学术生涯去造假。更何况大多数人的造假水准实在有限,如果你觉得自己不够聪明只好靠作弊来获得显著结果,请趁早远离心理学这个坑。
(3)Don‘t be greedy. 显著不显著乃统计家之常事,虽然发表的结果中95%都是显著的,但至少有一半的文章中因含有不显著的结果而静悄悄地躺在教授的抽屉里,更多的实验结果甚至都没写成文章,就被抛弃了。如果你尝试了除了数据造假以外的一切手段仍然没有得到显著结果,那么你至少可以这样想:你还年轻,前路尚远,何愁以后得不到一个p<.05呢?说实在的,今天的世界一切皆有可能。把你的不显著结果用描述统计刻画一下,去掉那些p value,然后勇敢地投给Basic and Applied Social Psychology吧。

时间: 2024-10-03 13:23:12

数据结果不显著时的处理方法的相关文章

HTTP 请求方式: GET和POST的比较当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议. HTTP在客户端和服务器之间以request-response protocol(请求-回复协议)工作. GET - 从指定的服务器中获取数据 POST - 提交数据给指定的服务器处理 GET方法: 使用GET方法时,查询字符串(键值对)被附加在URL地址后面一起发送到服务器: /test/demo_form.jsp?name1=value1

Delphi中根据分类数据生成树形结构的最优方法

一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能,因而受到广大程序员的青睐.    树形结构在Windows环境中被普遍应用,但在数据库开发中面对层次多.结构复杂的数据,如何快速构造树形目录并实现导航呢?    二. 实现关键技术:    在Delphi提供的控件中包含了TreeView控件,但树的具体形成还需要用户编写代码.即它的列表项要在程序

SpringMVC中出现&quot; 400 Bad Request &quot;错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法

最近angularjs post到后台 400一头雾水 没有任何错误. 最后发现好文,感谢作者 SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法 今天开发过程中,在SpringMVC中的Action中处理前台ajax请求传过来的json数据直接转成对应的实体类时出错:400 Bad Request,后台也不报错,400指的的是请求无效(请求有语法问题或者不能满足请求),调试了好长时间

MongoDB数据量较大时如何构建索引--减少业务最少影响

在数据量较大或请求量较大,直接建立索引对性能有显著影响时,可以利用复制集(数据量较大时一般为线上环境,使用复制集为必然选择或者使用分片.)中部分机器宕机不影响复制集工作的特性,继而建立索引. 备注:添加索引的表使用WT引擎,数据量有1.5亿左右. 1. 副本集配置参数 节点1: $ more shard1.conf dbpath=/data/users/mgousr01/mongodb/dbdata/shard1_1 logpath=/data/users/mgousr01/mongodb/lo

4.mybatis属性和表的列名不相同时的处理方法

/** * 属性和表的列名不相同时的处理方法 * 1.sql中给列重新命名: * select tid id, tname name from teacher t where tid=#{id} * 2.在teacherMapper.xml中使用resultMap标签 * <select id="getTeacher2" parameterType="int" resultMap="getTeacherMap"> * select *

DevExpress ChartControl大数据加载时有哪些性能优化方法

DevExpress ChartControl加载大数据量数据时的性能优化方法有哪些? 关于图表优化,可从以下几个方面解决: 1.关闭不需要的可视化的元素(如LineMarkers, Labels等): Series.View.LineMarkerOptions.Visible =false. 2. 关闭图表的滚动与缩放功能,手动调整范围,这样将大大减少所需计算的个数. 3. 将 ChartControl.RefreshDataOnRepaint属性设为false 4. 将 ChartContr

mysql插入数据后返回自增ID的方法

mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得到这个自增id的值呢? 方法一:是使用last_insert_id mysql> SELECT LAST_INSERT_ID(); 产生的ID 每次连接后保存在服务器中.这意味着函数向一个给定客户端返回的值是该客户端产生对影响AUTO_INCREMENT列的最新语句第一个 AUTO_INCREMEN

mysql通过sqoop导入到hbase中时数据量为1000w时出现Incorrect key file for table &#39;/tmp/#sql_458_0.MYI&#39;; try to repair it

问题:mysql通过sqoop导入到hbase中时数据量为1000w时出现Incorrect key file for table '/tmp/#sql_458_0.MYI'; try to repair it,数据量为100w等时没该问题 分析:出现该问题时因为mysql的临时目录(默认为/tmp)太小 解决方法:参考:http://blog.sina.com.cn/s/blog_4c197d420101bdn9.html mysql通过sqoop导入到hbase中时数据量为1000w时出现I

将Excel数据导入mysql数据库的几种方法

将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面和大家分享一下: 一.用java来将Excel表格中的数据转到mysql中 这是我们用的第一种方法,就是在java找你感谢个类,然后这个类会将Excel表格中的数据存储到内存里,然后再从内存中读出来插入到数据库中,但是要 注意了,这里是存储到String[ ]数组里面,所以取出来的数据也是Strin