Gauss, zajęcia 4. Wykresy. Przy badaniu wszelkich danych ekonomicznych zazwyczaj powinniśmy, a czasem nawet musimy obejrzeć wykres analizowanych zmiennych. Po angielsku jest nawet wyrażenie One picture can say more than a thousand words. W ekonomii do wykrywania outlierów, badania trendu, wstępnej analizy zmiennych zazwyczaj wykorzystuje się rysunki. Nauczymy się teraz jak kontrolować wykresy w Gaussie. Zawsze przed wprowadzeniem grafik musimy wczytać bibliotekę odpowiedzialną za tworzenie wykresów library pgraph; graphset; Teraz możemy już tworzyć nasze pierwsze wykresy. Na początek coś prostego x=seqa(-100,1,200); /*ciąg od 100 do 100*/ y=x^2; /*tworzymy parabolę*/ /*Najprostszy wykres xy*/ Najprostszą opcją przy wykresach jest xy. Rysuje ona x na y. Proszę zwrócić uwagę, że istotna jest kolejność zmiennych xy(y,x);/*inny niż poprzednio wykres*/ Kolejny przykład x=seqa(.1,.1,100); /*nowe dane*/ y=sin(x); /*funkcja od x*/ y = y ~ y*.8 ~ y*.6 ~ y*.4; /*horyzntalne połączenie różnych funkcji y*/ Oczywiście możemy kontrolować sposób wyświetlania się naszych danych xtics(1,8,1,10); /*argumenty to min max krok podziałka w każdym kroku */ 1
xtics(1,8,2,2);/*inna podziałka*/ /*Analogicznie ytics, lub ztics*/ ytics(-4,4,1,1); /*Włączanie podziałki na wykresie*/ _pgrid={1,0}; /* pierwszy argument na głównych punktach, drugi na dodatkowych Pierwszy argument 0 bez podziałki 1- punktowa 2 inne punkty 3 linia drugi 0-bez znaczników na dodatkowych punktach podziału 1-podziałka punktowa 2-tylko znaczniki na osiach */ _pgrid={3,1}; _pdate = ""; /*Data nie będzie wyświetlona na wykresie*/ _plctrl = { 1, 1, 0, 0 }; /*dwie pierwsze z oznaczeniem punktów, dwie ostatnie nie*/ _plctrl = { -1, 10, 1, 0 }; /*Pierwszy z wykresów zaznacza tylko punkty, bez linii pomiędzy obserwacjami, drugi oznacza punkty tylko co 10 obserwację*/ _plctrl = { 0, 0, 0, 0 }; _pltype = { 1, 2, 5, 6 }; /*kolejno kreski, kropki, linie i kropki, linia ciągła*/ _plctrl = { 1, 1, 1, 1 }; /*Wszędzie znaczniki*/ 2
_pstype = { 1, 2, 3, 4 }; /*Różne znaczki, kółko, kwadrat, trójkąt, plus*/ _paxes={0,1}; /*Wyłączenie osi X*/ Inne znaczniki /*Możemy dodać strzałkę na wykresie*/ _parrow = { 1 1 2 2 3 0.2 11 10 2 6 0}; /*Opis symboli do znalezenia w helpie*/ /*Dodajemy legendę*/ /*Tekst legendy*/ _plegstr= "sinus 1.\0"\ /* 4 linie tekstu */ "sinus.8\0"\ "sinus.6\0"\ "sinus.4"; /* \0 określa enter, a \ oznacza nie skończoną linię*/ _plegctl= { 2, 3, 1.7, 4.5 }; /*Ustawienie miejsca wyświetlania legendy*/ /*Kolejne argumenty funkcji _plegctl to 1) 1, 2 lub 3 oznacza pozycjonowania według 1) osi wykresu, 2) w calach, 3) w pikselach 2) od 1 do 9 wielkość czcionki 3) i 4) x-owa i y-owa współrzędna (lewy dolny róg) 3
*/ /*Chcemy dużą czcionką*/ _plegctl= { 2, 8, 1.7, 4.5 }; /*Przesuniemy legendę w prawo*/ _plegctl= { 2, 8, 3.7, 4.5 }; /*A teraz w dół*/ _plegctl= { 2, 8, 3.7, 0.5 }; /*Dodatkowo opisy osi*/ _plegctl= { 2, 8, 1.7, 4.5 }; ylabel("amplituda"); xlabel("os X"); /*Nazwa wykresu*/ title("nasz pierwszy wykres"); Inne typy wykresów. Wykresy trójwymiarowe /*Na początek nowe zmienne*/ x = seqa(-10,0.1,71)'; y = seqa(-10,0.1,71); z = cos(5*sin(x) - y); graphset; /*zresetowanie ustawień grafiki*/ surface(x,y,z); /*Ten wykres jest mało czytelny. Popracujmy nad nim*/ _pzclr = { 1, 2, 3, 4 }; /*ustalenie kolorów*/ surface(x,y,z); 4
/*Inne wartości kolorów*/ /*Przeskalujmy jeszcze inaczej nasz wykres*/ scale3d(miss(0,0),miss(0,0),-5 5); /*skalowanie osi z*/ surface(x,y,z); /*Wykresy nakładające się na siebie. Najlepiej dodać do nowego pliku*/ begwind; /*Otwarcie edycji okien*/ makewind(9,6.855,0,1.2,0); /*Pierwsze okno. Atrybuty wielkość x, wielkość y, przesunięcie na lewo od początku przesunięcie do góry od początku 0-nieprzezroczysty (1 przezroczysty)*/ makewind(9/2,6.855/2,4.5,.1,1); /*Atrybuty drugiego okna*/ setwind(1); /*edycja okna*/ graphset; _pzclr = { 1, 2, 3, 4 }; /*kolory na osi z*/ title("cos(5*sin(x) - y)"); xlabel("x Axis"); ylabel("y Axis"); scale3d(miss(0,0),miss(0,0),-5 5); /*Skalowanie osi z*/ surface(x,y,z); /*wykres typu surface*/ nextwind; graphset; _pzclr = { 1, 2, 3, 4 }; _pbox = 15; contour(x,y,z); /*Wykres typu contour*/ endwind; /*Inne wykresy trójwymiarowe*/ t=seqa(0,pi/50,501); x=sin(t); 5
y=cos(t); /* sprężynka */ /*okrąg*/ xy(t,x); /*sinus*/ /*Jeśli chcemy mieć większą kontrolę nad skalowaniem możemy użyć opcji volume.*/ volume(2,2,35); /*takie są mniej więcej proporcje naszego wykresu*/ /*Jeżeli chcemy zobaczyć nasz wykres z jakiejś innej pozycji*/ graphset; /*wyzerowanie ustawień*/ viewxyz(1,-1,40); viewxyz(0,0,40); /*Możemy też zmienić swoje ustawienie opcją view*/ volume(10,10,10); view(15,15,30); Tworzenie wielu paneli na wykresach. graphset; /*wyzerowanie opcji wykresów*/ window(2,2,0); /*Stworzenie panelu wykresów 2 na 2*/ xsize = 9/2; /*wielkość w calach*/ ysize = 6.855/2; /*wielkość w calach*/ makewind(xsize,ysize,xsize/2,ysize/2,0); setwind(1); /*Wykres w lewym górnym rogu*/ xy(t,x); /*rzut na jedną oś*/ nextwind; /*Kolejne okno prawy górny róg*/ xy(t,y); /*rzut na drugą oś*/ nextwind; /*Kolejne okno lewy dolny róg*/ /*Rzut na trzecią płaszczyznę*/ nextwind; /*Kolejne okno prawy dolny róg*/ /*Nic nie pokazujemy*/ 6
nextwind; /*środkowe okno*/ endwind; /*Zakończenie edycji okien*/ Tworzenie wykresów gęstości /*Na początek gęstość rozkładu normalnego teoretycznego*/ ngrid=500; /*podziałka*/ z=seqa(-3,6/ngrid,ngrid); /*sekwencja od 3 do 3. standardowy rozkład normalny zazwyczaj nie wydostaje się poza ten przedział*/ f=pdfn(z); /*gęstość rozkładu normalnego*/ xy(z,f); /*wykres*/ Jak rysuje się dystrybuantę empiryczną? Wykresy dystrybuanty empirycznej opierają się na różnego rodzajach estymatorach. Na początek jeden z najprostszych. proc kernelestimate(z,x,h); local arg,i,f; i=1; f=zeros(rows(z),1); do while (i<=rows(z)); arg=(z[i]-x)/h; /*tworzymy nowy wektor przesunięty o odpowiedni element z[i]*/ f[i]=meanc(pdfn(arg))/h; /*Odpowiednio unormowana średnia*/ i=i+1; endo; retp( f ); endp; y=sortc(rndn(nobs,1),1);/*posortowane losowe punkty*/ f=kernelestimate(z,y,0.1); xy(z,f); 7
xy(z,f~pdfn(z)); /*Wykres gęstości empirycznej i teoretycznej*/ Możemy zobaczyć jak zmieni się wykres, gdy zmienimy trochę jądro. f=kernelestimate(z,y,1); xy(z,f~pdfn(z)); /*Wypłaszczenie wykresu*/ f=kernelestimate(z,y,0.01); xy(z,f~pdfn(z)); /*Poszarpanie wykresu*/ f=kernelestimate(z,y,50); xy(z,f~pdfn(z)); /*Sprowadzenie praktycznie do linii prostej*/ xy(z,f); /*Tworzenie histogramu zmiennej*/ hist(y,z); /*z ustala jak gęsto ma być podziałka*/ /*Wykres z grubszymi słupkami */ z2=seqa(-4,0.1,81); hist(y,z2); Możemy też zapisać wyniki estymacji { b,m,freq } = hist(y,z2); bar(z2,freq); xy(m,freq); /*b - punkty początków kolumn, m- środki słupków*/ 8
Zadania Stwórz wykres funkcji cos(x). Zmień ustawienia typowe, tak aby wykres był zielony, znacznikiem były trójkąty. Zmień sposób wyświetlania osi, narysuj linie na podziałkach Do poprzedniego wykresu dodaj tytuł wykresu, opisz osie i wstaw legendę. Usuń z wykresu funkcji exp(x) znaczniki osi. Włącz pokazywanie daty. Narysuj wykres funkcji z=x 2 -y 2. Pokaż, że w punkcie (0,0). Ma ona punkt siodłowy. Jest to patrząc po jednej zmiennej minimum, a po innej maksimum. Skorzystaj z funkcji surface Narysuj wykres funkcji z poprzedniego zadania używając funkcji contour. Narysuj na jednym rysunku kilka wykresów prezentujących punkt siodłowy. Najlepiej niech będą to rzuty wykresu na odpowiednie osie, oraz wykres trójwymiarowy widziany z różnych punktów. Zadnie Narysuj histogram 2 wymiarowego rozkładu normalnego musi to być wykres 3d. Narysuj histogram dla rozkładu chi-kwadrat o 1, 3 i pięciu stopniach swobody Wczytaj dane dotyczące spółki Unimil (plik z poprzednich zajęć) i narysuj wykres kursu zamknięcia. Narysuj wykres dla pierwszych różnic logarytmu kursu zamknięcia akcji Unimilu. 9