【统计学】一元线性回归 Monadic Linear Regression

一元线性回归方程:

 

倾向值:

 

回归常量:

 

相关系数

 

协方差(Covariance)的计算公式:

 

C++源代码:

  1 /*
  2 
  3 App : LR.cpp
  4 
  5 This is a C++ program
  6 for linear regression
  7 between x and t(time or year),
  8 i.e. x = a + b * t
  9 
 10 BY : ZXD
 11 Date : January 9, 2014
 12 
 13 */
 14 
 15 #define _CRT_SECURE_NO_WARNINGS
 16 
 17 #include <fstream>
 18 #include <cmath>
 19 
 20 #define NSIZE 51
 21 // The NSIZE is size of sample,
 22 // e.i. the number of units.
 23 
 24 void slr( int n,
 25           double *x,
 26           double *t,
 27           double *xr,
 28           double &a,
 29           double &b,
 30           double &r
 31           );
 32 
 33 int main()
 34 {
 35     int n = NSIZE;
 36     double x[NSIZE] = { 0 };
 37     double t[NSIZE] = { 0 };
 38     double xr[NSIZE] = { 0 };
 39     double a = 0;
 40     double b = 0;
 41     double r = 0;
 42 
 43     FILE *infp;
 44     FILE *outfp;
 45 
 46     infp = fopen( "data4.txt", "r");
 47     for ( int i = 0; i < n; i++ )
 48     {
 49         fscanf( infp, "%lf %lf", &t[i], &x[i] );
 50         //printf( "%10.4lf %10.4lf %10.4lf\n", t[i], x[i], xr[i] );
 51     }
 52     fclose( infp );
 53     
 54     slr( n, x, t, xr, a, b, r );
 55 
 56     outfp = fopen( "result.txt", "w" );
 57     for ( int i = 0; i < n; i++ )
 58     {
 59         fprintf( outfp, "%10.4lf %10.4lf %10.4lf\n", t[i], x[i], xr[i] );
 60         printf( "%10.4lf %10.4lf %10.4lf\n", t[i], x[i], xr[i] );
 61     }
 62 
 63     fprintf( outfp, "\n" );
 64     fprintf( outfp, "Constant of regression : a = %10.4lf\n", a );
 65     fprintf( outfp, "Coefficient of regression : b = %10.4lf\n", b );
 66     fprintf( outfp, "Correlation Coefficient : r = %10.4lf\n", r );
 67 
 68     printf( "\n" );
 69     printf( "Constant of regression : a = %10.4lf\n", a );
 70     printf( "Coefficient of regression : b = %10.4lf\n", b );
 71     printf( "Correlation Coefficient : r = %10.4lf\n", r );
 72 
 73     fclose( outfp );
 74 
 75     system( "pause" );
 76 
 77 }
 78 
 79 void slr( int n,
 80           double *x,
 81           double *t,
 82           double *xr,
 83           double &a,
 84           double &b,
 85           double &r
 86           )
 87 {
 88     double xSum = 0;
 89     double tSum = 0;
 90 
 91     double xxSum = 0;
 92     double ttSum = 0;
 93     double xtSum = 0;
 94 
 95     // Covariance
 96     double xxCov = 0;
 97     double ttCov = 0;
 98     double xtCov = 0;
 99 
100     for ( int i = 0; i < n; i++ )
101     {
102         xSum += x[i];
103         tSum += t[i];
104         xxSum += x[i] * x[i];
105         ttSum += t[i] * t[i];
106         xtSum += x[i] * t[i];
107     }
108 
109     xxCov = xxSum - xSum * xSum / (double)n;
110     ttCov = ttSum - tSum * tSum / (double)n;
111     xtCov = xtSum - xSum * tSum / (double)n;
112 
113     b = xtCov / ttCov;
114     a = xSum / (double)n - b * tSum / (double)n;
115     r = xtCov / sqrt( xxCov * ttCov );
116 
117     // Calculating regressand
118     for ( int i = 0; i < n; i++ )
119         xr[i] = a + b * t[i];
120 
121     return;
122 }

 

转载于:https://www.cnblogs.com/FZQL/p/3520070.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值