LinearRegression

線形回帰で計算された値を用いて、ベクトル/行列を計算します。

vector vector::LinearRegression();
 
matrix matrix::LinearRegression(
  ENUM_MATRIX_AXIS  int  axis=AXIS_NONE      // 回帰が計算される軸
  );

パラメータ

axis

[in]  回帰を計算する軸を指定します。ENUM_MATRIX_AXIS列挙体からの値(AXIS_HORZ — 水平軸、AXIS_VERT — 垂直軸

戻り値

計算された線形回帰の値を持つベクトルまたは行列

注意事項

線形回帰は、標準的な回帰方程式(y(x) = a * x + b)を用いて計算されます。ここで、aは直線の傾き、bはY軸方向のシフトを表します。

linear_regression

例:

#include <Graphics\Graphic.mqh>
 
#define GRAPH_WIDTH 750
#define GRAPH_HEIGHT 350
 
//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
  vector vector_a;
  vector_a.CopyRates(_Symbol,_Period,COPY_RATES_CLOSE,1,100);
  vector vector_r=vector_a.LinearRegression();
 
//--- CHART_SHOWをオフにする
  ChartSetInteger(0,CHART_SHOW,false);
 
//--- グラフ描画用の配列
  double x[];
  double y1[];
  double y2[];
  ArrayResize(x,uint(vector_a.Size()));
  ArrayResize(y1,uint(vector_a.Size()));
  ArrayResize(y2,uint(vector_a.Size()));
  for(ulong i=0; i<vector_a.Size(); i++)
    {
    x[i]=(double)i;
    y1[i]=vector_a[i];
    y2[i]=vector_r[i];
    }
 
//--- グラフタイトル
  string title="Linear regression "+_Symbol+","+EnumToString(_Period);
 
  long   chart=0;
  string name="LinearRegression";
 
//--- グラフを作成する
  CGraphic graphic;
  graphic.Create(chart,name,0,0,0,GRAPH_WIDTH,GRAPH_HEIGHT);
  graphic.BackgroundMain(title);
  graphic.BackgroundMainSize(12);
 
//--- 元データのグラフ
  CCurve *curvef=graphic.CurveAdd(x,y1,CURVE_POINTS_AND_LINES);
  curvef.Name("vector_a");
  curvef.LinesWidth(2);
  curvef.LinesSmooth(true);
  curvef.LinesSmoothTension(1);
  curvef.LinesSmoothStep(10);
 
//--- 線形回帰のグラフ
  CCurve *curved=graphic.CurveAdd(x,y2,CURVE_LINES);
  curved.Name("vector_r");
  curved.LinesWidth(2);
  curved.LinesSmooth(true);
  curved.LinesSmoothTension(1);
  curved.LinesSmoothStep(10);
  graphic.CurvePlotAll();
  graphic.Update();
 
/--- キーボード入力を監視する無限ループ
  while(!IsStopped())
    {
    //--- escapeキーを押してプログラムを終了する
    if(TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)!=0)
        break;
    //--- PdDnを押してグラフを保存する
    if(TerminalInfoInteger(TERMINAL_KEYSTATE_PAGEDOWN)!=0)
       {
        string file_names[];
        if(FileSelectDialog("Save Picture",NULL,"All files (*.*)|*.*",FSD_WRITE_FILE,file_names,"LinearRegression.png")<1)
          continue;
        ChartScreenShot(0,file_names[0],GRAPH_WIDTH,GRAPH_HEIGHT);
       }
    Sleep(10);
    }
 
//--- クリーンアップ
  graphic.Destroy();
  ObjectDelete(chart,name);
  ChartSetInteger(0,CHART_SHOW,true);
 }

ENUM_MATRIX_AXIS

行列に対するすべての統計関数で軸を指定するための列挙型

ID

説明

AXIS_NONE

軸が指定されていません。計算は、行列全体の要素に対して、あたかもベクトルであるかのように行われます(Flatメソッドを参照)。

AXIS_HORZ

水平方向の軸

AXIS_VERT

垂直方向の軸