c语言实现一元线性回归

描述

第一:用所给样本求出两个相关变量的(算术)平均值

第二:分别计算分子和分母:(两个公式任选其一)分子

第三:计算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");
}

运行代码如下:

算法


 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分