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)