小白学统计

其他

样条回归(之二)——样条回归通俗介绍

上一篇文章提到,样条回归主要用于某些数据在不同的阶段或范围内有可能存在不一样的参数值,比如,可能0-10的范围内是一条斜率为1.6的直线,11-20范围内可能变成了斜率是1.2。你可以把它看做是一种分段回归,但又不是简单的分段回归。样条回归其实很难讲,因为这里面牵扯到各种数学的术语,我一般不大喜欢用数学术语来讲(其实是不懂),更喜欢用通俗的理解的语言来解释一个方法(可能更多的人也喜欢看这种方式)。所以,本文虽然讲样条回归,但尽量不提数学的事,尽量只用我自己学习消化后的白话说出来。当然,限于本人学识水平,有的可能理解不到位,解释的如有不妥,欢迎各位指正批评。首先,先把样条回归理解为是一个分段的回归,即将数据分成好几段,每一段分别有一个拟合的曲线。单是这一条,就说明,如果你的数据全部看起来都是一个趋势,那就没必要考虑样条回归,不用非得把事情复杂化,也不要为了用所谓的“高级方法”而用它(让人痛心的是,实际中喜欢用“高级方法”的人比比皆是,导致很多数据分析出现了用牛刀杀鸡的情形)。其次,样条回归又不是一个简单的分段回归。提到分段回归,看看下面这个图就知道什么意思。根据月份分成了两段,每段的回归模型不同,很明显,第一段回归的斜率高,第二段的回归斜率低。如果把数据直接混合起来,那可能会损失一些信息,发现不了这种不同阶段的变化趋势。分段回归基本上没什么限制,简单来说,你把数据分成几段,每一段分别拟合相应的直线、二次项、三次项等,根据实际情况而定。当然,也可以第一段拟合线性,第二段拟合二次项,虽然不多见。然后就分别解释就行了,比如,上面这个图,我们就可以说,第一段比第二段的变化速度更快。当然,有没有统计学差异,这需要做检验。再次,样条回归可以看做是分段回归,但又不是简单的分段回归。分段回归不是不好,但有些地方可能跟实际有点出入。从上图可以看出,在节点处,两个直线截然分开,没有连接,这叫做“跳跃”。这种跳跃在有些情况下没有问题,但有些时候,可能会有问题。例如,如果横坐标是体重,把体重分为两段,分别分析每一段里体重与某指标的关系。往往体重不大可能突然在某一天上升10公斤或者下降10公斤,应该是一个缓慢变化的过程,也就是说,他们应该是连在一起的。所以,样条回归是加了约束条件的分段回归,加了一个连续性,也就是要求在节点处连续。就像下图红色线。图中的红线是保证连续的分段回归,蓝线是直接拟合的直线回归。这样看来,样条回归就跟简单的分段回归不大一样了。当然,由于加了约束条件,正常情况下会导致其拟合效果稍差于分段回归,但可能更合理。再再次,前面我们展示的,还都只是比较简单的直线回归,也就是线性样条,但有些数据太过于复杂,线性样条不足以很好拟合,所以还可以考虑多项式样条,也就是在每一段分别拟合多项式。但是作为多项式就更加麻烦,不仅仅是要求节点处连续,还要求连续的好看且自然。什么叫自然呢?比如下面这个图,虽然也连起来了,但看起来始终觉得有点别扭对不对?(手头没有现成数据,懒得生成了,直接画个示意图)而下面这个示意图感觉就自然了一些。所以,画图要追求自然。当然啦,追求美这只是一方面原因,其实更深层次的原因是计算问题,这又要说到数学的求导问题,你要求出估计结果,就要连续且连的自然。最后,多项式样条看起来已经不错了,但是大家发现,往往在曲线的两头,预测的区间会非常宽。为了解决这个问题,就再加一个边界限制的约束条件,使得两边的预测准确一些。这种加了这么多约束条件的,就叫做自然样条。所以,大家可以看到,回归样条就是这么一步步来的。其实说穿了也很简单,不过本文没有深入介绍其背后原理,为什么呢?第一,太深的我也不懂,即使懂了,有的也真的难以用白话解释出来,越到深层次的原理,越发现难以通俗解释,很多就是只能意会。第二,大多数的统计学习书中都有原理介绍,但鉴于临床大夫或公卫学生对这些不大感兴趣(因为本人是医学统计领域,面向的也是以医学为主),所以只介绍到这里。真对此感兴趣的,自然会去查阅更深入的文献,也不会因为我没有介绍而停止对样条回归的探索。
2020年5月6日
其他

样条回归(之一)——为什么要用样条回归

要讲好一个完整故事,就得先从一开始讲起,比如我们经常用的开场白就是“很久很久以前,有一个……”。有时甚至一开始出场的并不是主人公,这也是必须的。比如《射雕英雄传》先出场的并不是郭靖,《白发魔女传》先出场的也不是白发魔女。同样,要了解一个统计学方法,往往也得这样。所以,虽然我们这个题目是样条回归,但想要了解样条回归,却必须从其它的方法开始讲起。我们要先行直线回归开始讲起。(1)直线回归直线回归大家一般都知道是干什么的,用来描述两个变量的直线关系。比如下图,我们用一条直线描述身高和体重的关系。直线回归很容易理解,也很容易解释,通常就是说,自变量x每增加1个单位,因变量y变化有多大。如果现实中所有的现象都可以用直线回归,那就完美了。可惜的是,直线回归能用来描述的实际问题太少了,现实中绝大多数的关系都不是直线关系。这种情况下,就必须用其他的回归来拟合了。(2)从直线回归到多项式回归直线回归比较常用的替代方法是多项式回归,事实上,直线回归也可以算是多项式回归的特例,也就是一次项。不过一般我们所说的“多”,都是指2个以上,所以一般把直线回归和多项式回归分开。所谓的“项”,也就是我们在初中学到的次方,比如二次方、三次方。所以,直线回归,我们如果用公式来表示,那就是:y=a+bx二次项回归,用公式表示,就是在直线回归的基础上,增加一个二次项:y=a+bx+bx^2(x^2表示x的平方)如果用图形来表示,二次项回归,就是曲线拐了一个弯,就像下面这个图:对于这种非直线的点,你如果强行用直线回归,结果会让你很失望(当然,实际数据往往没有这么明显,很多时候也许你并不经意间就把非线性的关系用直线回归给做了,甚至可能也发表文章了,更甚至审稿人也没看出来)。比如上面这个数据,如果你用直线回归,你会发现结果非常不靠谱(下图中的绿色直线),根本无法体现x和y的真正关系。多项式回归可以在一定程度上很好地解决非直线的问题。古龙曾说过,没有什么数据是不能用一个3次项来解决的,如果有,那就用4次项、5次项、6次项、……(原话可能说的是酒)。总之,只要你的项数足够多,一定能完美拟合数据。(3)多项式存在的问题然而,有一个问题就是,随着项数的增多,尽管可以对数据拟合越来越好,但随之而来的问题是过拟合。也就是说,在现在这个数据上拟合效果是很完美,然而一旦换个数据,很可能效果就很差。比如下面这两个变量,time和y的关系,可以看出,从直线一直到6次项(更多的就不加了,否则图要看不清楚了),R2是逐渐增加的,分别是0.82,
2020年4月6日
其他

“先做单因素,有意义的做多因素”——要不要这种思路?

上一篇文章通过一个例子说明,不少人经常用到“先做单因素分析,然后把单因素分析中有统计学意义的变量纳入多因素分析”这种思路在有些情况下未必可靠。其实这里关键的问题就是:到底有没有必要做单因素分析?如果做单因素分析,是不是只把单因素分析中有意义的变量纳入多因素分析,而没有统计学意义的变量就不用纳入多因素分析了?这个问题其实没有完全统一的答案,不同的统计学家也有自己的想法和观点,所以本文所提到的观点,仅是个人见解,有不同意本文观点的,纯属正常。我们先把上一篇文章留下的疑问解释一下,其实这个问题也有不少人问过我,说:有没有可能单因素分析没有统计学意义,而多因素分析变得有统计学意义了。我的回答是:有可能。上一篇文章就是这种情况。那么,为什么会出现这种情况?我们来仔细分析一下。正常情况下,lx变量在单因素和多因素分析中结果差别这么大,通常都是跟其它变量的影响有关系。所以,我们从4个自变量的相关性入手来看。如果看一下4个自变量的相关性,你会发现,其实a、b、c这3个变量对lx的影响都不大,相关系数都为-0.1左右(这算不上很大的相关)。然而如果仔细观察,你会发现另一个有意思的现象:a、b、c这3个变量与lx变量的相关都是负的,相关系数都为负数。这就能说明一定问题了。尽管a、b、c三个变量每一个对lx变量的影响都不大,然而3个都一起影响,那就有可能产生一定的作用了。说的通俗一点,由于a、b、c这3个变量对lx变量的影响都是负的,而a、b、c与y的关系又都是正的,这就是说,单因素分析中,当分析lx与y的关系的时候,其实a、b、c这3个变量都扯了二者关系的后腿。用大家熟悉的一部经典美剧来说明这个意思。我想大家可能都看过《friends》(最经典的美剧,没有之一),其中第三季第9集中,6个人组队玩球,最后3个男生一组,三个女生一组。Joey抢到球往前跑的时候,Rachel先跑过去抱住Joey的脖子,以阻止Joey往前跑,这就是扯后腿。然而三个女生很快发现,仅靠一名女生扯后腿的力量有限,Joey仍在继续跑,所以Monica和Phoebe继续各自拽住Rachel的腿往后拉,这时候Joey的速度就明显慢了。也就是说,三个女生,每个人往后拉Joey的力量都不大,然而三个一起就大多了。本例的解释其实跟这个是一个意思。在本例中,a、b、c这3个变量每个对lx变量的扯后腿的作用都不是很大(相关系数都不大),然而三个同时对lx变量有负相关,合起来就有影响了。所以,当我们看一下偏相关系数(也就是校正了a、b、c这3个变量后,lx变量与y的纯相关),就会发现lx与y的相关性(相关系数为0.3511)明显高于一开始二者的关系(相关系数为0.1912)。同样,如果做回归分析,单因素分析中,lx变量与y的关系如下图所示。而校正了a、b、c这3个变量的多因素分析中,lx变量与y的关系则变成了下面的样子。可以看出,斜率更大了。当然,这只是本例的特例,实际中未必所有数据都是这样。所以我一般喜欢说“具体问题具体分析”,不是故弄玄虚,而是真的如此。每个数据都不一样,没有办法说一个统一的、完全标准的分析过程。也许在有的数据中,“先做单因素分析,然后把单因素分析中有统计学意义的变量纳入多因素分析”,这种思路并没有问题;但在有的数据中,可能就有问题。那么什么情况下有可能会出现“单因素分析没有统计学意义,而多因素分析中有统计学意义”这种现象?其实本例已经给了一个很好的答案,如果其它变量(如a、b、c)与研究变量(如lx)之间是负向关系,而研究变量(如lx)与因变量(如y)之间是正向关系,且其它变量(如a、b、c)与因变量(如y)之间也是正向关系。这时候就很容易出现“单因素分析没有统计学意义,而多因素分析中有统计学意义”。所以,其实如果说实际中到底要不要“先做单因素分析,然后把单因素分析中有统计学意义的变量纳入多因素分析”这种思路?我个人的观点是比较明确的:决不能照搬这种思路。有时会让你错失发现数据真相的机会。其实数据分析本来就不是很容易的,有时我给别人说完一些分析思路,他们会很疑惑:这么麻烦啊?也许,在很多非统计学专业的人的眼中,统计分析无非就是跑跑软件,出个结果。现实中确实也有很多人就是这么做的。然而,真正的统计学家不会这么做,有些复杂数据有时都得花费十天半月(甚至几个月都有可能)来考虑。可能有的人看完这个例子后,疑惑更多了:那我到底该怎么分析?到底要不要做单因素分析了?如果做单因素分析,到底什么样的变量该纳入多因素分析?限于篇幅,这些问题留待下一篇文章再详细阐述。所以,预知后事如何,且听下回分解。觉得本公众号有用的朋友,如果想赞助,无需赞赏,帮忙点一下广告即可。只要点开即可,是否购买无所谓。也算是对本人时间和精力付出的一点回报吧。
2018年4月16日
其他

“先做单因素,有意义的做多因素”——这种思路对吗?

很多人在做多因素分析的时候,往往都按这种方式:首先把所有因素挨个做个单因素分析,然后单因素分析有意义的变量,再放到多因素分析中,最后得到一个多因素分析模型。然后完事,发表文章。当然,在单因素分析的那一步,有的人用0.05作为水准,P小于0.05的变量纳入多因素,有的则以0.1或0.15、0.2等为水准,P小于0.1或0.15、0.2的变量才纳入多因素分析。无数人都曾问过我这个问题:我先做单因素分析,再做多因素分析,这种做法对吗?或者说:别人发表的文章,全都是这么做的,所以我也这么做。那么,这种方式到底对不对?我们今天就来讨论一下。首先,公布答案:没有所谓对不对。也可以说对,也可以说不对。注意这里我不是打禅机,也不是卖关子,而是确实如此。其实,严谨的说法就是:具体问题具体分析,有时这么做没问题,有时会有问题。但有一点是很明确的:决不能死板地完全按这一规则来分析。可能你现在还不是很明白,我们通过一个例子来说明。有1个因变量y,4个自变量a、b、c、lx,假定我们更关注lx这个变量,但其他变量也关心(我想临床医生应该明白我在说什么。很多情况下,临床医师虽然说是筛选危险因素,其实心里还是有倾向性的,更希望自己心目中的变量有意义)。先看单因素分析结果如下:看到这里,估计有的人心里就得咯噔一下,心里最希望的变量lx,偏偏没有统计学意义。如果按常规的思路,单因素分析的P值这么大,无论如何也入选不了多因素分析。通常我们会在单因素分析中把检验水准稍微设的宽松一些,但除非这里设到0.3,否则即使在0.25的检验水准上,依然无统计学意义。那是不是说,我们后面就把a、b、c三个变量纳入多因素分析,不管lx这个变量了呢?先别着急,我们先不管单因素分析结果,直接把4个变量都放入多因素分析,看看结果什么样子:是不是有点震惊和意外之喜?本来都不抱希望的变量lx,在多因素分析中竟然有统计学意义了!世界观都要塌了是不是?老师教我们的”先做单因素,有意义的再做多因素“这条规则到底靠不靠谱了?本例中,如果按我们传统的思维,”先做单因素,有意义的再做多因素“,变量lx根本连进入多因素分析的资格都没有,更谈不上有没有什么统计学意义了。然而,如果抛开这个规则,全部都纳入,结果lx变得有统计学意义了。那问题来了,到底要不要遵循这一默认的规则(是不是有效,那是另一回事,但确实非常多的人都在遵循这一规则)?关键是,这是不是意味着:以往我们发表的文章,里面也可能有这种情况存在呢?那到底有多少数据因为完全遵循这一规则而没有发现本来应该有意义(却没有发现有意义)的变量呢?多少的变量因为在单因素分析中没有统计学意义(有可能在多因素分析中有意义)而被无情地抛弃了?所以,统计分析是没有什么太多规则的,决不可墨守成规,如果真要说一个规则,那只有一个,就是:具体问题具体分析。每一份数据都有自己的独特性,都有自己的结构和特点,即使研究目的、研究变量完全一样,也不见得采用的方法应该都一样。如果你实在搞不懂,而这份数据的分析又很重要,那一定要去找统计学家合作。往往很多人觉得,回归分析嘛,很简单,软件里面一放,就出来结果了。然而,这也是软件带来的最大弊端,能给你结果,但不保证给你真实的结果。那怎么办呢?如果一项研究前期花了你很多精力、金钱、时间,那千万不要吝啬最后的一点时间、金钱,一定要去找统计学家合作,让他来帮你仔细分析。否则,往往你觉得结果已经出来了,实际上只是一个错误的结果。可能很多人想了解的是:为什么会这样?我到底应该怎么注意?实际中什么时候可以按”先做单因素,有意义的再做多因素“这种思路来分析,什么时候不应该按这种思路来分析?这个问题,我先卖一个关子,留到下一篇文章中详细解释。为什么呢?我希望大家先思考一下,而不是简单地看答案。当然,为了让感兴趣的读者能够仔细考虑这一问题,我把数据放在后面,下面这5个变量,依次是a、b、c、lx、y。有兴趣的朋友可以copy下来自己分析一下试试。43110501.822935086733.6763105601.796747010726.6759100601.663926097723.0078100601.874874375926.0067100601.989243273828.0065119611.735189117730.3366120641.631199404227.0073130881.856297990447.0053113681.483874689527.6776120701.435084525337.3376136701.682688374235.6776130701.597365331231.3368126701.517322623532.3361136701.690095815530.6778124701.749199854837.6780110701.543298109936.0074140702.159868790841.0075130701.890095369941.6766130701.925707441722.0055114702.017566138023.3371120701.597365331225.6762130701.523880024125.0069130701.449269160327.0045110702.323367632229.0079120701.865629317830.3358110701.547562508727.0065100701.801709800128.0044119701.713797927822.3353110702.639057329629.3362130721.986503546043.0062118721.378766094727.3353122741.378766094718.3371130751.329724009631.0054116751.470175845122.3364120761.885553348530.0071140781.740466174835.6750121781.662030362640.3351138801.731655545234.67觉得本公众号有用的朋友,如果想赞助,无需赞赏,帮忙点一下广告即可。只要点开即可,是否购买无所谓。也算是对本人时间和精力付出的一点回报吧。
2018年4月13日