matlab 相关系数_回归分析(三) 相关系数

在前两篇文章中,读者应该对“什么是回归分析”这个问题有一定的了解,或许还不全面,但有了以上理解以后,我们就可以进行接下来的介绍了。

接下来,我们要解决的问题是“在什么时候进行回归分析”。

无论是简单回归,还是多元回归,它们的全称分别是简单线性回归和多元线性回归,这意味着,回归方程是个线性方程。

观察多元线性回归模型

d716d3a0b8dc92b376edfc2393861414.png

这告诉我们,当我们的问题本质上不是线性的,或者说,数据告诉我们这个问题不是个线性问题,我们就不能直接使用回归分析的方法。

那如何判断一个问题是不是线性问题,对于简单回归来说,画散点图是最直观有效的方法。缺点在于,且不说这个方法太过主观,光是只适用于简单回归这一点,就难以让人接受。

对于简单回归,还有一个不那么主观的方法,去判断预测变量和响应变量之间是否存在线性相关关系。学过概率论的人都知道,这个统计量就是相关系数。在学习概率论的时候,相关系数为0,不代表两个变量之间相互独立。不过,恰好的是,简单回归的适用条件也正好是两个变量之间是否线性相关。

但是相关系数好像也没有解决我们的问题,它还是只适用于简单回归。如果多元回归也只是两个变量就好了。多元回归有多个预测变量这件事一直很让人头痛,如果一个变量能够代表所有的预测变量,问题就迎刃而解了。诶?响应变量就是由所有的预测变量去解释的吧,说是这么说,但是这好像陷入了一个先有鸡还是先有蛋的死循环。我们不可能用响应变量自己与自己去计算相关系数的,因为毫无疑问,这个相关系数是1。

但是我们可以用响应变量的预测值和真实值去计算相关系数呀,我们称之为复相关系数

我们先不讨论回归分析对于这个问题是否合适,我们先做一次回归分析,再看这个结果好不好,结果不好,方法就不合适。也就是说,当用线性模型拟合了给定数据以后,用复相关系数评价拟合的效果

当我们用回归分析的方法得到了一个回归方程,并且通过这个回归方程计算出了响应变量的预测值,这个预测值与真实值的相关系数高,说明这些预测变量能很好地解释响应变量。

所以回归分析是个好方法!呃……也许是个好方法?

A = rand(20,10); % 20行10列的随机数

for i = 1:9

x = A(:,1:i);

y = A(:,end);

X = [ones(size(y)),x];

Y = y;

[b,bint,r,rint,stats]=regress(Y,X);

Z = X*b; % 预测值

tmp = corrcoef(Y,Z);

xiangguanxishu(i) = tmp(1,2);

end

在上面的代码中,我随机生成了20行10列的数据,把最后一列作为响应变量,分别把前1个变量,前2个,一直到前9个变量做了9次回归。得到的9个相关系数如下:

0.1969 0.3193 0.3907 0.4023 0.4135 0.5184 0.5367 0.5998 0.6260

这说明,在已有的预测变量不变的情况下,我增加预测变量,我响应变量预测值和真实值的相关系数一定是增大的。考虑极端情况,若我想要相关系数增大,只需要不断地增加预测变量的个数就好,当预测变量的个数与样本个数一致时,毫无疑问,相关系数是1。这种回归方程,拥有如此多的预测变量的回归方程不是我们想要的。

如何在保证方程的简约的情况下,做出一个好的回归方程呢?这是我们接下来的问题。

下一篇文章,我将为我这篇文章的内容,用MATLAB写个例子,虽然我上面的代码就能够展现如何用MATLAB编程了。

你可能感兴趣的:(matlab,相关系数)