第一:用所给样本求出两个相关变量的(算术)平均值
第二:分别计算分子和分母:(两个公式任选其一)分子
第三:计算b:b=分子/分母
用最小二乘法估计参数b,设服从正态分布,分别求对a、b的偏导数并令它们等于零。
先求x,y的平均值X,Y,再用公式代入求解:
后把x,y的平均数X,Y代入a=Y-bX
求出a并代入总的公式y=bx+a得到线性回归方程
(X为xi的平均数,Y为yi的平均数)
#include
#include
void main()
{
float x[8] = {300.0 , 400.0 , 400.0 , 550.0 , 720.0 , 850.0 , 900.0 , 950.0};
float y[8] = {300.0 , 350.0 , 490.0 , 500.0 , 600.0 , 610.0 , 700.0 , 660.0};
int i;
int n;
float x_ave, y_ave, a, b, b1, mxy, sum_x, sum_y, lxy, xiSubSqr;
n = sizeof(x) / sizeof(x[0]);
a = b = mxy = sum_x = sum_y = lxy = xiSubSqr = 0.0;
for (i = 0; i < n; i++)
{
sum_x += x[i];
sum_y += y[i];
}
x_ave = sum_x / n;
y_ave = sum_y / n;
for (i = 0; i != n; i++)
{
lxy += (x[i] - x_ave) * (y[i] - y_ave);
xiSubSqr += (x[i] - x_ave) * (x[i] - x_ave);
}
b = lxy / xiSubSqr;
a = y_ave - b * x_ave;
printf("y=%0.2fx+%0.2f\n", b, a);
system("pause");
}
运行代码如下:
全部0条评论
快来发表一下你的评论吧 !