proiect de practica - pistol andrei - ins

20
ACADEMIA DE STUDII ECONOMICE Facultatea: Cibernetica, Statistica si Informatica Economica Specializarea: Statistica si previziune economica Proiect de practica Tema proiectului: Solutie software pentru regresia simpla Cadru didactic coordonator: Constanta Mihaescu Student: Pistol Andrei George

Upload: andrei-pi

Post on 24-Jul-2015

120 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Proiect de Practica - Pistol Andrei - InS

ACADEMIA DE STUDII ECONOMICE Facultatea: Cibernetica, Statistica si Informatica Economica

Specializarea: Statistica si previziune economica

Proiect de practica

Tema proiectului: Solutie software pentru regresia simpla

Cadru didactic coordonator: Constanta Mihaescu Student: Pistol Andrei George

Page 2: Proiect de Practica - Pistol Andrei - InS

Cuprins

Modelul matematic.....................................................................................................................................................................3

Preluarea datelor............................................................................................................................. ............................................5

Regresia liniara............................................................................................................................................................. ..............12

Regresia exponentiala........................................................................................................... .....................................................14

Regresia trigonometrica.............................................................................................................................................................16

Concluzie..................................................................................................................................... ...............................................18

Bibliografie..................................................................................................................................................... ............................18

Page 3: Proiect de Practica - Pistol Andrei - InS

Modelul matematic

Acest proiect prezinta o solutie software pentru calculul regresiilor. Aplicatia este realizata in limbajul de programare C# si

este integral realizata individual.

Unul din principalele capitole ale statisticii are în vedere posibilitatea de a face predictii. Desi nu se gasesc relatii per fecte în

lumea reala, prin intermediul regresiei se pot face predictii ale unei variabile, în functie de valoarea alteia. Predictia este

procesul de estimare a valorii unei variabile cunoscând valoarea unei alte variabile.

Regresia se leaga foarte mult de conceptul de corelatie. O asociere puternica între doua elemente conduce la cresterea

preciziei predictiei unei variabile pe seama alteia. Daca un tabel reprezinta rezultatele unei experiente fizice oarecare,

elementele sale pot contine erori inerente iar aceste erori nu se pot prezice in mod obisnuit cu un grad rezonabil de

certitudine, fiind repartizate dupa o lege statistica.

Daca am avea o corelatie perfecta (+1 sau –1) estimarea ar fi extrem de precisa.

Procesul de regresie presupune doi pasi. Primul se refera la determinarea ecuatiei de regresie, iar cel de -al doilea consta în

utilizarea acestei ecuatii în a predictie.

Forma generala prin care se exprima o ecuatie de regresie este: Ŷ = a + bX , unde: Ŷ prim reprezinta rezultatul estimat a este interceptul (locul pe ordonata unde dreapta de regresie se intersecteaza cu OY, valoarea lui Y pentru X=0) b este panta de regresie (arata cu cât se modifica Y atunci când X creste / scade cu o unitate)

X este variabila criteriu (cunoscuta)

Calcularea coeficientilor de regresie a, respectiv b conduce la realizarea primului pas din procesul regresiei.

Exista doua posibilitati de calculare a lor:

1. daca se cunoaste valoarea coeficientului de corelatie dintre cele doua variabile X si Y, media si abaterea standard a

celor doua variabile putem aplica urmatoarele formule:

Unde:

r este valoarea coeficientului de corelatie dintre X si Y

Sy este abaterea standard a variabilei Y

Sx este abaterea standard a variabilei X

Unde: My este media variabilei Y Mx este media variabilei X

Page 4: Proiect de Practica - Pistol Andrei - InS

2. cea de-a doua modalitate de calcul este metoda celor mai mici patrate. Aceasta cale nu necesita cunoasterea valorii

coeficientului de corelatie, a mediei sau a abaterii standard a variabilelor implicate. De aceea metoda este utila în

cazurile în care cunoastem doar datele brute.

Pentru calculul lui a si b avem urmatorul sistem de ecuatii:

Unde:

n este numarul de cazuri ale unei variabile

Metoda celor mai mici patrate reprezinta punctul de pornire pentru rezolvarea regresiilor de tipuri diferite, precum:

regresia liniara, regresia exponentiala, regresia trigonometrica, etc.

Page 5: Proiect de Practica - Pistol Andrei - InS

Preluarea datelor

Primul pas spre calcularea unei regresii este reprezentat de preluarea si posibila prelucrare a datelor iar acest lucru se face

cu ajutorul importului de date din fisiere text sau specifice Excel, sau manual, datele fiind adaugate simultan pe ambele

coloane. In cazul in care se preia din fisier, exista posibilitatea ca numele coloanelor, respectiv “Coloana 1” si “Coloana 2” sa

fie redenumite cu cuvintele gasite in prima linie din fisier.

De asemenea trebuie mentionat ca fisierul text trebuie sa aiba coloanele delimitate de TAB, precum apare si in tooltip daca

utilizatorul pune cursorul peste buton.

Page 6: Proiect de Practica - Pistol Andrei - InS

In cazul in care utilizatorul doreste, datele se pot extrage dintr-un fisier Workbook Excel sau o foaie de date Excel. In primul

rand a fost implementat un buton prin care utilizatorul poate selecta din calculator fisierul pe care d oreste sa il deschida.

Acest lucru a fost facut posibil prin folosirea unui element de tip openFileDialog care contine o mare parte din algoritmul

butonului des intalnit Browse. Pentru a elimina confuzia a fost adaugat un filtru prin care utilizatorul poate vedea doar

fisierele cu extensia .xlsx sau .xls. Apoi au loc mai multe verificai pentru a determina daca se poate selecta un dosar (folder)

sau nu, si daca fisierul selectat exista cu adevarat (se poate scrie orice nume in campul de selectare si prin apasare pe Open,

daca nu se verifica daca exista fisierul, programul nu va functiona).

De asemenea se verifica daca locatia introdusa de utilizator exista (in cazul unui stick USB, daca se navigheaza in interioru l

acestuia si stickul se scoate din calculator in mijlocul operatiilor).

Urmeaza un ultim pas de verificat inaintea inceperii lucrului cu fisierul, si acesta returneaza un raspuns pozitiv in cazul i n

care s-a apasat pe butonul Open, si nu alt buton.

In caz afirmativ urmeaza preluarea datelor. Pentru a se realiza acest lucru programul, fiind construit de catre Microsoft,

precum si Excel este, are predefinita o functie care faciliteaza importarea tipului de fisier Excel in aplicatie. Se folosest e

pachetul de referinta Microsoft.Office.Interop.Excel care se utilizeaza in felul urmator:

1. se initializeaza instantele Excel.Application dupa cum urmeaza

2. se asigneaza un obiect care are valoarea nula

3. se porneste o instanta al Excel.Application

4. xlWorkBook preia valoarea obiectului xlApp.Workbooks.Open, adica deschide fisierul cu locatia in FilePathXlsx

5. in cazul de fata dorim sa extragem datele doar din prima foaie a tabelului Excel, pentru aceasta folosim

xlWorkSheet in felul urmator:

6. ultimul pas este citirea efectiva a datelor care se realizeaza intr-o structura repetitiva deoarece se citeste fiecare

celula in parte; datele in programul de fata se preiau de cate tabela deja creata si denumita dataGridView1

Page 7: Proiect de Practica - Pistol Andrei - InS

Datorita faptului ca exista multe versiuni ale programului Excel pe piata este necesara introducerea unei structuri try-catch care preia toate erorile aleatoare aparute. Testarea programului a fost efectuata pe fisiere de tip Workbook versiunea Office 2010 si pe fisiere compatibility mode de tip *.xls Office 97-2003. Toate erorile se preiau in ex insa nu sunt si afisate, dupa cum se observa structura catch este goala. Acest lucru este necesar in mare parte pentru testarea programului, iar complexitatea mesajului de eroare nu prezinta interes din partea utilizatorului, de exemplu:

In ciuda aparitiei erorii programul functioneaza corect. Se observa faptul ca o mare parte din cod intra in structura if (checkBox1.Checked), acest lucru verifica daca s-a selectat

optiunea conform careia prima linie reprezinta numele coloanei si in caz afirmativ pregateste

capul de tabel sa primeasca numele coloanelor.

Urmeaza conversia datelor din formatul prezent in foaia Excel in tipul double care reprezinta un numar care poate lua valori

pornind de la ±5,0 × 10−324 pana la ±1,7 × 10308 si introducerea lor in celulele tabelului prezent in program.

In final vectorii celor doua serii sunt populati cu valorile din tabel.

Page 8: Proiect de Practica - Pistol Andrei - InS

Ultimile 3 randuri din interiorul structurii try reprezinta inserarea elementelor intr-o lista ListBox, lucru efectuat pentru

testarea programului precum si incrementarea numarului de elemente ale vectorilor.

Dupa ce au fost preluate toate datele, instantele obiectelor xlWorkBook, xlWorkSheet si xlApp trebuiesc inchise si memoria

trebuie eliberata.

Datele insa se pot citii si dintr-un fisier text, cu conditia ca cele doua coloane sa fie delimitate de TAB. Aceasta conditie este

adusa la cunostiinta utilizatorului printr-un mesaj care apare atunci cand pozitioneaza cursorul peste butonul Selectare fisier

text. In acest caz algoritmul este mai simplu dar se folosesc mai multe instructiuni. Precum si la citirea dintr-un fisier Excel, si

aici se foloseste openFileDialog si se utilizeaza aceleasi instructiuni pentru a se afla cu succes locatia fisierului selectat de

catre utilizator.

Toate instructiunile se insereaza din nou intr-un bloc try – catch.

In prima linie din interiorul structurii try se face adaugarea cu o linie goala in tabelul programului, astfel:

Urmeaza stabilirea delimitatorului TAB dupa care se va face impartirea linii citite.

Fisierul se deschide instantiind obiectul StreamReader, iar prin utilizarea lui in constructia using nu mai trebuie ne facem

probleme cu eliberarea de memorie.

In continuare se pune problema daca prima linie reprezinta sau nu titlul coloanelor. In cazul in care utilizatorul a bifat acea

optiunea se utilizeaza codul urmator:

Page 9: Proiect de Practica - Pistol Andrei - InS

Atat timp cat urmatoarea linie citita din fisier nu este vida, adica nu se ajunge la finalul fisierului, se ruleaza liniile d e cod din

interiorul constructiei repetitive while. Se adauga un nou rand gol in tabel si se imparte linia citita in 2 coloane. Textul scris

cu gri reprezinta o alta bucata de cod, dar din motive de organizare aceasta nu este vizibila decat daca este accesata in mod

direct.

Dupa cum se observa aici se incrementeaza numarul de elemente din vectori. Valoarea lui temp1 initial este 0, deoarece

astfel este declarata la inceputul constructiei if insa se modifica in regiunile daca este prima coloana si daca este a doua

coloana; practic temp1 si temp2 reprezinta contoare.

Urmeaza structura repetitiva for care ruleaza codul din interiorul ei de parts.Lenght ori, adica de cate cuvinte delimitate de

TAB exista, in cazul nostru 2 (2 coloane).

Se pune problema daca valoarea citita este spatiu liber, si aceasta se testeaza cu urmatoarea structura repetitiva:

In cazul in care exista spatii libere, adica pe o coloana nu exista numite valor, aplicatia va anunta utilizatorul si se va i nchide.

De exemplu introducand urmatoarele date, aplicatia va afisa mesajul de eroare:

Page 10: Proiect de Practica - Pistol Andrei - InS

In urmatoarele linii insereaza titlul coloanelor preluat din fisier, in cazul in care utilizatorul doreste ca prima linie din fisier sa

reprezinte titlul coloanelor din tabelul programului, si valorile din coloane. Aici se modifica variabilele de tip contor, temp1

si temp2. Analog se procedeaza daca utilizatorul nu specifica faptul ca prima linie reprezinta titlul coloanelor, insa daca acea

linie contine cuvinte, programul va anunta utilizatorul de acest lucru si se va inchide, deoarece incearca sa puna in

campurile tabelului, in loc de numere, cuvinte.

O ultima modalite de a introduce datele este cea manuala, unde utilizatorul scrie valorile celor doua coloane. Functia este

utilizabila insa datorita faptului ca ea se poate folosi dupa ce se importa datele dintr-un fisier, afisarea numerelor adaugate

nu este tocmai placuta, aceasta lasand 1-2 randuri libere. Din aceasta cauza utilizarea adaugarii manuale este dezactivata.

Utilizand aplicatia se observa faptul ca aceasta este organizata cu ajutorul meniului situat in partea superioara a ferestrei si

momentan este selectata sectiunea de “Date”.

In fina, dupa importarea datelor, fereastra arata in felul urmator:

Page 11: Proiect de Practica - Pistol Andrei - InS
Page 12: Proiect de Practica - Pistol Andrei - InS

Regresia liniara

De indata ce exista date prezente in tabel, se poate incepe calcularea regresiilor. Selectand din meniu “Regresie liniara”

fereastra se micsoreaza pentru a folosi spatiul de pe ecran eficient si arata in felul urmator:

La apasarea butonului de calcul de catre utilizator se ruleaza mai multe secvente de cod.

Primul lucru care se intampla este sa se initializeze variabila care va contine numarul erorii, cu 0, pentru ca de fiecare da ta

cand se apasa butonul aceasta sa inceapa de la 0, si nu de la o valoare avuta in trecut.

Apoi urmeaza ascunderea elementelor de = si a campurilor de rezultate, deoarece nu este nevoie sa incarcam pagina cu

componente inutile decat atunci cand sunt utilizate. De indata ce butonul de calculare a fost apasat aceste campuri devin

vizibile ruland codul urmator:

Formulele afisate pe ecran se calculeaza cu ajutorul unei functii externe ce contine toate operatiile necesare.

Page 13: Proiect de Practica - Pistol Andrei - InS

In final, variabila eroareaRegresiei va contine rezultatul final.

Primul element din fereastra programului, scris ingrosat, “Regresia liniara” reprezinta titlul sectiunii, urmat de “Calculeaza

eroarea regresiei” care reprezinta singurul buton de pe fereastra si o data apasat va calcula a0, a1 si eroarea dupa formulele

prezente sub el.

Se observa aparitia altor elemente o data ce butonul a fost apasat. Aceasta functie este de ordin estetic pentru a nu avea

campuri goale in cazul in care utilizatorul doreste sa studieze formulele inainte de a vedea rezultatele. Se urmareste gasirea

erorii minime dintre regresiile disponibile.

Page 14: Proiect de Practica - Pistol Andrei - InS

Regresia exponentiala

Ca si in cazul regresiei liniara, pentru cea exponentiala se folosesc aceeasi pasi, diferentele aparand doar la formule.

Fereastra aplicatiei se mareste pentru a acomoda spatiul de lucru extins si prezinta elemente asemanatoare paginii de

“Regresie liniara”.

Page 15: Proiect de Practica - Pistol Andrei - InS

Se foloseste functia Math.Pow pentru a realiza ridicarile la putere, unde numarul 2.718281828459 reprezinta valoarea

matematica e.

Deja se observa o diferenta semnificativa intre eroarea regresiei liniare si cea exponentiala. Teoretic, prin studierea

graficului seriilor de date, se poate determina regresia optima caruia i se calculeaza eroarea, insa aceasta se poate

determina si prin incercarea tuturor regresiilor ca in cazul de fata.

Page 16: Proiect de Practica - Pistol Andrei - InS

Regresia trigonometrica

Ultima regresie care se poate calcula cu aplicatia de fata este cea trigonometrica. Accesand meniul “Regresie

trigonometrica” se observa complexitatea sporita a acestui model de calcul. Mai intai se calculeaza a0 si a1 in functe de ω.

Utilizatorul alege un rezultat care apartine unui ω si calculeaza eroarea specifica. Trebuie specificat faptul ca pentru aceasta

sectiune s-au folosit alte date datorita existentei functiei cosinus.

In continuare va fi prezentat codul aferent calcularii unei singure valori, respectiv pentru ω = 1.

Page 17: Proiect de Practica - Pistol Andrei - InS
Page 18: Proiect de Practica - Pistol Andrei - InS

Concluzii

Aplicatia software prezentata calculeaza doar 3 tipuri de regresii simple, fara ajutorul unei librarii predefinite. Trebuie i nsa

luat in considerare limitarea limbajului de programare, aplicatia fiind construita pe baza .NET Framework 4, ceea ce

inseamna ca nu va rula pe calculatoarele vechi care nu sunt updatate. In cazul cel mai rau, daca programul lanseaza o eroare

la pornire, acesta va putea fi rulat pe un calculator care are instalat Microsoft Visual Studio.

O posibila continuare pentru acest proiect ar putea fi introducerea unor regresii mai complicate, atat simple cat si multiple.

De asemenea pe baza rezultatelor regresiilor s-ar putea realiza grafice si previziuni pentru valori viitoare. Un ultim element

care ar s-ar putea adauga ar fi abilitatea de a creea rapoarte bazate pe rezultatele regresiilor si a predictiilor.

In momentul de fata, aplicatia si clasa de operatii contin 1510 linii de cod adunate.

Bibliografie

fortran IV, autori: W.S. Dorn, D.D. Mc Cracken, Editura Tehnica 1972

Urmatoarele link-uri vor fi prezentate sub forma de hyperlink cu titlul prezent. Pentru accesare se va face click pe link. In ciuda aparentelor, trebuie subliniat faptul ca absolut toate site-urile au fost accesate si folosite in scopul finalizarii proiectului. BLOG.CSHARPHELPER.COM: Solve a system of equations with Gaussian elimination in C# How can I catch tab change on a TabControl? - C# / C Sharp Highlight text in a textbox - C# / C Sharp How can i open a new form in center of the screen? - C# / C Sharp selecting/showing automatically a tabpage ???? Mytabcontrol.tabpages[0].select ???? - C# / C Sharp Get Value in Excel Spreadsheet From C# - C# / C Sharp What is the Difference between out and ref keywords in C# | DotNetRobert.com Indent, Unindent at C# Online.NET Session variables in C# : The Official Microsoft ASP.NET Forums C# and the difference between out and ref Command Bar Combo Box Sample (C#) switch (C# Reference) double (C# Reference) Code: Saving Values in Session State (Visual C#) Code: Changing the Background Color of a Form (Visual C#) Code: Creating a ToolTip for a Control (Visual C#) Operators (C# Programming Guide) Database Access (C# vs Java) Reading Excel From C# How to use file browser control in C#.net 2.0 Desktop application. Creating/Writing to an Excel file with C# Retrieving data from Excel cells with C#

Page 19: Proiect de Practica - Pistol Andrei - InS

C# panel double buffer C# Read Text File Containing Data Delimited By Tabs - Stack Overflow .net - How to set column header text for specific column in Datagridview C# - Stack Overflow c# - How to read an ANSI encoded file containing special characters - Stack Overflow winforms - Communicate between two windows forms in C# - Stack Overflow winforms - how to programmatically change the background image on form c# - Stack Overflow c# 4.0 - C# -Excel interoperability - Stack Overflow c# - How to auto hide message box? - Stack Overflow Get selected value from combo box in c# wpf - Stack Overflow winforms - C# - Writing to a multiline textbox - Stack Overflow .net - Reading default application settings in C# - Stack Overflow winforms - How to add browse file button to Windows Form using C# - Stack Overflow C#: making a form non-resizable - Stack Overflow c# - Best way to specify whitespace in a String.Split operation - Stack Overflow How can I return multiple values from a function in C#? - Stack Overflow c# - Customizable GUI controls in separate project - Stack Overflow Tooltip in C# C# ANOVA | CenterSpace Software | C# and .NET Math Libraries C# One Way Anova Example ANOVA (One Way) in C# - CodeProject [Solved] how to link two forms using c# - CodeProject c# form linking - CodingForums.com C# Station: Reading and Writing Text Files C# Location.X = <int> doesnt work - C# forum - developer Fusion How to display messagebox for only few seconds and automatically hide. - C# forum - developer Fusion C# char.IsWhiteSpace Method C# DataGridView Tips C# DataGridView Add Rows C# DataGridView Tutorial C# OpenFileDialog Tutorial C# Split String Examples C# ToCharArray Method, Convert String to Array C# Whitespace Tips multiple forms in C# only Session in ASP.NET (C#) Articles, samples and tutorials Create Excel file from C# Samples and examples - C#, VB.NET, ASP.NET Capture Screen to Bitmap - C# - Source Code | DreamInCode.net C# - Two Way Anova - QuickStart Samples - .NET, C# (CSharp), VB.NET, F# Math, Statistics and Matrix Libraries QuickStart Samples - .NET, C# (CSharp), VB.NET, F# Math, Statistics and Matrix Libraries QuickStart Samples - .NET, C# (CSharp), VB.NET, F# Math, Statistics and Matrix Libraries How can I insert a new line in a TextBox? (C# Knowledge Base) • Geekpedia Using OpenFileDialog to open files (C# Programming Tutorial) • Geekpedia C# 4.0:Finding if the string contains only WhiteSpace or Null | Ginktage Visual C# .NET: Creating Multiple Forms Visual C# .NET - Double and Float Variables Read one character at a time : StreamReader « File Directory Stream « C# / CSharp Tutorial Center Form to the screen : Form Properties « GUI Windows Forms « C# / CSharp Tutorial C# function for Gaussian Elimination - Newsreader - MATLAB Central C# form size - Xtreme Visual Basic Talk Andvanced C# ProgresBar - YouTube [C#] WinForms Smoother Controls - YouTube how to use the progress bar in C# - YouTube C#: How to Browse Files, Folders, and Directories - YouTube How to make a Progress Bar in C# + Popup - YouTube How to make a Progress Bar in C# + Popup - YouTube c# tutorial part 1 (link a form) - YouTube

Page 20: Proiect de Practica - Pistol Andrei - InS

C# Split String Examples BLOG.CSHARPHELPER.COM: Solve a system of equations with Gaussian elimination in C# math - Non-linear regression in C# - Stack Overflow Implementing a Levenberg algorithm for the nonlinear least squares regression of multiple weighted simultaneous

equations in C# Implementing a Gauss Newton algorithm for the nonlinear least squares regression of multiple weighted

simultaneous equations in C# Guide - Visual C# .NET for Complete Beginners Excel Solver : Non linear least squares equivalent in C# - Stack Overflow C# Programming - Wikibooks, open books for an open world