====== Sessão 1: familiarizando-se com o R ====== Esta é uma primeira sessão com o **R** visando dar aos participantes uma idéia geral da aparência e forma de operação do programa.\\ Os comandos abaixo motivam explicações sobre características básicas de linguagem e serão reproduzidos, comentados e discutidos com os participantes durante o curso. Vamos começar gerando dois vetores ''x'' e ''y'' de coordenadas geradas a partir de números pseudo-aleatórios e depois inspecionar os valores gerados. x <- rnorm(5) x print(x) print(x, dig=3) y <- rnorm(x) y args(rnorm) No exemplo acima primeiro geramos um vetor ''x'' com 5 elementos. Note que ao fazermos ''y <- rnorm(x)'' não especificamos o tamanho da amostra explicitamente como anteriormente mas estamos definindo um vetor ''y'' que tem o mesmo tamanho de ''x'', por isto ''y'' foi gerado com também 5 elementos. Note que se voce tentar reproduzir este exemplo deve obter valores simulados diferentes dos mostrados aqui. Ao digitar o nome do objeto ''x'' os elementos deste objetos são exibidos. O comando ''print(x)'' também exibe os elementos do objeto porém é mais flexível pois oferece opções extras de visualização. O comando ''print(x, dig=3)'' exibe este particular objeto ''x'' com no mínimo 3 dígitos significativos. Para controlar o número de dígitos globalmente, isto é, para impressão de qualquer objeto, por exemplo com 4 dígitos, usamos ''options(digits=4)''. Neste simples exemplo introduzimos várias idéias e conceitos:\\ //objeto//, //atribuição de valores//, //vetores//, //impressão de objetos//, //função//, //argumentos de funções//, //"defaults"//, //geração de números aleatórios// e //controle de semente//. Agora vamos colocar num gráfico os pontos gerado usando o comando plot(x,y) Note que a janela gráfica se abrirá automaticamente e exibirá o gráfico.\\ Há muitas opções de controle e configuração da janela gráfica que são especidicadas usando-se a função ''par()''. Algumas destas opções serão vistas ao longo deste material. A função ''plot()'' oferece através de seus argumentos várias opções para visualização dos gráficos.\\ As argumentos e básicos são mostrados a seguir. args(plot.default) Para ilustração, no exemplo a seguir mostramos o uso do argumento ''type''.\\ Para facilitar esta ilustração vamos primeiro ordenar os valores de ''x'' e ''y'' na sequência crescente dos valores de ''x''. x <- sort(x) y <- y[order(x)] Nos comandos abaixo iniciamos dividindo a janela gráfica em oito partes e reduzindo as margens do gráfico.\\ A seguir produzimos diversos gráficos com diferentes opções para o argumento ''type''.\\ Ao final retornamos a configuração original de apenas um gráfico na janela gráfica. par(mfrow=c(4,2), mar=c(2,2,0.3, 0.3), mgp=c(1.5, 0.6, 0)) plot(x, y, type="l") plot(x, y, type="p") plot(x, y, type="o") plot(x, y, type="b") plot(x, y, type="h") plot(x, y, type="S") plot(x, y, type="s") plot(x, y, type="n") par(mfrow=c(1,1)) Um pouco mais sobre manipulação de vetores. \\ Note que os colchetes ''[]'' são usados para selecionar elementos e há funções para arredondar valores. x x[1] x[3] x[2:4] round(x, dig=1) ceiling(x) floor(x) trunc(x) Os objetos existentes na área de trabalho pode ser listados usando a função ''ls()'' e objetos podem ser removidos com a função ''rm()''. Nos comandos a seguir estamos verificando os objetos existentes na área de trabalho e removendo objetos que julgamos não mais necessários. ls() rm(x, y) A seguir vamos criar um vetor que chamaremos de ''x'' com uma sequência de números de 1 a 20. Depois criamos um vetor ''w'' de pesos com os desvios padrões de cada observação. Na sequência montamos um //data-frame// de 3 colunas com variáveis que chamamos de ''x'', ''y'' e ''w''. Inspecionando o conteúdo do objeto criado digitando o seu nome. A terminamos apagando objetos que não são mais necessários. x <- 1:20 x w <- 1 + sqrt(x)/2 w dummy <- data.frame(x=x, y= x + rnorm(x)*w, w=w) dummy rm(x,w) Nos comandos a seguir estamos ajustando uma regressão linear simples de ''y'' em ''x'' e examinando os resultados. Na sequência, uma vez que temos valores dos pesos, podemos fazer uma regressão ponderada e comparar os resultados. fm <- lm(y ~ x, data=dummy) summary(fm) fm1 <- lm(y ~ x, data=dummy, weight=1/w^2) summary(fm1) Gráficos de resíduos são produzidos com ''plot()''. Como a função produz 4 gráficos dividiremos a tela gráfica, par(mfrow=c(2,2)) plot(fm) Note que o comando acima ''par(mfrow=c(2,2))'' dividiu a janela gráfica em 4 partes para acomodar os 4 gráficos. Para restaurar a configuração original usamos par(mfrow=c(1,1)) Tornando visíveis as colunas do data-frame. search() attach(dummy) search() Fazendo uma regressão local não-paramétrica, e visualizando o resultado. Depois adicionamos a linha de regressão verdadeira (intercepto = 0 e inclinação = 1), a linha da regressão sem ponderação e a linha de regressão ponderada. lrf <- lowess(x, y) plot(x, y) lines(lrf, lty=3) abline(coef(fm)) abline(coef(fm1), lty=2) abline(0, 1, lwd=2) legend(1,20, c("linear simples","ponderada","loess","verdadeira"), lty=c(1,2,3,1), lwd=c(1,1,1,2)) Ao final destas análises removemos o objeto ''dummy'' do caminho de procura. detach() Agora vamos fazer um gráfico diagnóstico padrão para checar ajuste e pressupostos: o gráfico de resíduos por valores preditos e gráfico de escores normais para checar assimetria, curtose e outliers (não muito útil aqui). par(mfrow=c(1,2)) plot(fitted(fm), resid(fm), xlab="Fitted values", ylab="Residuals", main="Residuals vs Fitted") qqnorm(resid(fm), main="Residuals Rankit Plot") E ao final retornamos ao gráfico padrão e "limpamos" novamente o //workspace//, ou seja, apagando objetos. par(mfrow=c(1,1)) rm(fm, fm1, lrf, dummy)