1 AULA 1 - APRESENTAÇÃO DO PROGRAMA 1.1 Contextualização sobre linguagens de programação A linguagem binária é um tipo de codificação numérica utilizada em informática para compactar informações numéricas de sistemas de comunicação de dados. Ela permite a representação de números decimais de 0 a 9 em acordo com o Quadro 1 abaixo: Quadro 1: Equivalência das linguagens. Decimal CBD 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 Todo computador possui um conjunto de instruções que seu processador é capaz de executar. Essas instruções, ou menos formalmente conhecidas por linguagem da máquina, são representadas por códigos do sistema binário ou decimal. A primeira a ser utilizada foi a Assembly, que é uma notação legível para os humanos comandarem a linguagem da máquina. A linguagem de programação Fortran foi desenvolvida para compilar (=traduzir) a linguagem da máquina para os usuários do IBM 704 em 1954 (Backus 1, 1956). Essa linguagem foi precursora de programas de cálculo matemático e análise estatística. A otimização no processo de compilação foi um dos objetivos para o desenvolvimento da linguagem de programação C ++ que combina características de codificação de baixo
nível (p. ex. linguagem da máquina) e de alto nível (p. ex. interface humana). Desde 1983, quando foi criada no laboratório Bell por Stroustrup 2 (1994), essa linguagem vem sendo utilizada comercialmente e também no meio acadêmico. Em 1991 foi iniciado projeto para o desenvolvimento de uma linguagem de programação orientada a objetos. O objetivo do projeto foi desenvolver uma vanguarda no mundo digital para convergir a utilização de computadores com outros equipamentos (p. ex. telefone). Assim nasceu a linguagem Java, que em seu primeiro protótipo, criava uma interface gráfica touchscreen para controle remoto. A partir de seu lançamento (Arnold e Gosling 3, 1996) a linguagem foi adotada rapidamente na internet, em sistema operacional, no celular e outros, sendo, atualmente, uma referência no desenvolvimento de software. Outra linguagem de programação de alto nível é a Python (van Rossum e de Boer 4, 1991), que é, atualmente, desenvolvida e gerenciada de forma livre pela organização sem fins lucrativos Python Software Foundation (http://www.python.org/psf/). Essa linguagem combina uma sintaxe concisa e clara com os recursos poderosos de sua biblioteca padrão e por módulos desenvolvidos por usuários, os quais são estimulados pela filosofia de utilização de software livre. Também orientada a objetos é a linguagem S que é uma linguagem de programação estatística, desenvolvida no laboratório Bell (Becker e col. 5, 1988). As duas implementações modernas dessa linguagem são os programas de análise estatística S-PLUS, que é proprietário, e o R, livre. 1.2 O que é o R? R é um programa livre e um ambiente computacional de exploração de gráficos e análise de dados (Chambers 6, 2008). Ele é útil para qualquer pessoa que usa e interpreta dados, das seguintes maneiras: 2
Super-calculadora; Ambiente com diversos pacotes estatísticos; Ferramenta de gráficos de alta qualidade; Linguagem de programação multi-uso. O R é utilizado para explorar, analisar e compreender os dados epidemiológicos. Os dados podem ser importados de fontes como, por exemplo, o DATASUS 1 ou o IBGE 2 em planilhas de Excel. Para epidemiologistas que têm interesse em modelos estatísticos, há diversas funções como, por exemplo, regressão logística ou modelo de riscos proporcionais de Cox. Ele, também, pode automatizar tarefas repetitivas com a criação de funções. A curva de aprendizado inicial é íngreme, mas a longo prazo capacita os epidemiologistas a realizar análises de dados mais complexas, de maneira mais fácil (Aragón e Enanoria 7, 2009). O epidemiologista pode achar o R um desafio. O R foi criado por programadores e estatísticos e é mais frequentemente utilizado por analistas com conhecimento em álgebra matricial e programação. Porém, o epidemiologista pode aplicar conceitos epidemiológicos por meio de métodos descritivos, tabelas de contingência e modelos de regressão (Aragón e Enanoria 7, 2009). E é essa abordagem que será explorada nesta disciplina. Qualquer analista de dados que implementa métodos quantitativos precisa de uma ferramenta computacional. Em uma extremidade do espectro estão as calculadoras e planilhas de cálculos simples, e na outra estão os programas de computador especializados para a modelagem estatística e matemática. No entanto, muitos problemas numéricos não são facilmente resolvidos por essas abordagens. Calculadoras e planilhas de cálculo são muito ineficientes para cálculos numéricos complexos. Os pacotes estatísticos, que são adaptados para análise estatística de conjuntos de dados, não contêm uma lingua- 1 http://www2.datasus.gov.br/datasus/index.php 2 http://www.ibge.gov.br/home/ 3
gem de programação extensível e poderosa para lidar com novos problemas de forma eficiente. O R pode fazer o mais simples e as análises mais complexas. Sua linguagem de programação facilita o desenvolvimento de funções para ampliar e melhorar a eficiência de suas análises (Braun e Murdoch 8, 2007). O R está disponível para os sistemas operacionais Mac OS, Linux e Windows. Estão listados aqui links úteis: Página do Projeto está disponível em http://www.r-project.org/; Página de download está disponível em http://cran.r-project.org; Tutoriais estão disponíveis em http://cran.r-project.org/other-docs.html; Grupos de discussão são encontrados em http://wiki.r-project.org/rwiki/doku.php; Novidades são disponíveis em http://cran.r-project.org/doc/rnews/. Para instalar o R em Windows ou Mac OS, faça o seguinte: Ir para http://www.r-project.org/; A partir da lista do menu à esquerda, clique em CRAN (Servidor); Selecione um servidor próximo (por exemplo, University of Sao Paulo, Sao Paulo); Selecione o sistema operacional apropriado; Selecione no link base"; Salvar R-X.XX-win32.exe (Windows) ou R-X.X.X-mini.dmg (Mac OS) para o seu computador; Execute o programa de instalação e selecione arquivos de ajuda em *.pdf. 4
1.3 Vantagens e desvantagens em utilizar o programa R A linguagem de programação orientada a objeto R se tornou padrão no desenvolvimento de ferramentas estatísticas e análise de dados. O código fonte e a versão compilada tem distribuição gratuita pela internet (http://www.r-project.org/). Há uma ampla variedade de técnicas estatísticas e gráficas, incluindo a modelagem linear e não linear, testes estatísticos clássicos, análise de séries temporais, análise multivariada,.... Para tarefas de computação intensiva, usuários avançados podem programar em C ++ e Fortran para manipular objetos do R. Esse programa é altamente extensível por meio da utilização de pacotes adicionais para executar funções de áreas específicas do conhecimento. Outro ponto forte são os gráficos que podem ser produzidos com qualidade de publicação, incluindo símbolos matemáticos. Por um outro lado, o R usa uma interface de linha de comando que é obviamente desconfortável para o usuário leigo em linguagem de programação. Além disso, a curva no ínicio do aprendizado é de menor velocidade de acúmulo de conhecimento em função do tempo em comparação com outros programas de análise de dados (p. ex. SPSS). Após determinado tempo de estudo, entretanto, o usuário percebe que a curva de aprendizado no R não tem limite (Figura 1, Figura 2). 5
Figura 1: Curva de acúmulo de conhecimento no SPSS. curva de aprendizagem no SPSS Aprendizagem 0.0 0.5 1.0 1.5 0 2 4 6 8 tempo Figura 2: Curva de acúmulo de conhecimento no R. curva de aprendizagem no R Aprendizagem 0 20 40 60 80 100 120 0 2 4 6 8 tempo 6
1.4 Noções de programação em R Os comandos (scripts em linguagem R) devem ser explicitados na linha de comando (console) ou por meio de um editor de texto (a ser comentado depois). Veja os exemplos de operações matemáticas (Quadro 2): Quadro 2: R como super-calculadora. Operador Descrição Exemplos + adição 5+4 - subtração 5-4 * multiplicação 5*4 / divisão 5/4 exponenciação 5 4 abs valor absoluto abs(-5) exp exponenciação (na base e) exp(5) log logaritmo (default é log natural) log(exp(5)) sqrt raiz quadrada sqrt(64) rnorm sorteia 100.000 valores de uma Normal rnorm(100000) Os exemplos no Quadro 2 permitem o reconhecimento do R como uma supercalculadora. Por exemplo, o comando rnorm(100000) sorteia 100.000 valores de uma distribuição de densidade probabilística Normal em menos de 5 segundos. Agora é necessário adquirir algumas noções de lógica de programação para conseguir utilizar o programa. Enquanto número é reconhecido diretamente pelo programa (Quadro 2), texto precisa estar entre aspas. Assim, podemos escrever na linha de comando Oi, meu nome é John Snow! que esse será reconhecido como texto. É necessário saber quando se utiliza parênteses (). No exemplo do comando rnorm(100000) precisa entender que 100000 é um argumento da função rnorm() e é obrigatoriamente escrito entre parênteses. É possível atribuir o resultado de rnorm(100000) para um objeto, por exemplo, objeto de nome exemplo1 ou qualquer outro nome: > exemplo1 <- rnorm(100000) 7
> exemplo1 [1] -1.451685e-01-1.049494e+00-2.264432e-01-2.905454e-01 9.914651e-01... A partir desse exemplo, deve-se conhecer o conceito central da lógica de programação: o conceito de vetor. Vetor é um conjunto de elementos similares sem dimensões. Os elementos do vetor são todos da mesmas classe (categórica ou numérica). É necessário utilizar a função c() para criar o vetor e aplicar o operador <- para atribuir o resultado do vetor a um objeto: 1 - Vetor categórico, >nome <- c( Pedro, Paulo, Maria ) >nome [1] Pedro Paulo Maria 2 - Vetor numérico, >idade <- c(18, 31, 45) >idade [1] 18 31 45 O conceito de vetor pode ser expandido para bases de dados utilizadas em epidemiologia. Epidemiologistas estão familiarizados com dados apresentados em planilhas em que cada linha é um registro e cada coluna é uma variável. No R, essas planilhas são chamadas de data frames. Um registro pode ser dados recolhidos sobre os indivíduos ou grupos. Cada coluna de um data frame é ou um vetor numérico ou um vetor categórico. 8
Pode-se criar uma base de dados a partir de vetores. Por exemplo, criam-se vetores de nome n.ind, idade, sexo e caso para construir uma base de dados com utilização em epidemiologia: 1 - Indivíduos, >n.ind <- c(1, 2, 3, 4, 5, 6) 2 - Variáveis, >idade <- c(34, 56, 45, 23, 18, 31) >sexo <- c( Homem, Mulher, Homem, Mulher, Homem, Mulher ) >caso <- c( Sim, Não, Não, Sim, Sim, Não ) 3 - Base de dados, >meus.dados <- data.frame(n.ind, idade, sexo, caso) >meus.dados n.ind idade sexo caso 1 34 Homem Sim 2 56 Mulher Não 3 45 Homem Não 4 23 Mulher Sim 5 18 Mulher Sim 6 31 Mulher Sim Pode-se utilizar essa base de dados para fazer a estatística descritiva, por exemplo, calculando a proporção de casos, a média de idade e a razão entre os sexos. Portanto, o próximo tema a ser explorado é a análise exploratória de dados e, também, a produção e visualização de gráficos. 9
1.5 Exercícios da Aula 1 1 Crie uma pasta de trabalho no seu computador de nome HEP5801 ou, simplesmente, disciplina R. Abra o R e mude o diretório de trabalho para essa pasta (Figura 3). Figura 3: Diretório de trabalho no R. Organize a sua sessão de trabalho. O console com a linha de comando deve ficar em cima e o editor de texto com os scripts a serem digitados durante o exercício, embaixo (Figura 4). Figura 4: Sessão de trabalho no R. Os scripts no editor de texto devem ser rodados apertando as teclas Ctrl+R. 10
2 A passagem para a distribuição normal padronizada depende da seguinte transformação linear z = x m s em que z pode ser interpretado como quantos desvios padrão o valor de x está afastado da média m. Assim, a variável aleatória Z terá distribuição normal com média igual a zero e desvio padrão igual à unidade (Berquó e col 9, 1981), ou seja, Z N(0; 1) Calcule o valor específico de z para o valor amostral igual a 170, sendo que X é uma variável aleatória de distribuição aproximadamente normal X N(175; 6, 25) 3 É possível sortear infinitos valores de z para a equação matemática da distribuição normal padronizada (Berquó e col 9, 1981) f(z) = 1 2π e z2 2 A função rnorm() no R sorteia número determinado de valores z de uma distribuição normal de média m e desvio padrão s, retornando os valores da função f(z). Sorteie 20 valores de y, gerando observações aleatórias da função f(y) da seguinte distribuição normal Y N(175; 6, 25) Dica: rode o comando args(rnorm) para conhecer os argumentos de rnorm(). 11
4 A distribuição de valores aleatórios da função f(y) do exercício anterior pode ser visualizada por meio de um gráfico de histograma. Embora a visualização por gráficos seja o tema da próxima aula, o emprego de hist() para fazer esse histograma é pertinente aqui. Faça o histograma. Considerando que os valores aleatórios de f(y) foram gerados a partir de uma distribuição normal, o resultado obtido com o histograma é, na sua opinião, o esperado? Discuta. 5 A base de dados meus.dados dada em sala de aula é um exemplo de tabulação de dados. Elabore essa base de dados com os seguintes pacientes 1, idade = 34 anos, sexo = homem, caso = sim 2, idade = 56 anos, sexo = mulher, caso = não 3, idade = 45 anos, sexo = homem, caso = não 4, idade = 23 anos, sexo = mulher, caso = sim 5, idade = 18 anos, sexo = homem, caso = sim 6, idade = 31 anos, sexo = mulher, caso = não Calcule a média de idade dos casos = sim e dos casos = não. Essas médias são diferentes? Discuta. 6 As funções no R podem ser implementadas em acordo com a necessidade do analista de dados. Por exemplo, considere que os valores de z da distribuição normal X N(175; 6, 25) são conhecidos para qualquer valor específico de x. Implemente uma função no R para calcular o valor de z para x = 170. 12
Referências [1] Backus JW, Beeber RJ, Best S, Goldberg R, Herrick HE, e col. The Fortran automatic coding system for the IBM 704 EDPM: manual técnico. New York; 1956. [2] Stroustrup B. The Design and Evolution of C++. Reading: Addison-Wesley; 1994. [3] Arnold K, Gosling J. The Java programming language. Reading: Addison-Wesley; 1996. [4] van Rossum G, de Boer J. Interactively testing remote servers using the Python programming language. CWI Quarterly. 1991;4:283-303. [5] Becker RA, Chambers JM, Wilks AR. The new S language. Pacific Grove: Wadsworth & Brooks; 1988. [6] Chambers JM. Software for data analysis: Programming with R. Nova York: Springer Science+Business Media; 2008. [7] Aragón TJ, Enanoria WT. Applied Epidemiology Using R [livro na internet]. Berkeley; 2009 [acesso em outubro 2010]. Disponível em: http://www.medepi.com/docs/epir.pdf. [8] Braun WJ, Murdoch DJ. A First Course in Statistical Programming with R. New York: Cambridge University Press; 2007. [9] Berquó ES, Souza JMP, Gotlieb SLD. Bioestatística. São Paulo: Editora da Universidade de São Paulo; 1981. 13