Энциклопедия Turbo Pascal. Главы 5-8
Страница 11. Прогнозирование и уравнение регрессии


Прогнозирование и уравнение регрессии

     Статистическая информация  часто  используется  для   вывода
"обоснованных  предположений"  о будущем.  Хотя каждому известно,
что на основе прошлого опыта не обязательно можно предсказать бу-
дущее  и  что  каждое  правило имеет исключение,  все же данные о
прошлом используются для этого.  Очень часто  тенденции,  имевшие
место в прошлом и настоящем, сохраняются и в будущем. В этих слу-
чаях вы можете определить конкретные значения для некоторого вре-
мени в будущем. Этот процесс называется прогнозированием или ана-
лизом тенденций.
     Например, рассмотрим  некое  исследование  продолжительности
жизни за десятилетний период. Пусть получены следующие данные:

    Год             Продолжительность жизни
    1980                   69
    1981                   70
    1982                   72
    1983                   68
    1984                   73
    1985                   71
    1986                   75
    1987                   74
    1988                   78
    1989                   77

     Сначала следует понять,  если здесь какая-нибудь  тенденция?
Если  она действительно имеется,  то можно узнать какой она имеет
характер.  И,  наконец,  если наблюдается действительно  заметная
тенденция,  то можно предсказать, например, среднюю продолжитель-
ность в 1995 году.
     Сначала рассмотрим  столбиковую  диаграмму и точечный график
для этих данных,  представленные на рис.26.  Исследуя  их,  можно
сделать вывод, что средняя продолжительность жизни в целом увели-
чивается. Если приложить линейку так, чтобы наилучшим образом ли-
ния соответствовала графику,  и продолжить линию до 1995 года, то
окажется,  что продолжительность жизни будет в районе 82. Однако,
насколько  можно  быть  уверенным  в достоверности такого вывода?
Несмотря на интуитивное ощущение правильности  такого  вывода  вы
можете  захотеть использовать более формальные и точные методы по
прогнозированию тенденции средней продолжительности жизни.
     Имея набор  изменяющихся во времени данных лучше всего полу-
чать прогноз путем поиска линии наилучшего соответствия по  отно-
шению  к имеющимся данным.  Именно это делалось с применением ли-
нейки.  Линия  наилучшего  соответствия  располагается   наиболее
близко  ко всем точкам и лучше всего отражает их тенденцию.  Хотя
некоторые или даже все данные не будут находиться на  линии, сама
линия хорошо представляет их. Достоверность линии зависит от бли-
зости точек выборки.
     Линия в  двумерном  пространстве задается следующим основным
уравнением:

                        Y = a + bX,

где Y является независимой переменной, Х является зависимой пере-
менной,  "а" является точкой пересечения оси Y, а "в" задает нак-
лон линии.  Таким образом, для определения линии наилучшего соот-
ветствия выборки требуется определить "а" и "в".

    78                                  ¦
    .                           ¦       ¦   ¦
    .           ¦       ¦       ¦   ¦   ¦   ¦
    .   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
    .   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
    .   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
    .   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
    .   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
    .   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
    .   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
    .   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
    .   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
    .   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
    .   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦   ¦
  a ----+---+---+---+---+---+---+---+---+---+----
    0                                         10

     Рис.26. Столбиковая диаграмма /а/ для прогноза средней  про-
             должительности жизни

     Для определения значений этих параметров  можно использовать
несколько  методов,  но  наиболее распространенным (и как правило
наилучшим) является метод наименьших квадратов.  Этот метод пост-
роен  на минимизации расстояния от действительных значений данных
до линии.  Этот метод состоит из двух шагов:  сначала вычисляется
"в"  (наклон  линии) и затем вычисляется "а" (пересечение оси Y).
     Вывод этой формулы выходит за рамки этой книги.  Получив "в"
вы можете, используя этот параметр, вычислить "а":
     Определив значения параметров "а" и "в" вы можете, задав лю-
бое значение Х,  найти соответствующее значение Y.  Например, ис-
пользуя приведенные выше данные по средней продолжительности жиз-
ни, можно получить следующее уравнение регрессии:

              Y = 67,46 + 0,95 * X.

     Следовательно, для  нахождения  ожидаемой  продолжительности
жизни в 1995 году (15 лет от 1980 года) делаются следующие вычис-
ления:

              67,46 + 0,95*15 = 82.

     Однако, даже  имея  для данных линию наилучшего соответствия
вам может потребоваться знание действительной корреляции данных с
этой линии. Если линия и данные слабо коррелированы, то будет ма-
ло пользы от линии регрессии. Однако, если линия хорошо соответс-
твует  данным,  то по ней можно делать очень достоверный прогноз.
Наиболее распространенным способом  определения  и  представления
корреляции данных и линии регрессии является вычисление коэффици-
ентов корреляции,  которые могут принимать значения  от  нуля  до
единицы.  Коэффициенты  корреляции по существу определяет степень
близости каждой точки к линии.  Если коэффициент корреляции имеет
единичное  значение,  то  данные хорошо соответствуют линии /т.е.
каждый элемент выборки также находится на линии  регрессии/. Если
коэффициент корреляции имеет нулевое значение,  то никакое значе-
ние из выборки не располагается на линии. В действтительности ко-
эффициент  корреляции может принимать любое значение из диапазона
от нуля до единицы.  Коэффициент корреляции вычисляется по форму-
ле, приведенной на следующей странице.
     Здесь М является средним значением координаты Х и М является
средним значением координаты Y.  Обычно в качестве сильной корре-
ляции рассматривается значение 0,81. В этом случае 66% данных со-
ответствует линии регрессии.  Для получения процентного соотноше-
ния необходимо просто возвести в  квадрат  значение  коэффициента
корреляции.
     Ниже приводится функция "Regress".  В ней используется  опи-
санный  выше метод поиска коэффициентов регрессии и коэффициентов
корреляции:

{ вычисление коэффициентов регрессии и вывод линии регрессии }

          procedure Regress(data: DataArray; num: integer);

          var
            a, b, x_avg, y_avg, temp, temp2, cor: real;
            data2: DataArray
            t, min, max: integer;
            ch: char;

          begin
            { поиск среднего значения Х и У }
            y_avg := 0; x_avg := 0;
            for t := 1 to num do
            begin
              y_avg := y_avg + data[t];
              x_avg := x_avg + t; { поскольку Х представляет
                                 собой время }
            end;
            x_avg := x_avg/num;
            y_avg := y_avg/num;

            { поиск коэффициента 'в' уравнения регрессии }
            temp := 0; temp2 := 0;
            for t := 1 to num do
            begin
              temp := temp +(data[t] - y_avg)*(t-x_avg);
              temp2 := temp2 +(t - x_avg)*(t-x_avg);
            end;
            b := temp/temp2;

            { поиск коэффициента 'a' уравнения регрессии }
            a := y_avg-(b*x_avg);

             { вычисление коэффициента корреляции }
          for t := 1 to num do data2[t] := t;
          cor := temp/num;
          cor := cor/(StdDev(data, num)*StdDev(data2,num);
          Writeln('Уравнение регресии : Y = ',
          a: 15: 5, '+',b: 15: 5, '* X');
          Writeln('Коэффициент корреляции :  ', cor: 15:5);
          Writeln('Вывести данные и линию регрессии ? (y/n)');
          Readln(ch);
          ch := upcase(ch);
          if ch <> 'N' then

          begin
            { установка режима 4 для адаптеров EGA и CGA }
            GraphDriver := CGA ;
            Craphmode := CGAC1 ;
            InitGraph(GraphDriver, Craphmode, '');
            SetColor(1);
            SetLineStyle(Solid, 0, NormWidth);
         { вывод графиков }
         for t := 1 to num*2 do data2[t] := a+(b*t);
         { массив регресси }
         min:= getmin(data, num)*2;
         max:= getmax(data, num)*2;
         ScatterPlot(data, num, min, max. num*2);
         ScatterPlot(data2, num*2, min, max, num*2);
         ch := ReadKey;
         RestoreCrtMode;
       end;
      end; { конец  процедуры вычисления коэффициентов регрессии
             и корреляции }


     При проведении  прогнозирования подобно описанному выше сле-
дует помнить, что по данным о прошлом не всегда можно предсказать
будущее. Однако в тех случаях, когда это можно сделать, могут по-
лучить очень интересные результаты.

 
« Предыдущая статья   Следующая статья »