一句话总结:两者描述的是不同的度量指标。
一、简述线性模型以及matlab的用法。
线性回归对一个因变量(即响应变量)y与一个或多个自变量(即预测变量)x1,...,xn之间的关系进行建模。简单线性回归使用以下关系方程,仅考虑一个自变量:
其中
![]()
是截距,
![]()
是回归系数,也就是线性模型的斜率。
斜率描述的是什么?
斜率,即回归系数:1个单位的x引起多少个单位的y变化。
但是请注意,斜率的大小会随着变量x、y所用的单位而变化。
考虑一组观察量,有n个(x,y)对。
可以化成 A = X·B,注意此时X为已知量(观测值),B就是线性模型中需要根据观测值确定的量。
matlab 计算线性回归的方法:
1、针对
matlab可以 A/X这种方式根据最小二乘原理计算出B。
2、针对多项式
使用 polyfit 函数,我们的例子采用这种方法。
3、使用cftool拟合工具箱
二、实例
一切的起源:散点图。
试验数据来自matlab自带的accidents数据 :表示美国每个州的交通事故。
load accidents
x = hwydata(:,14); %Population of states
y = hwydata(:,4); %Accidents per state
format long
p = polyfit(x,y,1); % 1 代表线性拟合
yCalc1 = polyval(p, x);
scatter(x,y)
hold on
plot(x,yCalc1)
xlabel('Population of state')
ylabel('Fatal traffic accidents per state')
title('Linear Regression Relation Between Accidents & Population')
grid on
生成的结果图如下:
拟合多项式的系数和截距为:
p =
1.0e+02 *
0.000001256394274 1.427120171726538
三、相关系数
先给出一个相关系数很小的例子。
x = 1:100;
y = reshape(rand(10), 1, 100);
format long
p = polyfit(x,y,1); % 1 代表线性拟合
yCalc1 = polyval(p, x);
scatter(x,y)
hold on
plot(x,yCalc1)
xlabel('x')
ylabel('y')
title('均匀分布')
grid on
拟合多项式的系数和截距为:
p =
-0.000439481770944 0.531551291067788
比较上述两个拟合系数,发现它们两个是同一量级大小的回归系数。但是观察两幅图,明显感觉到第一个例子中的数据点更聚集在回归线周围,而第二个例子中的数据点几乎和回归线没啥关系。
所以这里就引出了相关系数的概念。
相关系数:变量之间关系的可靠程度。范围在-1~1之间,给你变量x的值,你对判断出变量y的值的一种可靠程度度量。它是描述数据点是否聚集在回归线周围的一种度量。
我们通常使用相关系数的平方用来计算,相关系数^2的计算方法如下:
其中
![]()
表示观测值
y的平均数,
![]()
表示根据线性模型预测的
y值。
使用这个公式我们算出第一个例子中的回归系数的平方为:
>> Rsq1 = 1 - sum((y - yCalc1).^2)/sum((y - mean(y)).^2)
Rsq1 =
0.838210531103428
第二个例子中的回归系数的平方为:
>> Rsq2 = 1 - sum((y - yCalc1).^2)/sum((y - mean(y)).^2)
Rsq2 =
0.001818794039398
啊哈,确实如此!
四、小总
千万不能根据直线的倾斜程度(斜率)判断相关系数。