Esta é uma rápida 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.
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
.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.
type
.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)