23
Notas do Curso de Introdução ao GAUSS Luís Catela Nunes Faculdade de Economia - Universidade Nova de Lisboa Outubro de 2001 Índice 0. Notas preliminares ..................................................................................2 1. Criar e manipular matrizes ......................................................................3 2. Operações com matrizes .........................................................................4 3. Comandos em GAUSS ...........................................................................6 4. Gráficos ...................................................................................................9 5. A instrução IF e comparações...............................................................11 6. Geração de números aleatórios .............................................................12 7. Loops.....................................................................................................14 8. Simulação ..............................................................................................16 9. Procedimentos .......................................................................................20 10. Estimação de máxima verosimilhança – MAXLIK ...........................21

Curso de Introduo ao Gaussdocentes.fe.unl.pt/~lcnunes/courses/econometricspdm0506/examples/... · 110.00000 150.00000 let d[1,2 ] = 100 ... CDFCHIC Calcula o complemento da fd de

  • Upload
    vonga

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

Notas do Curso de Introdução ao GAUSS

Luís Catela Nunes

Faculdade de Economia - Universidade Nova de Lisboa

Outubro de 2001

Índice

0. Notas preliminares ..................................................................................2

1. Criar e manipular matrizes......................................................................3

2. Operações com matrizes .........................................................................4

3. Comandos em GAUSS ...........................................................................6

4. Gráficos...................................................................................................9

5. A instrução IF e comparações...............................................................11

6. Geração de números aleatórios .............................................................12

7. Loops.....................................................................................................14

8. Simulação..............................................................................................16

9. Procedimentos.......................................................................................20

10. Estimação de máxima verosimilhança – MAXLIK ...........................21

0. Notas preliminares

1. Para utilizar o GAUSS o programa a ser executado é c:\gauss\gauss.exe. 2. O GAUSS não distingue maiúsculas de minúsculas nos comandos e nomes

de matrizes. 3. As instruções acabam com ponto e vírgula ( ; ). 4. Os comentários nos programas começam com /* ou @, e acabam com */

ou @, respectivamente. 5. Conselho: escrever o comando NEW; no princípio de um programa para

limpar tudo em memória e evitar confusões com instruções anteriores. 6. Sempre que sair do GAUSS todas as matrizes em memória serão apagadas.

Existe uma instrução SAVE que guarda uma matriz num ficheiro, e uma instrução LOAD que lê a matriz.

7. O separador decimal em GAUSS é o ponto ( . ). 8. Para nomes de ficheiros e directórios deve ser utilizado o formato DOS

(máximo de 8 caracteres e sem espaços). 9. No directório c:\gauss existem dois ficheiros que podem ser alterados.

• Startup – ficheiro de comandos executado quando o GAUSS é iniciado. Isto pode ser útil quando se quer mudar automaticamente o directório de trabalho (por exemplo, se os ficheiros de trabalho estão todos em c:\work então pode-se acrescentar a Startup a instrução: chdir c:\work ).

• Gauss.cfg – ficheiro de configuração do GAUSS. Numa das linhas deste ficheiro é possível alterar uma opção de memória. Por exemplo: max_workspace = 8.0, reserva 8 megabytes de espaço em memória. Quando se trabalha com matrizes de grandes dimensões é possível que o GAUSS dê a seguinte mensagem de erro: “(0) : error G0030 : Insufficient workspace memory”. Neste caso é necessário aumentar o valor de max_workspace. Atenção que o valor máximo admissível depende da capacidade de memória RAM do computador.

10. Todos os exemplos deste curso estão em c:\gauss\examples\curso. 11. Como obter informações adicionais sobre o GAUSS?

• Consultar o Help do programa. • Consultar os manuais do GAUSS. • Consultar os links na página da empresa construtora do GAUSS:

http://www.aptech.com . • Enviar uma mensagem para “Gaussians – the GAUSS mailing list”:

mais informação em http://www.aptech.com/s2_gaussians.html .

2

1. Criar e manipular matrizes 1.1. Exemplos (ex-01.gss)

Programa Output LET W[4,2] = 1 5 2 5 3 5.8 4 5; "W ="; W;

W = 1.0000000 5.0000000 2.0000000 5.0000000 3.0000000 5.8000000 4.0000000 5.0000000

WW = { 1 5 , 2 5 , 3 5.8 , 4 5 }; "WW ="; WW;

WW = 1.0000000 5.0000000 2.0000000 5.0000000 3.0000000 5.8000000 4.0000000 5.0000000

W1 = W[3,2]; "W1 ="; W1;

W1 = 5.8000000

"W[3,.]"; W[3,.]; "W[2:4,1]"; W[2:4,1]; "W[1 3 4,.]"; W[1 3 4,.];

W[3,.] 3.0000000 5.8000000 W[2:4,1] 2.0000000 3.0000000 4.0000000 W[1 3 4,.] 1.0000000 5.0000000 3.0000000 5.8000000 4.0000000 5.0000000

LET Y[4,1]=10 20 30 40; "Y ="; Y; "W~Y"; W~Y;

Y = 10.000000 20.000000 30.000000 40.000000 W~Y 1.0000000 5.0000000 10.000000 2.0000000 5.0000000 20.000000 3.0000000 5.8000000 30.000000 4.0000000 5.0000000 40.000000

LET Z[2,2]=100 0 0 100; "Z ="; Z; "W|Z"; W|Z;

Z = 100.00000 0.00000000 0.00000000 100.00000 W|Z 1.0000000 5.0000000 2.0000000 5.0000000 3.0000000 5.8000000 4.0000000 5.0000000 100.00000 0.00000000 0.00000000 100.00000

"(Y~W~Y)|(Z~Z)"; (Y~W~Y)|(Z~Z);

(Y~W~Y)|(Z~Z) 10.000000 1.0000000 5.0000000 10.000000 20.000000 2.0000000 5.0000000 20.000000 30.000000 3.0000000 5.8000000 30.000000 40.000000 4.0000000 5.0000000 40.000000 100.00000 0.00000000 100.00000 0.00000000 0.00000000 100.00000 0.00000000 100.00000

3

1.2. Outros exemplos de criação de matrizes (ex-02.gss) (a) Ler os dados a partir do ficheiro dados.txt: 1.1 1 3 0.1 2 2 0.9 3 1 2 4 0

Programa Output

load a[4,3] = c:\gauss\examples\curso\dados.txt; "a="; a;

a= 1.1000000 1.0000000 3.0000000 0.10000000 2.0000000 2.0000000 0.90000000 3.0000000 1.0000000 2.0000000 4.0000000 0.00000000

(b) Criar matrizes especiais: b=zeros(5,3); "b="; b;

b= 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000

c=ones(2,4); "c="; c;

c= 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000

(c) Existem outras instruções para criar matrizes, como por exemplo: EYE Cria uma matriz identidade. SEQA Cria um vector como uma sequência aditiva.

2. Operações com matrizes Os operadores sobre matrizes mais utilizados são: + Adição - Subtracção * Multiplicação de matrizes .* Multiplicação elemento a elemento ^ Exponenciação elemento a elemento ./ Divisão elemento a elemento / Divisão ou solução de sistema linear .*. Produto de Kronecker ‘ Transposição de matrizes

4

Exemplos de operações de adição com matrizes (ex-03.gss):

Programa Output let a[5,2] = 10 10 10 20 10 30 10 40 10 50; "a="; a;

a= 10.000000 10.000000 10.000000 20.000000 10.000000 30.000000 10.000000 40.000000 10.000000 50.000000

let b[5,2] = 1 1 2 1 3 1 4 1 5 1; "b="; b; "a+b="; a+b;

b= 1.0000000 1.0000000 2.0000000 1.0000000 3.0000000 1.0000000 4.0000000 1.0000000 5.0000000 1.0000000 a+b= 11.000000 11.000000 12.000000 21.000000 13.000000 31.000000 14.000000 41.000000 15.000000 51.000000

c = 100*ones(5,1); "c="; c; "a+c="; a+c;

c= 100.00000 100.00000 100.00000 100.00000 100.00000 a+c= 110.00000 110.00000 110.00000 120.00000 110.00000 130.00000 110.00000 140.00000 110.00000 150.00000

let d[1,2] = 100 200; "d="; d; "a+d="; a+d;

d= 100.00000 200.00000 a+d= 110.00000 210.00000 110.00000 220.00000 110.00000 230.00000 110.00000 240.00000 110.00000 250.00000

e = 1000; "e="; e; "a+e="; a+e;

e= 1000.0000 a+e= 1010.0000 1010.0000 1010.0000 1020.0000 1010.0000 1030.0000 1010.0000 1040.0000 1010.0000 1050.0000

5

3. Comandos em GAUSS 3.1 Alguns dos comandos mais utilizados em GAUSS: Solução de sistemas lineares: INV Inverter uma matriz. b/A Solução de um sistema linear Ax = b.

Operações sobre as colunas de uma matriz: CUMSUMC Calcula a soma cumulativa de cada coluna. SUMC Calcula a soma de cada coluna. MAXC Indica o maior elemento de cada coluna. MINC Indica o menor elemento de cada coluna.

Dimensão de uma matriz: COLS Indica o número de colunas de uma matriz. ROWS Indica o número de linhas de uma matriz.

Extracção de sub-matrizes: DIAG Extrai a diagonal de uma matriz para um vector coluna. DIAGRV Coloca um vector coluna na diagonal de uma matriz. SELIF Selecciona linhas de uma matriz utilizando uma expressão lógica. TRIMR Elimina linhas do topo ou do fim de uma matriz.

Funções matemáticas: ABS Valor absoluto. INT Arredonda para o inteiro mais próximo. EXP Função exponencial. LN Logaritmo natural. LOG Logaritmo de base 10. SQRT Raíz quadrada. SIN Seno.

Funções de distribuição cumulativas CDFBVN Calcula a aba inferior da fd de uma normal bivariada CDFCHIC Calcula o complemento da fd de uma qui-quadrado. CDFFC Calcula o complemento da fd de uma F. CDFN Calcula o integral de uma normal: aba inferior. CDFNI Calcula o inverso da fd de uma normal. CDFTC Calcula o inverso da fd de uma t. PDFN Calcula a densidade de uma normal.

Estatísticas descritivas: CORRX Calcula a matriz de correlações. MEANC Calcula a média de cada coluna de uma matriz de dados. STDC Calcula o desvio-padrão de cada coluna de uma matriz. VCX Calcula a matriz de var.-cov. de uma matriz de dados.

Diferenciação e integração: GRADP Calcula as primeiras derivadas de uma função. HESSP Calcula as segundas derivadas de uma função. INTQUAD1 Integra uma função em R.

Existem muitas outras funções que permitem por exemplo calcular vectores e valores próprios, efectuar decomposições de matrizes, tratar valores omissos.

6

3.2. Exemplo de estimação pelo método dos mínimos quadrados Programa - ex04.gss /* LER OS DADOS */ LET Y[8,1] = 3.1 7.6 10.4 11.2 9.0 17.9 15.7 9.3; LET X1[8,1] = 1.2 3.1 2.5 5.2 3.9 7.5 6.7 1.2; /* T = NÚMERO DE OBSERVAÇÕES */ T = ROWS(Y); /* CRIAR A MATRIZ X JUNTANDO UMA COLUNA PARA O TERMO CONSTANTE */ X = ONES(T,1)~X1; /* MOSTRAR AS MATRIZES X E Y */ "X ="; X; "Y ="; Y; /* K = NÚMERO DE PARÂMETROS A ESTIMAR */ K = COLS(X); /* ESTIMADOR DE MÍNIMOS QUADRADOS */ B = INV(X'X)*X'Y; "B ="; B; /* RESÍDUOS */ EHAT = Y - X*B; "EHAT ="; EHAT; /* VERIFICAR SE A SOMA DOS RESÍDUOS É IGUAL A ZERO */ "SOMA DOS RESÍDUOS =";; SUMC(EHAT); /* CALCULAR OS RESÍDUOS AO QUADRADO */ EHAT2 = EHAT.*EHAT; "EHAT2 ="; EHAT2; /* SOMA DO QUADRADO DOS RESÍDUOS */ RSS = SUMC(EHAT2); "RSS =";; RSS; /* ESTIMADOR DA VARIÂNCIA DOS ERROS */ S2 = RSS./(T-K); "S2 =";; S2; /* MATRIZ DE VARIÂNCIAS-COVARIÂNCIAS ESTIMADAS PARA B*/ VCOVB = S2*INV(X'X); "VCOVB =";; VCOVB; /* EXTRAIR A DIAGONAL PARA OBTER AS VARIÂNCIAS ESTIMADAS */ VARB = DIAG(VCOVB); "VARB =";; VARB; /* CALCULAR OS DESVIOS-PADRÕES */ SEB = SQRT(VARB); "SEB =";; SEB; /* CALCULAR AS ESTATÍSTICAS T */ TSTATB = B ./ SEB; "TSTATB =";; TSTATB; /* CALCULAR OS P-VALUES */ PVALUES = 2*CDFTC(TSTATB,T-K); "PVALUES =";; PVALUES;

7

Output: X = 1.0000000 1.2000000 1.0000000 3.1000000 1.0000000 2.5000000 1.0000000 5.2000000 1.0000000 3.9000000 1.0000000 7.5000000 1.0000000 6.7000000 1.0000000 1.2000000 Y = 3.1000000 7.6000000 10.400000 11.200000 9.0000000 17.900000 15.700000 9.3000000 B = 3.8391681 1.7088388 EHAT = -2.7897747 -1.5365685 2.2887348 -1.5251300 -1.5036395 1.2445407 0.41161179 3.4102253 SOMA DOS RESÍDUOS = -1.5099033e-014 EHAT2 = 7.7828429 2.3610426 5.2383071 2.3260215 2.2609318 1.5488816 0.16942426 11.629637 RSS = 33.317088 S2 = 5.5528481 VCOVB = 2.8368781 -0.54767337 -0.54767337 0.13998041 VARB = 2.8368781 0.13998041 SEB = 1.6843034 0.37413957 TSTATB = 2.2793803 4.5673833 PVALUES = 0.062853166 0.0038210152 É possível alterar o programa acima para que o output fosse automaticamente guardado num ficheiro. O procedimento é o seguinte: OUTPUT FILE = nome do ficheiro RESET; ... (Instruções) ... OUTPUT OFF; END;

8

4. Gráficos 4.1. Principais comandos para realizar gráficos em GAUSS:

xy Gráfico X,Y bar Gráfico de barras hist Histograma xyz Gráfico X, Y, Z surface Gráfico de uma superfície 3D contour Gráfico de curvas de nível É possível guardar os gráficos do GAUSS em vários formatos. Existe um programa chamado c:\gauss\playw.exe que permite converter gráficos para vários formatos que podem ser utilizados em Word. 4.2. Exemplo – Gráficos das séries X1 e Y do exemplo dos mínimos quadrados. Programa - ex-04b.gss LET Y[8,1] = 3.1 7.6 10.4 11.2 9.0 17.9 15.7 9.3; LET X1[8,1] = 1.2 3.1 2.5 5.2 3.9 7.5 6.7 1.2; LIBRARY PGRAPH; GRAPHSET; /* Gráfico da série Y */ XY(1,Y); /* Gráfico da série X1 */ XY(1,X1); /* Gráfico das séries X1 e Y */ XY(1,X1~Y); /* Gráfico X1-Y */ /* Esta opção evita ligar os pontos com linhas: */ _PLCTRL = -1; XY(X1,Y); /* Para guardar este gráfico num ficheiro para ser incluído num documento word é necessário alterar algumas variáveis de controlo. Uma descrição completa pode ser encontrada no manual. */ /* Cor de fundo branca */ _PMCOLOR = {0,0,0,0,0,0,0,0,15} ; /* Cor dos símbolos azul: */ _PCOLOR = 1; /* Nome do ficheiro onde guardar o gráfico: */ _PTEK = "C:\\GAUSS\\EXAMPLES\\CURSO\\EX-04B.TKF" ; /* Este gráfico deve ser convertido no formato metafile ( utilizando o programa c:\gauss\playw.exe ) para poder ser utilizado num documneto word. */ /* Alguns títulos: */ TITLE("GRAFICO X1-Y "); XLABEL("X1"); YLABEL("Y"); /* Finalmente o gráfico: */ XY(X1,Y);

9

Um dos gráficos do output:

10

5. A instrução IF e comparações A instrução IF permite executar uma série de comandos condicional no resultado de uma condição lógica. Exemplo: IF A < 0; "A É NEGATIVO"; B = 2*A; ELSEIF A == 0; "A É IGUAL A ZERO"; B = 0; ELSE; "A É POSITIVO"; B = A^2; ENDIF; A expressão a seguir ao IF deve resultar sempre num escalar. A expressão é VERDADEIRA se o valor for diferente de zero, e FALSA se o valor for igual a zero. O ELSE é opcional e apenas pode ser utilizado uma vez na instrução IF. O ELSEIF também é opcional mas podem existir vários. Exemplos de operadores relacionais que tomam o valor 0 (FALSO) ou 1 (VERDADEIRO): == Igual a < Menor que <= Menor ou igual a > Maior que >= Maior ou igual a /= Diferente de No caso de se compararem matrizes, o resultado destes operadores relacionais só é igual a 1 (VERDADEIRO) se todas as comparações forem VERDADEIRAS. Basta que uma comparação seja FALSA para que o resultado seja 0 (FALSO).

11

6. Geração de números aleatórios 6.1. Principais comandos para gerar números aleatórios: RNDN Cria uma matriz de números aleatórios com distribuição N(0,1). RNDU Cria uma matriz de números aleatórios com distribuição uniforme entre 0 e 1. 6.2. Exemplos: (a) Gerar uma amostra de 10 números aleatórios N(0,1). Programa: ex-05a.gss T = 10; Z = RNDN(T,1); "Z ="; Z; (b) Gerar 10000 números aleatórios N(0,1) e N(µ,σ2) com µ = 10, σ = 5. Programa: ex-05b.gss T = 10000; Z = RNDN(T,1); /* PREPARAR AS ROTINAS GRÁFICAS */ LIBRARY PGRAPH; GRAPHSET; /* HISTOGRAMA DOS VALORES EM Z COM 30 CATEGORIAS */ CALL HIST(Z,30); /* GERAR: X ~ N( MU, SIGMA^2 ) */ MU = 10; SIGMA = 5; X = MU + SIGMA*Z; /* HISTOGRAMA DOS VALORES EM X COM 30 CATEGORIAS */ CALL HIST(X,30); Os gráficos:

12

(c) Gerar 500 números aleatórios com uma distribuição Cauchy. Programa: ex-05c.gss /* GERAR T VARIÁVEIS ALEATÓRIAS COM UMA DISTRIBUIÇÃO CAUCHY */ T=500; /* A CAUCHY PODE SER OBTIDA COMO O RÁCIO DE DUAS NORMAIS */ CAUCHY=RNDN(T,1)./RNDN(T,1); /* HISTOGRAMA DE FREQUÊNCIA DOS T VALORES EM CAUCHY */ LIBRARY PGRAPH; GRAPHSET; CALL HISTP(CAUCHY,100); Gráfico:

13

7. Loops 7.1. Instrução DO A instrução DO permite executar loops, ou ciclos, de instruções. O formato é o seguinte:

DO WHILE expressão escalar; ... (Instruções) ... ENDO;

O conjunto de instruções entre DO WHILE e ENDO é executado enquanto a expressão escalar for VERDADE. Ver a instrução IF para uma discussão de operadores relacionais. Exemplos de “loops” com a instrução DO (ex-06a.gss): /* EXEMPLO SIMPLES DE UM LOOP COM A INSTRUÇÃO DO */ I = 1; DO WHILE I <= 8; "I = ";; I; I = I + 1; ENDO; /* OUTRO EXEMPLO */ M = ZEROS(13,1); I = 1; DO WHILE I <= 13; M[I,1] = I^2; I = I + 1; ENDO; "M ="; M;

Output: I = 1.0000000 I = 2.0000000 I = 3.0000000 I = 4.0000000 I = 5.0000000 I = 6.0000000 I = 7.0000000 I = 8.0000000 M = 1.0000000 4.0000000 9.0000000 16.000000 25.000000 36.000000 49.000000 64.000000 81.000000 100.00000 121.00000 144.00000 169.00000

14

7.2. Alternativas à instrução DO Por vezes existem alternativas mais eficientes do que a instrução DO. Existem operadores que devolvem a matriz de resultados de todas as comparações: .== Igual a .< Menor que .<= Menor ou igual que .> Maior que .>= Maior ou igual que ./= Diferente de Deste modo, o resultado destes operadores não pode ser utilizado na instrução IF nem na instrução DO. No entanto podem ser úteis noutras situações como se mostra no seguinte exemplo. Exemplo (ex-05.gss): Considerem-se 100000 números aleatórios N(0,1) criados por:

Z = RNDN(100000,1);

Para contar o número de valores negativos deste vector pode-se escrever o seguinte programa: NUM = 0; I = 1; DO WHILE I <= ROWS(Z); IF Z[I] < 0; NUM = NUM + 1; ENDIF; I = I + 1; ENDO; "Número de valores negativos =";; NUM; Um programa alternativo muito mais rápido é o seguinte: NUM = SUMC( Z .< 0 ); "Número de valores negativos =";; NUM;

15

8. Simulação (a) Cálculo das médias amostrais de 10000 amostras aleatórias N(10,5^2) de dimensão 10. Programa – ex-06b.gss /* GUARDAR O TEMPO DE INÍCIO DE EXECUÇÃO */ TEMPO=HSEC; /* TAMANHO DA AMOSTRA */ T = 10; /* MÉDIA */ MU = 10; /* DESVIO-PADRÃO */ SIGMA = 5; /* NÚMERO DE AMOSTRAS ALEATÓRIAS A GERAR */ NSIMUL = 10000; /* CRIAR UMA MATRIZ ONDE SERÃO GUARDADOS OS VALORES DAS MÉDIAS DE CADA AMOSTRA ALEATÓRIA */ MEDIAS = ZEROS(NSIMUL,1); /* ÍNICIO DO "LOOP" QUE GERA AS AMOSTRAS ALEATÓRIAS */ SIMUL=1; DO WHILE SIMUL <= NSIMUL; /* CADA AMOSTRA ALEATÓRIA TEM T OBSERVAÇÕES */ Z = RNDN(T,1); X = MU + SIGMA * Z; /* CALCULA A MÉDIA DA AMOSTRA ALEATÓRIA E GUARDA O RESULTADO NA LINHA SIMUL DA MATRIZ MEDIAS */ MEDIAS[SIMUL,1] = MEANC(X); SIMUL = SIMUL + 1; ENDO; /* NESTE MOMENTO A MATRIZ MEDIAS JÁ TEM GUARDADOS AS MÉDIAS DAS NSIMUL AMOSTRAS ALEATÓRIAS GERADAS */ "A MÉDIA DA POPULAÇÃO É: MU = ";; MU; "O VALOR MAIS BAIXO PARA AS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE" MINC(MEDIAS); "O VALOR MAIS ELEVADO PARA AS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE" MAXC(MEDIAS); "O VALOR MÉDIO DAS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE" MEANC(MEDIAS); "O DESVIO-PADRÃO DAS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE" STDC(MEDIAS); "O DESVIO PADRÃO TEÓRICO DA MÉDIA DE UMA AMOSTRA ALEATÓRIA = SIGMA/SQRT(T) =" SIGMA/SQRT(T); /* CONTAR O TEMPO QUE LEVOU ESTE PROGRAMA A SER EXECUTADO */ TEMPO=(HSEC-TEMPO)/100; "LEVOU";;TEMPO;;"SEGUNDOS";

Output: A MÉDIA DA POPULAÇÃO É: MU = 10.000000 O VALOR MAIS BAIXO PARA AS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE 3.0688746 O VALOR MAIS ELEVADO PARA AS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE 16.943361 O VALOR MÉDIO DAS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE 9.9923756 O DESVIO-PADRÃO DAS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE 1.5753960 O DESVIO PADRÃO TEÓRICO DA MÉDIA DE UMA AMOSTRA ALEATÓRIA = SIGMA/SQRT(T) = 1.5811388 LEVOU 3.3500000 SEGUNDOS

16

(b) O mesmo que a alínea anterior mas sem usar “loops”. Programa – ex-07.gss TEMPO=HSEC; T = 10; MU = 10; SIGMA = 5; NSIMUL = 10000; /* GERAR NSIMUL AMOSTRAS ALEATÓRIAS DE T OBSERVAÇÕES CADA */ /* CADA AMOSTRA É UMA COLUNA */ Z = RNDN(T,NSIMUL); X = MU + SIGMA * Z; /* A INSTRUÇÃO MEANC CALCULA A MÉDIA DE CADA COLUNA, OU SEJA, DE CADA AMOSTRA */ /* A MATRIZ MEDIAS SERÁ UMA COLUNA COM AS MÉDIAS DAS NSIMUL AMOSTRAS ALEATÓRIAS */ MEDIAS = MEANC(X); "A MÉDIA DA POPULAÇÃO É: MU = ";; MU; "O VALOR MAIS BAIXO PARA AS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE" MINC(MEDIAS); "O VALOR MAIS ELEVADO PARA AS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE" MAXC(MEDIAS); "O VALOR MÉDIO DAS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE" MEANC(MEDIAS); "O DESVIO-PADRÃO DAS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE" STDC(MEDIAS); "O DESVIO PADRÃO TEÓRICO DA MÉDIA DE UMA AMOSTRA ALEATÓRIA = SIGMA/SQRT(T) =" SIGMA/SQRT(T); TEMPO=(HSEC-TEMPO)/100; "LEVOU";;TEMPO;;"SEGUNDOS"; Output: A MÉDIA DA POPULAÇÃO É: MU = 10.000000 O VALOR MAIS BAIXO PARA AS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE 4.3308605 O VALOR MAIS ELEVADO PARA AS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE 15.875061 O VALOR MÉDIO DAS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE 9.9888622 O DESVIO-PADRÃO DAS MÉDIAS DAS AMOSTRAS ALEATÓRIAS FOI DE 1.5977483 O DESVIO PADRÃO TEÓRICO DA MÉDIA DE UMA AMOSTRA ALEATÓRIA = SIGMA/SQRT(T) = 1.5811388 LEVOU 1.6400000 SEGUNDOS

17

(c) Estudo da distribuição da estatística t quando as observações seguem uma distribuição normal. Programa – ex-08.gss /* SIMULAÇÃO DA ESTATÍSTICA T NO CASO DE AMOSTRAS ALEATÓRIAS COM A DISTRIBUIÇÃO NORMAL */ T = 10; MU = 10; SIGMA = 5; NSIMUL = 10000; Z = RNDN(T,NSIMUL); X = MU + SIGMA * Z; MEDIAS = MEANC(X); DP = STDC(X); /* CALCULO DA ESTATÍSTICA T */ ESTT = (MEDIAS - MU) ./ (DP ./ SQRT(T) ); /* HISTOGRAMA DOS VALORES DAS ESTATÍSTICAS T PARA ESTAS NSIMUL AMOSTRAS ALEATÓRIAS */ LIBRARY PGRAPH; GRAPHSET; CALL HIST(ESTT,30); " PERCENTIS 2.5% E 97.5% DOS VALORES SIMULADOS " QUANTILE(ESTT, 0.025|0.975 ); " PERCENTIS 2.5% E 97.5% DA DISTRIBUIÇÃO T-STUDENT COM T-1 GRAUS DE LIBERDADE " CDFTCI( 1-(0.025|0.975) , T-1 );

Output: PERCENTIS 2.5% E 97.5% DOS VALORES SIMULADOS -2.2881654 2.2547969 PERCENTIS 2.5% E 97.5% DA DISTRIBUIÇÃO T-STUDENT COM T-1 GRAUS DE LIBERDADE -2.2621572 2.2621572

18

(d) Estudo da distribuição da estatística t quando as observações seguem uma distribuição de Cauchy. Programa – ex-09.gss NEW; /* SIMULAÇÃO DA ESTATÍSTICA T NO CASO DE AMOSTRAS ALEATÓRIAS COM UMA DISTRIBUIÇÃO DE CAUCHY */ T = 10; MU = 0; SIGMA = 1; NSIMUL = 5000; /* É POSSÍVEL GERAR UMA CAUCHY A PARTIR DO RÁCIO DE DUAS NORMAIS */ Z1 = RNDN(T,NSIMUL); Z2 = RNDN(T,NSIMUL); CAUCHY = Z1 ./ Z2; X = MU + SIGMA * CAUCHY; MEDIAS = MEANC(X); DP = STDC(X); /* CALCULO DA ESTATÍSTICA T */ ESTT = (MEDIAS - MU) ./ (DP ./ SQRT(T) ); /* HISTOGRAMA DOS VALORES DAS ESTATÍSTICAS T PARA ESTAS NSIMUL AMOSTRAS ALEATÓRIAS */ LIBRARY PGRAPH; GRAPHSET; CALL HIST(ESTT,30); "PERCENTIS 2.5% E 97.5% DOS VALORES SIMULADOS " QUANTILE(ESTT, 0.025|0.975 ); "PERCENTIS 2.5% E 97.5% DA DISTRIBUIÇÃO T-STUDENT COM T-1 GRAUS DE LIBERDADE" CDFTCI( 1-(0.025|0.975) , T-1 );

Output: PERCENTIS 2.5% E 97.5% DOS VALORES SIMULADOS -1.8825505 1.8735276 PERCENTIS 2.5% E 97.5% DA DISTRIBUIÇÃO T-STUDENT COM T-1 GRAUS DE LIBERDADE -2.2621572 2.2621572

19

9. Procedimentos

Os comandos que definem um procedimento são: proc Início da definição de um procedimento. local Declara variáveis locais ao procedimento. retp Output do procedimento. endp Termina a definição do procedimento.

Apenas os comandos proc e endp são obrigatórios. Se o comando retp não for utilizado o procedimento definido não tem output. Exemplo: Programa ex-10.gss. /* O PROCEDIMENTO CHAMA-SE MINQ */ /* OS INPUTS DESTE PROCEDIMENTO SÃO X E Y */ /* ESTE PROCEDIMENTO TEM 2 OUTPUTS DEFINIDOS MAIS ABAIXO */ PROC (2) = MINQ( X , Y ); /* DEFINIR AS VARIÁVEIS USADAS INTERNAMENTE NESTE PROCEDIMENTO */ LOCAL T, K, B, EHAT, EHAT2, RSS, S2, VCOVB; /* CONJUNTO DE INSTRUÇÕES */ T = ROWS(Y); K = COLS(X); B = INV(X'X)*X'Y; EHAT = Y - X*B; EHAT2 = EHAT.*EHAT; RSS = SUMC(EHAT2); S2 = RSS./(T-K); VCOVB = S2*INV(X'X); /* OS 2 OUTPUTS DESTE PROCEDIMENTO SÃO B E VCOVB, OU SEJAM, A ESTIMATIVA DE MÍNIMOS QUADRADOS E A ESTIMATIVA DA MATRIZ DE VARIÂNCIAS-COVARIÂNCIAS DO ESTIMADOR RESPECTIVO */ RETP( B , VCOVB ); /* FIM DO PROCEDIMENTO */ ENDP; /* LER OS DADOS */ LET Y[8,1] = 3.1 7.6 10.4 11.2 9.0 17.9 15.7 9.3; LET X1[8,1] = 1.2 3.1 2.5 5.2 3.9 7.5 6.7 1.2; T = ROWS(Y); X = ONES(T,1)~X1; /* CHAMAR O PROCEDIMENTO E GUARDAR OS RESULTADOS EM BHAT E V */ {BHAT,V} = MINQ(X,Y); /* MOSTRAR OS RESULTADOS */ "BHAT ="; BHAT; "V ="; V;

Output: BHAT = 3.8391681 1.7088388 V = 2.8368781 -0.54767337

20

-0.54767337 0.13998041

10. Estimação de máxima verosimilhança – MAXLIK A aplicação MAXLIK no GAUSS contém um conjunto de procedimentos para a estimação de parâmetros de modelos através do método da máxima verosimilhança. Informações detalhadas sobre estes procedimentos podem ser encontrados no respectivo manual. Exemplo: Programa ex-ml1.gss. /* EXEMPLO DE UTILIZAÇÃO DE MAXLIK: ESTIMAÇÃO DE UM MODELO DE REGRESSÃO LINEAR SIMPLES. UMA VEZ QUE CONHECEMOS A SOLUÇÃO ANALÍTICA DESTE PROBLEMA A ÚNICA UTILIDADE DESTE PROGRAMA É COMO EXEMPLO */ NEW; /* PREPARAR OS PROCEDIMENTOS EM MAXLIK */ LIBRARY MAXLIK; #INCLUDE MAXLIK.EXT; MAXSET; /* DEFINIR O LOGARITMO DA FUNÇÃO DE VEROSIMILHANÇA. O PROCEDIMENTO DEVE TER COMO INPUT: 1º O VECTOR COLUNA DOS PARÂMETROS A ESTIMAR, 2º A MATRIZ DE DADOS. O OUTPUT DEVE SER UM VECTOR COM O LOG DA FUNÇÃO DE VEROSIMILHANÇA PARA CADA OBSERVAÇÃO */ PROC MYLLF( PARAM , DADOS ); LOCAL Y, X1, BETA1, BETA2, S, E, F; Y = DADOS[.,1]; X1 = DADOS[.,2]; BETA1 = PARAM[1,1]; BETA2 = PARAM[2,1]; S = PARAM[3,1]; E = Y - BETA1 - BETA2 .* X1; /* CALCULAR O LOG DA VEROSIMILHANÇA PARA CADA OBSERVAÇÃO */ F = -0.5 * LN( 2*PI ) -0.5 * LN( S^2) -0.5*(E^2)./(S^2); RETP(F); ENDP; /* LEITURA DOS DADOS */ LET Y[8,1] = 3.1 7.6 10.4 11.2 9.0 17.9 15.7 9.3; LET X1[8,1] = 1.2 3.1 2.5 5.2 3.9 7.5 6.7 1.2; /* TODOS OS DADOS A SEREM UTILIZADOS DEVEM SER GUARDADOS NUMA ÚNICA MATRIZ */ DADOS = Y ~ X1; /* DAR NOMES AOS PARÂMETROS */ LET _MAX_PARNAMES = B1 B2 S; /* VALORES INICIAIS DOS PARÂMETROS NA OPTIMIZAÇÃO NUMÉRICA */ LET PARAMINI = 0 0 1; /* COMANDOS PARA CHAMAR AS ROTINAS DE ESTIMAÇÃO E IMPRESSÃO DOS RESULTADOS */

21

{PARAMFIN,FFIN,GRADFIN,COV,RETCODE}=MAXLIK(DADOS,0,&MYLLF,PARAMINI); CALL MAXPRT(PARAMFIN, FFIN, GRADFIN, COV, RETCODE);

Output: ================================================================================ iteration: 1 algorithm: BFGS step method: STEPBT function: 65.62894 step length: 0.00000 backsteps: 0 -------------------------------------------------------------------------------- param. param. value relative grad. B1 0.0000 0.1604 B2 0.0000 0.7566 S 1.0000 1.9568 ================================================================================ iteration: 2 algorithm: BFGS step method: STEPBT function: 5.63411 step length: 1.00000 backsteps: 0 -------------------------------------------------------------------------------- param. param. value relative grad. B1 0.1604 0.1503 B2 0.7566 0.6840 S 2.9568 1.1115 ================================================================================ ... (ETC) ... ================================================================================ iteration: 28 algorithm: BFGS step method: STEPBT function: 2.13225 step length: 1.00000 backsteps: 0 -------------------------------------------------------------------------------- param. param. value relative grad. B1 3.8404 0.0007 B2 1.7090 0.0014 S 2.0408 0.0000 =============================================================================== MAXLIK Version 4.0.22 9/21/99 12:03 pm =============================================================================== return code = 0 normal convergence Mean log-likelihood -2.13225 Number of cases 8 Covariance matrix of the parameters computed by the following method: Inverse of computed Hessian Parameters Estimates Std. err. Est./s.e. Prob. Gradient ------------------------------------------------------------------ B1 3.8392 1.4586 2.632 0.0042 0.0000 B2 1.7088 0.3240 5.274 0.0000 0.0000 S 2.0407 0.5102 4.000 0.0000 -0.0000 Correlation matrix of the parameters 1.000 -0.869 -0.000 -0.869 1.000 0.000 -0.000 0.000 1.000 Number of iterations 28

22

Minutes to convergence 0.01017

23