一种基于最小二乘法的回归分析

public class LinearRegression {
    //求出来的b值
    public static double getB(double[] x,double[] y,int j){
        //首先先保证xy是数量相同的
        double b=0;
        //先对x求平均
        double xp=0;
        double yp=0;
        for(int i=0;i<j;i++){
            xp+=x[i];
            yp+=y[i];
        }
        xp=xp/(double)j;
        yp=yp/(double)j;
        //第二步
        // 计算一系列的差值 x-xp,y-yp
        double xpp=0;
        double ypp=0;
        double zpp=0;
        double xxp=0;
        for(int k=0;k<j;k++){
            xpp =(x[k]-xp);
            ypp =(y[k]-yp);
            zpp+=(xpp*ypp);
            xxp+=(xpp*xpp);
        }

        b=zpp/xxp;
        return b;
    }
    //最小二乘法求时间序列 数据线性回归公式
    public static double[] getLinearAB(double[] x,double[] y){
       double[] ab=new double[2];
       if(x.length!=y.length) return ab;
       //第一步 求x y 平均
       double avg_x=0,avg_y=0;
       for(int i=0;i<x.length;i++){
           avg_x+=x[i];
           avg_y+=y[i];
       }
       avg_x=avg_x/x.length;
       avg_y=avg_y/x.length;
       //第二步 所有点的横坐标求和结果,以及所有点的纵坐标求和结果
       double sum_x=0,sum_y=0;
        for(int i=0;i<x.length;i++){
            sum_x+=x[i];
            sum_y+=y[i];
        }
        //第三步 计算每个数据点横坐标的平方,然后求和,以及计算每个点横坐标乘以纵坐标的乘积,然后求和
        double sum_x2=0,sum_xy=0;
        for(int i=0;i<x.length;i++){
            sum_x2+=x[i]*x[i];
            sum_xy+=x[i]*y[i];
        }
        //第四步 求 b
        int n=x.length;
        ab[1]=(n*sum_xy-sum_x*sum_y)/(n*sum_x2-sum_x*sum_x);
        //第五步 求 a
        ab[0]=avg_y-ab[1]*avg_x;
       return ab;
    }

     


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值