利用SAS和SQL做線性回歸

 

4         摘要
 本文要描述的是使用线形回归的方法,采用SAS这个经济分析工具做取数据预测,可能采用到的有SQLSERVER2000数据库,

5         关键词

2.1

回归分析:回归分析是将统计规则应用到两组成员中来确定其中一组影响另一组的程度。回归的目的是根据以前的经验提高我们预测从属变量下一次出现的能力。回归分析同时还是出现在一个公式中的两个变量的数学关系。其中一个变量可以通过我们以知的另一个变量来预测。将要被预测的变量称为从属变量(dependent variable),以知信息变量称为独立变量(independent variable)。变量之间的关系可以是线性的或是曲线的。

相关性:检验与之相关的程度。

斜率:一个完成回归等式的必要参数。

截距:一个完成回归的另一个必要参数。

残值:表示对y的预测值和y实际值之差,这种差异是由于画直线的需要而对y的值做的近似,该参数有助于计算预测方差。

X的方差:利用该值结合残值有助于计算预测方差。

置性度:用来创建回归线的实例数。

 

 

线形回归:如果在回归分析中函数的关系可以用在图象上的直线描述(在一个普通的X-Y坐标系中)或用一个简单的数学形式y=mx+b来表示。

6         问题定义

     高速公路的营运收入与本地经济的发展密切相连,公司的重大决策之前,非常需要作出公司的预算估测。本地的GDP12和公司年数据比较如下:

     本地的GDP(亿元)

   公司的营运收入(亿元)

1300

480

1700

540

1880

551

1900

600

2000 

660

2300

1500

2450

1080

2525

900

2870

1200

2890

1200

3500

1680

4100

1710

7               相关性分析

     高速公路的营运收入和本地的经济发展之间存在着某种关系的想法听起来也是非常合理的。首先要做的事情是建立营运收入和本地GDP年增长量之间关联。这种关联,或者称为相关,用一个-1到1之间的数来表示。越接近1,相关性越高。因此,经济发展得越快,相应公司的营运收入也增长的快;越接近-1,则负的相关越高。如果存在负相关,那么经济发展越快,则收入越少。如果相关数为0,说明两者之间没有关系。现定这个系数为相关系数。

   计算相关系数的公式如下(即x值和y值的方差被x和y的标准方差的乘积除):

                                  r=cov(xy)/std(x)*std(y)

   计算方差的公式如下:

                                  cov(xy)=

   计算标准方差的公式如下:

                                

 代入所有值可以得到以下结果:

                                 r=295701/(759.75*436.02)=89%

                            

8         回归线

            在该分析中,独立变量是每年本地的GDP变化量。假设该值(x值)不受其他变量的影响。其表被转换成图形如下:

     

       回归将在图中寻找尽可能靠近所有点的直线和该直线的斜率及截距。

       如果a=截距,b=斜率,描述线形回归的公式如下:   

       y=bx+a

       如果能计算a值和b值,那么给定当地的GDP(x值),就能得到想要预测的公司的营运收入(y值)。

9 斜率公式

   计算斜率的公式为:

           

   将数字代入上面公式得到下面结果:

           b=[(12*33194100)-(29425*12090)]/(12*79079225)-29425

           b=0.512

10 截距计算公式

           a=1007.50-(0.512*2452.08)

   代入公式的数:

           a=-248

11 利用回归分析作预测

   假设已经从别的渠道得到五年经济增长的预测,代入公式得出预测的营运收入:如表表示如下:

   值得注意的是,这些预测是建立在现有的公司制度上的,如果公司制度管理有重大改变,那么预测就会有风险,

   例如,公司最近有扩宽八车道的计划,将对预测值有很大的影响。

  

   回归线的斜率和截距并不能说明图象的点与回归线的吻合程度。尽管相关系数可以反映各成员之间的关系,但是

需要一个公式来确定准确性:

 

12 使用SAS创建回归模型

 SAS的强大功能是有很多强大的统计函数,,在处理回归分析中,是一个很强的工具。SAS提供下列函数完成下面计算
DATA abc;                              
1300 480
1700 540
1880 551
1900 600
2000 660
2300 1500
2450 1080
2525 900
2870 1200
2890 1200
3500 1680
4100 1710
  ;               
OPTIONS LS=64 PS=12;
     
PROC PLOT;
INPUT x y;
 CARDS;   
 RUN;
PROC CORR;
VAR x y;
 RUN;
 PROC REG;
MODEL y=x / R CLI CLM;
PLOT (U95. L95. P.)*x='-'
y*x='o' / OVERLAY;
OUTPUT OUT=aaa P=yhat R=yresid;
RUN;
PROC PLOT DATA=aaa;
PLOT yresid*yhat='R';
RUN;

 运行后得到的结果是:

 

13 在关系数据库中应用回归

   为了使回归分析的结果更有价值,我们把该算法应用到一个表中,使用sql语句从表中得到需要的变量的值是非常复杂的

下面的代码将演示如何利用sql来计算出回归系数:

    set nocount on

    create table tdist(df int,dist float)

      

        insert into tdist value ()

        insert into tdist value ()

        insert into tdist value ()

        insert into tdist value ()

   go

 

   create procedure usp_MakeElectricBillPrediction

      @gdp float

   as

   declare @x float

   declare @y float

   declare @avgx float

   declare @avgy float

   declare @xy float

   declare @x2 float

   declare @y2 float

   declare @support int

 

   declare @dist float

 

   declare @correlation float

   declare @determination float

   declare @slope float

   declare @intercept float

 

   declare @sx float

   declare @sy float

   declare @sxy float

 

   declare @prediction float

 

   select

      @x=sum([gdp]),

      @y=sum([income]),

      @avgx=avg([gdp]),

      @avgy=avg([income]),

      @xy=sum([gdp]*[income]),

      @x2=sum(square([gdp])),

      @y2=sum(square([income]),

      @suport=count(1)as suport

          from gdpincome

 set @slope=((@support*@xy)-(@x*@y))

             /((@support*@x2-square(@x))

 

 set @intercept=((@y/@support)-(@slope*@(@x/@support))

 

 set @sxy=((@xy/@support)-(@avgx*@avgy)

 set @sx=sqrt(abs(@x2/@support)-square(@avgx))

 set @sy=sqrt(abs(@y2/@support)-square(@avgy))

 

 set @correlation=@sxy/(@sx*@xy)

 set @determination=square(@correlation)

 

 if @dist is null

 begin

     select @dist =max(dist) from tdist

 end

 

 set @prediction=@intercept+(@gdp*@slpe)

 

 select

     @errx=sum(x-avgx)as err,

     @erry=sum(y-avgy)as erry,

     @residual=sum(square(y-(intercept*(slope*x)))

     from gdpincome

 set @error=(@tdist*@residual)*(square(@prediction-@avgx)/@errx)+1+(1/@support)

 

select

    @correlation as correlation,

    @support as support,

    @slope as slope,

    @intercept as intercept,

    @prediction as income,

    @error as plusorminus

 

这样回归分析就用sqlserver用户定义的函数,临时表,和游标完成,同样可以考虑创建一个COM+的中间层组件来计算

并返回斜率、截距和相关性。数据的问题留给组件,这样就不会占用和降低用在数据库引擎上的CPU周期,以保证起返回

查询需要的动力。

 

14使用表

 把前一段计算出的内容存储在表中,其表结构如下:

  create table regressionmodel(

   id int,

   correlation float,

   slope float,

   intercept float,

   residual float,

   errx float,

   support int

   )

   一旦完成了回归计算,所有的数字都被嵌入模型中,随后的预测将简单地从表中查询值来构建生成预测的公式,下面是查询的示例:

   select intercept*(slope*1500) as prediction

       from regressionmodel

   where id=10

 

 

 

 

 

 

 

 

 



转载于:https://www.cnblogs.com/jchdong/archive/2007/03/28/691130.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值