用matlab解决多重共线性问题,多重共线性和非线性回归的问题

前几天她和我说,在百度里有个人连续追着我的回答,三次说我的回答错了。当时非常惊讶,赶紧找到那个回答的问题,看看那个人是怎么说。最终发现他是说多重共线性和非线性回归的问题,他认为多个自变量进行不能直接回归,存在共线性的问题,需要进行因子分析(或主成分分析);说非线性回归不能转换成线性回归的方法,这里我详细说说这两方面的问题到底是怎么回事(根据我的理解),我发现很多人很怕这个多重共线性的问题,听到非线性回归,脑袋就更大了。。。

(1)多重共线性问题

我们都知道在进行多元回归的时候,特别是进行经济上指标回归的时候,很多变量存在共同趋势相关性,让我们得不到希望的回归模型。这里经常用到的有三种方法,而不同的方法有不同的目的,我们分别来看看:

第一个,是最熟悉也是最方便的——逐步回归法。

逐步回归法是根据自变量与因变量相关性的大小,将自变量一个一个选入方法中,并且每选入一个自变量都进行一次检验。最终留在模型里的自变量是对因变量有最大显著性的,而剔除的自变量是与因变量无显著线性相关性的,以及与其他自变量存在共线性的。用逐步回归法做的多元回归分析,通常自变量不宜太多,一般十几个以下,而且你的数据量要是变量个数3倍以上才可以,不然做出来的回归模型误差较大。比如说你有10个变量,数据只有15组,然后做拟合回归,得到9个自变量的系数,虽然可以得到,但是精度不高。这个方法我们不仅可以找到对因变量影响显著的几个自变量,还可以得到一个精确的预测模型,进行预测,这个非常重要的。而往往通过逐步回归只能得到几个自变量进入方程中,有时甚至只有一两个,令我们非常失望,这是因为自变量很多都存在共线性,被剔除了,这时可以通过第二个方法来做回归。

第二个,通过因子分析(或主成分分析)再进行回归。

这种方法用的也很多,而且可以很好的解决自变量间的多重共线性。首先通过因子分析将几个存在共线性的自变量合为一个因子,再用因子分析得到的几个因子和因变量做回归分析,这里的因子之间没有显著的线性相关性,根本谈不上共线性的问题。通过这种方法可以得到哪个因子对因变量存在显著的相关性,哪个因子没有显著的相关性,再从因子中的变量对因子的载荷来看,得知哪个变量对因变量的影响大小关系。而这个方法只能得到这些信息,第一它不是得到一个精确的,可以预测的回归模型;第二这种方法不知道有显著影响的因子中每个变量是不是都对因变量有显著的影响,比如说因子分析得到三个因子,用这三个因子和因变量做回归分析,得到第一和第二个因子对因变量有显著的影响,而在第一个因子中有4个变量组成,第二个因子有3个变量组成,这里就不知道这7个变量是否都对因变量存在显著的影响;第三它不能得到每个变量对因变量准确的影响大小关系,而我们可以通过逐步回归法直观的看到自变量前面的系数大小,从而判断自变量对因变量影响的大小。

第三个,岭回归。

通过逐步回归时,我们可能得到几个自变量进入方程中,但是有时会出现自变量影响的方向出现错误,比如第一产业的产值对国民收入是正效应,而可能方程中的系数为负的,这种肯定是由于共线性导致出现了拟合失真的结果,而这样的结果我们只能通过自己的经验去判断。通常我们在做影响因素判断的时候,不仅希望得到各个因素对因变量真实的影响关系,还希望知道准确的影响大小,就是每个自变量系数的大小,这个时候,我们就可以通过岭回归的方法。

岭回归是在自变量信息矩阵的主对角线元素上人为地加入一个非负因子k,从而使回归系数的估计稍有偏差、而估计的稳定性却可能明显提高的一种回归分析方法,它是最小二乘法的一种补充,岭回归可以修复病态矩阵,达到较好的效果。在SPSS中没有提供岭回归的模块,可以直接点击使用,只能通过编程来实现,当然在SAS、Matlab中也可以实现。做岭回归的时候,需要进行多次调试,选择适当的k值,才能得到比较满意的方程,现在这个方法应用越来越普遍。在07年的时候,我的一个老师还觉得这个方法是他的看家本领,但是现在很多人都会这个方法,而且用的越来越多了,得到的结果也非常合理。

特别提醒的是:多重共线性说的是变量之间线性关系,和非线性不要混淆了。多组变量之间两种极端的关系是完全多重共线性关系和完全非线性关系,即完全是平行直线的关系和完全无规则的曲线关系(是什么形状,还真不好形容,自己悟去吧^_^)。当然解决多重共线性问题的方法还有,比如差分微分模型,应用的很少,我估计是非常专业的人才会用的吧,呵呵,反正我不会这个方法。接下来说说非线性回归。

(2)非线性回归的问题。

非线性回归,顾名思义自变量和因变量是非线性的关系,比如平方、次方等等,但是大多数的非线性方程都可以转换成线性的方程,比如我们通常知道的二次函数:y=a0+a1*x+a2*x^2,这里就可以转换成线性方程,首先将x^2计算得到x1,方程就变成y=a0+a1*x+a2*x1,而这个方程就是我们一般见到的多元线性回归,直接进行线性拟合就可以了。

这里需要特别提醒的是:我说的可以转换成线性的非线性方程,是一元非线性方程,而不是多元非线性方程。我们知道在SPSS回归分析中有单独一个模块叫曲线估计,它里面提供的11个非线性模型都是可以转换成线性模型的,而且在进行系数拟合的时候都是通过转换成线性方程进行拟合的,这就是为什么同样是非线性方程,在曲线估计里面不需要输入系数的初始值,而在非线性回归中却要输入。

将非线性方程转换成线性方程再进行拟合,不是因为我们不会做非线性拟合,而改成线性拟合我就会做了,主要原因不是因为这个。而是因为同样的非线性方程拟合比转换成的线性方程拟合误差更大一些,而且由于迭代次数的增多,计算时间会更长,由于我们平时计算的数据不是很多,这种感觉不是非常明显,但是当我们做实际问题的时候,特别是规划问题中,我们将非线性方程转换成线性方程时,计算速度会明显加快。还有一个原因是,做非线性回归的时候,我们要在拟合之前设置初始值,而初始值的选择直接影响后面系数的确定,你改变初始值,拟合出来的系数都会发生变化,这样也会增加非线性回归产生的误差,前面说的误差是计算上产生的误差,而这里是人为经验上产生的误差。因此在做非线性回归时,如果能转换成线性回归,一定转换成线性的来做。

说到那个人,他在留言中说,这样我没有考虑到转换之后自变量之间的多重共线性,不能这样做,还声嘶力竭的喊我误人子弟。这里我要详细说明是怎么回事,要不要考虑这里的多重共线的问题,如果他也能看到更好。一般我们做回归分析的时候,通常第一步看自变量和因变量之间的散点图,通过散点图我们大致判断两者之间存在怎么的关系,再来选择适当的模型。而通常我们不知道具体选择哪个模型,可以选择几个可能相似的模型比较一下,选择一个拟合效果最好的。这里比如说两个变量之间知道是非线性的,但是不知道是二次的、三次的还是四次及以上的关系(通常次方数越低越好),你可以同时考虑,然后根据拟合的结果来判断。如将方程设置为:y=a0+a1*x+a2*x^2+a3*x^3+a4*x^4,转换成线性方程就是:y=a0+a1*x+a2*x2+a3*x3+a4*x4,而这里需不需要考虑这四个自变量之间的共线性呢,上面说过,多重共线性指的是变量之间的线性关系,而这里的四个自变量他们是非线性的关系(x、x^2、x^3、x^4),即使他们的线性相关系数很高(这是因为二次或者三次曲线用直线拟合得到效果也不错,但是我们知道他们之间的确是非线性的关系,而不是线性关系),因此,我们可以他们的多重共线性,在拟合的时候,选择逐步回归法,也可以不考虑,选择直接进入法,两者得到的结果几乎一样,我亲自试验了。如果得到的结果的确有四次方的关系,那么x4自变量就会通过检验,我们可以通过检验来判断两个变量到底存在什么样的曲线关系。

这样还需要简单说下多元非线性回归,多元非线性回归也可以进行转换,但是转换完之后就必须要考虑变量之间的多重共线性了,因为我们不能明确的知道转换之后的自变量是否不存在线性的关系。上次有个人在百度里提问说,我有十几个自变量,想做非线性回归,我们一般不推荐这么多自变量做多元非线性回归,除非你发现十几个自变量都和因变量存在非线性的关系。因为多元非线性回归计算非常复杂,迭代次数非常庞大,而得到的结果也不尽如人意。

好了,这些都是根据我自己的理解和经验来写的,如果一不小心被统计高手或者老师看到,如发现说的不对的地方,请一定要在下面指正出来,非常感谢。

你可能感兴趣的:(用matlab解决多重共线性问题,多重共线性和非线性回归的问题)