语言版的线性回归分析函数
前几天,清理出一些十年以前 DOS 下的程序及代码,看来目前也没什么用了,想打个包刻
在光碟上,却发现有些代码现在可能还能起作用,其中就有计算一元回归和多元回归的代
码,一看代码文件时间,居然是 1993 年的,于是稍作整理,存放在这,分析虽不十分完整,
但一般应用是没问题的,最起码,可提供给那些刚学 C 的学生们参考。
先看看一元线性回归函数代码:e
//求线性回归方程:Y=a+bx
//dada[rows*2]数组:X,Y;rows:数据行数;a,b:返回回归系数
//SquarePoor[4]:返回方差分析指标:回归平方和,剩余平方和,回归平方差,剩余平方差
//返回值:0 求解成功,-1 错误
intLinearRegression(double*data,introws,double*a,double*b,double*SquarePoor)
{
intm;
double*p,Lxx=0.0,Lxy=0.0,xa=0.0,ya=0.0;
if(data==0||a==0||b==0||rows<1)
return-1;
for(p=data,m=0;m<rows;m++)
{
xa+=*p++;
ya+=*p++;
}
xa/=rows;//X 平均值
ya/=rows;//Y 平均值
for(p=data,m=0;m<rows;m++,p+=2)
{
Lxx+=((*p-xa)*(*p-xa));//Lxx=Sum((X-Xa)平方)
Lxy+=((*p-xa)*(*(p+1)-ya));//Lxy=Sum((X-Xa)(Y-Ya))
}
*b=Lxy/Lxx;//b=Lxy/Lxx
*a=ya-*b*xa;//a=Ya-b*Xa
if(SquarePoor==0)
return0;
//方差分析
SquarePoor[0]=SquarePoor[1]=0.0;
for(p=data,m=0;m<rows;m++,p++)
{
Lxy=*a+*b**p++;
SquarePoor[0]+=((Lxy-ya)*(Lxy-ya));//U(回归平方和)