Страница 11 из 37
Прогнозирование и уравнение регрессии Статистическая информация часто используется для вывода "обоснованных предположений" о будущем. Хотя каждому известно, что на основе прошлого опыта не обязательно можно предсказать бу- дущее и что каждое правило имеет исключение, все же данные о прошлом используются для этого. Очень часто тенденции, имевшие место в прошлом и настоящем, сохраняются и в будущем. В этих слу- чаях вы можете определить конкретные значения для некоторого вре- мени в будущем. Этот процесс называется прогнозированием или ана- лизом тенденций. Например, рассмотрим некое исследование продолжительности жизни за десятилетний период. Пусть получены следующие данные:
Год Продолжительность жизни 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; { конец процедуры вычисления коэффициентов регрессии и корреляции }
При проведении прогнозирования подобно описанному выше сле- дует помнить, что по данным о прошлом не всегда можно предсказать будущее. Однако в тех случаях, когда это можно сделать, могут по- лучить очень интересные результаты.
|