Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Линейная регрессия


Автор: Mach3 9.6.2008, 09:22
Привет...
Нашел алгоритм реализации линейной регрессии, но не могу разобраться..
Помогите пожалуйста :)
Код

type
  TDoubleArray = array of double;

procedure LinearRegression(ValueArray, ArgumentArray: TDoubleArray;
  SourceSeries,
  DestSeries: TChartSeries; var MainCoef, FreeCoef: double;
  SeriesColor: TColor; var Hint: string);
var
  b0, b1, xsum, ysum, pxy, xsqua: double;
  y, x: array of double;
  i, N: integer;
  s: string;
begin
  if ValueArray <> nil then
    N := Length(ValueArray)
  else
    N := SourceSeries.XValues.Count;
  pxy := 0;
  xsqua := 0;
  SetLength(x, N);
  SetLength(y, N);
  for i := 0 to N - 1 do
  begin
    if ValueArray <> nil then
    begin
      y[i] := ValueArray[i];
      x[i] := ArgumentArray[i];
    end
    else
    begin
      y[i] := SourceSeries.YValues.Value[i];
      x[i] := SourceSeries.XValues.Value[i];
    end;
    pxy := pxy + x[i] * y[i];
    xsqua := xsqua + x[i] * x[i];
  end;
  xsum := Sum(x);
  ysum := Sum(y);
  b1 := (xsum * ysum - N * pxy) / (xsum * xsum - N * xsqua);
  b0 := (ysum - b1 * xsum) / N;
  MainCoef := b1;
  FreeCoef := b0;
  if DestSeries <> nil then
    for i := 0 to N - 1 do
      if ValueArray <> nil then
        DestSeries.AddXY(ArgumentArray[i],
          b1 * ArgumentArray[i] + b0, '', SeriesColor)
      else
        DestSeries.AddXY(SourceSeries.XValues.Value[i],
          b1 * SourceSeries.XValues.Value[i] + b0, '', SeriesColor);
  if b0 < 0 then
    s := ''
  else
    s := '+ ';
  Hint := Format('%0.3f', [b1]) + '*X ' + s + Format('%0.3f', [b0]);
  x := nil;
  y := nil;
end;


У меня следующие данные:
 год     кол-во
1992 | 137
1993 | 144
1994 | 158
1995 | 143
1996 | 138
1997 | 178
Если я правильно понимаю, то ValueArray- кол-во, ArgumentArray-год...
Не понятно, что такое SourceSeries,DestSeries: TChartSeries, и что туда присваивать...
 Заранее благодарен...

Автор: Rennigth 9.6.2008, 11:58
Цитата(Mach3 @  9.6.2008,  09:22 Найти цитируемый пост)
Не понятно, что такое SourceSeries,DestSeries: TChartSeries, и что туда присваивать...

элементы компонента TChart. Входит в стандартную палитру компонент делфи.

Автор: Mach3 9.6.2008, 14:04
т.е.  возможно определение переменных из массива или из chart?

Автор: Rennigth 9.6.2008, 14:13
т.е. подставляешь Chart1.Series[{номер сериаса}] в параметр DestSeries. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)