/*
消費関数の決定 所得と消費に関する1次回帰と決定係数
Keynes型の消費関数 Y=a+bX, Y:消費支出, X: 実収入
*/

#include 

/*a,bを計算する関数を宣言する, flag=0 for a, flag=1 for b */
float fkeisu(float x[], float y[], int n, int flag);
/*決定係数Rを計算する関数を宣言する*/
float fkettei (float x[], float y[], float a, float b, int n);

main()
{
 float x[11]={405,424,444,452,460,481,495,521,548,563,570}; /*x=実収入*/
 float y[11]={272,282,289,293,295,307,316,331,345,352,355}; /*y=消費支出*/
 float a,b,rr; /*y=a+bx, rr=R: 決定係数*/
 float x1,y1,bai;
 int j,k,n=11; /*n=11はデータの数*/
 a=fkeisu(x,y,n,0); /*係数a を計算する関数を呼ぶ*/
 b=fkeisu(x,y,n,1); /*係数b を計算する関数を呼ぶ*/
 rr=fkettei(x,y,a,b,n); /* 決定係数Rを計算する関数を呼ぶ*/
 printf("a=%6.4f b=%6.4f R=%6.4f\n",a,b,rr); /*表示*/
 getchar(); /*一次停止*/
 /*散布図*/
 printf("---------------散布図------------------- \n");
 bai=0.5; /*bai: 倍率変数*/
 for(k=0;k=\sum xi/N, <y>=\sum Yi/N, Sxy=\sum (xi-<x>)(yi-<y>),
 Sxx=\sum (xi-<x>)**2, b=Sxy/Sxx; a=<y>-b<x>
*/
float fkeisu(float x[],float y[],int n,int flag)
{
  float sx=0, sy=0, sxx=0, sxy=0; /*初期設定*/
  float avy, avx, a,b;
  int k;
  for(k=0;k<n;k++){
    sx=sx+x[k];  /*データの和を求める*/
    sy=sy+y[k];  /*データの和を求める*/
   }
    avx=sx/n;	 /*平均を求める*/
    avy=sy/n;  /*平均を求める*/
   for(k=0;k<n;k++){
     sxy=sxy+(x[k]-avx)*(y[k]-avy); /*偏差の自乗の和を求める*/
     sxx=sxx+(x[k]-avx)*(x[k]-avx); /*偏差の自乗の和を求める*/
   }
    b=sxy/sxx;
    a=avy-b*avx; /*a,bを求める*/
     if(flag==0){  /*flagに応じてa又はbを返す*/
     return a;
      }
     if(flag==1){
     return b;
      }
}

/*Coefficient of Determination R; 決定係数の計算
 <y>=\sum Y_i/N, Syy=\sum (yi-<y>)**2,
  R=rr=1-\sum (yi-(a+bxi))**2/(Syy))
*/
float fkettei(float x[], float y[], float a, float b, int n)
{
  float sy=0,syy=0,syx=0; /*初期設定*/
  float avy,rr;
  int k;
  for (k=0;k<n;k++)
   {
     sy=sy+y[k];  /*データの和を求める*/
    }
    avy=sy/n;
    for(k=0;k<n;k++)
      {
        syx=syx+(y[k]-(a+b*x[k]))*(y[k]-(a+b*x[k])); /*偏差の自乗の和*/
        syy=syy+(y[k]-avy)*(y[k]-avy);
       }
     rr=1-syx/syy;
     return rr;
}


[出力結果]
a=60.4448 b=0.5169 R=0.9964

---------------散布図------------------- 
x=405, y=272            *
x=424, y=282                 *
x=444, y=289                    *
x=452, y=293                      *
x=460, y=295                       *
x=481, y=307                             *
x=495, y=316                                  *
x=521, y=331                                         *
x=548, y=345                                                *
x=563, y=352                                                    *
x=570, y=355                                                     *

---------------一次回帰------------------- 
x=405,y=270         +
x=425,y=280               +
x=445,y=290                    +
x=465,y=301                         +
x=485,y=311                              +
x=505,y=321                                   +
x=525,y=332                                        +
x=545,y=342                                              +
x=565,y=352                                                   +



Back to C Language

Google




BLOG
PICASAWEB
Panoramio


REF:


Cプログラミングによる経済・経営問題の解決法 土田 美廣