СОДЕРЖАНИЕ 1. Постановка задачи..................................................................................... 3 1.1 Корреляция .......................................................................................... 3 1.2 Теснота связи ....................................................................................... 4 1.3 Метод наименьших квадратов ........................................................... 4 2. Алгоритм решения .................................................................................... 6 3. Программирование.................................................................................... 8 4. Сценарий работы программы .................................................................. 12 4.1 Титульный лист ................................................................................... 12 4.2 Меню .................................................................................................... 12 4.3 Расчет.................................................................................................... 13 4.4 График .................................................................................................. 14 4.5 Инструкция .......................................................................................... 15 2 1. Постановка задачи. 41. Составить программу установления корреляционной зависимости между двумя факторами при прямолинейной линии регрессии в среде Excel. Разработать титульную страницу и кнопочную форму меню. Представить алгоритм решения задачи, совмещённый график корреляционного поля и линии регрессии, указания пользователю. Предусмотреть вывод на печать исходных данных, уравнения линии регрессии и совмещённого графика. Предусмотреть вывод результатов в текстовом и графическом виде. Постановка задачи, алгоритм и контрольный пример в книге a) Шепелев И.Г. Математические методы и модели управления в строительстве./ Изд. 2-е . 2001. b) Темы и данные. Сборник исходных данных для программирования — Web-сайт. Рассмотрим теоретический материал: 1.1 Корреляция Методы теории корреляции позволяют определять количественную зависимость между различными техническими, технологическими, организационными, экономическими и другими факторами. Различают функциональную и корреляционную зависимости. Под функциональной понимается такая зависимость, когда с изменением одного фактора изменяется другой, одному значению независимого фактора обычно соответствует только одно значение зависимого фактора. Корреляционная зависимость—это такая зависимость, при которой изменение одной случайной величины вызывает изменение среднего значения другой. Конкретных же значений зависимого переменного, соответствующих одному значению независимого, может быть несколько. Корреляционные зависимости могут быть установлены только при обработке большого количества наблюдений. При корреляционном анализе решаются следующие задачи: 1. Устанавливается наличие корреляции (связи) между величинами. 2. Устанавливается форма линии связи (линии регрессии). 3. Определяются параметры линии регрессии. Определяются достоверность установленной зависимости и достоверность отдельных параметров. Наличие корреляции приближенно может быть определено путем визуального анализа поля корреляции (если графике можно провести линию, вокруг которой концентрируются точки поля, то на основании этого можно сделать вывод о наличии корреляции). 3 Корреляционным полем называют нанесенные на график в определенном масштабе точки, соответствующие одновременным значениям двух величин. 1.2 Теснота связи Тесноту связи между двумя величинами можно определить визуально по отношению короткой и продольной осей эллипса рассеяния наблюдений, нанесенных на поле корреляции. Чем больше отношение большой оси эллипса к малой, тем связь теснее. Более точно теснота связи характеризуется коэффициентом корреляции r. Коэффициент корреляции лежит в пределах 0|r| 1 В случае, если r=0, то линейной связи нет Если |r| =1, то между двумя величинами существует функциональная связь. При положительном r наблюдается прямая связь, т.е. с увеличением независимого переменного увеличивается зависимое. При отрицательном коэффициенте существует обратная связь—с увеличением независимого переменного зависимое переменное уменьшается Коэффициент корреляции определяется по формуле r N xy x y N x 2 x N y 2 y 2 2 , (2.2.1) где x и у— текущие значения наблюдаемых величин, N—число наблюдений. Существует несколько модификаций формулы (2.2.1), наиболее простая из которых имеет вид r xy x y x y , (2.2.2) где xy — среднее значение произведения двух коррелируемых величин; x, y средние значения этих величин; x,y - среднеквадратичные (стандартные) отклонения соответствующих величин. x x 2 ( x ) 2 ; y y 2 ( y ) 2 . (2.2.3) заметим, что 2- дисперсия случайной величины (мера рассеяния). Значение коэффициента корреляции r возведенное в квадрат (r2) называется коэффициентом детерминации. 1.3 Метод наименьших квадратов Для вычисления параметров линии регрессии, выражающих связь между двумя величинами, обычно применяется метод наименьших квадратов. Сущность метода наименьших квадратов состоит в том, что выбирается такая линия, при которой сумма квадратов разностей между фактическими наблюдениями зависимой переменной и расчётными значениями, полученными по регрессионной формуле, минимальна 4 S ( y ~ y ) 2 min, (2.3.1) где ~y – расчетное значение зависимого переменного по регрессионной формуле. Для нахождения параметров линии регрессии в выражение (2.3.1) вместо расчетного значения у подставим правую часть формулы, параметры которой следует найти Допустим, ~y = а+bх, тогда S ( y a bx) 2 min, (2.3.2) Возьмем частные производные по а и b от выражения (7 3.2) и приравняем их к нулю: S 2 ( y a bx) 0 a , S 2 ( y a bx) x 0 b (2.3.3) Полученную систему (2.3.3) обычно преобразуют: Na b x y a x b x 2 xy (2.3.4) Решим систему (2.3.4) относительно b и а, получим формулы: b N xy x y N x 2 x 2 a y bx. , (2.3.5) (2.3.6) В форму табл. 1 заносятся исходные данные для определения параметров прямой линии и коэффициента корреляции. При линейной корреляции коэффициент корреляции r является не только критерием тесноты связи, но и критерием точности аппроксимации (подбора формулы, выражающей зависимость). 5 2. Алгоритм решения. Для установления факта наличия корреляционной зависимости между двумя факторами воспользуемся методом наименьших квадратов. Пусть у нас есть набор одновременных значений 2-х величин x и y, полученные путем большого числа наблюдений. Наблюдения 1 y 6,3 x 3,2 2 3 4 5 6 7 8 9 … 1,1 2,9 2,5 2,3 4,4 2,5 3,6 5 … 0,5 1,3 1 0,5 1,6 0,8 1,3 2,1 … Предположим что зависимость между x и y можно представить в виде линейной функции: y=a+b*x. Найдем неизвестные коэффициенты a и b. Согласно теории они вычисляются по следующим формулам: b N xy x y N x 2 x 2 , a y bx. Поэтому для дальнейшей работы нам необходимо получить значения этих сумм: Наблюдения 1 y 6,3 x 3,2 2 3 4 5 6 7 8 9 … N 1,1 2,9 2,5 2,3 4,4 2,5 3,6 5 … y 0,5 1,3 1 0,5 1,6 0,8 1,3 2,1 … x x*y x*x y*y 20,16 10,24 39,69 0,55 0,25 1,21 3,77 1,69 8,41 2,5 1 6,25 1,15 0,25 5,29 7,04 2,56 19,36 2 0,64 6,25 4,68 1,69 12,96 10,5 4,41 25 … xy … x2 6 … y2 y y N ; x x N А так же найдем коэффициент корреляции r: r N xy x y N x 2 x N y 2 y 2 2 , Если коэффициент корреляции близок к единице, то можно утверждать что наше предположение было верно и между х и y действительно существует линейная зависимость. 7 3. Программирование. Для получения промежуточных данных была создана таблица, поля которой содержат формулы: Наблюдения x*y 1 =ПРОИЗВЕД(C9;D9) 2 =ПРОИЗВЕД(C10;D10) 3 =ПРОИЗВЕД(C11;D11) 4 =ПРОИЗВЕД(C12;D12) 5 =ПРОИЗВЕД(C13;D13) 6 =ПРОИЗВЕД(C14;D14) 7 =ПРОИЗВЕД(C15;D15) 8 =ПРОИЗВЕД(C16;D16) 9 =ПРОИЗВЕД(C17;D17) … … x*x y*y =ПРОИЗВЕД(D9;D9) =ПРОИЗВЕД(C9;C9) =ПРОИЗВЕД(D10;D10) =ПРОИЗВЕД(C10;C10) =ПРОИЗВЕД(D11;D11) =ПРОИЗВЕД(C11;C11) =ПРОИЗВЕД(D12;D12) =ПРОИЗВЕД(C12;C12) =ПРОИЗВЕД(D13;D13) =ПРОИЗВЕД(C13;C13) =ПРОИЗВЕД(D14;D14) =ПРОИЗВЕД(C14;C14) =ПРОИЗВЕД(D15;D15) =ПРОИЗВЕД(C15;C15) =ПРОИЗВЕД(D16;D16) =ПРОИЗВЕД(C16;C16) =ПРОИЗВЕД(D17;D17) =ПРОИЗВЕД(C17;C17) … … После этого данные передаются в следующую таблицу для получения окончательного результата: N= ∑y = ∑x = ∑x*y = ∑x*x = ∑y*y = b= y= x= a= r= 30 =СУММ(C9:C100) =СУММ(D9:D100) =СУММ(E9:E100) =СУММ(F9:F100) =СУММ(G9:G100) =(J9*J12-J11*J10)/(J9*J13-J11*J11) =ПРОИЗВЕД(J10;1/J9) =ПРОИЗВЕД(J11;1/J9) =J16-(J15*J17) =(J9*J12-J10*J11)/(КОРЕНЬ(J9*J13-J11*J11)*КОРЕНЬ(J9*J14-J10*J10) ) Если |r|>0,5 и |r|<1 то в текстовое поле выводиться полученная формула, например: Уравнение связи y = 0,577 + 2,048*x В противном случае будет получено сообщение: Между величинами нет линейной зависимости 8 Рассмотрим текст модуля ответственного за это: Sub asd() i$ = 9 Do While (Application.Range("B" + i$) <> "") And _ (Application.Range("C" + i$) <> "") And (Application.Range("D" + i$) <> "") i$ = i$ + 1 Loop Application.Range("J9") = i$ - 9 i1$ = i$ - 1 ‘Получаем количество ячеек заполненных исходными данными ‘Очищаем все прочие ячейки и убираем отрисовку ячеек таблицы nm2 = i$ + ":G100" Range("B" + nm2).Clear Range("B9:G100").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Borders(xlEdgeLeft).LineStyle = xlNone Selection.Borders(xlEdgeTop).LineStyle = xlNone Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone nm = "G" + i1$ ‘Все полностью заполненные ячейки заключаем в рамку Range("B9:" + nm).Select ‘ Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = 14 End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = 14 End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = 14 End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = 14 End With With Selection.Borders(xlInsideVertical) 9 .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = 14 End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = 14 End With ‘Автозаполнение формулами при копировании данных из другого документа i2$ = 9 Do While (Application.Range("E" + i2$) <> "") i2$ = i2$ + 1 Loop i3$ = i2$ - 1 If i3$ < i1$ Then nm2 = i3$ + ":G" + i3$ nm3 = i3$ + ":G" + i1$ Range("E" + nm2).Select Selection.AutoFill Destination:=Range("E" + nm3), Type:=xlFillDefault Range("E" + nm3).Select End If ‘Вывод уравнения связи в текстовое поле при условии что |r|>0.5 и |r|<1 r = Abs(Application.Range("J19").Text) If (r > 0.5) And (r < 1) Then ActiveSheet.Shapes("Text Box 14").Select Selection.Characters.Text = "Уравнение связи y = " + Application.Range("J18").Text _ + " + " + Application.Range("J15").Text + "*x" Range("A1").Select Else ActiveSheet.Shapes("Text Box 14").Select Selection.Characters.Text = "Между величинами нет линейной зависимости" End If End Sub 10 Для перехода между листами приложения используются кнопки, макросы выполняющие эти действия и печать: Sub Меню() Attribute Меню.VB_Description = "Макрос записан 04.06.2005 (Dima)" Attribute Меню.VB_ProcData.VB_Invoke_Func = " \n14" Application.Sheets(2).Select Range("A1").Select End Sub Sub Титульный_лист() Application.Sheets(1).Select Range("A1").Select End Sub Sub Расчет() Application.Sheets(3).Select Range("A1").Select End Sub Sub Инструкция() Application.Sheets(4).Select Range("A1").Select End Sub Sub График() Application.Sheets(5).Select Range("A1").Select End Sub Sub Выход() 'ActiveWorkbook.Save 'ActiveWorkbook.Close ActiveWorkbook.RunAutoMacros Which:=xlAutoClose End Sub Sub Печать_таблицы() 'Sheets(3).Select ' Range("A4:L26").Select 'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWindow.SelectedSheets.PrintPreview End Sub Sub Печать_графика() 'Sheets(3).Select ' Range("A4:L26").Select 'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWindow.SelectedSheets.PrintPreview End Sub 11 4. Сценарий работы программы. 4.1 Титульный лист Работа программы начинается с автоматического запуска макроса Auto_open, который подготавливает окно программы, удаляя с него все ненужные элементы и выводит на экран титульную страницу (Рис. 1). Рис. 1. Титульная страница Титульная страница имеет две кнопки: кнопка «Выход» позволяет покинуть приложение, а кнопка «Меню» — перейти к меню программы. 4.2 Меню Лист «Меню» сдержит кнопки для перехода ко всем остальным объектам программы (Рис. 2). 12 Рис. 2. Меню 4.3 Расчет Нажатие кнопки «Расчет» выводит на экран следующий лист с таблицей ввода данных, таблицей расчета промежуточных данных и таблицей расчёта коэффициентов a и b, а также коэффициента корреляции r. (рис. 3). 13 Данные можно редактировать, добавлять и удалять. При этом необходимо заполнить только три первых столбца (Наблюдения, y, x), все остальные будут заполнены автоматически. Для получения конечного результата необходимо нажать кнопку «Вычислить». При этом в текстовое поле будет выведено рассчитанное программой уравнение зависимости между величинами x и y, либо сообщение о невозможности установить между этими факторами линейную зависимость. При нажатии кнопки «Печать таблицы» будет выведено окно предварительного просмотра, где можно установить необходимые параметры печати: Рис. 4. Окно предварительного просмотра 4.4 График На странице «График» представлен совмещённый график корреляционного поля и линии регрессии (Рис. 5) 14 Рис. 5. График Кнопка «Печать графика» выводит окно предварительного просмотра, для дальнейшей печати графика. Кнопка «Расчет» позволяет перейти к листу «Расчет». 4.5 Инструкция Для разрешения вопросов, которые могут возникнуть у пользователя при работе с программой предусмотрен лист «Инструкция» (Рис. 6) 15 Рис. 6. Инструкция 16