P. 1
R Tutorial

R Tutorial

|Views: 55|Likes:
Publicado porRodney Rick

More info:

Published by: Rodney Rick on Sep 09, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

03/06/2014

pdf

text

original

Introduc ¸˜ ao ao sistema estat´ ıstico R Mini-curso EMBRAPA

Paulo Justiniano Ribeiro Junior Bras´ ılia, 30/05 a 03/06 de 2005 (´ ultima revis˜ ao: 29 de janeiro de 2009)

Estas notas est˜ ao dispon´ ıveis em formato html em http://www.leg.ufpr.br/~paulojus/embrapa/Rembrapa e tamb´ em em no arquivo arquivo em formato PDF. Este curso foi montado visando uma introdu¸ c˜ ao ao sistema estat´ ıstico R para profissionais da EMBRAPA. O objetivo ´ e ilustrar aspectos b´ asicos do sistema com ˆ enfase na compreens˜ ao de aspectos b´ asicos da linguagem, a estrutura e a forma de operar o programa. O curso n˜ ao tem o objetivo de discutir em detalhe nenhum m´ etodo e/ou modelo estat´ ıstico em particular. M´ etodos estat´ ısticos b´ asicos s˜ ao usados ao longo do texto simplesmente para ilustrar o uso da linguagem. Ser´ a assumida apenas familiaridade com conceitos e m´ etodos estat´ ısticos b´ asicos. N˜ ao ser´ a assumido nenhum conhecimento pr´ evio do R. O curso foi preparado e ser´ a ministrado em ambiente LINUX por´ em n˜ ao far´ a uso de nenhum recurso espec´ ıfico deste sistema operacional e participantes poder˜ ao acompanhar usando outro sistema operacional, tal como Windows . Vamos come¸ car ”experimentando o R”, para ter uma id´ eia de seus recursos e a forma de trabalhar com este programa. Para isto vamos rodar e estudar os comandos mostrados no texto e seus resultados para nos familiarizar com aspectos b´ asicos do programa. Ao longo deste curso iremos ver com mais detalhes o uso do programa R. Siga os seguintes passos: 1. inicie o R em seu computador; 2. voce ver´ a uma janela de comandos com o s´ ımbolo >, este ´ e o prompt do R indicando que o programa est´ a pronto para receber comandos; 3. a seguir digite (ou ”recorte e cole”) os comandos mostrados ao longo deste material. No restante deste texto vamos seguir as seguintes conven¸ c˜ oes. comandos do R s˜ ao mostrados em fontes do tipo slanted verbatim como esta, e precedidas pelo s´ ımbolo >, sa´ ıdas do R s˜ ao sempre exibidas em fontes do tipo verbatim como esta, linhas iniciadas pelo s´ ımbolo # s˜ ao coment´ arios e s˜ ao ignoradas pelo R.

1

Introdu¸ c˜ ao ao R

2

1

Uma primeira sess˜ ao com o R

Esta ´ e uma primeira sess˜ ao com o R visando dar aos participantes uma id´ eia geral da aparˆ encia e forma de opera¸ c˜ ao do programa. Os comandos abaixo ser˜ ao reproduzidos e comentados durante o curso. Vamos come¸ car gerando dois vetores x e y de coordenadas geradas a partir de n´ umeros pseudoaleat´ orios e depois inspecionar os valores gerados. > x <- rnorm(5) > x [1] 1.8614407 -1.0874200 -0.5615027 -2.3187178 > print(x) [1] 1.8614407 -1.0874200 -0.5615027 -2.3187178 > print(x, dig = 3) [1] 1.861 -1.087 -0.562 -2.319 0.378 > y <- rnorm(x) > y [1] 0.1432350 0.5101738 -0.2760532 -0.2362307 > args(rnorm) function (n, mean = 0, sd = 1) NULL

0.3776864 0.3776864

1.1996061

No exemplo acima primeiro geramos um vetor x com 5 elementos. Note que ao fazermos y <rnorm(x) nao 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´ em 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˜ ao exibidos. O comando print(x) tamb´ em exibe os elementos do objeto por´ em ´ e mais flex´ ıvel pois oferece op¸ c˜ oes extras de visualiza¸ c˜ ao. O comando print(x, dig=3) exibe este particular objeto x com no m´ ınimo 3 d´ ıgitos significativos. Para controlar o n´ umero de d´ ıgitos globalmente, isto ´ e, para impress˜ ao de qualquer objeto, por exemplo com 4 d´ ıgitos, usamos options(digits=4). Neste simples exemplo introduzimos v´ arias id´ eias e conceitos: objeto, atribui¸ c˜ ao de valores, vetores, impress˜ ao de objetos, fun¸ c˜ ao, argumentos de fun¸ c˜ oes, ”defaults”, gera¸ c˜ ao de n´ umeros aleat´ orios e controle de semente. Agora vamos colocar num gr´ afico os pontos gerados usando o comando > plot(x, y) Note que a janela gr´ afica se abrir´ a automaticamente e exibir´ a o gr´ afico. H´ a muitas op¸ c˜ oes de controle e configura¸ c˜ ao da janela gr´ afica que s˜ ao especidicadas usando-se a fun¸ c˜ ao par(). Algumas destas op¸ c˜ oes ser˜ ao vistas ao longo deste material. A fun¸ c˜ ao plot() oferece atrav´ es de seus argumentos v´ arias op¸ c˜ oes para visualiza¸ c˜ ao dos gr´ aficos. As argumentos e b´ asicos s˜ ao mostrados a seguir. > args(plot.default) function (x, y = NULL, type = "p", xlim = NULL, ylim = NULL, log = "", main = NULL, sub = NULL, xlab = NULL, ylab = NULL, ann = par("ann"), axes = TRUE, frame.plot = axes, panel.first = NULL, panel.last = NULL, asp = NA, ...) NULL

Introdu¸ c˜ ao ao R

3

0.0

y 0.5

1.0

−2

−1 x

0

1

2

Para ilustra¸ c˜ ao, no exemplo a seguir mostramos o uso do argumento type. Para facilitar esta ilustra¸ c˜ ao vamos primeiro ordenar os valores de x e y na sequˆ encia crescente dos valores de x. > x <- sort(x) > y <- y[order(x)] Nos comandos abaixo iniciamos dividindo a janela gr´ afica em 8 partes e reduzindo as margens do gr´ afico. A seguir produzimos diversos gr´ aficos com diferentes op¸ c˜ oes para o argumento type. Ao final retornamos a configura¸ c˜ ao original de apenas um gr´ afico na janela gr´ afica. Um pouco mais sobre manipula¸ c˜ ao de vetores. Note que os colchetes [] s˜ ao usados para selecionar elementos e h´ a fun¸ c˜ oes para arredondar valores. > x [1] -2.3187178 -1.0874200 -0.5615027 > x[1] [1] -2.318718 > x[3] [1] -0.5615027 > x[2:4] [1] -1.0874200 -0.5615027 0.3776864 > round(x, dig = 1) [1] -2.3 -1.1 -0.6 0.4 1.9 > ceiling(x) [1] -2 -1 0 1 2 > floor(x)

0.3776864

1.8614407

Introdu¸ c˜ ao ao R

4

> + > > > > > > > > >

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))
1.0 1.0 y 0.0 −2 1.0 −1 x 1.0 0 1 2 0.0

y

−2

−1 x

0

1

2

y

0.0

y −2 1.0 −1 x 1.0 0 1 2 0.0

−2

−1 x

0

1

2

y

0.0

y −2 1.0 −1 x 1.0 0 1 2 0.0

−2

−1 x

0

1

2

y

0.0

y −2 −1 x 0 1 2 0.0

−2

−1 x

0

1

2

[1] -3 -2 -1 > trunc(x) [1] -2 -1 0

0 0

1 1

Os objetos existentes na ´ area de trabalho pode ser listados usando a fun¸ c˜ ao ls() e objetos podem ser removidos com a fun¸ c˜ ao rm(). Nos comandos a seguir estamos verificando os objetos existentes na ´ area de trabalho e removendo objetos que julgamos n˜ ao mais necess´ arios. > ls() [1] "x" "y" > rm(x, y) A seguir vamos criar um vetor que chamaremos de x com uma sequˆ encia de n´ umeros de 1 a 20. Depois criamos um vetor w de pesos com os desvios padr˜ oes de cada observa¸ c˜ ao. Na sequˆ encia montamos um data-frame de 3 colunas com vari´ aveis que chamamos de x, y e w. Inspecionando o conte´ udo do objeto criado digitando o seu nome. A terminamos apagando objetos que n˜ ao s˜ ao mais necess´ arios. > x <- 1:20 > x

Introdu¸ c˜ ao ao R

5

[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 > w <- 1 + sqrt(x)/2 > w [1] 1.500000 1.707107 1.866025 2.000000 2.118034 2.224745 2.322876 2.414214 2.500000 [10] 2.581139 2.658312 2.732051 2.802776 2.870829 2.936492 3.000000 3.061553 3.121320 [19] 3.179449 3.236068 > dummy <- data.frame(x = x, y = x + rnorm(x) * w, w = w) > dummy x y w 1 1 2.148754 1.500000 2 2 1.659649 1.707107 3 3 1.711935 1.866025 4 4 3.111563 2.000000 5 5 5.342233 2.118034 6 6 4.383622 2.224745 7 7 3.954104 2.322876 8 8 7.896386 2.414214 9 9 10.505363 2.500000 10 10 10.535822 2.581139 11 11 12.522613 2.658312 12 12 11.747249 2.732051 13 13 15.556417 2.802776 14 14 10.148046 2.870829 15 15 14.245631 2.936492 16 16 17.722934 3.000000 17 17 19.053369 3.061553 18 18 25.597813 3.121320 19 19 17.851351 3.179449 20 20 26.432684 3.236068 > rm(x, w) Nos comandos a seguir estamos ajustando uma regress˜ ao linear simples de y em x e examinando os resultados. Na sequˆ encia, uma vez que temos valores dos pesos, podemos fazer uma regress˜ ao ponderada e comparar os resultados. > fm <- lm(y ~ x, data = dummy) > summary(fm) Call: lm(formula = y ~ x, data = dummy) Residuals: Min 1Q Median -5.20702 -1.20003 -0.01178

3Q 0.98924

Max 5.38711

Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -1.63969 1.16188 -1.411 0.175 x 1.21391 0.09699 12.516 2.56e-10 *** ---

Como a fun¸ c˜ ao produz 4 gr´ aficos dividiremos a tela gr´ afica. p-value: 6.3 on 1 and 18 DF.2)) dividiu a janela gr´ afica em 4 partes para acomodar os 4 gr´ aficos.9119.08414 13.01 ³*³ 0.01 ³*³ 0.05 ³. weight = 1/w^2) > summary(fm1) Call: lm(formula = y ~ x.18e-11 *** --Signif.92001 0. weights = 1/w^2) Residuals: Min 1Q -1. Adjusted R-squared: 0. Adjusted R-squared: 0.649 6.1 ³ ³ 6 1 Residual standard error: 2.50251 Median 0.280 x 1. Para restaurar a configura¸ c˜ ao original usamos > par(mfrow = c(1. 1)) Tornando vis´ ıveis as colunas do data-frame.001 ³**³ 0.001 ³**³ 0.Introdu¸ c˜ ao ao R Signif.501 on 18 degrees of freedom Multiple R-Squared: 0. Depois adicionamos a linha de regress˜ ao verdadeira (intercepto 0 e inclina¸ c˜ ao 1).05 ³.³ 0.556e-10 > fm1 <.9119 on 18 degrees of freedom Multiple R-Squared: 0.6 on 1 and 18 DF.33719 Max 1.185e-11 Gr´ aficos de res´ ıduos s˜ ao produzidos com plot(). Error t value Pr(>|t|) (Intercept) -0.03886 3Q 0. a linha da regress˜ ao sem pondera¸ c˜ ao e a linha de regress˜ ao ponderada.GlobalEnv" [5] "package:graphics" [9] "package:methods" "package:tools" "package:utils" "package:base" "package:stats" "package:datasets" "package:graphics" "package:methods" "dummy" "package:tools" "package:grDevices" "package:utils" "Autoloads" "package:base" "package:stats" "package:datasets" Fazendo uma regress˜ ao local n˜ ao-param´ etrica.8912 F-statistic: 156. data = dummy. . codes: 0 ³***³ 0.87258 Coefficients: Estimate Std.74545 -0. codes: 0 ³***³ 0.lm(y ~ x.907 F-statistic: 186. e visualizando o resultado.82522 -1. p-value: 2. Note que o comando acima par(mfrow=c(2. > search() [1] ".³ 0.115 0.8969.1 ³ ³ 1 Residual standard error: 0.GlobalEnv" [5] "package:grDevices" [9] "Autoloads" > attach(dummy) > search() [1] ".14849 0. data = dummy.

"loess". y) lines(lrf.00 0. "ponderada". lty = 2) abline(0.5 20 20 −1 0 1 Theoretical Quantiles 2 19 Cook’s distance 0. > detach() Agora vamos fazer um gr´ afico diagn´ ostico padr˜ ao para checar ajuste e pressupostos: o gr´ afico de res´ ıduos por valores preditos e gr´ afico de escores normais para checar assimetria.10 0. 2.0 1.5 1.15 Leverage 0. lty = c(1. 1. 20.lowess(x. .5 0 5 10 15 Fitted values 20 > > > > > > > + lrf <. lty = 3) abline(coef(fm)) abline(coef(fm1).Introdu¸ c˜ ao ao R 7 > par(mfrow = c(2.05 0. "verdadeira"). lwd = 2) legend(1.0 0. 2)) Ao final destas an´ alises removemos o objeto dummy do caminho de procura. 2)) > plot(fm) Residuals vs Fitted 6 20 Normal Q−Q Standardized residuals −2 −1 0 1 2 18 20 18 Residuals −6 −4 −2 0 2 4 14 14 0 5 Scale−Location Standardized residuals 0. 1). 1. 1. c("linear simples".5 14 18 10 15 Fitted values 20 −2 Residuals vs Leverage Standardized residuals −2 −1 0 1 2 18 0. curtose e outliers (n˜ ao muito u ´til aqui). y) plot(x. lwd = c(1. 3.

Introdu¸ c˜ ao ao R

8

20

25

y

5

10

15

linear simples ponderada loess verdadeira

5

10 x

15

20

> 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´ afico padr˜ ao e ”limpamos”novamente o workspace, ou seja, apagando objetos. > par(mfrow = c(1, 1)) > rm(fm, fm1, lrf, dummy) Agora vamos inspecionar dados do experimento cl´ assico de Michaelson e Morley para medir a velocidade da luz. Clique para ver o arquivo morley.tab de dados no formato texto. Se quiser voce pode ainda fazer o download deste arquivo para o seu micro. Pode-se visualizar um arquivo externo dentro do pr´ oprio R utilizando file.show() e note que no comando abaixo assume-se que o arquivo est´ a na ´ area de trabalho do R, caso contr´ ario deve ser precedido do caminho para o diret´ orio adequado. > file.show("morley.tab") Lendo dados como um ”data-frame”e inspecionando seu conte´ udo. H´ a 5 experimentos (coluna Expt) e cada um com 20 “rodadas”(coluna Run) e sl ´ e o valor medido da velocidade da luz numa escala apropriada > mm <- read.table("http://www.leg.ufpr.br/~paulojus/embrapa/morley.tab") > mm

Introdu¸ c˜ ao ao R

9

Residuals vs Fitted
4 4

Residuals Rankit Plot

−4

0

5

10 15 Fitted values

20

−4 −2

Sample Quantiles −2 0 2

Residuals −2 0 2

−1 0 1 Theoretical Quantiles

2

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029

Expt Run Speed 1 1 850 1 2 740 1 3 900 1 4 1070 1 5 930 1 6 850 1 7 950 1 8 980 1 9 980 1 10 880 1 11 1000 1 12 980 1 13 930 1 14 650 1 15 760 1 16 810 1 17 1000 1 18 1000 1 19 960 1 20 960 2 1 960 2 2 940 2 3 960 2 4 940 2 5 880 2 6 800 2 7 850 2 8 880 2 9 900

Introdu¸ c˜ ao ao R 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 840 830 790 810 880 880 830 800 790 760 800 880 880 880 860 720 720 620 860 970 950 880 910 850 870 840 840 850 840 840 840 890 810 810 820 800 770 760 740 750 760 910 920 890 860 880 720 840 850 850

10

Introdu¸ c˜ ao ao R 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 780 890 840 780 810 760 810 790 810 820 850 870 870 810 740 810 940 950 800 810 870

11

Devemos definir Expt e Run como fatores tornar o data-frame vis´ ıvel na posi¸ c˜ ao 2 do caminho de procura. > mm$Expt <- factor(mm$Expt) > mm$Run <- factor(mm$Run) > attach(mm) Podemos fazer um gr´ afico para comparar visualmente os 5 experimentos > plot(Expt, Speed, main = "Speed of Light Data", xlab = "Experiment No.") Depois analisamos como um experimento em blocos ao acaso com Run e Expt como fatores e inspecionamos os resultados. > fm <- aov(Speed ~ Run + Expt, data = mm) > summary(fm) Df Sum Sq Mean Sq F value Pr(>F) Run 19 113344 5965 1.1053 0.363209 Expt 4 94514 23629 4.3781 0.003071 ** Residuals 76 410166 5397 --Signif. codes: 0 ³***³ 0.001 ³**³ 0.01 ³*³ 0.05 ³.³ 0.1 ³ ³ 1 > names(fm) [1] "coefficients" "residuals" "effects" "rank" [6] "assign" "qr" "df.residual" "contrasts" [11] "call" "terms" "model" > fm$coef

"fitted.values" "xlevels"

Introdu¸ c˜ ao ao R

12

Speed of Light Data

700

800

900

1000

1

2

3 Experiment No.

4

5

(Intercept) 9.506000e+02 Run7 -1.000000e+02 Run13 -3.600000e+01 Run19 -5.000000e+01

Run2 -5.200000e+01 Run8 -4.000000e+01 Run14 -9.400000e+01 Run20 -4.400000e+01

Run3 Run4 Run5 Run6 -2.800000e+01 6.000000e+00 -7.600000e+01 -1.040000e+02 Run9 Run10 Run11 Run12 -1.000000e+01 -3.800000e+01 4.000000e+00 -1.737634e-13 Run15 Run16 Run17 Run18 -6.000000e+01 -6.600000e+01 -6.000000e+00 -3.800000e+01 Expt2 Expt3 Expt4 Expt5 -5.300000e+01 -6.400000e+01 -8.850000e+01 -7.750000e+01

Podemos redefinir o modelo, por exemplo ajustando um sub-modelo sem o fator “runs” e comparar os dois modelos lineares via uma an´ alise de variˆ ancia. > fm0 <- update(fm, . ~ . - Run) > anova(fm0, fm) Analysis of Variance Table Model 1: Model 2: Res.Df 1 95 2 76 Speed ~ Expt Speed ~ Run + Expt RSS Df Sum of Sq F Pr(>F) 523510 410166 19 113344 1.1053 0.3632

´ importante saber interpretar os coeficientes segunda a parametriza¸ E c˜ ao utilizada. Por default a parametriza¸ c˜ ao ´ e feita tomando o primeiro grupo como referˆ encia.

5 831.Run) > fm0$coef (Intercept) Expt1 Expt2 Expt3 852.Run) > fm0$coef (Intercept) Expt1 Expt2 Expt3 Expt4 852.5 13 Expt4 -88.5 Expt5 -77.9 .6 -7.mds[1] .mds[1] .poly")) > fm0 <. "contr.poly" > options(contrasts = c("contr. ~ .update(fm.mds[1] 2 3 4 5 -53.mean(Speed) 1 2 3 4 5 56.375 -5. contrastes de Helmert s˜ ao definidos como se segue.treatment" "contr. .mds[2] .5 > (3 * mds[4] .mds[2])/6 3 -12.375 > (4 * mds[5] .Introdu¸ c˜ ao ao R > fm0$coef (Intercept) Expt2 Expt3 909.poly")) > fm0 <.mds[1] .9 -20.0 > mds <.500 -12.tapply(Speed.500 -12. mean) > mds 1 2 3 4 5 909.mds[1])/2 2 -26.225 > mean(Speed) [1] 852.5 > (2 * mds[3] .mds[4])/20 5 -5.0 -64. .sum".400 -26. Expt.4 > (mds[2] . > options()$contrast unordered ordered "contr.6 -7.0 -88.5 -77.mds[3])/12 4 -12.0 -64.mds[2] . Por exemplo.5 > mds[-1] . "contr.225 Enquanto que contrastes de cada tratamento contra a m´ edia geral s˜ ao obtidos da forma: > options(contrasts = c("contr. ~ .helmert".6 3. .0 -53.4 > mds .6 3.0 856. .0 820.0 845.5 E este comportamento ´ e controlado por options().4 56.update(fm.4 -31.mds[3] .9 Expt4 -31.

5345225 3.2672612 6.162278e-01 0. "contr.2] [.3] [.324555e-01 -0. No pr´ oximo exemplo x ´ e um vetor de 50 valores igualmente espa¸ cados no intervalo [-pi pi].2] [. "contr.C ^4 [1.matrix(Speed ~ Expt) Ao final desanexamos o objeto e limpamos novamente o workspace. > contr.3] [.4] 1 -1 -1 -1 -1 2 1 -1 -1 -1 3 0 2 -1 -1 4 0 0 3 -1 5 0 0 0 4 > contr.helmert".poly(5) .treatment(5) 2 3 4 5 1 0 0 0 0 2 1 0 0 0 3 0 1 0 0 4 0 0 1 0 5 0 0 0 1 > contr.] 6.162278e-01 0.matrix(Speed ~ Expt) options(contrasts = c("contr.poly")) model.7171372 [4.Introdu¸ c˜ ao ao R 14 H´ a algumas op¸ c˜ oes de contrastes implementadas no R e al´ em disto o usu´ ario pode implementar contrastes de sua preferˆ encia.324555e-01 0. .poly")) model.matrix(Speed ~ Expt) options(contrasts = c("contr.324555e-01 -0.] -3. y idem.L .Q . > > > > > > options(contrasts = c("contr. O objeto f ´ e uma matrix quadrada com linhas e colunas indexadas por x e y respectivamente com os valores da fun¸ c˜ ao cos(y )/(1 + x2 ).] -3. fm0) Vamos agora ver alguns gr´ aficos gerados pelas fun¸ c˜ oes contour() e image().1195229 [2.4] 1 1 0 0 0 2 0 1 0 0 3 0 0 1 0 4 0 0 0 1 5 -1 -1 -1 -1 > contr.sum(5) [.162278e-01 -0.] -6.treatment".595204e-16 0. Para entender melhor os resultados acima analise as sa´ ıdas dos comandos abaixo.5345225 -3.sum".4780914 [5.162278e-01 -0.324555e-01 0.1195229 Se ainda n˜ ao estivar claro experimente para cada uma destas examinar a matrix do modelo com os comandos abaixo (sa´ ıdas n˜ ao s˜ ao mostradas aqui).287978e-17 -0.1] [.1] [.poly")) model.2672612 -6. "contr. > detach() > rm(fm.5345225 1.4780914 [3.] 3.helmert(5) [.

y. fa. y. fa) par(oldpar) E apagando objetos novamente antes de prosseguir.(f .outer(x. nlevels = 15.seq(-pi. > objects() [1] "f" "fa" > rm(x.readonly = TRUE) par(pty = "s".Introdu¸ c˜ ao ao R > x <. > > > > > > > oldpar <. 2)) contour(x.par(no. fa) "mds" "mm" "oldpar" "x" "y" Para encerrar esta sess˜ ao vejamos mais algumas funcionalidades do R.par(no. mfrow = c(1.x > f <. . Depois adicionamos mais linhas para melhor vizualiza¸ c˜ ao. function(x. len = 50) > y <. y. y. Ao final e restauramos os parˆ ametros gr´ aficos iniciais. O R pode fazer opera¸ c˜ ao com complexos. add = TRUE) fa <. note que 1i denota o n´ umero complexo i.t(f))/2 contour(x. y) cos(y)/(1 + x^2)) 15 Agora gravamos parˆ ametros gr´ aficos e definindo a regi˜ ao gr´ afica como quadrada e fazemos um mapa de contorno de f. pi. y. nlevels = 15) par(oldpar) 3 2 1 0 −1 −2 −3 −3 −2 −1 0 1 2 3 −3 −3 −2 −1 0 1 2 3 −2 −1 0 1 2 3 Fazendo um gr´ afico de imagem > > > > > oldpar <. 2)) image(x. f) contour(x. fa ´ e a “parte assim´ etrica” e t() ´ e transposi¸ c˜ ao. y. f. y. f) image(x. mfrow = c(1. f.readonly = TRUE) par(pty = "s".

e sa´ ımos do R. E depois mapeamos qualquer externo ao c´ ırculo no seu rec´ ıproco: > > > > par(pty = "s") plot(z. os pontos devem estar melhor distribu´ ıdos sobre o c´ ırculo > + > > > + > plot(w.seq(-pi. ylim = c(-1. . xlim = c(-1. > rm(th. Um segundo m´ etodo usa a distribui¸ c˜ ao uniforme. ylab = "y") lines(z) w <. 1). 1).ifelse(Mod(w) > 1. xlab = "x". w) Desta forma todos os pontos est˜ ao dentro do c´ ırculo unit´ ario. q() . .Introdu¸ c˜ ao ao R 16 3 2 1 y 0 −1 −2 −3 −3 −2 −1 0 x 1 2 3 −3 −3 −2 −1 y 0 1 2 3 −2 −1 0 x 1 2 3 > th <. . w. ylab = "y") lines(z) Apagamos novamente os objetos . type = "l") w <.rnorm(100) + rnorm(100) * (0+1i) w <. pch = "+". mas a distribui¸ c˜ ao n˜ ao ´ e uniforme. ylim = c(-1. uma forma simples de fazer isto ´ e tomar n´ umeros complexos com parte real e imagin´ aria padr˜ ao. pi. 1/w. len = 100) > z <. 1).sqrt(runif(100)) * exp(2 * pi * runif(100) * (0+1i)) plot(w. xlab = "x". pch = "+". xlim = c(-1. . z) .exp((0+1i) * th) Plotando complexos significa parte imagin´ aria versus real Isto deve ser um c´ ırculo: Suponha que desejamos amostrar pontos dentro do c´ ırculo de raio unit´ ario. 1).

5 .0 1.0 −1.5 y 0.5 0.pdf y 0.0 2 Estat´ ıstica computacional e o sistema R Nesta se¸ c˜ ao iremos seguir a apresenta¸ c˜ ao dispon´ ıvel no arquivo estcompR.0 0.5 −0.0 1.0 −1.5 1.5 1.0 0.0 x 0.0 0.0 −0.0 Re(z) 0.0 −0.5 Im(z) 0.0 −0.0 −1.5 0.5 1.5 1.5 −1.Introdu¸ c˜ ao ao R 17 −1.0 −0.0 −1.0 + + + + ++ + + + + + + + + + + + + + + + + + ++ + + + + + + + + ++ + + ++ + ++ + + + + + + + ++ + + + + + + + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + ++ ++ + + + + + + + + + + + + + + + + + + + + + ++ + ++ + + + + + + +++ + + + + + + + + + + + + + + + ++ ++ + + + + + + + ++ + ++ + + + + + ++ + + + + + + + + ++ + ++ + + + + + + + + ++ + + + + + + −0.0 x 0.5 0.

Eu pessoalmente prefiro rodar os comandos dispon´ ıveis neste link. RedHat (Fedora). Compilando a partir da fonte Neste caso pode-se baixar o arquivo fonte do R (. 2. Debian.R-project.org/bin/linux/debian stable/ (b) atualize a lista de pacotes com: apt-get update (c) A seguir rode na linha de comando do LINUX: apt-get install r-base r-base-core r-recommended apt-get install r-base-html r-base-latex r-doc-html r-doc-info r-doc-pdf Al´ em destes h´ a diversos outros pacotes Debian para instala¸ ca ˜o dos pacotes adicionais do R e outros recursos.tar.org/bin/linux/ubuntu dapper/ Debian: deb http://cran. 1. A partir de arquivos compilados Para isto ´ e necess´ ario baixar o arquivo de instala¸ c˜ ao adequado a seu sistema operacional e rodar a instala¸ c˜ ao.Introdu¸ c˜ ao ao R 18 3 Instalando o R H´ a v´ arias formas de se instalar o R que basicamente pode ser reunidas em duas formas: (i) instala¸ ca ˜o usando arquivos bin´ arios ou (ii) instala¸ c˜ ao compilando os arquivos fonte. Suse. No caso do Windows siga os links : Windows (95 and later) --> base e copie o arquivo de instala¸ c˜ ao .R-project. Windows e Macintosh.exe que deve ser rodado para efetuar a instala¸ c˜ ao. Por exemplo.br. para instalar no Debian ou Ubuntu LINUX pode-se fazer (com privil´ agios de root): (a) No arquivo /etc/apt/sources.org voce ir´ a encontrar arquivos de instala¸ c˜ ao para os sistemas operacionais Linux.list adicione a seguinte entrada: Ubuntu: deb http://cran. Nas ´ areas de download do R.gz) que deve ser descompactado e instru¸ c˜ oes para compila¸ c˜ ao devem ser seguidas. Al´ em disto o R est´ a dispon´ ıvel como pacote de diversas distribui¸ c˜ oes LINUX tais como Ubuntu. como por exemplo em http://cran.r-project. entre outras. Maiores informa¸ c˜ oes podem ser obtidas o manual R Instalation and Administration .

br-r-project. Uma boa forma de aprender e memorizar os comandos b´ asicos ´ e utilizar um Cart˜ ao de Referˆ encia que ´ e um documento que vocˆ e pode imprimir e ter sempre com vocˆ e e que cont´ em os comandos mais frequentemente utilizados.br/Rtutorial. Inicie o R em seu computador.2 Um tutorial sobre o R Al´ em dos materiais dispon´ ıveis na p´ agina do programa h´ a tamb´ em um Tutorial de Introdu¸ c˜ ao ao R dispon´ ıvel em http://www.ufpr.org Ser´ a feita uma apresenta¸ c˜ ao r´ apida da p´ agina do R durante o curso onde os principais recursos ser˜ ao comentados assim como as id´ eias principais que governam o projeto e suas dire¸ c˜ oes futuras. Isto pode trazer alguma dificuldade no inicio at´ e que o usu´ ario se familiarize com os comandos mais comuns.org. colaboradores. 1. entre eles um situado no C3SL/UFPR que pode ser acessado em http://cran. No restante deste texto vamos seguir as seguintes conven¸ c˜ oes: comandos do R s˜ ao sempre mostrados em fontes do tipo typewriter como esta. 2. 4.1 O projeto R O programa R ´ e gratuito e de c´ odigo aberto que propicia excelente ambiente para an´ alises estat´ ısticas e com recursos gr´ aficos de alta qualidade. Este ´ e o prompt do R indicando que o programa est´ a pronto para receber seus comandos.r-project. linhas iniciadas pelo s´ ımbolo # s˜ ao coment´ arios e s˜ ao ignoradas pelo R. Detalhes sobre o projeto. Sugerimos aos participantes deste curso que percorram todo o conte´ udo deste tutorial e retornem a ele sempre que necess´ ario no decorrer do curso.3 Utilizando o R Siga os seguintes passos. documenta¸ c˜ ao e diversas outras informa¸ c˜ oes podem ser encontradas na p´ agina oficial do projeto em: http://www. Vocˆ e ver´ a o s´ ımbolo > indicando onde vocˆ e ir´ a digitar comandos. Para iniciar o Rno LINUX basta digitar R na linha de comando. Cart˜ ao de Referˆ encia em formato PDF preparado por Jonathan Baron. de c´ odigo aberto e livremente distribu´ ıdo e proporciona um ambiente para an´ alises estat´ ısticas.est. A seguir digite (ou ”recorte e cole”) os comandos mostrados neste material. O programa pode ser copiado livremente pela internet. Cart˜ ao de Referˆ encia em formato PDF preparado por Tom Short. . 4. Seguem algumas informa¸ c˜ oes b´ asicas sobre este sistema. H´ a alguns espelhos (mirrors) brasileiros da ´ area de downloads do programa chamada de CRAN (Compreensive R Arquive Network).4 Cart˜ ao de referˆ encia Para operar o R ´ e necess´ ario conhecer e digitar comandos. Aqui v˜ ao trˆ es op¸ c˜ oes: Cart˜ ao de Referˆ encia em formato HTML e traduzido para portuguˆ es.Introdu¸ c˜ ao ao R 19 4 Introdu¸ c˜ ao O programa computational R ´ e gratuito. 4. 4. 3.

Na medida que utilizam o programa. alguns iniciantes ou usu´ arios espor´ adicos poder˜ ao ainda preferir algum tipo de ”menu”.Introdu¸ c˜ ao ao R 20 4. os usu´ arios (ou boa parte deles) tendem a preferir o mecanismo de comandos pois ´ e mais flex´ ıvel e com mais recursos. . ´ e necess´ ario conhecer e digitar comandos. Entretanto.“The R commander” — “menus” para o R Para operar o R. Maiores informa¸ c˜ oes sobre este pacote podem ser encontradas na p´ agina do Rcmdr. na forma usual.5 Rcmdr . Aten¸ cao: Note que o Rcmdr n˜ ao provˆ e acesso a toda funcionalidade do R mas simplesmente a alguns procedimentos estat´ ısticos mais usuais. Alguns usu´ arios acostumados com outros programas notar˜ ao de in´ ıcio a falta de ”menus”. Para utilizar este pacote basta instal´ a-lo e carregar com o comando require(Rcmdr) e o menu se abrir´ a automaticamente. O pacote Rcmdr foi desenvolvido por John Fox visando atender a esta demanda.

..1 Aritm´ etica e Objetos Opera¸ c˜ oes aritm´ eticas # somando estes n´ umeros . # um pouquinho mais complexo Vocˆ e pode usar o R para avaliar algumas express˜ oes aritm´ eticas simples.2 Valores faltantes e especiais Vimos nos exemplos anteriores que pi ´ e um valor especial. O s´ ımbolo [1] pode parecer estranho e ser´ a explicado mais adiante. Note que deve utilizar mai´ usculas. O valor Pi est´ a dispon´ ıvel como uma constante.14159) [1] 2. Note que alternativamente pode-se usar o s´ ımbolo ^. O R tamb´ em disponibiliza fun¸ c˜ oes usuais como as que s˜ ao encontradas em uma calculadora: > sqrt(2) [1] 1.65359e-06 # seno de (Pi radianos) ´ e zero Note que o ˆ angulo acima ´ e interpretado como sendo em radianos. Tente isto: > sin(pi) [1] 1. por exemplo 4*3^3 produziria o mesmo resultado mostrado acima. No u ´ltimo vimos que a opera¸ c˜ ao de potˆ encia ´ e indicada por **. > c(-1. Vejamos no exemplo abaixo alguns resultados que geram estes valores especiais. Por exemplo: > 1+2+3 [1] 6 > 2+3*4 [1] 14 > 3/2+1 [1] 2.224606e-16 Aqui est´ a uma lista resumida de algumas fun¸ c˜ oes aritm´ eticas no R: Estas express˜ oes podem ser agrupadas e combinadas em express˜ oes mais complexas: > sqrt(sin(45 * pi/180)) [1] 0. Inf e -Inf mais ou menos infinito. denota dados faltantes. denota um valor que n˜ ao ´ e represent´ avel por um n´ umero.Introdu¸ c˜ ao ao R 21 5 5.414214 > sin(3. que armazena o valor desta constante matem´ atica. NaN Not a Number. Existem ainda alguns outro valores especiais usados pelo R: NA Not Available.8408964 5. No final desta sess˜ ao revisitamos o uso destes valores.5 > 4*3**3 [1] 108 # pot^ encias s~ ao indicadas por ** ou ^ Nos exemplos acima mostramos uma opera¸ c˜ ao simples de soma. 1)/0 [1] -Inf NaN Inf . Note no segundo e terceiro comandos a prioridade entre opera¸ c˜ oes. 0.

Por exemplo. As linhas a seguir produzem o mesmo resultado. fun¸ c˜ oes. matrizes.224606e-16 Neste material ser´ a dada preferˆ encia ao primeiro s´ ımbolo.Introdu¸ c˜ ao ao R sqrt() abs() sin() cos() tan() asin() acos() atan() sinh() cosh() tanh() asinh() acosh() atanh() exp() log() log10() log2() gamma() factorial choose() combn() 22 raiz quadrada valor absoluto (positivo) fun¸ c˜ oes trigonom´ etricas fun¸ c˜ oes trigonom´ etricas inversas fun¸ c˜ oes hiperb´ olicas fun¸ c˜ oes hiperb´ olicas inversas exponencial e logar´ ıtmo natural logar´ ıtmo base-10 e base-2 fun¸ c˜ ao Gamma de Euler fatorial (n!) n! n´ umero de combina¸ c˜ oes ( x!(n ) −x)! todas conjuntos gerados pela combina¸ c˜ oes de certo n´ umero de elementos 5. Por exemplo em x <. Vocˆ e pode armazenar um valor em um objeto com certo nome usando o s´ ımbolo <-.sin(pi) 1.sqrt(2) dizemos que ”x recebe a raiz quadrada de 2”.414214 # armazena a raiz quadrada de 2 em x # digite o nome do objeto para ver seu conte´ udo Neste caso lˆ e-se: x ”recebe”a raiz quadrada de 2.3 Objetos OR´ e uma linguagem orientada ` a objetos: vari´ aveis.usualmente utilizado para atribuir valores a objetos.224606e-16 = sin(pi) 1.sin(pi) 1. O s´ ımbolo _ que podia ser usado em vers˜ oes mais antigas no R tornou-se inv´ alido para atribuir valores a objetos em vers˜ oes mais recentes e passou a ser permitido nos nomes dos objetos. . Alternativamente ao s´ ımbolo <.224606e-16 <. ao digitarmos o seu nome. se um objeto x tem o valor 10. o programa exibe o valor do objeto: > x <.10 > x [1] 10 O d´ ıgito 1 entre colchetes indica que o conte´ udo exibido inicia-se com o primeiro elemento do objeto x. > x > x [1] > x > x [1] > x > x [1] <. dados. Usu´ arios pronunciam o comando dizendo que o objeto ”recebe” (em inglˆ es ”gets”) um certo valor. etc s˜ ao armazenados na mem´ oria ativa do computador na forma de objetos. pode-se ainda usar os s´ ımbolos -> ou = (este apenas em vers˜ oes mais recentes do R). Como pode ser esperado vocˆ e pode fazer opera¸ c˜ oes aritm´ eticas com os objetos. Exemplos: > x <.sqrt(2) > x [1] 1.

*() testam cada valor do vetor individualmente enquanto que any() verifica a presen¸ ca de algum valor que satisfa¸ ca a condi¸ c˜ ao e all() verifica se todos os valores satisfazem a condi¸ c˜ ao.na(x) [1] FALSE FALSE FALSE FALSE FALSE > !is. sem atribuir o resultado a um objeto. > x <. 11. . faz com que o programa imprima o resultado na tela. NaN e Inf. No segundo faltou um parentesis na fun¸ c˜ ao sqrt. . Digitando uma opera¸ c˜ ao aritm´ etica.1 <. n´ umeros e pontos. DICA: tente atribuir nomes que tenham um significado l´ ogico. NO terceiro caso o h´ ıfen n˜ ao ´ e permitido.x2. Isto facilita lidar com um grande n´ umero de objetos. . por exemplo dados. o correto seria sqrt(10). ´ ainda desej´ E avel. o que ´ e obrigat´ orio. 34) > is. possui nomes reservados. a99 ´ e um nome v´ alido. e as vez crucial evitar ainda outros nomes que sejam de objetos do sistema (em geral fun¸ c˜ oes. Nomes de vari´ aveis devem come¸ car com uma letra e podem conter letras. . Ter nomes como a1 at´ e a20 pode causar confus˜ ao .sqrt 10 > a-1 <.Introdu¸ c˜ ao ao R > y <. No exemplo a seguir definimos um vetor de valores e verificamos que o objeto criado n˜ ao cont´ em nenhum destes valores especiais. Um fato importante ´ e que o R distingue letras mai´ usculas e min´ usculas nos nomes dos objetos.c(23. A seguir est˜ ao alguns exemplos v´ alidos . . por ser o mesmo sinal usado em opera¸ c˜ oes de subtra¸ c˜ ao. S˜ ao eles: FALSE Inf NA NaN NULL TRUE break else for function if in next repeat while Valores especiais revisitados: Vimos anteriormente os valores especiais NA. relacionado ao trabalho e dados em quest˜ ao. mas 99a n˜ ao ´ e.1**2 + x2. isto nomes que n˜ ao podem ser utilizados para objetos por terem um significado especial na linguagem. As fun¸ c˜ oes do tipo is. Digitando o nome do objeto o programa imprime seu conte´ udo na tela.10 > a1 <. O u ´ltio caso ´ e um comando sem sentido.na(x) [1] TRUE TRUE TRUE TRUE TRUE .25 > x * sqrt(x) -> x1 > x2. Dados e DADOS ser˜ ao interpretados como nomes de trˆ es objetos diferentes pela linguagem.99 > sqrt(x) <.10 No primeiro caso o nome n˜ ao come¸ ca com uma letra.sin(x1) > xsq <. por exemplo: c q s t C D F I T diff exp log mean pi range rank var Nomes reservados: O R.sqrt(5) > y+x [1] 2. ou constantes tais como o n´ umero π ) como. e alguns que NAO ao v´ alidos: > 99a <. como qualquer outra linguagem. 12. 34.236068 # uma nova vari´ avel chamada y # somando valores de x e y 23 Note que ao atribuir um valor a um objeto o programa n˜ ao imprime nada na tela. . Estes valores podem ser atribu´ ıdos a objetos ou elementos de um objeto e pode-se ainda testar a presen¸ ca destes valores em objetos ou seus elementos. Note neste exemplo o uso do caracter ! que indica nega¸ c˜ ao. > x <.2**2 ˜ s˜ .

Introdu¸ c˜ ao ao R > is.NA > x [1] 23 34 NA 11 > is.4 NA > mean(x) [1] NA 34 TRUE FALSE FALSE 39 1.finite(x)) [1] TRUE 24 A seguir vamos substituir o terceiro dado 12 pelo c´ odigo de dado faltante. > x1 <.finite(x) [1] TRUE TRUE TRUE TRUE TRUE > !is.(x . n˜ ao est´ a dispon´ ıvel.1 3. > x[3] <.nan(x) [1] FALSE FALSE FALSE FALSE FALSE > is.na(x) [1] FALSE FALSE > any(is.nan(x1) [1] FALSE TRUE FALSE FALSE TRUE .3 3.finite(x1) [1] FALSE FALSE FALSE FALSE FALSE > !is.finite(x)) [1] FALSE > all(is.34)/0 > x1 [1] -Inf NaN NA -Inf NaN > is.4 Agora vamos ver outros valores especiais. Note ainda que opera¸ c˜ oes envolvendo NA tipicamente retornam valor NA o que faz sentido uma vez que o valor n˜ ao pode ser determinado.finite(x) [1] FALSE FALSE FALSE FALSE FALSE > any(!is.na(x)) [1] TRUE > all(is.finite(x1) [1] TRUE TRUE TRUE TRUE TRUE > is.na(x)) [1] FALSE > x + 5 [1] 28 39 NA 16 > x/10 [1] 2.

numeric(x2) [1] TRUE .Introdu¸ c˜ ao ao R 25 6 Tipos de objetos Os tipos b´ asicos de objetos do Rs˜ ao: vetores matrizes e arrays data-frames listas fun¸ c˜ oes Os quatro primeiros tipos s˜ ao objetos que armazenam dados e que diferem entre si na forma da armazenar e operar com os dados. seq() e o s´ ımbolo ":" s˜ ao usadas para facilitar a cria¸ c˜ ao de vetores que tenham alguma lei de forma¸ c˜ ao.*() para testar se um objeto ´ e de um determinado tipo. is.c(1. A fun¸ c˜ ao c() (”c” de concaternar) ´ e usada para criar um vetor. is. > x1 <.array(). e portanto capaz de operar vetores e matrizes diretamente sem a necessidade de ”loops”. is. Os colchetes [ ] s˜ ao usados para indicar sele¸ c˜ ao de elementos. 6) > x2 [1] 1 3 6 > x2[1] [1] 1 > x2[2] [1] 3 > length(x2) [1] 3 > is.1 Vetores Vetores s˜ ao o tipo b´ asico e mais simples de objeto para armazenar dados no R.function().list(). 6.matrix().data.matrix(x2) [1] FALSE > is. is. As fun¸ c˜ oes rep(). O R ´ e uma linguagem vetorial. 3. is. como por exemplo em c´ odigos C e/ou Fortran. Estas fun¸ c˜ oes s˜ ao is. Experimente os comandos listados para se familiarizar com estas estruturas.frame(). Nos exemplo a seguir mostramos algumas opera¸ c˜ oes com vetores.10 > x1 [1] 10 > x2 <. Note que usamos as fun¸ c˜ oes do tipo is. O u ´ltimo (fun¸ c˜ ao) ´ e um tipo objeto especial que recebe algum ”input”e produz um ”output”.vector(x2) [1] TRUE > is.vector().

7 0.0 0.6 0. by = 0.8 0.9 1.1 0. 5)) > x7 [1] 1 1 1 2 2 2 2 2 > x8 <.6 0.4 0.0 > x4[x4 > 0.7 0.rep(1.7 0. Portanto.1) > x4 [1] 0.9 1.0 0.3 0.1 0.rep(1:3.character(x2) [1] FALSE > x3 <. 1. 1.seq(0.0 > x4 > 0. 5) > x6 [1] 1 1 1 1 1 > x7 <.0 > x6 <. "a") [1] "1" "3" "6" "a" Diversas opera¸ c˜ oes num´ ericas podem ser feitas sobre vetores. rep(5.rep(c(1.5 0. 2).3 0. > x2 [1] 1 3 6 > c("a".1:10 > x3 [1] 1 2 3 4 5 6 7 8 9 10 > x4 <. > x2 [1] 1 3 6 > x2 + 3 [1] 4 6 9 > x2 + 1:3 [1] 2 5 9 > x2 + 1:6 . x2) [1] "a" "1" "3" "6" > c(x2. Uma caracter´ ıstica importante da linguagem ´ e a ”lei da reciclagem” que permite opera¸ c˜ oes sobre vetores de tamanhos diferentes.8 0.Introdu¸ c˜ ao ao R > is.9 1.8 0.seq(0.6 0.2 0.5 [1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE > x5 <. Os vetores podem ser compostos de n´ umeros e caracteres ou apenas de um destes tipos. 3)) > x8 [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 26 TRUE TRUE TRUE Um escalar ´ e um vetor de comprimento igual a 1. c(3. adicionando um caracter a um vetor num´ erico este ´ e transformado em um vetor alfanum´ erico.4 0.5 0.2 0. len = 11) > x5 [1] 0.5] [1] 0.

sd = 10)) > x9 [1] 73 91 57 77 65 75 59 96 91 70 > sum(x9) [1] 754 > mean(x9) [1] 75.60 1. Max. vamos ver os comandos que podem ser usados para criar vetores para cada uma das trˆ es colunas iniciais deste arquivo. a seguir.50 2.25 0.00 0. each = 4). 57. > > > > rep(1:4.00 > x2^(1:3) [1] 1 9 216 27 Vetores s˜ ao uma estrutura de dados sobre a qual podemos aplicar fun¸ c˜ oes como por exemplo as que fornecem medidas estat´ ısticas. Os demais reproduzem a segunda e terceira coluna do arquivo de dados.Introdu¸ c˜ ao ao R [1] 2 5 9 5 8 12 > (1:3) * x2 [1] 1 6 18 > x2/(1:6) [1] 1.4 > var(x9) [1] 184. 4)) rep(rep(1:3. 1st Qu.9333 > min(x9) [1] 57 > max(x9) [1] 96 > summary(x9) Min. rep(12. Median Mean 3rd Qu. each = 12) rep(1:4.50 96. A primeira coluna pode ser obtida com um dos dois comandos mostrados inicialmente. Clique aqui para ver um arquivo de dados.25 74.00 75. mean = 70.00 66. 12) .00 > fivenum(x9) [1] 57 65 74 91 96 Criando vetores com elementos repetidos As fun¸ c˜ oes rep() e seq() do R s˜ ao u ´teis para criar vetores de dados que seguem um certo padr˜ ao.40 87. 4) rep(1:4.round(rnorm(10.00 1. > x9 <.

2.numeric(ind. No exemplo abaixo vemos como selecionar os 3 primeiros elementos do vetor x9 criado anteriormente e depois os elementos em posi¸ c˜ ao par no vetor (segundo. > ind. sep = "") [1] "fulano2" > paste(letters[1:8].Introdu¸ c˜ ao ao R 28 Vetores l´ ogicos e sele¸ c˜ ao de elementos Como dito anteriormente os colchetes [] s˜ ao usados para selecionar elementos de um vetor. sep = "") . A seguir mostramos que podemos criar um vetor l´ ogico ind. oitavo e d´ ecimo) > x9[1:3] [1] 73 91 57 > x9[2 * (1:5)] [1] 91 77 75 96 70 Entretanto. 2) [1] "fulano 2" > paste("fulano". H´ a tamb´ em algumas fun¸ c˜ oes para cria¸ c˜ ao autom´ atica. > paste(nomes. a sele¸ c˜ ao de elementos ´ e mais geral podendo atender a crit´ erios definidos pelo usu´ ario. > nomes <. 2.LETTERS[11:20] > let10 [1] "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" Uma fun¸ c˜ ao particularmente u ´til para criar vetores de caracteres ´ e paste().72) [1] 1 1 0 1 0 1 0 1 1 0 > x10 <.72 <.72] > x10 [1] 73 91 77 75 96 91 TRUE FALSE TRUE TRUE FALSE Vetores de caracteres Vetores de caracteres tamb´ em s˜ ao criados por c() com elementos entre aspas. "beltrano". sexto. O vetor pode ser ainda convertido para o formato de uma vari´ avel indicadora (”dummy”). "cicrano") > nomes [1] "fulano" "beltrano" "cicrano" > let5 <.72 que indica se cada valor de x9 ´ e ou n˜ ao maior que 72.x9 > 72 > ind.x9[ind.72 [1] TRUE TRUE FALSE TRUE FALSE > as. 1:3) [1] "fulano 1" "beltrano 2" "cicrano 3" > paste("fulano".c("fulano". quarto. Examine os seguintes comandos.letters[1:5] > let5 [1] "a" "b" "c" "d" "e" > let10 <.

. sep = ""). Note que neste caso. Considere criar um vetor com elementos: T1 T1 T1 T1 T2 T2 T2 T2 T3 T3 T3 29 > rep(paste("T". "SC".factor(estados) > estados [1] PR SC RS Levels: PR RS SC > class(estados) [1] "factor" > attributes(estados) $levels [1] "PR" "RS" "SC" $class [1] "factor" Um fato relevante a respeito da manipula¸ c˜ ao de fator ´ e que uma sele¸ c˜ ao de parte dele que exclua um certo valor n˜ ao exclui este valor dos atributos do vetor como no caso abaixo. 4. O primeiro simplesmente guarda os seus elementos enquanto o segundo possui atributos que nesta caso incluem os n´ ıveis do fator. s˜ ao registrados os “n´ ıveis” (levels) do fator.Introdu¸ c˜ ao ao R [1] "a2" "b2" "c2" "d2" "e2" "f2" "g2" "h2" Vejamos ainda mais um exemplo. ao criar um vetor de indicadores de “tratamentos” em uma an´ alise de experimentos devemos declarar este vetor como um “fator”. c(4. c(4. diferentemente do anterior. Entretanto h´ a mais um tipo importante de objeto: os fatores.c("PR". 4. "RS") > estados [1] "PR" "SC" "RS" > class(estados) [1] "character" > attributes(estados) NULL > estados <. > estados <. 3))) [1] T1 T1 T1 T1 T2 T2 T2 T2 T3 T3 T3 Levels: T1 T2 T3 ´ importante notar a diferen¸ E ca entre um vetor de caracteres e um vetor que seja um fator que s˜ ao objetos de classes diferentes. Nos comandos abaixo esta distin¸ c˜ ao fica mais clara onde um vetor ´ e criado inicialmente como num´ erico e depois convertido para fator. > factor(rep(paste("T". Portanto revisitando o exemplo visto anteriormente temos que uma forma mais adequada de usar o vetor como vari´ avel indicadora de tratamentos ´ e defini-lo como um fator. 1:3. 1:3. Por exemplo. 3)) [1] "T1" "T1" "T1" "T1" "T2" "T2" "T2" "T2" "T3" "T3" "T3" Fatores Comentamos anteriormente que os vetores podem ser num´ ericos ou de caracteres. sep = "").

No pr´ oximo exemplo vemos um vetor inicialmente definido como de caracteres e a diferen¸ ca entre defini-lo como n˜ ao-ordenado ou ordenado.. "SC".c("SC". "SP".. "PR". "baixo". ord=T) ou ordered().factor(est. levels = c("PR". "medio") > factor(grau) [1] medio baixo medio alto baixo baixo alto medio alto medio Levels: alto baixo medio > factor(grau. Note no exemplo abixo o que acontece com o valor "MG" em cada caso. > grau <.sel [1] PR SC Levels: PR RS SC 30 Da mesma forma pode-se criar um vetor e definir para eles n´ ıveis. "medio". "MG". "PR". "RS". "SP". A ordena¸ c˜ ao segue a ordem alfab´ etica a menos que uma ordena¸ c˜ ao diferente seja definida pelo usu´ ario no argumento levels. Note ainda ´ e pode-se usar duas fun¸ c˜ oes diferentes para definir fatores ordenados: factor(. + "medio". "medio". "PR". "SC". "baixo". "alto". ord = T.sel <.estados[-3] > estados. mesmos que estes n´ ıveis n˜ ao estejam entre os elementos atualmente existentes no vetor.c("medio". "alto")) . "RS". "RJ". "alto". "ES") > est [1] "SC" "PR" "SC" "PR" "RS" "SP" "RS" "SP" "ES" "PR" "RJ" "ES" > table(est) est ES PR RJ RS SC SP 2 3 1 2 2 2 > sesul <. "ES". + "RJ".Introdu¸ c˜ ao ao R > estados.. "baixo". "alto". ord = T) [1] medio baixo medio alto baixo baixo alto medio alto medio Levels: alto < baixo < medio > ordered(grau) [1] medio baixo medio alto baixo baixo alto medio alto medio Levels: alto < baixo < medio > factor(grau. > est <. "RS". + "ES")) > sesul [1] SC PR SC PR RS SP RS SP ES PR RJ ES Levels: PR SC RS MG SP RJ ES > table(sesul) sesul PR SC RS MG SP RJ ES 3 2 2 0 2 1 2 Fatores Ordenados Um tipo especial de fator ´ e dado pelos fatores ordenados que s˜ ao fatores para os quais preserva-se a ordena¸ c˜ ao natural dos n´ ıveis. "SP". levels = c("baixo".

ordenar os elementos ((sort()) e a posi¸ c˜ ao de cada elemento no vetor ordenado e encontrar o ”rank”dos elementos (rank()). > vec <. "medio".min(vec) [1] 6 Outra opera¸ c˜ ao ´ e a remo¸ c˜ ao de elementos de vetores atrav´ es de ´ ındices negativos.Introdu¸ c˜ ao ao R [1] medio baixo medio alto baixo baixo alto medio alto Levels: baixo < medio < alto > ordered(grau. respectivamente.round(rnorm(7. "alto")) [1] medio baixo medio alto baixo baixo alto medio alto Levels: baixo < medio < alto medio 31 medio Mais algumas opera¸ c˜ oes com vetores Considere o vetor vec obtido como se segue.5 2.0 3.0 5. As func ¸˜ oes abaixo mostram como inverter a ordem dos elementos do vetor (rev()).0 > vec%%5 [1] 3 1 3 3 1 3 1 > vec%/%5 [1] 16 13 16 14 16 12 14 A fun¸ c˜ ao which retorna a posi¸ c˜ ao do(s) elemento(s) que obedece a certo crit´ erio. > vec [1] 83 66 83 73 81 63 71 > vec[-5] [1] 83 66 83 73 63 71 .5 4. m = 70.max(vec) [1] 1 > which. sd = 10)) > vec [1] 83 66 83 73 81 63 71 > rev(vec) [1] 71 63 81 73 83 66 83 > sort(vec) [1] 63 66 71 73 81 83 83 > order(vec) [1] 6 2 7 4 5 1 3 > vec[order(vec)] [1] 63 66 71 73 81 83 83 > rank(vec) [1] 6. > which(vec > 70) [1] 1 3 4 5 7 > which.0 1. levels = c("baixo". o resto e a parte inteira de uma divis˜ ao.0 6. As opera¸ c˜ oes %% e %% fornecem.

leg. > m1 <.br/Rtutorial/subscrip.br/Rtutorial/logicals.br/Rtutorial/vectors. Por “default” a matrix ´ e preenchida por colunas e o argumento opcional byrow=T inverte este padr˜ ao. ncol = 3. 2] [1] 6 .html Vetores L´ ogicos: http://www. 2] [1] 5 > m1[2. byrow = T) [.] 4 8 12 > matrix(1:12.2 Matrizes Matrizes s˜ ao montadas a partir da reorganiza¸ c˜ ao de elementos de um vetor em linhas e colunas.br/Rtutorial/charfacs.] 10 11 12 > length(m1) [1] 12 > dim(m1) [1] 4 3 > nrow(m1) [1] 4 > ncol(m1) [1] 3 > m1[1. Os comandos a seguir ilustram todas estas funcionalidades.2] [.1] [.] 4 5 6 [3.ufpr. A sele¸ c˜ ao de elementos ou submatrizes ´ e feita usando [.leg.ufpr.matrix(1:12.2] [.ufpr. ncol = 3) > m1 [.Introdu¸ c˜ ao ao R > vec[-(2:4)] [1] 83 81 63 71 Para mais detalhes sobre vetores vocˆ e pode consultar ainda as seguinte p´ aginas: Vetores: http://www.html 32 6.] sendo que antes da v´ ırgula indica-se a(s) linha(s) e depois a(s) coluna(s) a serem selecionadas.ufpr.html Caracteres e fatores: http://www.leg.html Aritm´ etica de vetores: http://www.] 7 8 9 [4.] 3 7 11 [4. Cada um destes componentes da matrix ´ e um vetor de nomes.3] [1.leg.ufpr.3] [1.] 1 2 3 [2.1] [.br/Rtutorial/vecarit.] 2 6 10 [3.html ´ Indices http://www. Opcionalmente matrizes podem ter nomes associados ` as linhas e colunas (”rownames”e ”colnames”).leg.] 1 5 9 [2.

] 5 10 > m3 <. "L3"). "L4"). 6:10) > m2 [.] 5 6 33 Matrizes s˜ ao muitas vezes utilizadas para armazenar frequˆ encias de cruzamentos entre vari´ aveis. c("C1". "L2".cbind(1:5. ] C1 C2 C3 L1 1 5 9 L3 3 7 11 > m2 <.2] [1. .Introdu¸ c˜ ao ao R > m1[.] 1 6 [2. Desta forma ´ e comum surgir a necessidade de obter os totais marginais. o que pode ser diretamente obtido com margin. "C3")) > dimnames(m1) [[1]] [1] "L1" "L2" "L3" "L4" [[2]] [1] "C1" "C2" "C3" > m1[c("L1".cbind(1:5.] 2 7 [3.] 2 6 [3. ] [1] 3 7 11 > m1[1:2. 2] [1] 5 6 7 8 > m1[3. isto ´ e a soma dos elementos das linhas e/ou colunas das matrizes.] 4 6 [5. 3). 2:3] [.1] [.] 4 9 [5.] 5 9 [2. ] C1 C2 C3 L1 1 5 9 L3 3 7 11 > m1[c(1.] 3 6 [4.2] [1.1] [. "C2".] 3 8 [4. No caso de matrizes estas opera¸ c˜ ao produz o mesmo resultado que outras fun¸ c˜ oes conforme mostramos a seguir. 6) > m3 [.table().] 1 6 [2.1] [.] 6 10 > dimnames(m1) NULL > dimnames(m1) <.2] [1.list(c("L1". "L3".

] 2 4 6 > m5 [.] 20 40 60 > m4 + m5 [.3] [1.1] [. 1.] 10 30 50 [2.2] [. nc = 3) > m5 <.] 18 36 54 .matrix(1:6.matrix(10 * (1:6).2] [.] 40 160 360 > m5 .table(m1.m4 [.] 9 27 45 [2. Existem diversas opera¸ c˜ oes sobre matrizes e vamos apresentar apenas algumas aqui. margin = 1) L1 L2 L3 L4 15 18 21 24 > apply(m1.table(m1.1] [.] 11 33 55 [2. margin = 2) C1 C2 C3 10 26 42 > apply(m1.] 10 90 250 [2.2] [. 2.] 1 3 5 [2.3] [1.3] [1. > m4 <. sum) C1 C2 C3 10 26 42 > colSums(m1) C1 C2 C3 10 26 42 34 Opera¸ c˜ oes com matrizes Opera¸ c˜ oes com matrizes s˜ ao feitas diretamente assim como no caso de vetores. sum) L1 L2 L3 L4 15 18 21 24 > rowSums(m1) L1 L2 L3 L4 15 18 21 24 > margin.Introdu¸ c˜ ao ao R > margin. A ”lei da reciclagem”permanece v´ alida.1] [.1] [.2] [.1] [. nc = 3) > m4 [.] 22 44 66 > m4 * m5 [.2] [. Note que as opera¸ c˜ oes abaixo s˜ ao todas realizadas elemento a elemento.3] [1.3] [1.

3 39. .1 23.1] [. Por exemplo.3 18. -2. 15.matrix(c(1. nc = 3) > vec <.4 Nos comandos abaixo mostramos como entrar com os dados e como obter os resultados de duas formas: (i) usando opera¸ c˜ oes de matrizes de forma ”ineficiente”e usando uma forma computacionalmente mais adequada de obter o mesmo resultado. 5. 3.] 10 10 10 35 A multiplica¸ c˜ ao de matrizes ´ e feita usando o operador %*%.2] [1.8 17.538462 Uma outra fun¸ c˜ ao muito u ´til para c´ alculos matriciais ´ e crossprod() para produtos cruzados: crossprod(X) retorna X ′X crossprod(X. 1. a solu¸ c˜ ao do sistema:   x + 3y − z = 10 5x − 2y + z = 15  2x + y − z = 7 pode ser obtida com: > mat <. 7) > solve(mat.] 10 10 10 [2.9 31.Introdu¸ c˜ ao ao R > m5/m4 [. 2.] 170 390 [.6 15.] 110 250 [3. Deve ser dada preferˆ encia a esta fun¸ c˜ ao sempre que poss´ ıvel pois ´ e mais precisa e r´ apida do que o correspondente produto matricial com transposi¸ c˜ ao do objeto do primeiro argumento. -1). Tabela 1: Valores da vari´ avel preditora e resposta para uma regress˜ ao linear simples.615385 3. Como exemplo vamos considerar as vari´ aveis preditora e resposta com valores fornecidos na Tabela 6. A fun¸ c˜ ao t() faz transposi¸ c˜ ao e a invers˜ ao ´ e obtida com solve(). 1. -1.3] [1.2 35.2] [.] 50 110 [2.c(10. 1 2 3 4 5 6 7 8 9 10 13.Y) retorna X ′Y .2 e considere obter os coeficientes da regress˜ ao linear dados por: ˆ = (X ′X )−1 X ′y .3] 170 390 610 A fun¸ c˜ ao solve() na verdade ´ e mais geral e fornece a solu¸ c˜ ao de um sistema de equa¸ c˜ oes lineares.1] [. O pacote MASS fornece ginv() para obten¸ c˜ ao de inversa generalizada (inversa de Moore-Penrose) > t(m4) %*% m5 [. vec) [1] 3.4 16.5 22. β (1) onde X ´ e a matrix com os valores da vari´ avel X acrescida de uma coluna de 1’s e y s˜ ao os valores da vari´ avel resposta.307692 3.

18.3] [. mas isto n˜ ao ser´ a discutido neste ponto.] 1 4 7 10 [2. dim = c(3.] 15 18 21 24 Examine agora os resultados dos seguintes comandos para selecionar e operar elementos do ”array”. em um array os elementos podem ser organizados em um n´ umero arbitr´ ario de dimens˜ oes.] 8. > ar1[.] 8.2] [. como por exemplo usando a decomposi¸ c˜ ao QR. 2.4] [1.4) > solve(t(X) %*% X) %*% t(X) %*% y [.1] [.3 Arrays O conceito de array generaliza a id´ eia de matrix. existem formas ainda mais computacionalmente eficientes de obter o resultado acima no R.9.] 2 5 8 11 [3.06 [2.1. No R um array ´ e definido utilizando a fun¸ c˜ ao array(). 2:3. ] .6.78 > solve(crossprod(X). 35.2.06 [2.] 13 16 19 22 [2.] 2.1] [.5.4] [1. 17.c(13.array(1:24. 2)) > ar1 . Para mais detalhes sobre matrizes consulte a p´ agina: Matrizes 6.] 3 6 9 12 .3] [. > ar1 <. 39. 15. 2 [.8. . 31.3. 22. 1 [.78 Notas: 36 1. y)) [. crossprod(X.] 14 17 20 23 [3.cbind(1. 4. na pr´ atica para ajustar regress˜ oes no R o usu´ ario n˜ ao precisa fazer opera¸ c˜ oes como a indicada pois j´ a existem fun¸ c˜ oes no R (neste caso lm()) que efetuam o ajuste.Introdu¸ c˜ ao ao R > X <. 23.1] [1. . Enquanto em uma matrix os elementos s˜ ao organizados em duas dimens˜ oes (linhas e colunas).2] [.] 2. Defina um array com o comando a seguir e inspecione o objeto certificando-se que vocˆ e entendeu como arrays s˜ ao criados.4. 1:10) > y <. 16.3.1] [1.

Survived = No Sex Class Male Female 1st 0 0 2nd 0 0 3rd 35 17 Crew 0 0 . 1 [. .] 17 20 [3. .Introdu¸ c˜ ao ao R . Veja agora um exemplo de dados j´ a inclu´ ıdo no R no formato de array. sep = ""). > dimnames(ar1) NULL > dimnames(ar1) <. paste("col". Age = Adult. "M´ edio".] 16 19 [2. rode e inspecione os exemplos contidos na documenta¸ c˜ ao. .1] [. . c("Masculino". Age = Child.] 6 9 .2] [1. 1]) [1] 48 Podemos atribuir nomes ` as dimens˜ oes de um array. Survived = No Sex Class Male Female 1st 118 4 2nd 154 13 .1] [. 1] [1] 2 5 8 11 > sum(ar1[. + 1:4. .2] [1.] 4 7 [2.list(c("Baixo". .] 18 21 > ar1[2. 2 [. 1]) [1] 78 > sum(ar1[1:2. . "Alto"). "Feminino")) 37 Inspecione o “help” da fun¸ c˜ ao array (digite help(array)).] 5 8 [3. Para “carregar” e visualizar os dados digite: > data(Titanic) > Titanic .

1. quantas pessoas havia na tripula¸ c˜ ao (crew)? > sum(Titanic[4. Age = Adult. sum) No 1490 Yes 711 4. . quantas pessoas havia no total? > sum(Titanic) [1] 2201 2. quantas pessoas sobreviveram e quantas morreram? > apply(Titanic. 2]) [1] 57 . Survived = Yes Sex Class Male Female 1st 57 140 2nd 14 80 3rd 75 76 Crew 192 20 Para obter maiores informa¸ c˜ oes sobre estes dados digite: help(Titanic) Agora vamos responder ` as seguintes perguntas. . . ]) [1] 885 3. mostrando os comandos do R utilizados sobre o array de dados. . 1. . Survived = Yes Sex Class Male Female 1st 5 1 2nd 11 13 3rd 13 14 Crew 0 0 . Age = Child. quantas crian¸ cas sobreviveram? > sum(Titanic[. 4.Introdu¸ c˜ ao ao R 3rd Crew 387 670 89 3 38 .

Class 1st 2nd 3rd Crew 325 285 706 885 > margin. > apply(Titanic.7319149 . sum)/apply(Titanic. 2]. margin.table(Titanic. > margin. margin = c(2. sum) Male Female 1731 470 > apply(Titanic[. 2].table(Titanic. .table(Titanic.table(Titanic. Por exemplo mostramos a seguir como obter o total de sobreviventes e n˜ ao sobreviventes.Introdu¸ c˜ ao ao R 39 5.table(Titanic. 2. sum) Male Female 367 344 > 100 * apply(Titanic[. . > margin. 2.table(margin.2120162 Female 0. Survived No Yes 1490 711 margin = 1) margin = 2) margin = 3) margin = 4) Esta fun¸ c˜ ao admite ainda ´ ındices m´ ultiplos que permitem outros resumos da tabela de dados. depois dentre estes os que sobreviveram e depois obter as percentagens pedidas.table() poderia ser utilizada para obter os totais marginais para cada dimens˜ ao do array de dados. 4)). sum) Male Female 21. margin = c(2.7879838 0. quais as propor¸ c˜ oes de sobreviventes entre homens e mulheres? Vamos fazer por partes obtendo primeiro o n´ umero de homens e mulheres. Age Child Adult 109 2092 > margin.19149 Note-se ainda que assim como em matrizes. margin = 1) Survived Sex No Yes Male 0. separados por sexo e depois as porcentagens de sobreviventes para cada sexo.2680851 0. 2. 2. . fornecendo uma maneira alternativa ` a alguns dos comandos mostrados acima.20162 73. 4)) Survived Sex No Yes Male 1364 367 Female 126 344 > prop. .table(Titanic. Sex Male Female 1731 470 > margin.

sd = 2).19100 1 4 10.13010 3 15 13. 75.51120 2 9 14.36979 2 8 18. sd = 2). 82)) > d1 X Y 1 1 51 2 2 54 3 3 61 4 4 67 5 5 68 6 6 75 7 7 77 8 8 75 9 9 80 10 10 82 > names(d1) [1] "X" "Y" > d1$X [1] 1 2 3 4 5 6 7 8 9 10 > d1$Y [1] 51 54 61 67 68 75 77 75 80 82 > plot(d1) > plot(d1$X. 68.59282 3 12 13.57823 1 3 11. Desta forma podemos ter colunas de valores num´ ericos e colunas de caracteres no mesmo objeto.50729 1 6 14.35972 1 2 10. 67. + 14 + rnorm(5.data. > d1 <.36193 2 11 14..frame(Y = c(10 + rnorm(5. 77.data. ou num´ erico ou caracter.gl(3. 75.20450 2 10 20. 61. d1$Y) > d2 <.12779 3 14 13. matrizes e arrays for¸ cam todos os elementos a serem do mesmo ”tipo”i.Introdu¸ c˜ ao ao R 40 6. 5) > d2 Y lev 1 14. O ”data-frame”´ e uma estrutura semelhante ` a uma matriz por´ em com cada coluna sendo tratada separadamente.32687 3 13 14. 54. + 80. Note entretanto que dentro de uma mesma coluna todos elementos ainda ser˜ ao for¸ cados a serem do mesmo tipo. sd = 2))) > d2$lev <.35594 3 . Y = c(51.4 Data-frames Vetores.frame(X = 1:10.e.44532 1 5 12.57557 2 7 16. 16 + rnorm(5.

+ ncol = 3)) > lis1 $A [1] 1 2 3 4 5 6 7 8 9 10 $B .5 Listas Listas s˜ ao estruturas gen´ ericas e flex´ ıveis que permitem armazenar diversos formatos em um u ´nico objeto.list(A = 1:10.82 12. 10.36 --------------------------------------------------------------INDICES: 2 Min.20 14.Introdu¸ c˜ ao ao R > by(d2$Y. C = matrix(1:9. 1st Qu. summary) INDICES: 1 Min.51 14.36 --------------------------------------------------------------INDICES: 3 Min. Median Mean 3rd Qu.45 10. B = "THIS IS A MESSAGE". > expand.71 14.13 14. Median Mean 3rd Qu.expand.grid(1:3.58 16.36 13. 4:5) > d3 Var1 Var2 1 1 4 2 2 4 3 3 4 4 1 5 5 2 5 6 3 5 41 Na cria¸ c˜ ao de data-frame expand. Median Mean 3rd Qu. d2$lev.59 > d3 <.80 18.19 11.58 11.grid() pode ser muito u ´til gerando autimaticamente combina¸ c˜ oes de valores. Max. 14. 1:2) Var1 Var2 1 1 1 2 2 1 3 3 1 4 1 2 5 2 2 6 3 2 Para mais detalhes sobre data-frame consulte a p´ agina: Data-frames 6.51 20. Max.13 13. 1st Qu. 13. > lis1 <.grid(1:3.33 13.37 16. 1st Qu. Max.

05 ³.4424 0.] 3 6 9 > lis2 <.88 4.86 4.0667 1.] 2 5 8 [3.9 on 1 and 8 DF.³ 0.01 ³*³ 0.442 > is.³ 0.5045 -0.88 on 8 degrees of freedom Multiple R-squared: 0.579e-06 > anova(lis2) Analysis of Variance Table Response: Y Df Sum Sq Mean Sq F value Pr(>F) X 1 977.001 ³**³ 0. data = d1) Residuals: Min 1Q Median -2.09e-09 *** X 3.1 > names(lis2) ³ ³ 1 .9674 25. codes: 0 ³***³ 0.1 ³ ³ 1 Residual standard error: 2.3076 Max 4.65 977. Error t value Pr(>|t|) (Intercept) 50. Adjusted R-squared: 0.list(lis2) [1] TRUE > class(lis2) [1] "lm" > summary(lis2) Call: lm(formula = Y ~ X.45 6.58e-06 *** --Signif.2788 Coefficients: Estimate Std.9364.2212 42 3Q 2.9285 F-statistic: 117. data = d1) > lis2 Call: lm(formula = Y ~ X.579e-06 *** Residuals 8 66.lm(Y ~ X.65 117.] 1 4 7 [2.3171 10.001 ³**³ 0. p-value: 4.05 ³.01 ³*³ 0.9515 -2.3] [1.067 3. data = d1) Coefficients: (Intercept) X 50.Introdu¸ c˜ ao ao R [1] "THIS IS A MESSAGE" $C [. codes: 0 ³***³ 0.1] [.29 --Signif.2] [.35 8.

"Joao". o colchete simples ([ ]) retorna uma parte da lista.1636364 0. of Freedom 2 12 Residual standard error: 1.7212121 4. data = d2) Terms: lev Residuals Sum of Squares 63.2] [1. Para listas h´ a duas op¸ c˜ oes para se selecionar elementos: colchetes [ ] ou colchetes duplos [[ ]].42251 39.9515152 0.³ 0.797 3.6060606 3.Introdu¸ c˜ ao ao R [1] "coefficients" "residuals" "effects" "rank" [6] "assign" "qr" "df.] 3 6 > lis1[1] . retorna um objeto que ainda ´ e uma lista.2787879 8 9 10 -2.423 31.1] [.316 --Signif.001 ³**³ 0.1 43 "fitted.6060606 -1. Examine o exemplo a seguir.] 1 4 [2. + nc = 2)) > lis1 $nomes [1] "Pedro" "Joao" "Maria" $mat [.] 2 5 [3. > lis1 <.5090909 -2.residual" "xlevels" [11] "terms" "model" > lis2$pred NULL > lis2$res 1 2 3 4 5 6 -2.003285 ** Residuals 12 39.01 ³*³ 0.5618 0.821112 Estimated effects may be unbalanced > summary(lis3) Df Sum Sq Mean Sq F value Pr(>F) lev 2 63. codes: 0 ³***³ 0. Entretanto os resultados retornados por cada um destes ´ e diferente.values" "call" 7 2. mat = matrix(1:6.711 9. ou seja.0484848 -2. data = d2) > lis3 Call: aov(formula = Y ~ lev. "Maria").4909091 > plot(lis2) > lis3 <.list(nomes = c("Pedro".79740 Deg. Ou seja.aov(Y ~ lev. J´ a o colchete duplo ([[ ]]) retorna o objeto que est´ a na posi¸ c˜ ao indicada da lista.05 ³.8363636 ³ ³ 1 Uma lista ´ e portanto uma cole¸ c˜ ao de objetos.

1:2] 1 2 3 4 5 6 7 8 9 10 .] 3 6 > lis1[[2]] [. Entretanto s˜ ao pouco pr´ aticas para determinar qual o tipo de um objeto e retornam apenas um valor l´ ogico TRUE ou FALSE.*() mencionadas no in´ ıcio dasta sess˜ ao podem ser usadas para obter informa¸ c˜ oes sobre a natureza de um objeto.Introdu¸ c˜ ao ao R $nomes [1] "Pedro" "Joao" > lis1[2] $mat [.. lm glm plot plot. > str(x1) num 10 > str(estados) Factor w/ 3 levels "PR".$ : chr [1:4] "col1" "col2" "col3" "col4" .] 1 4 [2. Uma fun¸ c˜ ao mais rica em detalhes ´ e str() retorna informa¸ c˜ oes sobre a estrutura do objeto. rnorm e lines Nestes casos as fun¸ c˜ oes n˜ ao s˜ ao escritas em linguagem R (em geral est˜ ao escritas em C) e para visualizar o conte´ udo das fun¸ c˜ oes vocˆ e tem que examinar os arquivos do c´ odigo fonte do R. "dimnames")=List of 3 . o que pode sem muito u ´til quando se escreve fun¸ c˜ oes em R.] 2 5 [3.7 Que tipo de objeto eu tenho? As fun¸ c˜ oes do tipo is. d1 ´ e um data. max."SC": 1 3 2 > str(ar1) int [1:3. .] 1 4 [2. estado ´ e um fator om trˆ es n´ ıveis. 6.$ : chr [1:2] "Masculino" "Feminino" .$ : chr [1:3] "Baixo" "M´ edio" "Alto" . ar1 ´ e um array.] 2 5 [3...] 3 6 44 "Maria" 6.1] [."RS".2] [1.default Entretanto isto n˜ ao ´ e dispon´ ıvel desta forma para todas as fun¸ c˜ oes como por exemplo em min.2] [1..attr(*..1] [.6 Fun¸ c˜ oes O conte´ udo das fun¸ c˜ oes podem ser vistos digitando o nome da fun¸ c˜ ao (sem os parˆ enteses). 1:4.frame com duas vari´ aveis sendo uma delas de valores inteiros e a outra de valores num´ ericos e lis1 ´ e uma lista de dois elementos sendo o primeiro um vetor de caracteres e o segundo uma matrix de seis elementos e de dimens˜ ao 3 × 2. Nos exemplos a seguir vemos que a fun¸ c˜ ao informa sobre objecots que criamos anteriormente: x1 ´ e um vetor num´ erico.

of 2 variables: $ X: int 1 2 3 4 5 6 7 8 9 10 $ Y: num 51 54 61 67 68 75 77 75 80 82 > str(lis1) List of 2 $ nomes: chr [1:3] "Pedro" "Joao" "Maria" $ mat : int [1:3.4 9.8 Exerc´ ıcios 1.frame³: 10 obs. 1:2] 1 2 3 4 5 6 45 6.4 5.Introdu¸ c˜ ao ao R > str(d1) ³data. Mostrar comandos que podem ser usados para criar os objetos ou executar as instru¸ c˜ oes a seguir (a) o vetor [1] 4 8 2 (b) selecionar o primeiro e terceiro elemento do vetor acima (c) 10 (d) o vetor com a seq¨ uˆ encia de valores [1] -3 -2 -1 0 1 2 3 (e) o vetor com a seq¨ uˆ encia de valores [1] 2.4 4.4 10.4 6.4 (f) o vetor [1] (g) o vetor [1] 1 3 5 7 9 11 14 17 20 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 (h) o vetor de seq¨ uˆ encia repetida [1] 1 1 1 2 2 2 3 3 3 4 4 4 (i) o vetor de seq¨ uˆ encia repetida [1] 4 4 4 3 3 3 2 2 2 1 1 1 (j) o vetor de elementos repetidos [1] 1 2 3 1 2 3 1 2 3 1 2 3 (k) a seq¨ uˆ encia de valores [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 [28] 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 (l) o vetor [1] 11 10 9 8 7 6 5 4 3 2 1 .4 8.4 3.4 7.

. 4. Carregue o conjunto de dados com o comando data(HairEyeColor) e responda as seguintes perguntas fornecendo tamb´ em o comando do R para obter a resposta: (a) Qual a propor¸ c˜ ao de homens e mulheres na amostra? (b) Quantos s˜ ao os homens de cabelos pretos? (c) Quantas mulheres tem cabelos loiros? (d) Qual a propor¸ c˜ ao de homens e mulheres entre as pessoas ruivas? (e) Quantas pessoas tem olhos verdes? 6. . . .1/6 + . Fumante Idade Masculino Feminino Menor que 20 50 30 20 a 40 39 28 Maior que 40 37 36 (a) qual o n´ umero total de pessoas? N˜ ao Fumante Masculino Feminino 55 41 31 30 25 15 . Entre com os dados usando o tipo de objeto adequado e mostre os comandos para responder as perguntas abaixo. sendo i a linha e j a coluna. . A express˜ ao z<-rep(x. com x variando de 0 a 50.1/2 + 1/3 . . 3. (c) 1/(1+1/1!)2 + 1/(1+1/2!)2 + 1/(1+1/3!)2 + . (d) 1 . . .10) faz o vetor z igual a uma seq¨ uˆ encia de 10 vetores x. Mostre comando(s) para construir uma matriz 10 × 10 tal que as entradas s˜ ao iguais a i ∗ j . Considere a tabela de freq¨ uˆ encias a seguir. A fun¸ c˜ ao sum(x) retorna a soma dos elementos do vetor x. 5. (b) 1 + 1/22 + 1/42 + 1/62 + 1/82 + .Introdu¸ c˜ ao ao R (m) o vetor alfanum´ erico [1] "Parana" "Sao Paulo" "Minas Gerais" 46 (n) o vetor indicador de tratamentos [1] Trat_1 Trat_1 Trat_1 Trat_2 Trat_2 Trat_2 Trat_3 Trat_3 Trat_3 Trat_4 Trat_4 [12] Trat_4 Levels: Trat_1 Trat_2 Trat_3 Trat_4 (o) um vetor indicador de blocos [1] Bloco_1 Bloco_2 Bloco_3 Bloco_1 Bloco_2 Bloco_3 Bloco_1 Bloco_2 Bloco_3 Bloco_1 [11] Bloco_2 Bloco_3 Levels: Bloco_1 Bloco_2 Bloco_3 2. Construa um data-frame com uma tabela com trˆ es colunas: x. Use estas e outras fun¸ c˜ oes para calcular a soma dos 100 primeiros termos das s´ eries: (a) 1 + 1/2 + 1/3 + 1/4 + .1/4 + 1/5 . x2 e exp(x).

Introdu¸ c˜ ao ao R (b) quantos s˜ ao os fumantes e os n˜ ao fumantes? (c) quantos s˜ ao homens? (d) quantas mulheres s˜ ao n˜ ao fumantes? (e) quais as propor¸ c˜ oes de fumantes entre homens e mulheres? 47 .

4365 7. 50. + 202 Para obter a resposta devemos criar uma sequˆ encia de n´ umeros de 10 a 20 elevar ao quadrado cada valor deste vetor somar os elementos do vetor E estes passos correspondem aos seguintes comandos > (10:20) [1] 10 11 12 13 14 15 16 17 18 19 20 > (10:20)^2 [1] 100 121 144 169 196 225 256 289 324 361 400 > sum((10:20)^2) [1] 2585 Note que s´ o precisamos do u ´ltimo comando para obter a resposta. onde log ´ e o logar´ ıtmo neperiano.2 e 7. l = 101) > y1 <.2. Agora vamos resolver com apenas um comando: > sum(sqrt(log(10^(0:6)))) [1] 16.1 . > x1 <.(1/x1) * sin(x1) > plot(x1. type = "l") . y1.Introdu¸ c˜ ao ao R 48 7 7. mas ´ e sempre u ´til entender os comandos passo a passo! (b) log(1) + log(10) + log(100) + .seq(0. Vejamos alguns exemplos calculando as seguintes somas: (a) 102 + 112 + . + log(1000000). 1 sin(x) para 0 ≤ x ≤ 50 (a) f (x) = 1 − x (b) f (x) = √1 50π 1 (x − 100)2 ] para 85 ≤ x ≤ 115 exp[− 50 A id´ eia b´ asica ´ e criar um vetor com valores das abscissas (valores de x) e calcular o valor da fun¸ c˜ ao (valores de f (x)) para cada elemento da fun¸ c˜ ao e depois fazer o gr´ afico unindo os pares de pontos. Vejamos os comandos para o primeiro exemplo.1 Miscelˆ ania de funcionalidades do R O R como calculadora Podemos fazer algumas opera¸ c˜ oes matem´ aticas simples utilizando o R. .2 Gr´ aficos de fun¸ c˜ oes Para ilustrar como podemos fazer gr´ aficos de fun¸ c˜ oes vamos considerar cada uma das fun¸ c˜ oes a seguir cujos gr´ aficos s˜ ao mostrados nas Figuras 7. . . .

120.6 0.4 y1 0.0 0 0. y2. 50) Vejamos agora como obter o gr´ afico para a segunda fun¸ c˜ ao.(1/x) * sin(x). 115) . > plot(function(x) 1 .2 0. 0. l = 101) > y2 <. 85. type = "l") ou ainda: > plot(function(x) dnorm(x.100)^2) > plot(x2.function() conforme pode ser visto no comando abaixo que nada mais faz que combinar os trˆ es comandos acima em apenas um.seq(80.dnorm(x2. 5) > plot(x2. 100. y2. Note que este procedimento ´ e o mesmo que aprendemos para fazer esbo¸ cos de gr´ aficos a m˜ ao em uma folha de papel! H´ a ainda uma outra maneira de fazer isto no R utilizando plot. > x2 <.Introdu¸ c˜ ao ao R 49 0. 5). 100.2 10 20 x1 30 40 50 Figura 1: Gr´ afico da fun¸ c˜ ao dada em (a).02 * (x2 .(1/sqrt(50 * pi)) * exp(-0.8 1.0 1. type = "l") Note ainda que esta fun¸ c˜ ao ´ e a densidade da distribui¸ c˜ ao normal e o gr´ afico tamb´ em poderia ser obtido com: > y2 <.

7. cbind(x. 0).06 0. ty = "l") x <.x^2 plot(x.3 Integra¸ c˜ ao num´ erica 3 A fun¸ c˜ ao integrate() ´ e usada para integra¸ c˜ ao num´ erica em uma dimens˜ ao. Esta figura ´ e obtida com os seguinte comandos: > > > > > > x <. l = 100) x2 <.02 y2 0. 4. l = 100) x2 <. col = "gray") .function(x) x^2 > integrate(fx. x^2.3.00 80 0. 3.08 90 100 x2 110 120 Figura 2: Gr´ afico da fun¸ c˜ ao dada em (b).Introdu¸ c˜ ao ao R 50 0.seq(-3. -3. Como exemplo vamos considerar resolver a seguinte integral: I= −3 x2 dx.04 0. (2) Para resolver a integral devemos criar uma fun¸ c˜ ao no R com a express˜ ao da fun¸ c˜ ao que vamos integrar e esta deve ser passada para integrate() conforme este exemplo: > fx <.seq(-4. x2)).x^2 polygon(rbind(cbind(rev(x). 3) 18 with absolute error < 2e-13 A integral acima corresponde ` a´ area mostrada no gr´ afico da Figura 7.

6629523 with absolute error < 7. em particular para express˜ oes de derivadas que podem ser informadas para .p.100)^2) + } > integrate(fx. Por exemplo.6629523 7. 85. seja X v. 100. ´ e possivel obter alguns resultados simb´ olicos. 100.4 Matem´ atica simb´ olica no R Embora o R seja um programa predominantemente para opera¸ c˜ oes num´ ericas.Introdu¸ c˜ ao ao R 51 x^2 0 −4 5 10 15 −2 0 x 2 4 Figura 3: Gr´ afico onde a ´ area indicada corresponde ` a integral definida na equa¸ c˜ ao Equation 2.4e-15 > pnorm(105. 100. b ent˜ ao P (a < X < b) = a f (x)dx. 81) e portanto 1 1 2 f (x) = 9√2π exp{− 162 (x − 100) }.d.a. > fx <. Sabemos que para distribui¸ c˜ oes cont´ ınuas de probabilidades a integral est´ a associada a probabilidade em um intervalo.4e-15 > integrate(function(x) dnorm(x. Vejamos mais um exemplo.function(x) { + (1/(9 * sqrt(2 * pi))) * exp(-(1/162) * (x . 9) . 85. de uma vari´ avel cont´ ınua. 105) 0. 105) 0. 9).pnorm(85. 9) [1] 0.6629523 with absolute error < 7. com distribui¸ c˜ ao N (100. A probabilidade P (85 < X < 105) pode ser calculada das trˆ es formas diferentes que ir˜ ao retornar os memos resultados conforma mostrado a seguir. Seja f (x) uma f.

11. .dy <. n Calcule E = −nλ + ( n e o n´ umero de elementos do vetor 1 xi ) log(λ) − 1 log(xi !). 11). 15.. Calcule o valor das express˜ oes abaixo 2.dx <. onde n ´ x e λ = 10. Portanto podemos obter o valor de 5! com o comando gamma(6).D(f.quote(sin(x^2 + log(y + z))) > f sin(x^2 + log(y + z)) > df. "x") > df. (b) E = (π )2 + (2π )2 + (3π )2 + . z = 3)) [1] -1. Dica: o fatorial de um n´ umero pode ser obtido utilizando a fun¸ c˜ ao prod. y = 2.dx cos(x^2 + log(y + z)) * (2 * x) > df. list(x = 1. A forma b´ asica de utiliza¸ c˜ ao consiste em: (i) defina a express˜ ao desejada dentro de quote().5 φ 0 .dx. 11. ρ(h) = . + log( x+20 ). se h < φ 1 − 1. A documenta¸ c˜ ao help(D) fornece mais detalhes. Obtenha o gr´ afico das seguintes fun¸ c˜ oes: (a) f (x) = x12 (1 − x)8 para 0 < x < 1 h 3 h + 0. Vejamos um exemplo. . (iii) use eval() caso queira obter o valor num´ erico de uma determinada express˜ ao. z = 3)) [1] 0. y = 2. Por exemplo o valor de 5! ´ e obtido com o comando prod(1:5). (ii) use D() para obter a express˜ ao da derivada desejada informando a express˜ ao e o termo em rela¸ c˜ ao ao qual deseja-se derivar a express˜ ao. para x = 10 2 3 20 1. 14..723432 Existem programas computacionais especializados em matem´ atica simb´ olica dentre os quais destacam-se os projetos axiom e maxima.D(f. Γ(a + 1) = a!. 14. + (10π )2 (c) E = log(x + 1) + log( x+2 ) + log( x+3 ) + . H´ a ainda uma outra forma usando a fun¸ c˜ ao Gama e lembrando que para a inteiro. caso contr´ ario (b) Para φ = 4.dy cos(x^2 + log(y + z)) * (1/(y + z)) > eval(f. list(x = 1.5( φ ) .Introdu¸ c˜ ao ao R 52 algor´ ıtimos de otimiza¸ c˜ ao num´ erica. o programa axiom est´ a dispon´ ıvel em o programa maxima est´ a dispon´ ıvel em 7. 10.5073913 > eval(df. > f <.5 Exerc´ ıcios (a) Seja x = (12. "y") > df.

.1/22 + 1/32 .5 2.0 2.6 0. (b) 1 .5 2..0 2.. 1] e y = sin(x) ∗ exp(−x). Escreva a sequˆ encia de comandos para obter um gr´ afico x versus y .5 1.5 1. Escreva uma sequˆ encia de comandos no R para calcular a soma dos 80 primeiros termos das s´ eries: (a) 1 + 1/32 + 1/52 + 1/72 + 1/92 + .0 3.1/42 + 1/52 . Mostre os comandos para obter as seguintes sequˆ encias de n´ umeros 1 11 21 31 41 51 61 71 81 91 (b) 1 1 2 2 2 2 2 3 3 3 (c) 1.0 3.5 (a) 5. .5 3.5 1.2 3. (a) I1 = (b) I2 = 0.Introdu¸ c˜ ao ao R 53 3.5 f (x)dx ρ(h)dh 4..0 2. 6.5 2.1/62 + .5 3.0 3. Considerando as fun¸ c˜ oes acima calcule as integrais a seguir e indique a ´ area correspondente nos gr´ aficos das fun¸ c˜ oes. onde x ´ e um vetor com 100 valores igualmente espa¸ cados no intervalo [−1.5 3.

rep(c(5. > a3 <.rep(3. > a6 [1] 5 8 5 8 5 8 > a7 <. > a1 <. Quando os dados tem algum ”padr˜ ao” tal como elementos repetidos. 8). O formato mais adequado vai depender do tamanho do conjunto de dados.rep(c(5. Examine os seguintes exemplos. e se os dados j´ a existem em outro formato para serem importados ou se ser˜ ao digitados diretamente no R. os seguintes descreve como importar dados j´ a dispon´ ıveis eletronicamentede um arquivo texto. 23. A seguir s˜ ao descritas formas de entrada de dados com indica¸ ca ˜o de quando cada uma das formas deve ser usada.1 Entrando com dados diretamento no R Definindo vetores Podemos entrar com dados definindo vetores com o comando c() (”c” corresponde a concatenate) ou usando fun¸ c˜ oes que criam vetores. 34. 12. 56) > a2 [1] 23 56 34 23 12 56 Esta forma de entrada de dados ´ e conveniente quando se tem um pequeno n´ umero de dados. em outro sistema ou no pr´ oprio R. 56.c(23. 8) > a1 [1] 2 5 8 > a2 <. 5. Os trˆ es primeiros casos s˜ ao adequados para entrada de dados diretamente no R. > a7 [1] 5 5 5 8 8 8 6 7 8 9 10 50 60 70 80 90 100 3) each = 3) .1 8.c(2. Veja e experimente com os seguinte exemplos. 8).Introdu¸ c˜ ao ao R 54 8 Dados no R Pode-se entrar com dados no R de diferentes formas. 5) > a5 [1] 3 3 3 3 3 > a6 <. n´ umeros sequenciais podese usar mecanismos do R para facilitar a entrada dos dados como vetores.1:10 > a3 [1] 1 2 3 4 5 > a4 <.1.(1:10) * 10 > a4 [1] 10 20 30 40 > a5 <. 8.

frame()) ser´ a aberta uma planilha na qual os dados devem ser digitados. isto ´ e. Se voce precisar abrir novamente planilha com os dados. coloca o R em modo prompt onde o usu´ ario deve digitar cada dado seguido da tecla <ENTER>.3 Usando a fun¸ c˜ ao edit() O comando edit(data. por exemplo quando h´ a dados de mais de uma vari´ avel para serem digitados. suponha que o correto seja 25 no lugar de 35. Por exemplo. Portanto digitando a8 <. Pressionando este bot˜ ao a planilha ser´ a fechada e os dados ser˜ ao gravados no objeto indicado (no exemplo acima no objeto a8). Esta forma de entrada de dados ´ e adequada quando voce tem dados que n˜ ao podem ser armazenados em um u ´nico vetor.2 Usando a fun¸ c˜ ao scan() 55 Esta fun¸ c˜ ao lˆ e dados diretamento do console.30 > y [1] 11 24 25 29 30 30 8.1. aceitando inclusive endere¸ cos de URL’s (endere¸ cos da web) o que iremos mencionar me mais detalhes mais adiante.Introdu¸ c˜ ao ao R 8. Quando terminar de entrar com os dados note que no canto superior direito da planilha existe um bot˜ ao <QUIT>.25 > y [1] 11 24 25 29 39 47 Vejamos ainda um outro exemplo onde todo dado acima de 30 tem seu valor alterado para 30.edit(data. . No exemplo acima voce digitaria fix(a8). Para encerrar a entrada de dados basta digitar <ENTER> duas vezes consecutivas.1. para fazer corre¸ c˜ oes e/ou inserir mais dados use o comando fix(). Corrigindo e/ou alterando dados Suponha que tenhamos digitado algum dado errado que desejamos corrigir. > y[y >= 30] <. Para corrigir basta selecionar a posi¸ c˜ ao do dado atribuindo o valor correto > y[3] <. Veja o seguinte resultado: y <. Esta fun¸ c˜ ao pode tamb´ em ser usada para ler dados de um arquivo ou conex˜ ao.scan() #1: 11 #2: 24 #3: 35 #4: 29 #5: 39 #6: 47 #7: #Read 6 items > y [1] 11 24 35 29 39 47 Este formato ´ e mais ´ agil que o anterior e ´ e conveniente para digitar vetores longos. Data-frames s˜ ao o an´ alogo no R ` a uma planilha.frame()) abre uma planilha para digita¸ c˜ ao de dados que s˜ ao armazanados como data-frames.

Clique no link para visualizar o arquivo. Para que o R considere isto corretamente temos que inform´ a-lo disto com o argumento head=T.table() seja provavelmente a fun¸ c˜ ao mais utilizada existem outras que podem ser u ´teis e determinadas situa¸ c˜ oes. Alm disto os caracteres decimais est˜ ao separados por v´ ırgula.table.read.read. read.txt". head=T) ex02 Exemplo 3: Como primeiro exemplo considere importar para o R os dados deste arquivo texto.fwf() ´ e conveniente para ler ”fixed width formats” read. Note que este arquivo difere do anterior em um aspecto: os nomes das vari´ aveis est˜ ao na primeira linha.table("dadosfic. sendo que o R usa ponto pois ´ e um programa escrito em l´ ıngua inglesa.") ex03 Para maiores informa¸ c˜ oes consulte a documenta¸ c˜ ao desta fun¸ c˜ ao com ?read. Portanto para importar este arquivo usamos: ex02 <. se seus dados est˜ ao dispon´ ıveis em uma planilha eletrˆ onica como EXCEL ou similar. isto ´ e. sep=":". Agora copie o arquivo para sua ´ area de trabalho (working directory do R). dec=". voce pode na planilha escolher a op¸ c˜ ao <SALVAR COMO> e gravar os dados em um arquivo em formato texto. Embora read. A forma mais f´ acil de fazer isto ´ e usar dados em formato texto (arquivo do tipo ASCII).csv().2 Lendo dados de um arquivo texto Se os dados j´ a est˜ ao dispon´ ıveis em formato eletrˆ onico. Por exemplo.table("exemplo02.fortran() ´ e semelhante ` a anterior por´ em usando o estilo Fortran de especifica¸ c˜ ao das colunas scan() ´ e uma fun¸ c˜ ao internamente utilizadas por outras mas que tamb´ em pode se usada diretamente pelo usu´ ario. head=T.csv". voce pode importar os dados para o R sem a necessidade de digit´ a-los novamente. No R usa-se scan() mencionada anteriormente. Para importar este arquivo usamos: ex01 <. Note que este arquivo difere do primeiro em outros aspectos: al´ em dos nomes das vari´ aveis estarem na primeira linha.Introdu¸ c˜ ao ao R 56 8.txt") ex01 Exemplo 2: Como primeiro exemplo considere importar para o R os dados deste arquivo texto. ou ent˜ ao a fun¸ c˜ ao mais flex´ ıvel read.table() para ler os dados de um arquivo texto e armazenar no formato de uma data-frame.delim2() . Exemplo 1: Como primeiro exemplo considere importar para o R os dados deste arquivo texto. o mesmo ocorre para read. Agora copie o arquivo para sua ´ area de trabalho (working directory do R). read. j´ a foram digitados em outro programa.read.delim() e read. Agora copie o arquivo para sua ´ area de trabalho (working directory do R).table("gam01. os campos agora n˜ ao s˜ ao mais separados por tabula¸ c˜ ao e sim por :. Clique no link para visualizar o arquivo. Portanto para importar corretamente este arquivo usamos ent˜ ao os argumentos sep e dec: ex03 <. Clique no link para visualizar o arquivo.

3 Importando dados de outros programas ´ poss´ E ıvel ler dados diretamente de outros formatos que n˜ ao seja texto (ASCII). Al´ em disto ´ e comum surgir a necessidade de importar dados de planilhas eletrˆ onicas.data() para ”dumps”do S-PLUS read.systat() read. .: > read. Stata. Systat e Octave.mtp() para arquivos ”Minitab Portable Worksheet” read. Por exemplo os dados do Exemplo 1 poderiam ser lidos diretamente com o comando a seguir. Para mais detalhes consulte a documenta¸ c˜ ao de cada fun¸ c˜ ao e/ou o manual R Data Import/Export.ssd ou .txt") 8.br/~paulojus/dados/gam01. S-PLUS.xport() para ler do formato TRANSPORT do SAS e read.Introdu¸ c˜ ao ao R 57 Exemplo 4: As fun¸ c˜ oes permitem ler ainda dados diretamente dispon´ ıveis na web. SPSS. > require(foreign) [1] TRUE A seguir listamos (mas n˜ ao todas!) algumas destas fun¸ c˜ oes read. sem a necessidade de copiar primeiro os dados para algum local no computador do usu´ ario. Muitas fun¸ c˜ oes que permitem a importa¸ c˜ ao de dados de outros programas s˜ ao implementadas no pacote foreign. SAS. se o SAS estiver dispon´ ıvel no seu sistema e depois usa internamente read.octave() para dados do OCTAVE (um clone do MATLAB) Para dados do SAS h´ a ao menos duas alternativas: – O pacote foreign disponibiliza read.ufpr.sas7bdat) no formato TRANSPORT.table("http://www.ssd() pode escrever dados permanentes do SAS (.epiinfo() para arquivos .dbf() para arquivos DBASE read. Minitab.REC do Epi-Info read.dta() para dados do STATA read.leg.S() para arquivos do S-PLUS restore.get() que tamb´ em requer o SAS no sistema. Isto em geral ´ e mais eficiente e requer menos mem´ oria do que converter para formato texto. H´ a fun¸ c˜ oes para importar dados diretamente de EpiInfo.spss() para dados do SPSS read. – O pacote Hmisc disponibiliza sas.xport() para ler os dados no R.

1 870 2 1.7 6.620 16. O pacote xlsReadWrite implementa tal funcionalidade para arquivos do tipo .Introdu¸ c˜ ao ao R 58 8. Por exemplo.6 5.2 800 mpg cyl disp hp drat wt qsec vs am gear carb 21.215 19.4 6 258 110 3.7 8 360 175 3. Vamos colocar aqui algumas op¸ c˜ oes para importar dados do MS-Excel para o R.61 1 1 4 1 21. embora seja poss´ ıvel exportar a partir destes aplicativos os dados para o formato texto para depois serem lidos no R.08 3. pode ser necess´ ario ou conveniente ler os dados diretamente destes formato. abaixo mostramos como carregar o conjunto mtcars que est´ a no pacote datasets e depois como localizar e carregar o conjunto de dados topo.90 2.22 1 0 3 1 O conjunto mtcars est´ a no pacote datasets que ´ e carregado automaticamente quando iniciamos o R.2 793 3 2.xls do MS-Excel. No momento que este material est´ a sendo escrito esta pacote est´ a implementado apenas para o sistema operacional Windows.4 6. A primeira chamada a seguir lista os conjuntos de dados dos pacotes carregados.460 20.320 18.3 6. portanto os dados est˜ ao prontamente dispon´ ıveis.2 800 6 1.46 0 1 4 4 21.4 Carregando dados j´ a dispon´ ıveis no R Para carregar conjuntos de dados que s˜ ao j´ a disponibilizados com o R use o comando data().0 6 160 110 3. Nestes caso. > data(mtcars) > head(mtcars) Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout Valiant > find("topo") character(0) > require(MASS) [1] TRUE > data(topo) > head(topo) x y z 1 0.02 0 0 3 2 18.5 Acesso a planilhas e bancos de dados relacionais ´ comum que dados estajam armazenados em planilhas eletrˆ E onicas tais como MS-Excel ou OpenOffice Spreadsheet.85 2.8 4 108 93 3.15 3.2 690 5 5. A segunda lista os conjuntos de dados de um pacote espec´ ıfico (no exemplo do pacote nlme. data() data(package="nlme") 8. possivelmente com read.90 2.76 3.1 755 4 3.440 17. Ao carregar os dados ´ e criado um objeto mtcars no seu ”workspace”.875 17.table(). .44 1 0 3 1 18. J´ a o conjunto topo est´ a no pacote MASS que n˜ ao ´ e automaticamente carregado ao iniciar o Re portanto deve ser carregado com require() para depois podermos acessar os dados.0 6 160 110 3.02 0 1 4 4 22.6 6. A fun¸ c˜ ao data() pode ainda ser usada para listar os conjutos de dados dispon´ ıveis.1 6 225 105 2.4 6.

RSQLite. Para importar os dados desta parte da planilha pode-se usar os comandos a seguir.xls")) > dados <. Alguns deles dispon´ ıveis por ocasi˜ ao da reda¸ c˜ ao deste texto s˜ ao: RODBC.csv(pipe("xls2csv planilha. Aguns exemplos s˜ ao Oracle.read.odbcConnectExcel("planilha. dentre outros. dentre outros.Introdu¸ c˜ ao ao R 59 Um outro pacote capaz de ler dados diretamente de planilhas ´ e o RODBC. No ambiente windows a fun¸ c˜ ao odbcConnectExcel() est´ a dispon´ ıvel para estabelecer a conex˜ ao.csv2(pipe("xls2csv planilha. > > > > > require(RODBC) xlscon <. O R possuiu ferramentas implementadas em pacotes para acesso a estes sistemas gerenciadores.xls")) O pacote gdata possui a fun¸ c˜ ao read. > dados <. RNetCDF. MySQL.read. RMySQL.csv2(). "Planilha1") odbcClose(xlsConnect) head(dados1) Em sistemas onde a linguagem Perl est´ a dispon´ ıvel e a estrutura de planilha ´ e simples sem macros ou f´ ormulas. Microsoft Access. Suponha que voce possua um arquivo de uma planilha MS-Excel j´ a no seu diret´ orio (pasta) de trabalho do R chamado planilha. pode-se usar a fun¸ c˜ ao xls2cvs combinada com read. .xls. DBI.xls() que encapsula op¸ c˜ oes mencionadas anteriormente.xls") dados1 <. PostgreSQL. Microsoft SQL server.csv() ou read. ROracle. sendo esta u ´ltima recomendada para dados com v´ ırgula como caractere separados de decimais. Para mais detalhes consulte o manual R Data Import/Export e a documenta¸ c˜ ao dos pacotes que implemental tal funcionalidade. que que esta planilha tenha os dados na aba Planilha1.sqlFetch(xlscon. RPostgreSQL. Estruturas de dados mais complexas s˜ ao tipicamente armazenadas em acronymDBMS’s (database management system) ou acronymRDBMS’s (ralational database management system). O Perl ´ e tipicamente instalado em sistemas Linux/Unix e tamb´ em livremente dispon´ ıvel para outros sistemas operacionais.

entramos com os dados na janela que vai aparecer na sua tela e quanto sa´ ımos do editor (pressionando o bot˜ ao QUIT) os dados ficam armazenados no objeto milsa. Precisamos informar para o programa ˜ que as vari´ aveis civil. Fazemos de maneira similar com as colunas Grau de Instru¸ c˜ ao e Regi˜ ao de Procedˆ encia. O que queremos aqui ´ e ver como. Os dados est˜ ao reproduzidos na tabela 9. Vari´ aveis podem ser classificadas da seguinte forma: qualitativas – nominais – ordinais quantitativas – discretas – cont´ ınuas e podem ser resumidas por tabelas.2. Portanto o formato ideal de armazenamento destes dados no R ´ e o data. No comando a seguir invocamos o editor. NAO s˜ ao num´ ericas e sim categ´ oricas.Introdu¸ c˜ ao ao R 60 9 9.frame()) > milsa > fix(milsa) Aten¸ c˜ ao: Note que al´ em de digitar os dados na planilha digitamos tamb´ em o nome que escolhemos para cada vari´ avel.1 An´ alise descritiva Descri¸ c˜ ao univariada Nesta sess˜ ao vamos ver alguns (mas n˜ ao todos!) comandos do R para fazer uma an´ alise descritiva de um conjunto de dados. A planilha digitada como est´ a ainda n˜ ao est´ a pronta.2. No R vari´ aveis . > milsa <. Para isto basta. gr´ aficos e/ou medidas.frame.edit(data. com vari´ aveis de diferentes tipos: categ´ oricas e num´ ericas (qualitativas e quantitativas). Ap´ os isto digitamos o nome do objeto (milsa) e podemos ver o conte´ udo digitado. Para digitar rapidamente estes dados ´ e mais f´ acil usar c´ odigos para as vari´ aveis categ´ oricas. Bussab e P.2 Descrevendo o conjunto de dados “milsa” de Bussab & Morettin O livro Estat´ ıstica B´ asica de W. Morettin traz no primeiro cap´ ıtulo um conjunto de dados hipot´ etico de atributos de 36 funcion´ arios da companhia “Milsa”. como mostra a tabela 9. na planilha. instrucao e regiao. Desta forma. Uma boa forma de iniciar uma an´ alise descritiva adequada ´ e verificar os tipode de vari´ aveis dispon´ ıveis. 9. Veja o livro para mais detalhes sobre este dados. Lembre-se que se voce precisar corrigir algo na digita¸ c˜ ao voce pode fazˆ e-lo abrindo a planilha novamente com o comando fix(milsa). clicar no nome da vari´ avel e escolher a op¸ c˜ ao CHANGE NAME e informar o novo nome da vari´ avel. no programa R: entrar com os dados fazer uma an´ alise descritiva Estes s˜ ao dados no ”estilo planilha”. Para entrar com estes dados no diretamente no R podemos usar o editor que vem com o programa. na coluna de estado civil vamos digitar o c´ odigo 1 para solteiro e 2 para casado.

59 34 10 10 solteiro 2o Grau 7.86 41 0 8 solteiro 1o Grau 7.00 26 3 2 casado 1o Grau 1 4.56 32 10 3 casado 1o Grau 2 5.25 36 5 4 solteiro 2o Grau 5.71 40 6 30 casado 2o Grau 2 15.13 30 5 16 solteiro 2o Grau 9.53 25 8 20 solteiro 2o Grau 10.12 33 6 12 solteiro 1o Grau 8.76 37 4 21 casado 2o Grau 1 11.75 33 7 35 casado 2o Grau 2 19.74 37 5 14 casado 1o Grau 3 8.69 29 8 29 casado 2o Grau 5 14.35 38 8 17 casado 2o Grau 1 9.95 44 2 15 casado 2o Grau 0 9.99 35 10 31 solteiro Superior 16.59 34 2 23 solteiro 1o Grau 12.23 32 5 26 casado 2o Grau 2 13.00 41 0 24 casado Superior 0 12.26 43 7 34 solteiro Superior 18.60 35 0 27 solteiro 1o Grau 13.77 31 7 18 casado 1o Grau 2 9.80 39 7 19 solteiro Superior 10.85 46 7 28 casado 2o Grau 0 14.44 23 6 11 casado 2o Grau 2 8.46 27 11 13 solteiro 2o Grau 8.66 28 0 7 solteiro 1o Grau 6.06 30 9 22 solteiro 2o Grau 11.Introdu¸ c˜ ao ao R 61 Tabela 2: Dados de Bussab & Morettin Funcion´ ario Est.22 31 5 32 casado 2o Grau 1 16. Civil Instru¸ c˜ ao No Filhos Sal´ ario Ano Mˆ es 1 solteiro 1o Grau 4.26 40 7 6 casado 1o Grau 0 6.40 48 11 36 casado Superior 3 23.73 20 10 5 solteiro 1o Grau 6.61 36 4 33 casado Superior 3 17.30 42 2 Regi˜ ao interior capital capital outro outro interior interior capital capital outro interior capital outro outro interior outro capital outro interior interior outro capital outro outro interior outro outro interior interior capital outro interior capital capital capital interior .39 43 4 9 casado 2o Grau 1 7.79 26 1 25 casado 2o Grau 2 13.

25 36 5 2 1 2 NA 5.12 33 6 1 1 1 NA 8.46 27 11 2 1 2 NA 8.76 37 4 1 2 2 1 11.59 34 10 2 1 2 NA 7.95 44 2 3 2 2 0 9.13 30 5 1 1 2 NA 9.69 29 8 1 2 2 5 14.79 26 1 3 2 2 2 13.39 43 4 2 2 2 1 7.35 38 8 3 2 2 1 9.44 23 6 3 2 2 2 8.26 43 7 2 1 3 NA 18.85 46 7 3 2 2 0 14.00 26 3 1 2 1 1 4.40 48 11 2 2 3 3 23.06 30 9 3 1 2 NA 11.26 40 7 3 2 1 0 6.00 41 0 3 2 3 0 12.53 25 8 1 1 2 NA 10.59 34 2 2 1 1 NA 12.56 32 10 2 2 1 2 5.74 37 5 3 2 1 3 8.23 32 5 1 2 2 2 13.77 31 7 2 2 1 2 9.Introdu¸ c˜ ao ao R 62 Tabela 3: Dados digitados usando c´ odigos para vari´ aveis civil instrucao filhos salario ano mes regiao 1 1 NA 4.61 36 4 1 2 3 3 17.80 39 7 3 1 3 NA 10.30 42 2 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 .66 28 0 1 1 1 NA 6.99 35 10 2 1 3 NA 16.73 20 10 3 1 1 NA 6.60 35 0 3 1 1 NA 13.86 41 0 1 1 1 NA 7.71 40 6 1 2 2 2 15.75 33 7 2 2 2 2 19.22 31 5 3 2 2 1 16.

+ "casado").50000 27. Para vari´ avel instru¸ cao usamos o argumento adicional ordered = TRUE para indicar que ´ e uma vari´ avel ordinal.56 32 10 2 3 3 2 1 2 5.58333 48. label = c("solteiro". + label = c("capital". "outro").41667 43.41667 41.16667 34. que vamos usar para redefinir nossas vari´ aveis conforme os comandos a seguir. levels = 1:2). os comandos acima poderiam ser substitu´ ıdos por: > milsa <.33333 [25] 32.factor(milsa$civil.00 26 3 1 2 2 2 1 1 4. > head(milsa) funcionario civil instrucao filhos salario ano mes regiao 1 1 1 1 NA 4.00000 44.41667 30.66667 26.25000 32.58333 37. label = c("capital". instrucao = factor(instrucao.73 20 10 3 5 5 1 1 NA 6. ord = T). 1.83333 23.25 36 5 2 4 4 1 2 NA 5.83333 [9] 34. "Superior").73 20 10 outro 5 5 solteiro 1oGrau NA 6.33333 38. ord = T) > milsa$regiao <.16667 + mes/12) 40.transform(milsa.56 32 10 capital 3 3 casado 1oGrau 2 5.83333 41. lev = c(2. Para gerar a vari´ avel idade em anos fazemos: > milsa <.58333 29.transform(milsa.33333 . lev = 1:3. idade = ano > milsa$idade [1] 26.26 40 7 3 6 6 2 1 0 6.41667 20.00 26 3 interior 2 2 casado 1oGrau 1 4.Introdu¸ c˜ ao ao R 63 categ´ oricas s˜ ao definidas usando o comando factor().50000 28.41667 35. Ao final inspecionamos as primeiras linhas do conjunto de dados digitando usando head(). label = c("solteiro".16667 35. + "outro").66667 37.50000 33. "interior". regiao = factor(regiao. lev = c(2. lev = 1:3.66667 [33] 43. "interior".75000 40. A seguir redefinimos a vari´ avel civil com os r´ otulos (labels) solteiro e casado associados aos n´ ıveis (levels) 1 e 2. civil = factor(civil. + levels = 1:2) > milsa$instrucao <.00000 46.58333 33.26 40 7 outro 6 6 casado 1oGrau 0 6. Na vari´ avel regiao codificamos assim: 2=capital. 1.25 36 5 capital 4 4 solteiro 2oGrau NA 5.00000 31.factor(milsa$instrucao.83333 36.00000 30. 3=outro. 3)) > head(milsa) funcionario civil instrucao filhos salario ano mes regiao 1 1 solteiro 1oGrau NA 4. Por exemplo. "casado").factor(milsa$regiao.91667 42.66 28 0 1 > milsa$civil <.66 28 0 interior Em vers˜ oes mais recentes do R foi introduzida a fun¸ c˜ ao transform() que pode ser usada alternativamente aos comandos mostrados acima para modificar ou gerar novas vari´ aveis. label = c("1oGrau". + "2oGrau". 1=interior. "Superior").58333 25. + "2oGrau". label = c("1oGrau".08333 36.91667 [17] 31.58333 39. Inicialmente inspecionamos as primeiras linhas do conjunto de dados. + 3))) Vamos ainda definir uma nova vari´ avel u ´nica idade a partir das vari´ aveis ano e mes que foram digitadas.

i. e dim() para ver o n´ umero de linhas (36 indiv´ ıduos) e colunas (9 vari´ aveis). obter resultados para as demais. gr´ aficos e medidas com o R. (ii) um gr´ afico de setores. A seguir mostramos como fazer an´ alises descritivas uni e bi-variadas. Inicialmente verificamos que o objeto milsa ´ e um data-frame. (iii) a ”moda”. usamos names() para ver os nomes das vari´ aveis. > is.frame(milsa) [1] TRUE > names(milsa) [1] "funcionario" "civil" [6] "ano" "mes" > dim(milsa) [1] 36 9 "instrucao" "regiao" "filhos" "idade" "salario" Como na sequˆ encia vamos fazer diversas an´ alises com estes dados usaremos o command attach() para anexar o objeto ao caminho de procura para simplificar a digita¸ c˜ ao. > civil [1] solteiro casado casado [9] casado solteiro casado [17] casado casado solteiro [25] casado casado solteiro [33] casado solteiro casado Levels: solteiro casado solteiro solteiro solteiro casado casado solteiro solteiro casado casado casado casado solteiro casado solteiro casado solteiro solteiro solteiro solteiro casado casado .data.milsa$ano + milsa$mes/12 64 Agora que os dados est˜ ao prontos podemos come¸ car a an´ alise descritiva. gr´ afico e/ou medidas que resumam a vari´ avel A partir destes resultados pode-se montar um resumo geral dos dados. que ´ e adequada para vari´ aveis deste tipo. Vari´ avel Qualitativa Nominal A vari´ avel civil ´ e uma qualitativa nominal. Sugerimos ainda que o leitor use o R para reproduzir os resultados mostrados no texto dos cap´ ıtulos 1 a 3 do livro de Bussab & Morettin relacionados com este exemplo. para cada uma das vari´ aveis individualmente: classificar a vari´ avel quanto a seu tipo: qualitativa (nominal ou ordinal) ou quantitativa (discreta ou cont´ ınua) obter tabela. > attach(milsa) NOTA: este comando deve ser digitado para que os comandos mostrados a seguir tenham efeito. Para isto vamos selecionar uma vari´ avel de cada tipo para que o leitor possa. A seguir vamos mostrar como obter tabelas.e. Desta forma podemos obter: (i) uma tabela de frequˆ encias (absolutas e/ou relativas). Inspecione os comandos mostrados a seguir e os resultados por eleas produzidos. 9.Introdu¸ c˜ ao ao R Uma outra forma de se obter o mesmo resultado seria: > milsa$idade <. o valor que ocorre com maior frequˆ encia.2. por analogia. Vamos primeiro listar os dados e checar se estao na forma de um fator.1 An´ alise Univariada A an´ alise univariada consiste basicamente em.

> civil.mo <.tb) civil solteiro casado 0.cube") Finalmente encontramos a moda para esta vari´ avel cujo valor optamos por armazenar no objeto civil. > instrucao [1] 1oGrau 1oGrau 1oGrau 2oGrau [9] 2oGrau 2oGrau 2oGrau 1oGrau [17] 2oGrau 1oGrau Superior 2oGrau [25] 2oGrau 2oGrau 1oGrau 2oGrau [33] Superior Superior 2oGrau Superior Levels: 1oGrau < 2oGrau < Superior 1oGrau 2oGrau 2oGrau 2oGrau 1oGrau 1oGrau 2oGrau 2oGrau 1oGrau 2oGrau 1oGrau Superior 1oGrau 2oGrau Superior 2oGrau .Introdu¸ c˜ ao ao R > is.tb == max(civil. > pie(table(civil)) NOTA: Em computadores antigos e de baixa resolu¸ c˜ ao gr´ afica (como por exemplo em alguns computadores da Sala A do LABEST/UFPR) o gr´ afico pode n˜ ao aparecer de forma adequada devido limita¸ c˜ ao de mem´ oria da placa de v´ ıdeo. > X11(colortype = "pseudo.5555556 O gr´ afico de setores ´ e adequado para representar esta vari´ avel conforme mostrado na Figura 9.table(civil) > civil.tb <.table(civil.factor(civil) [1] TRUE 65 A seguir obtemos frequˆ encias absolutas e relativas (note duas formas fiferentes de obter as frequˆ encias relativas.names(civil.2.1. > civil.mo.tb)] > civil.tb)[civil. Note ainda que optamos por armazenar as frequˆ encias absolutas em um objeto que chamamos de civil. Se este for o caso use o comando mostrado a seguir ANTES de fazer o gr´ afico.4444444 0.55556 > prop.mo [1] "casado" Vari´ avel Qualitativa Ordinal Para exemplificar como obter an´ alises para uma vari´ avel qualitativa ordinal vamos selecionar a vari´ avel instrucao.tb.tb civil solteiro casado 16 20 > 100 * table(civil)/length(civil) civil solteiro casado 44.44444 55.

tb <. Note que o comando median() n˜ ao funciona com vari´ aveis n˜ ao num´ ericas e por isto usamos o comando seguinte.table(instrucao. > instrucao.3333333 0.table(instrucao) > instrucao.tb instrucao 1oGrau 2oGrau Superior 12 18 6 > prop. > barplot(instrucao.1666667 O gr´ afico de setores n˜ ao ´ e adequado para este tipo de vari´ avel por n˜ ao expressar a ordem dos poss´ ıveis valores.5000000 0.tb) Para uma vari´ avel ordinal. > is.2. Usamos ent˜ ao um gr´ afico de barras conforma mostrado na Figura 9. .Introdu¸ c˜ ao ao R 66 solteiro casado Figura 4: Gr´ afico de setores para vari´ avel civil.tb) instrucao 1oGrau 2oGrau Superior 0.1. tais como a mediana conforme exemplificado a seguir. al´ em da moda podemos tamb´ em calcular outras medidas.factor(instrucao) [1] TRUE As tabelas de frequˆ encias s˜ ao obtidas de forma semelhante ` a mostrada anteriormente.

tb == max(instrucao.mo <. Note que esta deve ser uma vari´ avel num´ erica.numeric(milsa$instrucao))] [1] "2oGrau" Vari´ avel quantitativa discreta Vamos agora usar a vari´ avel filhos (n´ umero de filhos) para ilustrar algumas an´ alises que podem ser feitas com uma quantitativa discreta.numeric(filhos) 2 NA NA 3 3 0 NA 1 2 NA NA 1 NA NA 0 2 .tb)] > instrucao.names(instrucao.tb)[instrucao. e n˜ ao um fator.numeric(instrucao)) [1] 2 > levels(milsa$instrucao)[median(as.factor(filhos) [1] FALSE > is. > filhos [1] NA 1 2 NA NA 0 NA NA 1 NA [26] 2 NA 0 5 2 NA 1 3 NA 2 > is. > instrucao.mo [1] "2oGrau" > median(as.Introdu¸ c˜ ao ao R 67 0 5 10 15 1oGrau 2oGrau Superior Figura 5: Gr´ afico de barras para vari´ avel instrucao.

20 0.35 0.table(filhos) > filhos.1 o obtido com os comandos a seguir.tb <.prop. > plot(filhos.1. Outra possibilidade seria fazer gr´ aficos de frequˆ encias relativas e de prequˆ encias acumuladas conforme mostrado na Figura 9.tb) 0 0 1 2 filhos.tb) > filhos. .15 0.tb filhos 0 1 2 3 5 4 5 7 3 1 > filhos.25 0.Introdu¸ c˜ ao ao R [1] TRUE Frequˆ encias absolutas e relativas s˜ ao obtidas como anteriormente.table(filhos.tb 3 4 5 6 7 1 2 filhos 3 5 Figura 6: Gr´ afico de frequˆ encias absolutas para vari´ avel filhos.tbr filhos 0 1 2 3 5 0.tbr <.2. > filhos.2.05 68 O gr´ afico adequado para frequˆ encias absolutas de uma vari´ avel discreta ´ e mostrado na Figura 9.

Ao final mostramos como obter os quartis.md > filhos.mo > filhos.tb == max(filhos. O argumento trim=0.8 1.95 1.00 0 1 2 filhos 3 5 0.5625 <.00 > plot(filhos. na.6 0.tbr 0.80 0.10 0. trim = 0.tb)[filhos.names(filhos.rm=T ´ e necess´ ario porque n˜ ao h´ a informa¸ c˜ ao sobre n´ umero de filhos para alguns indiv´ ıduos.fac <.rm = T) <.mean(filhos.fac 0.me [1] 1.median(filhos. Sendo a vari´ avel num´ erica h´ a uma maior diversidade de medidas estat´ ısticas que podem ser calculadas.me [1] 1. > filhos.rm = T) <.tbr) > filhos. m´ ınimo e m´ aximo. A seguir mostramos como obter algumas medidas de posi¸ c˜ ao: moda.65 > filhos.30 filhos. m´ edia e m´ edia aparada. na.0 2 3 Index 4 5 Figura 7: Gr´ afico de frequˆ encias relativas (esquerda) e frequˆ encias acumuladas para vari´ avel filhos.Introdu¸ c˜ ao ao R > plot(filhos.1.tbr) > filhos.rm = T) .md [1] 2 > filhos.20 0.mo [1] "2" > filhos. type = "S") 69 0. mediana.4 filhos. Note que o argumento na.mean(filhos.fac.2 1 0.fac 0 1 2 3 5 0.me > filhos.me > filhos.1 indica uma m´ edia aparada onde foram retirados 10% dos menores e 10% dos maiores dados.45 0.cumsum(filhos.20 0. na.tb)] <.

26 6.15379 > filhos.06 11.quantile(filhos.86 7. na.59 12.filhos.filhos.22 16. notamos que h´ a comandos para se obter v´ arias medidas de uma s´ a vez.73 6.dp <. coeficiente de varia¸ c˜ ao.53 10.diff(range(filhos.74 8. Inspecione os resultados dos comandos abaixo.65 2.rm = T) [1] 1. > salario [1] 4.35 9.00 4. na.23 13.Introdu¸ c˜ ao ao R > filhos.qt <.59 7.607895 > filhos.71 15.cv [1] 81.00 2.me > filhos.46 [13] 8.80 10.95 9.ai 75% 1 Finalmente. Median 0.dp [1] 1.61 17. 1st Qu.13 9.rm = T) 70 Passando agora para medidas de dispers˜ ao vejamos como obter m´ aximo e m´ ınimo da´ ı a amplitude.A <.qt <.dp/filhos.rm = T) > filhos.69 14.cv <. variˆ ancia e desvio padr˜ ao. Come¸ camos mostrando os valores da vari´ avel e verificando o seu tipo no R.quantile(filhos. na.85 14.44 8.26 18. 1. na. na.sd(filhos.A [1] 5 > var(filhos.25 5.39 7.75 19.66 6. > summary(filhos) Min.79 [25] 13.qt[4] .numeric(salario) [1] TRUE . > range(filhos. Depois obtemos os quartis e da´ ı a amplitude interquart´ ılica.99 16.100 * filhos.00 Max.00 12.12 8.factor(salario) [1] FALSE > is.qt[2] > filhos.00 1.rm = T) > filhos.268028 > filhos.00 Vari´ avel quantitativa Cont´ ınua Para concluir os exemplos para an´ alise univariada vamos considerar a vari´ avel quantitativa cont´ ınua salario. 5.30 > is.76 11.rm = T)) > filhos. na.00 > fivenum(filhos) [1] 0 1 2 2 5 Mean 3rd Qu.56 5.00 NA³s 16.rm = T) [1] 0 5 > filhos.60 13.40 23.ai <.77 9.

breaks. dig.14.12.1. > stem(salario) The decimal point is at the | 4 6 8 10 12 14 16 18 20 22 | | | | | | | | | | 0637 379446 15791388 5816 08268 77 0263 84 3 Finalmente medidas s obtidas da mesma forma que para vari´ aveis discretas.5] 0.0 23. Nos comandos mostrados a seguir verificamos inicialmente os valores m´ aximo e m´ ınimo dos dados..3 > nclass.1. > hist(salario) > boxplot(salario) Uma outra representa¸ c˜ ao gr´ afica para vari´ aveis num´ ericas ´ e o diagrama ramo-e-folhas que pode ser obtido conforme mostrado a seguir.Introdu¸ c˜ ao ao R 71 Para se fazer uma tabela de frequˆ encias de uma cont´ ınua ´ e preciso primeiro agrupar os dados em classes. depois usamos o crit´ erio de Sturges para definir o n´ umero de classes.tb <.lab = 3.02777778 Na sequˆ encia vamos mostrar dois poss´ ıveis gr´ aficos para vari´ aveis cont´ ınuas: histograma e box-plot conforme Figura 9.) NULL > salario.default) function (x. . labels = NULL.9. Veja alguns exemplos a seguir.Sturges(salario) [1] 7 > args(cut) function (x.20.9.2.21. 23.21] (9.table(salario..tb) (3.5.16666667 0.17.. .5.11111111 0.8.. > range(salario) [1] 4. .table(cut(salario.27777778 0. seq(3.8] (17.6] 0.23.6.5.36.lowest = FALSE.13888889 0.) NULL > args(cut.22222222 0.6. right = TRUE. include.05555556 (20. l = 8))) > prop.1] (12.36] (6. usamos cut() para agrupar os dados em classes e finalmente obtemos as frequˆ encias absolotas e relativas.9] (14.

12222 > range(salario.rm = T) [1] 4.dp/salario.salario.A <.100 * salario.rm = T) > salario.Introdu¸ c˜ ao ao R 72 Figura 8: Histograma (esquerda) e boxplot (direita) para a vari´ avel salario.ai <.rm = T) > salario.me <.me [1] 11.diff(range(salario. > salario.dp <.587458 > salario.rm = T) > salario.cv [1] 41.quantile(salario.qt[4] . na.A [1] 19.0 23.ai 75% 6. na.165 > salario.24587 > salario.salario.rm = T) > salario.me > salario.3 > var(salario. na.qt[2] > salario.rm = T) [1] 21.md <.cv <. na.md [1] 10. na.mean(salario.sd(salario.04477 > salario.5075 > summary(salario) .dp [1] 4.rm = T)) > salario. na. na.qt <.3 > salario.median(salario.

table(civ.552 10.16666667 0.270 23. A tabela envolvendo duas vari´ aveis ´ e chamada tabela de cruzamento e pode ser apresentada de v´ arias formas.120 14.tb.300 Max.2500 0. Median Mean 3rd Qu.300 73 9. Iniciamente obtemos a tabela de frequˆ encias absolutas.tb) instrucao civil 1oGrau 2oGrau Superior solteiro 0. Vamos considerar trˆ es possibilidades: qualitativa vs qualitativa qualitativa vs quantitativa quantitativa vs qualitativa Salienta-se ainda que: as an´ alise mostradas a seguir n˜ ao esgotam as possibilidades de an´ alises envolvendo duas vari´ aveis e devem ser vistas apenas como uma sugest˜ ao inicial rela¸ c˜ oes entre duas vari´ aveis devem ser examinadas com cautela pois podem ser mascaradas por uma ou mais vari´ aveis adicionais n˜ ao considerada na an´ alise.515 10. Qualitativa vs Qualitativa Vamos considerar as vari´ aveis civil (estado civil) e instrucao (grau de instru¸ c˜ ao).gi. Depois usamos prop.1500 > prop.2 An´ alise Bivariada Na an´ alise bivariada procuramos identificar relacc˜ oes entre duas vari´ aveis.gi.165 14. O tipo de resumo vai depender dos tipos das vari´ aveis envolvidas.4375 0.tb <.160 11.tb. Estas s˜ ao chamadas vari´ aveis de confundimento.33333333 0. por linha e por coluna.tb instrucao civil 1oGrau 2oGrau Superior solteiro 7 6 3 casado 5 12 3 > prop.3750 0. > civ.13888889 0.08333333 > prop. margin = 1) instrucao civil 1oGrau 2oGrau Superior solteiro 0. 1st Qu.Introdu¸ c˜ ao ao R Min.08333333 casado 0.060 > fivenum(salario) [1] 4. tabelas e/ou medidas estat´ ıstica.2.1875 casado 0.gi. margin = 2) .table(civ. A forma mais adequada vai depender dos objetivos da an´ alise e da interpreta¸ c˜ ao desejada para os dados.table(civil.gi.table(civ. An´ alises com vari´ aveis de confundimento n˜ ao ser˜ ao discutidas neste ponto.000 7.19444444 0. 4. Assim como na univariada estas rela¸ c˜ oes podem ser resumidas por gr´ aficos.6000 0. 23.000 7. conforme ilustrado abaixo.gi. instrucao) > civ.table() para obter frequˆ encia ralativas globais.

tb) Number of cases in table: 36 Number of factors: 2 Test for independence of all factors: Chisq = 1. respectivamente. legend = T) Medidas de associa¸ c˜ ao entre duas vari´ aveis qualitativas incluem o Chi-quadrado dado por: k χ = i=1 2 (oi − ei )2 .5000000 Na Figura 9. df = 2.5000000 casado 0.9125.gi.gi. Outras medidas derivadas desta s˜ ao o o coeficiente de contingˆ encia C e o coeficiente de contingˆ encia modificado C1 dados por: C= χ2 C . C = .gi. Os comandos a seguir mostram como obter todas estas medidas. 1 χ2 + n [(t − 1)/t]2 onde n ´ e o n´ umero de observa¸ c˜ oes e t ´ e o m´ ınimo entre o n´ umero de linas e colunas da tabela. p-value = 0.2 mostramos dois gr´ aficos de barras.5833333 0. frequˆ encias observadas e esperadas nas k posi¸ c˜ oes da tabela de cruzamento das vari´ aveis. beside = T. legend = T) > barplot(civ.6666667 0.2.3333333 0. ei onde oi e ei s˜ ao.tb. > summary(civ. instrucao civil 1oGrau 2oGrau Superior solteiro 0.3843 Chi-squared approximation may be incorrect .Introdu¸ c˜ ao ao R 12 74 15 10 5 0 1oGrau 2oGrau Superior 0 2 4 6 8 10 casado solteiro solteiro casado 1oGrau 2oGrau Superior Figura 9: Dois tipos de gr´ aficos de barras ilustrando o cruzamento das vari´ aveis civil e instrucao. > barplot(civ.tb.4166667 0.

9125 > n <.vars" "n.min(dim(civ.tb) > n [1] 36 > C <.factor(instrucao1.value" [7] "call" > chisq <. Para se obter uma tabela de frequˆ encias ´ e necess´ ario agrupar a vari´ avel quantitativa em classes.gi.4062.tb)) [1] "n. 2) > instrucao1 <.2357 Qualitativa vs Quantitativa Para exemplificar este caso vamos considerar as vari´ aveis instrucao e salario. No exemplo a seguir vamos agrupar a vari´ avel sal´ ario em 4 classes definidas pelos quartis usando cut().summary(civ.ok" "p.gi.Introdu¸ c˜ ao ao R > names(summary(civ. Por o exemplo vamos criar uma nova vari´ avel para agrupar 2 Grau e Superior usando ifelse() e depois podemos refazer as an´ alises do cruzamento com esta nova vari´ avel > instrucao1 <.ifelse(instrucao == "1oGrau". + lev = 1:2.8983995 75 Muitas vezes ´ e necess´ ario reagrupar categorias porque algumas frequˆ encias s˜ ao muito baixas.tb)$stat > chisq [1] 1.cases" "statistic" "parameter" "approx. "2o+Superior"). > quantile(salario) . Ap´ os agrupar esta vari´ avel obtemos a(s) tabela(s) de cruzamento como mostrado no caso anterior. instrucao1) instrucao1 civil 1oGrau 2o+Superior solteiro 7 9 casado 5 15 > summary(table(civil.gi.sqrt(chisq/(chisq + n)) > C [1] 0.tb)) > C1 <. 1.gi.sum(civ. instrucao1)) Number of cases in table: 36 Number of factors: 2 Test for independence of all factors: Chisq = 1.C/((t . ord = T) > table(instrucao1) instrucao1 1oGrau 2o+Superior 12 24 > table(civil. p-value = 0.1)/t)^2 > C1 [1] 0. df = 1.2245999 > t <. label = c("1oGrau".

2727273 0.55] (7.tb <.3] 1oGrau 6 3 2 0 2oGrau 2 6 5 5 Superior 0 0 2 4 > prop.4175 19.sal.table(ins.1818182 0. instrucao. por´ em agora infromando este resumo para cada n´ ıvel do fator qualitativo. desvio padr˜ ao e o resumo de cinco n´ umeros do sal´ ario para cada n´ ıvel de instru¸ c˜ ao. quantile) $ 1oGrau 0% 25% 50% 75% 100% 4.1] (14.cl instrucao (4.8375 10.14.sal. instrucao.10. e neste caso os gr´ aficos seriam como no caso anterior com duas vari´ aveis qualitativas.3333333 0. Vamos ent˜ ao obter um boxplot dos sal´ arios para cada n´ ıvel de instru¸ c˜ ao.6475 16.0000000 2oGrau 0.475000 > tapply(salario.1. o sal´ ario (e n˜ ao o contr´ ario!).836667 11.4000 $Superior 0% 25% 50% 75% 100% 10.2777778 Superior 0.2777778 0.528333 16.5454545 0. consideramos que a instru¸ c˜ ao deve explicar. Isto ´ e. margin = 1) salario.55.0600 23. > boxplot(salario ~ instrucao) Poder´ ıamos ainda fazer gr´ aficos com a vari´ avel salario agrupada em classes.0000000 0.2.7. sd) 1oGrau 2oGrau Superior 2.1650 14.6666667 76 No gr´ afico vamos considerar que neste exemplo a instru¸ c˜ ao deve ser a vari´ avel explicativa e portanto colocada no eixo-X e o sal´ ario ´ e a vari´ avel resposta e portanto no eixo-Y. > tapply(salario.0000 7.cl <.2.9100 14.23.cl) > ins.3000 > salario. com salario instrucao indicando que a vari´ avel salario ´ e explicada (∼) pela vari´ avel instrucao.956464 3.2] (10. quantile(salario)) > ins.7.1250 9.2] (10.3333333 0.502438 > tapply(salario.cut(salario.55] (7.715144 4.10.1. ainda que parcialmente.0075 7. mean) 1oGrau 2oGrau Superior 7.3000 .7300 8.1] (14.tb salario.0000 6.23. Note que o fun¸ ca ˜o abaixo usamos a nota¸ c˜ ao de formula do R.table(instrucao.1111111 0.5300 13. salario.3775 23.3] 1oGrau 0.0000000 0. instrucao.7400 18.tb.cl instrucao (4.sal. Para as medidas o usual ´ e obter um resumo da quantitativa como mostrado na an´ alise univariada.1625 13.55.Introdu¸ c˜ ao ao R 0% 25% 50% 75% 100% 4.14.5525 10. A seguir mostramos alguns exemplos de como obter a m´ edia.8500 $ 2oGrau 0% 25% 50% 75% 100% 5.

Introdu¸ c˜ ao ao R 77 5 10 15 20 1oGrau 2oGrau Superior Figura 10: Boxplot da vari´ avel salario para cada n´ ıvel da vari´ avel instrucao. .

7] 2 2 2 1 (30.65.7.2.3] (20.cl) idade.3333333 (40.cl) salario. seq(0.48.48.7.9] 3 1 2 3 > prop. Nos comandos abaixo agrupamos as duas vari´ aveis em classes definidas pelos respectivos quartis gerando portanto uma tabela de cruzamento 4 × 4.10.2222222 (34.48.cl1 <.2. quantile(salario)) > table(salario.8.2. quantile(idade.9] (12. > idade.cl.65] (8.8] 4 3 5 (37.1] (14.2222222 0.cl1 (4.cl1.5] 0.cut(salario.1111111 0.cl1).48.9] 0.12. 1.cut(idade.5.cl <.9] 0. > idade.23.23.9] 3 4 5 > prop.8. mar = 1) salario.55] (7.cl1.3333333 0.40.table(table(idade.3333333 0.8.9.48.9] (34.14. quantile(salario.55.1111111 0.30.cl (4.2500000 0.cl (4.37.cl1 idade.3] 8 9 9 9 > table(idade.table(table(idade.1.10.1] (14. len = 4))) > table(idade.1111111 0.32.cl).9] 0.7] 0.40.cl (20.8.1] 0.cl1 (4.3333333 0.9.32.cl <.40. 1.1.1428571 (30.1.cl idade.65] (8.9.9] 8 9 9 9 > salario.9.Introdu¸ c˜ ao ao R 78 Quantitativa vs Quantitativa Para ilustrar este caso vamos considerar as vari´ aveis salario e idade.10. Para se obter uma tabela ´ e necess´ ario agrupar as vari´ aveis em classes conforma fizemos no caso anterior.1] (14.23.cl1 idade.8.7.5.1] 3 5 2 (32.4166667 (37.3] (20.2857143 0.55.3333333 0.5] (40.23.3333333 0.34.2857143 0.7. salario.7.cl.3333333 Caso queiramos definir um n´ umero menos de classes podemos fazer como no exemplo a seguir onde cada vari´ avel ´ e dividida em 3 classes e gerando um tabela de cruzamento 3 × 3.8.8.12. salario.9] 1 3 3 2 (34.30.3] (20.9] (12.cl1) salario. quantile(idade)) > table(idade.8.2] (10.65.8] 0.3] (20.7] (30.cl idade.8.23. salario.34.55.14.2] (10.2000000 (32.3333333 0. seq(0. len = 4))) > salario.4166667 . mar = 1) salario.5000000 0.2500000 0.2] (10.cl (4.3000000 0. salario.30.9.5.2857143 0.cl) salario.55] (7.55] (7.5] 1 3 2 3 (40.1.cut(salario.cut(idade.14.2222222 0.34.7.37.1.cl1 <.

salario) Para quantificar a associa¸ c˜ ao entre vari´ aveis deste tipo usamos um coeficiente de correla¸ c˜ ao. A fun¸ c˜ ao cor() do R possui op¸ c˜ ao para trˆ es coeficientes tendo como default o coeficiente de correla¸ c˜ ao linear de Pearson. Portanto ao terminar as an´ alises com estes dados devemos desanexar este conjunto de dados com o detach() > detach(milsa) .2895939 Lembre que ao iniciar as an´ alises com este conjunto de dados anexamos os dados com o comando attach(milsa). method = "kendall") [1] 0. > plot(idade. O gr´ afico adequado para representar duas vari´ aveis quantitativas ´ e um diagrama de dispers˜ ao. salario. Note que se as vari´ aveis envolvidas puderem ser classificadas como ”explicativa”e ”resposta”devemos colocar a primeira no eixo-X e a segunda no eixo-Y. method = "spearman") [1] 0.Introdu¸ c˜ ao ao R 79 5 20 10 salario 15 20 25 30 35 idade 40 45 50 Figura 11: Diagrama de dispers˜ ao para as vari´ aveis salario e idade.3651397 > cor(idade.214456 > cor(idade. salario. salario) [1] 0. Neste exemplo ´ e razo´ avel admitir que a idade deve explicar. > cor(idade. o sal´ ario e portanto fazemos o gr´ afico com idade n eixo-X. ao menos parcialmente.

cores de fundo. Por exemplo. Experimente outras demos como demo(persp) e demo(image). As demos s˜ ao u ´ties para termos uma id´ eia dos recursos dispon´ ıveis no programa e para ver os comandos que devem ser utilizados. Na tela de comandos ser˜ ao mostrados comandos que ser˜ ao utilizados para gerar um gr´ afico seguidos da mensagem: Hit <Return> to see next plot: inspecione os comandos e depois pressione novamente a tecla ENTER. package="graphics")) > file.3 Uma demonstra¸ c˜ ao de recursos gr´ aficos do R O R vem com algumas demonstra¸ c˜ oes (demos) de seus recursos “embutidas” no programa. por exemplo. package="graphics")) . A cada passo voce vai ter que teclar ENTER para ver o pr´ oximo gr´ afico.show(system. Para listar as demos dispon´ ıveis digite na linha de comando: > demo() Para rodar uma delas basta colocar o nome da escolhida entre os parˆ enteses. cores dos pontos. Prossiga inspecionando os gr´ aficos e comandos e pressionando ENTER at´ e terminar a ”demo”.R". tipos de pontos. Agora voce pode visualizar na janela gr´ afica o gr´ afico produzido pelos comandos mostrados anteriormente. Inspecione o gr´ afico cuidadosamente verificando os recursos utilizados (t´ ıtulo.R". linhas.Introdu¸ c˜ ao ao R 80 9. agora na tela de comandos apareceram novos comandos para produzir um novo gr´ afico e a mensagem: Hit <Return> to see next plot: inspecione os novos comandos e depois pressione novamente a tecla ENTER. vamos rodar a demo de recursos gr´ aficos.show(system. Um novo gr´ afico surgir´ a ilustrando outros recursos do programa. etc).R". package="graphics")) > file.file("demo/plotmath.file("demo/persp. para ver o c´ odigo fonte (comandos) de uma demo voce pode utilizar comandos como se seguem (e de forma an´ aloga para outras "demos": > file.show(system. no “prompt” do programa R digite: > demo(graphics) Voce vai ver a seguinte mensagem na tela: demo(graphics) ---. legendas dos eixos.file("demo/graphics.~~~~~~~~ Type <Return> to start : pressione a tecla ENTER a “demo” vai ser iniciada e uma tela gr´ afica ir´ a se abrir. Note que os comandos v˜ ao aparecer na janela de comandos e os gr´ aficos ser˜ ao automaticamente produzidos na janela gr´ afica.

o comando help(mean) vai exibir e documenta¸ c˜ ao da fun¸ c˜ ao mean(). Note que no final da documenta¸ c˜ ao h´ a exemplos de uso da fun¸ c˜ ao que voce pode reproduzir para entendˆ e-la melhor. (a) qual o n´ umero m´ edio e mediano de cada um dos crimes? (b) encontre a mediana e quartis para cada crime. quantile() nos dados mostrados anteriormente. (d) fa¸ ca um gr´ afico adequado para o n´ umero de assassinatos (murder). por exemplo. Veja a documenta¸ c˜ ao das fun¸ c˜ oes e as op¸ c˜ oes de uso. voce pode usar a fun¸ c˜ ao help para obter uma descri¸ c˜ ao dos dados. sd(). median(). (j) encontre os estados com maior e menor ocorrˆ encia do total de crimes.5 Mais detalhes sobre o uso de fun¸ c˜ oes As fun¸ c˜ oes do R s˜ ao documentadas e o uso ´ e explicado e ilustrado usando a help(). Experimente as fun¸ c˜ oes mean(). Carregue o conjunto de dados USArrests com o comando data(USArrests). var(). (e) fa¸ ca um diagrama ramo-e-folhas para o n´ umero de estupros (rape). . (i) encontre os estados com maior e menor ocorrˆ encia per capta de cada tipo de crime.6 Exerc´ ıcios 1. isto ´ e.4 Outros dados dispon´ ıveis no R H´ a v´ arios conjuntos de dados inclu´ ıdos no programa R como. Examine a sua documenta¸ c˜ ao com help(USArrests) e responda as perguntas a seguir. Por exemplo. Para ver a lista de conjuntos de dados dispon´ ıveis digite data(). 3. Por exemplo tente os seguintes comandos: > > > > data() data(women) women help(woman) 9. 9. (c) encontre o n´ umero m´ aximo e m´ ınimo para cada crime. Estes conjuntos s˜ ao todos documentados. (g) verifique se h´ a correla¸ c˜ ao entre os crimes e a propor¸ ca ˜o de popula¸ c˜ ao urbana. (f) verifique se h´ a correla¸ c˜ ao entre os diferentes tipos de crime. 2. o conjunto mtcars.Introdu¸ c˜ ao ao R 81 9. Fa¸ ca uma an´ alise descritiva adequada do conjunto de dados women. (h) encontre os estados com maior e menor ocorrˆ encia de cada tipo de crime.

legendas dos eixos. por exemplo. Note que os comandos v˜ ao aparecer na janela de comandos e os gr´ aficos ser˜ ao automaticamente produzidos na janela gr´ afica. Para listar as demos dispon´ ıveis digite na linha de comando: > demo() Para rodar uma delas basta colocar o nome da escolhida entre os parˆ enteses. linhas. Experimente outras demos como demo(persp) e demo(image).show(system.R". Inspecione o gr´ afico cuidadosamente verificando os recursos utilizados (t´ ıtulo.show(system. tipos de pontos. Na tela de comandos ser˜ ao mostrados comandos que ser˜ ao utilizados para gerar um gr´ afico seguidos da mensagem: Hit <Return> to see next plot: inspecione os comandos e depois pressione novamente a tecla ENTER.file("demo/plotmath.Introdu¸ c˜ ao ao R 82 10 10.show(system. etc).R".1 Gr´ aficos no R Exemplos dos recursos gr´ aficos O R vem com algumas demonstra¸ c˜ oes (demos) de seus recursos “embutidas” no programa.file("demo/graphics. no “prompt” do programa R digite: > demo(graphics) Voce vai ver a seguinte mensagem na tela: demo(graphics) ---. package="graphics")) > file. para ver o c´ odigo fonte (comandos) de uma demo voce pode utilizar comandos como se seguem (e de forma an´ aloga para outras "demos": > file. Por exemplo. A cada passo voce vai ter que teclar ENTER para ver o pr´ oximo gr´ afico. package="graphics")) . Prossiga inspecionando os gr´ aficos e comandos e pressionando ENTER at´ e terminar a ”demo”. package="graphics")) > file. cores dos pontos. agora na tela de comandos apareceram novos comandos para produzir um novo gr´ afico e a mensagem: Hit <Return> to see next plot: inspecione os novos comandos e depois pressione novamente a tecla ENTER. cores de fundo. Um novo gr´ afico surgir´ a ilustrando outros recursos do programa. vamos rodar a demo de recursos gr´ aficos. Agora voce pode visualizar na janela gr´ afica o gr´ afico produzido pelos comandos mostrados anteriormente.file("demo/persp. As demos s˜ ao u ´ties para termos uma id´ eia dos recursos dispon´ ıveis no programa e para ver os comandos que devem ser utilizados.R".~~~~~~~~ Type <Return> to start : pressione a tecla ENTER a “demo” vai ser iniciada e uma tela gr´ afica ir´ a se abrir.

Cada uma des fun¸ c˜ oa possuem argumentos adicionais que permitem controlar tamanho.pdf") > hist(rnorm(200)) > dev. png(). entre ´ importante notar que o comando dev. Este comportamento difere de alguns outros programas que permitem modificar um gr´ afico j´ a desenhado. de forma semelhante ao que se faria ao desenhar em um papel. que permite configurar formato. Para produzir gr´ aficos em arquivos basta redirecionar o dispositivo de sa´ ıda para o formato gr´ afico desejado. margens. mas podem ser modificados ou ter elementos adicionados conforme desejado pelo usu´ ario. postscript() (para gr´ aficos em formato . a tela ´ e o dispositivo de sa´ ıda (output device ) padr˜ ao para gr´ aficos.off() ´ outros atributos do arquivo gr´ afico. > x <. tamanho. O comando layout() tmab.5) . 3. permite dividir a janela gr´ afica de forma ianda mais flex´ ıvel.4)) permite acomodar 12 gr´ aficos em uma mesma janela arranjados em trˆ es linhas e quatro colunas. axes = F. A melhor forma para entender como modificar gr´ aficos ´ e pensar que cada elemento pode ser controlado por uma fun¸ c˜ ao.jpeg) que s˜ ao muito usados em p´ aginas web. Por exemplo par(mfrow=c(1. ylab = "frequ^ encias absolutas") > axis(1.5). subdivis˜ oes. entre diversas outras op¸ c˜ oes.2 Algumas configura¸ c˜ oes de gr´ aficos no R Gr´ aficos m´ ultiplos na janela gr´ afica O principal recurso para controlar o aspecto de gr´ aficos no R ´ e dado pela fun¸ c˜ ao de configura¸ c˜ ao par().jpg (or . Gr´ aficos em arquivos Por default gr´ aficos s˜ ao mostrados em uma janela na tela do computador.pdf em formato pdf. e elementos s˜ ao adicionados ao gr´ afico para cada chamada de fun¸ c˜ ao espec´ ıfica.2)) divide a janela gr´ afica em um frame que perite acomodar dois gr´ aficos em uma linha e par(mfrow=c(3. resolu¸ c˜ ao.5.off() Caso deseje-se o arquivo em outro formato gr´ afico a fun¸ c˜ ao adequada deve ser chamada. E e compuls´ orio devendo ser usado para que o arquivo gr´ afico seja ”fechado”. ou seja.rnorm(200) > hist(x) > hist(x. Por exemplo. at = seq(0. xlab = "dados". O c´ odigo a seguir mostra como gerar um um histograma de 200 amostras de uma distribui¸ c˜ ao normal padr˜ ao em um arquivo chamado figura1. entre outros.5. o que pode ser feito por legend() NOTA: Se algo j´ a feito deve ser mudado ent˜ ao ´ e necess´ ario repetir os comandos anteriores um a um at´ e chegar no que se deseja modificar. by = 0. pos = 0) > axis(2. Alguns dos dispositivos gr´ aficos s˜ ao exclusivos de certos sistemas operacionais como poe exemplo wmf() para o sistema operacional WINDOWS.ps ou . Um exemplo t´ ıpico ´ ea adi¸ c˜ ao de legenda a um gr´ afico j´ a feito. pos = -2. at = seq(-2. by = 10). 50. > pdf("figura1. main = "".Introdu¸ c˜ ao ao R Galeria de gr´ aficos do R 83 R Graph Gallery ´ e uma p´ agina com diversos exemplos de gr´ aficos no R e os comandos para produzi-los 10.eps). jpeg() para formatos . Modificando gr´ aficos Gr´ aficos no R s˜ ao tipicamente constru´ ıdos com op¸ c˜ oes padr˜ ao definidas pelo programa.

5 10 20 30 −2 −1 0 x 1 2 3 −1.0 72 5 2 3 12 149 12. 10. radia¸ c˜ ao solar. velocidade do vento e temperatura em Nova York de Maio a Setembro de 1973. por exemplo. para modificar os eixos iniciamos removendo os eixos do gr´ afico inicial com axes=FALSE e depois os adicionamos com axis() na posi¸ c˜ ao desejada. Vamos considerar o conjunto de dados airquality j´ a dispon´ ıvel no R que possui medidas de Ozˆ onio. No gr´ afico da direita nota-se que o t´ ıtulo foi removido. > data(airquality) > head(airquality) Ozone Solar. sendo que no primeiro argumento da fun¸ c˜ ao as op¸ c˜ oes 1 e 2 correspondem aos eixos das abcissas e ordenadas. Isto pode ser u ´til.Introdu¸ c˜ ao ao R 40 40 84 Histogram of x 30 frequências absolutas Frequency 20 10 0 0 −2.6 74 5 3 4 18 313 11. Finalmente. Para isto na chamada de hist() passamos um valor vazio para o argumento main o que causa a remo¸ c˜ ao do t´ ıtulo do gr´ afico.5 Figura 12: Histograma gerado com op¸ c˜ oes padr˜ ao (esquerda) e modificadas (direita). respectivamente.5 dados 1.4 67 5 1 2 36 118 8. o texto dos eixos foi modificado e a posi¸ c˜ ao dos eixos foi alterada fazendo com que as barras do histograma sejam desenhadas junto aos eixos. um ` a esquerda e outro a direita do gr´ afico.5 −0. Os texto dos eixos s˜ ao definidos por xlab e ylab. para ver se as flutua¸ c˜ oes s˜ ao comuns com a varia¸ c˜ ao nos valores de X . Vejamos na Figura reffig:eixos um exemplo frequentemente citado por usu´ arios. No gr´ afico da esquerda est´ a o histograma dos dados de uma amostra de tamanho 200 produzido com op¸ c˜ oes padr˜ ao (default ) da fun¸ c˜ ao hist() a partir dos seguintes comandos.R Wind Temp Month Day 1 41 190 7.5 0.5 2. Y 1 e Y 2 contra uma mesma vari´ avel X . Gostar´ ıamos de fazer um gr´ afico destes colocando eixos distintos para Y 1 e Y 2.5 62 5 4 .3 Alguns exemplos Gr´ afico com dois eixos y distintos Considere fazer um gr´ afico de duas vari´ aveis de grandezas distintas.

00 Mean :6.00 Max.00 NA³s : 7. col = 2) mtext("Ozone".00 Nos comandos a seguir criamos o gr´ afico da Figura 13 com as evolu¸ c˜ oes das medidas de temperatura e n´ ıveis de ozˆ onio no per´ ıodo. as informa¸ c˜ oes sobre as datas de coleta est˜ ao nas duas u ´ltimas colunas. :334. > > > > + > > par(mar = c(4. colocando a escala de cada uma delas em um dos eixos verticais. 4)) with(airquality. col = 2) . line = 3.00 First :8Jan60 1st Qu. :56.13 Mean :185.:23. type = "l")) par(new = T) with(airquality. ann = F. : 7.00 Max.8 3rd Qu.: 18.993 Mean :15.:8.88 3rd Qu. type = "l".0 NA³s Month Day dates Min. 4.000 3rd Qu. :97.000 Min.9 Mean : 9.958 Mean :77.:72. side = 4.00 Max.:115. :168.000 Max.00 Median : 31.: 63. + "2003". :31. :5.80 3rd Qu.000 Median :16.:6. : 1. > require(date) > airquality$dates <. 4. sep = "/"))) > summary(airquality) Ozone Solar.as.Introdu¸ c˜ ao ao R 5 6 NA 28 NA 14.700 Median :79.00 Min.R Wind Temp Min.9 56 66 5 5 5 6 85 Nesses dados. : 1. :20.:11.:85.700 Max.3 NA 14.00 Last :30Sep2003 Median :7.8 1st Qu.: 8. paste(Month. : 1.:258.000 1st Qu.500 3rd Qu. col = 2)) axis(4.0 Min.00 : 37.50 Median :205.400 1st Qu.25 3rd Qu. Vamos inicialmente criar uma nova vari´ avel com a representa¸ c˜ ao da data. frame = T.00 Mean : 42.date(with(airquality.: 7.0 Max. axes = F.axis = 2.700 Min.00 1st Qu. Day. :9.0 Median : 9.00 1st Qu. plot(Ozone ~ dates. col. plot(Temp ~ dates.

type = "l". 60 . plot(Ozone ~ dates. axes = F. line = 3. plot(Temp ~ dates. ann = F. col = 2) mtext("Ozone". 4. col.axis = 2. type = "l")) par(new = T) with(airquality. col = 2) options(warn = 0) 90 Temp 70 80 100 25May2003 14Jul2003 dates 2Sep2003 0 50 150 Ozone Figura 13: Ilustra¸ c˜ ao de gr´ afico com duas escalas para o eixo-y : evolu¸ c˜ ao dos valores de temperatura e ozˆ onio. 4)) with(airquality. col = 2)) axis(4.Introdu¸ c˜ ao ao R 86 > > > > > + > > > options(warn = -1) par(mar = c(4. 4. frame = T. side = 4.

ufpr. 3))) milsa <.Introdu¸ c˜ ao ao R 87 11 11. is. levels = 1:2). lev = c(2. "interior".read. no caso do cruzamento de duas vari´ aveis. label = c("1oGrau". label = c("solteiro". > dimnames(t1) . 3)]) > t1f instrucao 1oGrau 2oGrau Superior civil solteiro 7 6 3 casado 5 12 3 > sapply(list(t1. regiao = factor(regiao. onde o n´ umero de dimens˜ oes ´ e igual ao n´ umero de vari´ aveis. > + > + + + + > > milsa <. No exemplo consideram-se as vari´ aveis civil e instrucao que situadas nas colunas 2 e 3 do data-frame. 1.transform(milsa.table(milsa[c(2. t1f). As fun¸ c˜ oes retornam as tabelas de contingˆ encia em um objeto que pode ser uma matrix. "2oGrau". 3)]) > t1 instrucao civil 1oGrau 2oGrau Superior solteiro 7 6 3 casado 5 12 3 > t1f <. "casado"). label = c("capital". os resultados s˜ ao exibidos de forma semelhante. A seguir mostramos algumas op¸ c˜ oes da vizualiza¸ c˜ ao dos resultados usando a fun¸ c˜ ao table() e a fun¸ c˜ ao ftable(). ord = T).ftable(milsa[c(2.matrix) [1] TRUE TRUE > sapply(list(t1. civil = factor(civil. "Superior").leg. is. Entretanto a classe do objeto resultante vai depender da fun¸ c˜ ao utilizada. head = T) milsa <.br/~paulojus/aulasR/dados/milsa. "outro"). idade = ano + mes/12) names(milsa) Tabelas de contingˆ encia podem ser obtidas com as frequˆ encias de occorrˆ encia dos cruzamentos das vari´ aveis.table("http://www. instrucao = factor(instrucao. class) [1] "table" "ftable" > sapply(list(t1. Repetimos aqui o preparo inicial dos dados convertendo as vari´ aveis categ´ oricas em fatores do R e criando a vari´ avel idade. ou de forma mais geral.transform(milsa. > t1 <. lev = 1:3.array) [1] TRUE TRUE Ambas fun¸ c˜ oes possuem o argumento dnn que pode ser usado para sobrescrever os nomes das dimens˜ oes do objeto resultante. na forma de um array.dat". Neste caso. t1f). para o cruzamento de apenas duas vari´ aveis. t1f).1 An´ alise descritiva de tabelas de contingˆ encia Tabelas para dois ou mais fatores Vamos utilizar aqui os dados milsa de Bussab & Morettin discutidos na Sess˜ ao ?? e que podem ser obtidos conforme comando abaixo.

regiao)) > t2f regiao capital interior outro civil instrucao solteiro 1oGrau 2 2 3 2oGrau 1 1 4 Superior 1 1 1 . em uma visualiza¸ c˜ ao mais adequada para a leitura dos dados. regiao = interior instrucao civil 1oGrau 2oGrau Superior solteiro 2 1 1 casado 1 6 1 . . "N´ ıvel de Instru¸ c~ ao")) 88 As diferen¸ cas na forma de exibir os resultados s˜ ao mais claras considerando-se o cruzamento de trˆ es ou mais vari´ aveis. Vamos considerar o cruzamento das vari´ aveis civil.table(milsa[c(2. > t2 <. instrucao. instrucao e regiao situadas nas colunas 2. dnn = c("Estado Civil". Enquanto table() vai exibir um array da forma usual.table(milsa[c(2. 3)]. . regiao = outro instrucao civil 1oGrau 2oGrau Superior solteiro 3 4 1 casado 2 2 1 > t2f <. regiao)) > t2 . regiao = capital instrucao civil 1oGrau 2oGrau Superior solteiro 2 1 1 casado 2 4 1 . 3 e 8 do data-frame. instrucao. mostrando as v´ arias camadas separadamente.Introdu¸ c˜ ao ao R $civil [1] "solteiro" "casado" $instrucao [1] "1oGrau" "2oGrau" "Superior" > t1 <. ftable(civil.with(milsa.with(milsa. dnn = c("Estado Civil". table(civil. "N´ ıvel de Instru¸ c~ ao")) > dimnames(t1) $ Estado Civil [1] "solteiro" "casado" $ N´ ıvel de Instru¸ c~ ao [1] "1oGrau" "2oGrau" "Superior" > t1f <. 3)]. ftable() ir´ a arranjar a tabela de forma plana. .

neste caso de dimens˜ ao 6 × 3 onde 6 = 2 × 3 indicando o produto do n´ umero de n´ ıvies das duas primeiras vari´ aveis.vars e col. t2f). Os argumentos row. A distin¸ c˜ ao entre as classes n˜ ao ´ e importante no caso de cruzamento entre duas vari´ aveis.table() para obten¸ c˜ ao de frequˆ encias relativas. 3))) Estado Civil: solteiro casado Proced^ encia: capital interior outro capital interior outro N´ ıvel de Instru¸ c~ ao 1oGrau 2 2 3 2 1 2 2oGrau 1 1 4 4 6 2 Superior 1 1 1 1 1 1 11. regiao.vars podem ser usados para indicar quais vari´ aveis ser˜ ao colocadas nas linhas e colunas. vejamos primeiro os resultados de frequˆ encias relativas para duas vari´ aveis. por serem trˆ es vari´ aveis.Introdu¸ c˜ ao ao R casado 1oGrau 2oGrau Superior 2 4 1 1 6 1 2 2 1 89 Enquanto que o objeto retornado por table() n˜ ao ´ e uma matrix. ou barplot() para gr´ aficos de barras. e em que ordem. respectivamente. mas sim um array de trˆ es dimens˜ oes. dim) [[1]] [1] 2 3 3 [[2]] [1] 6 3 Com ftable() ´ e poss´ ıvel ainda criar outras visualiza¸ c˜ oes da tabela. Da mesma forma. instrucao. "Proced^ encia:"). J´ a o objeto retornado por ftable() ainda ´ e uma matriz.table(t1) . no caso de duas vari´ aveis.2 Extens˜ oes: frequˆ encias relativas e gr´ aficos As fun¸ c˜ oes table() e ftable() retornam objetos das classes table e ftable. > with(milsa. is. col. ftable(civil.array) [1] TRUE TRUE > sapply(list(t2. 3 n´ ıveis de instru¸ c˜ ao e 3 regi˜ oes. No exemplo a seguir colocamos o estado civil e regi˜ ao de procedˆ encia (vari´ aveis 1 e 3) nas colunas da tabela e tamb´ em modificamos o nome das dimens˜ oes da tabela com o argumento dnn. > sapply(list(t2. as margens da tabelas obtidas de uma ou outra forma s˜ ao as mesmas. outras fun¸ c˜ oes podem ser utilizadas tais como prop. is. t2f). que n˜ ao diferem entre as clases.matrix) [1] FALSE TRUE > sapply(list(t2. Considerando os exemplos da Se¸ c˜ ao anterior. > prop. enquanto que ftable() retorna sempre uma matriz. O objeto resultante ´ e uma matrix de dimens˜ ao 6 × 3. A dimens˜ ao do array ´ e de 2 × 3 × 3 por haver 2 estados civis. devido ao fato j´ a mencionado de que table() retorna um array de dimens˜ ao igual ao n´ umero de vari´ aveis. Entretanto para trˆ es ou mais vari´ aveis os resultados s˜ ao bem diferentes. t2f). dnn = c("Estado Civil:".vars = c(1. A partir de tais objetos. + "N´ ıvel de Instru¸ c~ ao".

3750 0.table(t1f. margin = 1) N´ ıvel de Instru¸ c~ ao Estado Civil 1oGrau 2oGrau Superior solteiro 0.08333333 casado 0.1500 > prop. mar = 2) N´ ıvel de Instru¸ c~ ao 1oGrau 2oGrau Superior 12 18 6 > margin. mar = 2) N´ ıvel de Instru¸ c~ ao 1oGrau 2oGrau Superior 12 18 6 90 Da mesma forma os gr´ aficos obtidos s˜ ao os mesmos.08333333 > prop.16666667 0. margin = 1) N´ ıvel de Instru¸ c~ ao Estado Civil 1oGrau 2oGrau Superior solteiro 0. mar = 1) Estado Civil solteiro casado 16 20 > margin.19444444 0. > > > > plot(t1.table(t1f.19444444 0.1500 > margin.Introdu¸ c˜ ao ao R N´ ıvel de Instru¸ c~ ao Estado Civil 1oGrau 2oGrau Superior solteiro 0.6000 0.08333333 casado 0.13888889 0. mar = 1) Estado Civil solteiro casado 16 20 > margin. Acima os gr´ aficos mostram retˆ angulos cojas ´ areas s˜ ao proporcionais ` as frequˆ encias e abaixo um poss´ ıvel gr´ afico de barras.4375 0. uma vez que ftable() vai sempre retornar uma matriz e portanto s´ o possuir´ a margens 1 e 2. beside = T. A Figura 11.1875 casado 0. .2 mostra dois tipos de gr´ aficos.33333333 0.16666667 0. beside = T. legend = T) barplot(t1f.table(t1f) N´ ıvel de Instru¸ c~ ao Estado Civil 1oGrau 2oGrau Superior solteiro 0.table(t1.6000 0. main = "") plot(t1f.table(t1.08333333 > prop.2500 0.table(t1f.2500 0.table(t1.33333333 0. legend = T) J´ a para trˆ es os mais vari´ aveis os resultados s˜ ao bem diferentes em particular para as frequˆ encias marginais.1875 casado 0.4375 0. main = "") barplot(t1.13888889 0.3750 0.

.Introdu¸ c˜ ao ao R 91 solteiro casado solteiro casado 1oGrau Nível de Instrução 2oGrau Nível de Instrução Estado Civil Superior Superior 2oGrau 1oGrau Estado Civil 12 solteiro casado 12 10 8 6 4 2 0 1oGrau 2oGrau Superior 0 2 4 6 8 10 solteiro casado 1oGrau 2oGrau Superior Figura 14: Representa¸ c˜ oes gr´ aficas de tabelas de contingˆ encia de duas vari´ aveis obtidas pelas fun¸ c˜ oes table() e ftable().

02777778 Superior 0.05555556 2oGrau 0.0500 .08333333 0.02777778 > prop. regiao = capital instrucao civil 1oGrau 2oGrau Superior solteiro 0.05555556 0.02777778 civil .1250 0.02777778 0.02777778 .02777778 0.02777778 .02777778 0. regiao = capital instrucao civil 1oGrau 2oGrau Superior solteiro 0.table(t2) .08333333 0.02777778 0.05555556 0.02777778 0.05555556 0. . regiao = interior instrucao civil 1oGrau 2oGrau Superior solteiro 0.16666667 0.05555556 0.02777778 casado 1oGrau 0.16666667 Superior 0.2000 0.05555556 0.02777778 casado 0.02777778 0.Introdu¸ c˜ ao ao R > prop.table(t2f) regiao capital interior civil instrucao solteiro 1oGrau 0. .11111111 0.02777778 casado 0.05555556 0.02777778 casado 0.0625 casado 0. regiao = outro instrucao 1oGrau 2oGrau Superior 92 outro 0.02777778 2oGrau 0.table(t2.0625 0. . regiao = outro instrucao civil 1oGrau 2oGrau Superior solteiro 0. regiao = interior instrucao civil 1oGrau 2oGrau Superior solteiro 0.05555556 0.02777778 > prop.0500 0.11111111 0. .11111111 0.05555556 0.1250 0.3000 0.0500 .0625 0.1000 0.02777778 0.05555556 0. . .0625 casado 0. margin = 1) .11111111 0.

2500 0. .3333333 0. margin).3333333 instrucao civil 1oGrau 2oGrau Superior solteiro 0.1666667 0. mar = 1) civil solteiro casado 16 20 > margin.09090909 casado 0.table(t2.07692308 casado 0.16666667 0.table() a partir de um objeto resultante de table() mas n˜ ao para um objeto resultante de parftable()! > margin.1875 0.3333333 casado 1oGrau 0.4000000 0.15384615 0.5000000 0.0625 casado 0.table(x.08333333 0.07692308 > prop.table(t2.0500 > prop.3333333 Superior 0.table(t2.3333333 > prop.1666667 0. margin. regiao = capital 93 interior 0.table(t2.2857143 0. mar = 3) .1000 0.1666667 Superior 0.15384615 0.08333333 0. .table(t2f.3333333 outro 0.1000 0. .08333333 casado 0.6666667 0.2857143 2oGrau 0.09090909 . mar = 2) instrucao 1oGrau 2oGrau Superior 12 18 6 > margin. regiao = interior instrucao civil 1oGrau 2oGrau Superior solteiro 0. regiao = outro instrucao civil 1oGrau 2oGrau Superior solteiro 0.3333333 0. margin = 3) .08333333 . margin=3) Error in sweep(x.4285714 0. margin = 1) regiao capital civil instrucao solteiro 1oGrau 0.36363636 0. margin.2000000 0. "/") : ´ ındice fora de limites ´ poss´ E ıvel obter totais marginais com margin.23076923 0.4000000 2oGrau 0.50000000 0.18181818 0.Introdu¸ c˜ ao ao R solteiro 0.18181818 0.30769231 0.table(t2f.09090909 0.

main = "") > barplot(t2f.Introdu¸ c˜ ao ao R solteiro capital interior outro casado interior 94 6 outro capital 1oGrau instrucao 2oGrau Superior civil Figura 15: Representa¸ c˜ oes gr´ aficas de tabelas de contingˆ encia de trˆ es vari´ aveis obtidas pelas fun¸ c˜ oes table() (esquerda) e ftable() (direita). J´ a barplot() ir´ a funcionar apenas para ftable. plot() vai funcionar para a classe table mas o resultado ´ e inapropriado para ftable. beside = T) 0 1 2 3 4 5 . > plot(t2. regiao capital interior 11 12 outro 13 Para gr´ aficos nem todos os resultados s˜ ao mais poss´ ıveis. mas o resultado pode n˜ ao ser satisfat´ orio pois as barras ir˜ ao mostrar as combina¸ c˜ oes de duas vari´ aveis.

O comando plot() desenha o gr´ afico da fun¸ c˜ ao.function(x) { fx <. 0. Os problemas nesta sess˜ ao foram retirados do livro: Bussab. > + + + > > > f1 <. que definir um limite em x at´ e onde vai o gr´ afico da fun¸ c˜ ao. Vamos come¸ car definindo esta fun¸ c˜ ao como uma fun¸ c˜ ao no R para qual daremos o nome de f 1.O.5). Atual Editora. W.A.2 f (x)dx = 0. A sa´ ıda da fun¸ c˜ ao mostra o valor da integral (1) e o erro m´ aximo da aproxima¸ c˜ ao num´ erica. 0.ifelse(x < 0.Ed. 2003 .d. para fazer o gr´ afico. Para destacar as ´ areas que . se x ≥ 0 f (x) = 0 . Os comandos do R a seguir mostram como fazer o gr´ afico de fun¸ c˜ ao.p. 4a edi¸ c˜ ao. exerc´ ıcio 1) Dada a fun¸ c˜ ao 2 exp(−2x) . p´ agina 132. 0. se x < 0 (a) mostre que est´ a fun¸ c˜ ao ´ e uma f. Saraiva) EXEMPLO 1 (adaptado de Bussab & Morettin. A fun¸ c˜ ao recebe como argumentos o objeto com a fun¸ c˜ ao a ser integrada e os limites de integra¸ c˜ ao. a fun¸ c˜ ao n˜ ao deve ter valores negativos e deve integrar 1 em seu dom´ ınio. 2 * exp(-2 * x)) return(fx) } plot(f1) plot(f1. 5) Para verificar que a a integral da fun¸ c˜ ao ´ e igual a 1 podemos usar a fun¸ c˜ ao integrate() que efetua integra¸ c˜ ao num´ erica. Exerc´ ıcios que podem (e devem!) ser resolvidos analiticamente s˜ ao usados para ilustrar o uso do programa e alguns de seus recursos para an´ alises num´ ericas.8 pc = P (0. O gr´ afico escolhido e mostrado na Figura 16 foi o produzido pelo comando plot(f1. Vamos achar este limite tentando v´ arios valores. Neste exemplo o objeto ´ e f1 definido acima e o dom´ ınio da fun¸ c˜ ao ´ e [0. 0.2 < X < 0.8 ∞ f (x)dx = 1 ∞ 2 e−2x dx 0. conforme mostram os comandos abaixo.8 Para ser f. A seguir fazemos o gr´ afico da fun¸ c˜ ao. 1987. ∞]. > integrate(f1. & Morettin.2 2 e−2x dx cuja representa¸ c˜ ao gr´ afica ´ e mostrada na Figura 17.d.p. 10) plot(f1. Como a fun¸ c˜ ao tem valores positivos para x no intervalo de zero a infinito temos.0. Estat´ ıstica B´ asica. Desta forma as solu¸ c˜ oes seriam dadas pelas express˜ oes pb = P (X > 1) = 1 0. a Note que h´ a uma edi¸ c˜ ao mais nova: (5 edi¸ c˜ ao. Inf) 1 with absolute error < 5e-07 Para fazer c´ alculos pedidos nos itens (b) e (c) lembramos que a probabilidade ´ e dada pela ´ area sob a curva da fun¸ c˜ ao no intervalo pedido. 2 < X < 0. na pr´ atica. (b) calcule a probabilidade de que X > 1 (c) calcule a probabilidade de que 0.Introdu¸ c˜ ao ao R 95 12 Conceitos b´ asicos sobre distribui¸ c˜ oes de probabilidade O objetivo desta sess˜ ao ´ e mostrar o uso de fun¸ c˜ oes do R em problemas de probabilidade. 8) = 0. P.

f1(seq(0. 5. f1(seq(1.5).2. col = "gray") text(c(1.8) 0.5 f1 (x) 1.2. 1. y = c(0. 0. 0. 0.2e-15 EXEMPLO 2 (Bussab & Morettin. > integrate(f1.8. > > + > + > plot(f1. l = 20)). 5) polygon(x = c(1. 0.2.2. 0).Introdu¸ c˜ ao ao R 96 0. y = c(0. c(expression(p[b]. l = 20)). exerc´ ıcio 10) . Para sombrear a ´ area usa-se o argumento density. Esta fun¸ c˜ ao adiciona a um gr´ afico um pol´ ıgono que ´ e definido pelas coordenadas de seus v´ ertices.0 1. 0.5 2.8). Inf) 0. Finalmente. density = 10) polygon(x = c(0.1e-05 > integrate(f1.0 0 0. 0.2).8. seq(0. para escrever um texto no gr´ afico usamos a fun¸ ca ˜o text() com as coordenadas de posi¸ c˜ ao do texto. p´ agina 139. 0. p[c]))) E para obter as probabilidades pedidas usamos integrate(). l = 20))).2. 0. l = 20). correspondem ` as probabilidades pedidas vamos usar a fun¸ c˜ ao polygon().1.4684235 with absolute error < 5. seq(1. 5. c(0.0 1 2 x 3 4 5 Figura 16: Gr´ afico da fun¸ c˜ ao de probabilidade do Exemplo 1.1353353 with absolute error < 2.

em centenas de quilos.function(x) { + fx <. se 1 ≤ x < 3 f (x) = (3)  3 0 . (b) Calcular a venda esperada em 30 dias.2 * x[x >= 0 & x < 1]/3 + fx[x >= 1 & x <= 3] <.p.0 . X com f. A demanda di´ aria de arroz em um supermercado.5 2. (c) Qual a quantidade que deve ser deixada ` a disposi¸ c˜ ao para que n˜ ao falte o produto em 95% dos dias? Novamente come¸ camos definindo um objeto do R que cont´ em a fun¸ c˜ ao dada em 3.  2  3 x .0 + fx[x >= 0 & x < 1] <. > f2 <. se 0 ≤ x < 1 − x + 1 .Introdu¸ c˜ ao ao R 97 0.numeric(length(x)) + fx[x < 0] <. Neste caso definimos um vetor do mesmo tamanho do argumento x para armazenar os valores de f (x) e a seguir preenchemos os valores deste vetor para cada faixa de valor de x.d.0 pc pb 0.0 0 1 2 x 3 4 5 Figura 17: Probabilidades pedidas nos itens (b) e (c) do Exemplo 1.0 1. ´ e uma v. se x < 0 ou x ≥ 3 (a) Calcular a probabilidade de que sejam vendidos mais que 150 kg.a.5 f1 (x) 1.(-x[x >= 1 & x <= 3]/3) + 1 + fx[x > 3] <.

5] = 1. 1.3 0. -1.5 centenas de quilos). A fun¸ c˜ ao integrate retorna uma lista onde um dos elementos ($value) ´ e o valor da integral.6 0 1 x 2 3 4 Figura 18: Gr´ afico da fun¸ c˜ ao densidade de probabilidade do Exemplo 2.5. Inf) 0. 3) 1 with absolute error < 1. Agora vamos responder ` as quest˜ oes levantadas.Introdu¸ c˜ ao ao R + + } return(fx) 98 A seguir verificamos que a integral da fun¸ c˜ ao ´ e 1 e fazemos o seu gr´ afico mostrado na Figura 18. 0. 4) 1 with absolute error < 1. Para calcular a esperan¸ ca E [X ] = xf (x)dx definimos uma nova fun¸ c˜ ao e resolvemos a integral. Na quest˜ ao (a) pede-se a probabilidade de que sejam vendidos mais que 150 kg (1.5 f (x)dx e esta integral pode ser resolvida numericamente com o comando: > integrate(f2. > integrate(f2.1e-15 0.0 −1 0.5e-05 A venda esperada em trinta dias ´ e 30 vezes o valor esperado de venda em um dia.5 0.3749999 with absolute error < 3. . portanto a probabilidade P [X > 1. 5].2 f2 (x) 0.1 0.1e-15 > plot(f2.4 0. A ∞ probabilidade corresponde ` a´ area sob a fun¸ c˜ ao no intervalo pedido ou seja P [X > 1.

c(0. mar = c(3. f2(1. f2(k).5) Finalmente lembramos que os exemplos discutidos aqui s˜ ao simples e n˜ ao requerem solu¸ c˜ oes num´ ericas. 0). -1.function(x) { + x * f2(x) + } > integrate(ef2. Este ´ e portanto um problema de otimiza¸ c˜ ao num´ erica e para resolvˆ e-lo vamos usar a fun¸ c˜ ao optimize() do R.Introdu¸ c˜ ao ao R > ef2 <. 2).5. 0 Para encontrar este valor vamos definir uma fun¸ c˜ ao que calcula a diferen¸ ca (em valor absoluto) entre 0.95 e a probabilidade associada a um valor qualquer de x. 0). 3.integrate(f2. > > > > > > > par(mfrow = c(1. Utilizamos estes exemplos somente para ilustrar a obten¸ c˜ ao de solu¸ c˜ oes num´ ericas com o uso do R.5). y = c(0. 0. mgp = c(2.5.95. 4) polygon(x = c(0. 194. 3) 1. ou seja o valor de x que deixa 95% de massa de probabilidade abaixo dele. dens = 10) text(c(1. 3)$value [1] 40 99 Na quest˜ ao (c) estamos em busca do quantil 95% da distribui¸ c˜ ao de probabilidades. f2(1). c("0.95 . c(0. 1. k). x)$value) > optimise(f. que na pr´ atica deve ser utilizado em problemas mais complexos onde solu¸ c˜ oes anal´ ıticas n˜ ao s˜ ao triviais ou mesmo imposs´ ıveis.optimise(f. (Bussab & Morettin.452278 e a fun¸ c˜ ao objetivo com valor muito pr´ oximo de 0. 0. 3))$min plot(f2. 0). dens = 10) k <. 4) polygon(x = c(1. que era o que desej´ avamos. c(0.452278 $objective [1] 7. cex = 2. 1.function(x) abs(0. 3)) $minimum [1] 2. 0). A resposta mostra o valor do quantil x = 2. 12. O quantil ser´ a o valor que minimiza esta probabilidade.573257e-08 A Figura 19 ilustra as solu¸ c˜ oes dos itens (a) e (c) e os comandos abaixo foram utilizados para obten¸ c˜ ao destes gr´ aficos. devendo ser resolvidos analiticamente. 1. 28) Em uma determinada localidade a distribui¸ c˜ ao de renda. "k").1 Exerc´ ıcios 1. ex. 0.95".3e-05 > 30 * integrate(ef2. -1. y = c(0. pag. (unidade monet´ aria) ´ e uma vari´ avel aleat´ oria X com fun¸ c˜ ao de distribui¸ c˜ ao de probabilidade:  1 1 se 0 ≤ x ≤ 2  10 x + 10 3 9 − 40 x + 20 se 2 < x ≤ 6 f (x) =  0 se x < 0 ou x > 6 . em u. que recebe como argumentos a fun¸ c˜ ao a ser otimizada e o intervalo no qual deve procurar a solu¸ c˜ ao. k). Este valor que vamos chamar de k ´ e dado por: k f (x)dx = 0. 5a edi¸ c˜ ao.333333 with absolute error < 7. 0. k.m. > f <. 3).2.5. 0)) plot(f2.

Introdu¸ c˜ ao ao R

100

0.6

0.5

f2 (x) 0.3 0.4

f2 (x) 0.3 0.4

0.5

0.6

0.95 k
−1 0 1 x 2 3 4

0.2

0.1

0.0

−1

0

1 x

2

3

4

Figura 19: Gr´ aficos indicando as solu¸ c˜ oes dos itens (a) e (c) do Exemplo 2. (a) mostre que f (x) ´ e uma f.d.p.. (b) calcule os quartis da distribui¸ c˜ ao. (c) calcule a probabilidade de encontrar uma pessoa com renda acima de 4,5 u.m. e indique o resultado no gr´ afico da distribui¸ c˜ ao. (d) qual a renda m´ edia nesta localidade?

0.0

0.1

0.2

Introdu¸ c˜ ao ao R

101

13

Distribui¸ c˜ oes de Probabilidade

O programa R inclui funcionalidade para opera¸ c˜ oes com distribui¸ c˜ oes de probabilidades. Para cada distribui¸ c˜ ao h´ a 4 opera¸ c˜ oes b´ asicas indicadas pelas letras: d calcula a densidade de probabilidade f (x) no ponto p calcula a fun¸ c˜ ao de probabilidade acumulada F (x) no ponto q calcula o quantil correspondente a uma dada probabilidade r retira uma amostra da distribui¸ c˜ ao Para usar os fun¸ c˜ oes deve-se combinar uma das letras acima com uma abreviatura do nome da distribui¸ c˜ ao, por exemplo para calcular probabilidades usamos: pnorm() para normal, pexp() para exponencial, pbinom() para binomial, ppois() para Poisson e assim por diante. Vamos ver com mais detalhes algumas distribui¸ c˜ oes de probabilidades.

13.1

Distribui¸ c˜ ao Normal

A funcionalidade para distribui¸ c˜ ao normal ´ e implementada por argumentos que combinam as letras acima com o termo norm. Vamos ver alguns exemplos com a distribui¸ c˜ ao normal padr˜ ao. Por default 2 as fun¸ c˜ oes assumem a distribui¸ c˜ ao normal padr˜ ao N (µ = 0, σ = 1). > dnorm(-1) [1] 0.2419707 > pnorm(-1) [1] 0.1586553 > qnorm(0.975) [1] 1.959964 > rnorm(10) [1] -0.6340701 [8] -0.7318969

0.3019576 -1.5772133 -2.4928096 0.3789650 0.4376788

0.7250672 -1.5212721 -0.1771953

O primeiro valor acima corresponde ao valor da densidade da normal f (x) = √ 1 2πσ 2 exp{− 1 (x − µ)2 } 2 2σ

com parˆ ametros (µ = 0, σ 2 = 1) no ponto −1. Portanto, o mesmo valor seria obtido substituindo x por −1 na express˜ ao da normal padr˜ ao: > (1/sqrt(2 * pi)) * exp((-1/2) * (-1)^2) [1] 0.2419707 A fun¸ c˜ ao pnorm(-1) calcula a probabilidade P (X ≤ −1). O comando qnorm(0.975) calcula o valor de a tal que P (X ≤ a) = 0.975. Finalmente, o comando rnorm(10) gera uma amostra de 10 elementos da normal padr˜ ao. Note que os valores que voce obt´ em rodando este comando podem ser diferentes dos mostrados acima. As fun¸ c˜ oes acima possuem argumentos adicionais, para os quais valores padr˜ ao (default) foram assumidos, e que podem ser modificados. Usamos args() para ver os argumentos de uma fun¸ c˜ ao e help() para visualizar a documenta¸ c˜ ao detalhada:

Introdu¸ c˜ ao ao R > args(rnorm) function (n, mean = 0, sd = 1) NULL

102

As fun¸ c˜ oes relacionadas ` a distribui¸ c˜ ao normal possuem os argumentos mean e sd para definir m´ edia e desvio padr˜ ao da distribui¸ c˜ ao que podem ser modificados como nos exemplos a seguir. Note nestes exemplos que os argumentos podem ser passados de diferentes formas. > qnorm(0.975, mean = 100, sd = 8) [1] 115.6797 > qnorm(0.975, m = 100, s = 8) [1] 115.6797 > qnorm(0.975, 100, 8) [1] 115.6797 Para informa¸ c˜ oes mais detalhadas pode-se usar help(). O comando > help(rnorm) ir´ a exibir em uma janela a documenta¸ c˜ ao da fun¸ c˜ ao que pode tamb´ em ser chamada com ?rnorm. Note que ao final da documenta¸ c˜ ao s˜ ao apresentados exemplos que podem ser rodados pelo usu´ ario e que auxiliam na compreens˜ ao da funcionalidade. Note tamb´ em que as 4 fun¸ c˜ oes relacionadas ` a distribui¸ c˜ ao normal s˜ ao documentadas conjuntamente, portanto help(rnorm), help(qnorm), help(dnorm) e help(pnorm) ir˜ ao exibir a mesma documentac ¸˜ ao. C´ alculos de probabilidades usuais, para os quais utiliz´ avamos tabelas estat´ ısticas podem ser facilmente obtidos como no exemplo a seguir. Seja X uma v.a. com distribui¸ c˜ ao N (100, 100). Calcular as probabilidades: 1. P [X < 95] 2. P [90 < X < 110] 3. P [X > 95] Calcule estas probabilidades de forma usual, usando a tabela da normal. Depois compare com os resultados fornecidos pelo R. Os comandos do R para obter as probabilidades pedidas s˜ ao: > pnorm(95, 100, 10) [1] 0.3085375 > pnorm(110, 100, 10) - pnorm(90, 100, 10) [1] 0.6826895 > 1 - pnorm(95, 100, 10) [1] 0.6914625 > pnorm(95, 100, 10, lower = F) [1] 0.6914625

Introdu¸ c˜ ao ao R
0.4 1.0

103

0.3

0.1

0.0

−3

−2

−1

0 x

1

2

3

0.0 −3

0.2

pnorm (x) 0.4 0.6

dnorm (x) 0.2

0.8

−2

−1

0 x

1

2

3

Figura 20: Fun¸ c˜ oes de densidade e probabilidade da distribui¸ c˜ ao normal padr˜ ao. Note que a u ´ltima probabilidade foi calculada de duas formas diferentes, a segunda usando o argumento lower que implementa um algor´ ıtmo de c´ alculo de probabilidades mais est´ avel numericamente. A seguir vamos ver comandos para fazer gr´ aficos de distribui¸ c˜ oes de probabilidade. Vamos fazer gr´ aficos de fun¸ c˜ oes de densidade e de probabilidade acumulada. Estude cuidadosamente os comandos abaixo e verifique os gr´ aficos por eles produzidos. A Figura 20 mostra gr´ aficos da densidade (esquerda) e probabilidade acumulada (direita) da normal padr˜ ao, produzidos com os comandos a seguir. Para fazer o gr´ afico consideramos valores de X entre -3 e 3 que correspondem a +/- trˆ es desvios padr˜ oes da m´ edia, faixa que concentra 99,73% da massa de probabilidade da distribui¸ c˜ ao normal. > plot(dnorm, -3, 3) > plot(pnorm, -3, 3) A Figura 21 mostra gr´ aficos da densidade (esquerda) e probabilidade acumulada (direita) da N (100, 64). Para fazer estes gr´ aficos tomamos uma sequˆ encia de valores de x entre 70 e 130 e para cada um deles calculamos o valor das fun¸ c˜ oes f (x) e F (x). Depois unimos os pontos (x, f (x)) em um gr´ afico e (x, F (x)) no outro. > > > > > x <- seq(70, 130, len = 100) fx <- dnorm(x, 100, 8) plot(x, fx, type = "l") Fx <- pnorm(x, 100, 8) plot(x, Fx, type = "l")

Note que, alternativamente, os mesmos gr´ aficos poderiam ser produzidos com os comandos a seguir. > plot(function(x) dnorm(x, 100, 8), 70, 130) > plot(function(x) pnorm(x, 100, 8), 70, 130) Comandos usuais do R podem ser usados para modificar a aparˆ encia dos gr´ aficos. Por exemplo, podemos incluir t´ ıtulos e mudar texto dos eixos conforme mostrado na gr´ afico da esquerda da Figura 22

Introdu¸ c˜ ao ao R
0.05 1.0

104

0.04

0.03

0.02

Fx 0.01 0.00 70 80 90 100 x 110 120 130 0.0 70 0.2 0.4

fx

0.6

0.8

80

90

100 x

110

120

130

Figura 21: Fun¸ c˜ oes de densidade de probabilidade (esquerda) e fun¸ c˜ ao de distribui¸ c˜ ao acumulada (direita) da N (100, 64). e nos dois primeiros comandos abaixo. Os demais comandos mostram como colocar diferentes densidades em um mesmo gr´ afico como ilustrado ` a direita da mesma Figura. > > > > > > plot(dnorm, -3, 3, xlab = "valores de X", ylab = "densidade de probabilidade") title("Distribuic~ ao Normal\nX ~ N(100, 64)") plot(function(x) dnorm(x, 100, 8), 60, 140, ylab = "f(x)") plot(function(x) dnorm(x, 90, 8), 60, 140, add = T, col = 2) plot(function(x) dnorm(x, 100, 15), 60, 140, add = T, col = 3) legend(110, 0.05, c("N(100,64)", "N(90,64)", "N(100,225)"), fill = 1:3)

13.2

Distribui¸ c˜ ao Binomial

C´ alculos para a distribui¸ c˜ ao binomial s˜ ao implementados combinando as letras b´ asicas vistas acima com o termo binom. Vamos primeiro investigar argumentos e documenta¸ c˜ ao com args() e dbinom(). > args(dbinom) function (x, size, prob, log = FALSE) NULL > help(dbinom) Seja X uma v.a. com distribui¸ c˜ ao Binomial com n = 10 e p = 0.35. Vamos ver os comandos do R para: 1. fazer o gr´ afico das fun¸ c˜ ao de densidade 2. idem para a fun¸ c˜ ao de probabilidade

10. type = "s") As probabilidades pedidas s˜ ao obtidas com os comandos a seguir.04 N(100.0:10 fx <. 64) densidade de probabilidade 0.225) 60 80 100 x 120 140 Figura 22: Gr´ afico com texto nos eixos e t´ ıtulo (esquerda) e v´ arias distribui¸ c˜ oes em um mesmo gr´ afico (direita).004821265 > pbinom(7.2 0.05 0.35) [1] 0. 0.9951787 > sum(dbinom(0:7.35) [1] 0. lower = F) .02 0. calcular P [X < 8] = P [X ≤ 7] 5.02120302 > pbinom(7. 0.64) N(100. 10. 0.35)) [1] 0.1 0.9951787 > 1 . calcular P [X = 7] 4.pbinom(x. calcular P [3 < X ≤ 6] = P [4 ≤ X < 7] Note que sendo uma distribui¸ c˜ ao discreta de probabilidades os gr´ aficos s˜ ao diferentes dos obtidos para distribui¸ c˜ ao normal e os c´ alculos de probabilidades devem considerar as probabilidades nos pontos. 0. 0. Os gr´ aficos das fun¸ c˜ oes de densidade e probabilidade s˜ ao mostrados na Figura 23.Introdu¸ c˜ ao ao R 105 0.35) plot(x.35) plot(x. 10. calcular P [X ≥ 8] = P [X > 7] 6.dbinom(x.4 Distribuicão Normal X ~ N(100.64) N(90.0 0. 3. 10. 10. Fx. type = "h") Fx <.35. 10.01 f(x) 0.03 0.pbinom(7.3 −3 −2 −1 0 1 valores de X 2 3 0. 0. 10. 0.35) [1] 0.00 0. fx. > dbinom(7. > > > > > x <.

35). [1] 0. para simular 5 valores de X ∼ U (5. 20) usamos: > runif(5.3148147 > punif(0.6375592 0.4887607 0. max = 1) NULL > runif(5) [1] 0. 0.3.0 0 0.75.3 13.7390514 0. Nos comandos a seguir inspecionamos os argumentos. 10.4601487 13.8 2 4 x 6 8 10 Figura 23: Fun¸ c˜ oes de probabilidade (esquerda) e distribui¸ c˜ ao acumulada (direita) da B (10.35) [1] 0. max = 20) [1] 6.6 0. o default ´ e uma distribui¸ c˜ ao uniforme no intervalo [0. min = 5.05 0. q . 1] e os argumentos opcionais s˜ ao min e max.028358 15.909895 9.537205 11.35)) [1] 0. d ou r como mencionado anteriormente.15 0.75) [1] 0. > args(runif) function (n. 0. 1) e calculamos a probabilidade acumulada at´ e 0.Introdu¸ c˜ ao ao R 0. Por exemplo.1 Distribui¸ c˜ ao Uniforme Uniforme Cont´ ınua Para a distribui¸ c˜ ao uniforme cont´ ınua usa-se as fun¸ c˜ oes *unif() onde * deve ser p.2 0.25 1.pbinom(3.4 fx 0.00 0 2 4 x 6 8 10 0. 0.443248 8.4601487 > sum(dbinom(4:6.35) . min = 0. 10.20 0.125244 .004821265 > pbinom(6.10 Fx 0.0 106 0.75 Portanto.2191140 0. 0. sorteamos 5 valores da U (0. 10.

default probabilidades iguais para os elementos). rep = T) [1] 2 4 2 5 2 4 2 1 3 5 idem ao anterior. 22. 18. s˜ ao apenas entendidos como pesos. d. 19. 12. com reposi¸ c˜ ao > sample(1:6.Introdu¸ c˜ ao ao R 13. 18) > sample(x. replace = FALSE.3. por´ em agora com a probabilidade de cada face proporcional ao valor da face. podendo ser usada para sorteios. com ou sem reposi¸ c˜ ao (argumento replace. rep = T) [1] 4 5 5 4 3 6 3 3 1 6 Este u ´ltimo exemplo ilustra ainda que os valores passados para o argumento prob n˜ ao precisam ser probabilidades. 10. 15.4 A fun¸ c˜ ao sample() A fun¸ c˜ ao sample() n˜ ao ´ e restrita ` a distribui¸ c˜ ao uniforme discreta. size. > sample(1:10. rep = T) [1] 6 10 3 6 10 4 9 1 3 2 8 6 6 7 8 13.c(23. 5) [1] 28 34 19 13 17 sorteio de 10 n´ umeros entre os poss´ ıveis resultados do lan¸ camento de um dado. > sample(1:6. > args(sample) function (x. embora algumas outras fun¸ c˜ oes possam ser usadas. como no exemplo a seguir onde s˜ ao sorteados 15 valores de uma uniforma discreta com valores (inteiros) entre 1 e 10 (X ∼ Ud (1. prob = NULL) NULL Vejamos alguns exemplos: sorteio de 3 n´ umeros entre os inteiros de 0 a 20 > sample(0:20. 3) [1] 9 13 6 sorteio de 5 n´ umeros entre os elementos de um certo vetor > x <. 13. 10)). provavelmente devido a sua simplicidade. default sem reposi¸ c˜ ao). 34. com a possibilidade de associar diferentes probabilidades a cada elemento (argumento prob. prob = 1:6. . Por exemplo para sortear n´ umeros pode-se usar sample(). 28. p e d. 17. 10.2 Uniforme Discreta 107 N˜ ao h´ a entre as fun¸ c˜ oes b´ asicas do R uma fun¸ c˜ ao espec´ ıfica para a distribui¸ c˜ ao uniforme discreta com op¸ c˜ oes de prefixos r. A pr´ opria fun¸ c˜ ao trata isto internamente fazendo a pondera¸ c˜ ao adequada. 20.

N.C. IME-USP.4. 80) e outra Z ∼ N (85. S˜ ao Paulo.95 4.P. 3 ed.Introdu¸ c˜ ao ao R 108 13. pag 77) Sendo X uma vari´ avel seguindo o modelo Binomial com parˆ ametro n = 15 e p = 0. Fa¸ ca os seguintes gr´ aficos: da fun¸ c˜ ao de densidade de uma vari´ avel com distribui¸ c˜ ao de Poisson com parˆ ametro λ = 5 da densidade de uma vari´ avel X ∼ N (90. pergunta-se: P (X ≥ 14) P (8 < X ≤ 10) P (X < 2 ou X ≥ 11) P (X > 3 e X < 6) P (X ≤ 13 | X ≥ 11) P (X ≥ 11 ou X > 13) 3. Os exerc´ ıcios abaixo com indica¸ c˜ ao de p´ agina foram retirados de: Magalh˜ aes. M. & Lima. 100) densidades de distribui¸ c˜ oes χ2 com 1. 2 e 5 graus de liberdade. obtenha: P (X ≤ 115) P (X ≥ 80) P (X ≤ 75) P (85 ≤ X ≤ 110) P (|X − 90| ≤ 10) O valor de a tal que P (90 − a ≤ X ≤ 90 + a) = γ. 100) sobreponha ao gr´ afico anterior a densidade de uma vari´ avel Y ∼ N (90. 2. Para quatro lanc ¸amentos independentes dessa moeda. (Ex 1. (Ex 8. (Ex 5. . 100). pag 67) Uma moeda viciada tem probabilidade de cara igual a 0. (2001) No¸ c˜ oes de Probabilidade e Estat´ ıstica. γ = 0.4. A. 392p.3. A probabilidade de indiv´ ıduos nascerem com certa caracter´ ıstica ´ e de 0. estude o comportamento da vari´ avel n´ umero de caras e fa¸ ca um gr´ afico de sua fun¸ c˜ ao de distribui¸ c˜ ao. Para o nascimento de 5 indiv´ ıduos e considerando os nascimentos como eventos independentes.5 Exerc´ ıcios Nos exerc´ ıcios abaixo iremos tamb´ em usar o R como uma calculadora estat´ ıstica para resolver alguns exemplos/exerc´ ıcios de probabilidade tipicamente apresentados em um curso de estat´ ıstica b´ asica. pag 193) Para X ∼ N (90. 1. estude o comportamento da vari´ avel n´ umero de indiv´ ıduos com a caracter´ ıstica e fa¸ ca um gr´ afico de sua fun¸ c˜ ao de distribui¸ c˜ ao. 5.

tios.1 0. pag 65) Num estudo sobre a incidˆ encia de cˆ ancer foi registrado.1 0. irm˜ aos. A distribui¸ c˜ ao da soma de duas vari´ aveis aleat´ orias uniformes n˜ ao ´ e uniforme. 8. filhos e sobrinhos). para cada paciente com este diagn´ ostico o n´ umero de casos de cˆ ancer em parentes pr´ oximos (pais. Sendo X uma vari´ avel seguindo o modelo Normal com m´ edia µ = 130 e variˆ ancia σ 2 = 64.1 0.3 0. comporta-se como abaixo: Simule a resistˆ encia de 5000 vigas a partir de valores gerados de uma uniforme [0. Os dados de 26 pacientes s˜ ao os seguintes: Paciente Incidˆ encia Paciente Incidˆ encia 1 2 3 4 5 6 7 8 9 10 11 12 13 2 5 0 2 1 5 3 3 3 2 0 1 1 14 15 16 17 18 19 20 21 22 23 24 25 26 4 5 2 2 3 2 1 5 4 0 0 3 3 Estudos anteriores assumem que a incidˆ encia de cˆ ancer em parentes pr´ oximos pode ser modelada pela seguinte fun¸ c˜ ao discreta de probabilidades: 1 2 3 4 5 Incidˆ encia 0 pi 0.1 0. Verifique isto gerando dois vetores x e y com distribui¸ c˜ ao uniforme [0.1 os dados observados concordam com o modelo te´ orico? fa¸ ca um gr´ afico mostrando as frequˆ encias te´ oricas (esperadas) e observadas. Obtenha o histograma para x. Verifique o histograma.3 0.6.Introdu¸ c˜ ao ao R Resistˆ encia 2 3 4 5 6 pi 0. 9. (Dica: Use o comando ifelse() do R). (extra´ ıdo de Magalh˜ aes e Lima. 2001) A resistˆ encia (em toneladas) de vigas de concreto produzidas por uma empresa. y e z . Descreva os comandos que utilizou. 1] com 3000 valores cada e fazendo z = x + y . .2 0.1].2 109 6. pergunta-se: (a) P (X ≥ 120) (b) P (135 < X ≤ 145) (c) P (X < 120 ou X ≥ 150) 7. (Ex 3.1 0.4 0.

100)^2) + return(fx) + } Para obter o gr´ afico desta distribui¸ c˜ ao mostrado na Figura 24 usamos o fato que a maior parte da fun¸ c˜ ao est´ a no intervalo entre a m´ edia +/.6914625 with absolute error < 8. portanto entre 70 e 130.fn(x) plot(x.1 Probabilidades e integrais A probabilidade de um evento em uma distribui¸ c˜ ao cont´ ınua ´ e uma ´ area sob a curva da distribui¸ c˜ ao. Note que esta fun¸ c˜ ao. Para marcar no gr´ afico a ´ area que corresponde a probabilidade pedida criamos um pol´ ıgono com coordenadas ax e ay definindo o per´ ımetro desta ´ area. 110) 0. diferentemente da pnorm() reporta ainda o erro de aproxima¸ c˜ ao num´ erica. . Lembrando que a normal tem a fun¸ c˜ ao de densidade dada por 1 1 f (x) = √ exp{− 2 (x − µ)2 } 2σ 2πσ 2 vamos definir uma fun¸ c˜ ao no R para a densidade normal deste problema: > fn <. x[x < 95]. Seja X uma v.3085375 with absolute error < 2.c(0. 95) ay <. l = 200) fx <. > > > > > > x <.trˆ es desvios padr˜ oes.(1/sqrt(2 * pi * 100)) * exp((-1/200) * (x . 130. 95) 0. 100.function(x) { + fx <. 14. 70. 95. 0) polygon(ax.c(70. fx. fn(70). +Inf) 0. 100).Introdu¸ c˜ ao ao R 110 14 Complementos sobre distribui¸ c˜ oes de probabilidade Agora que j´ a nos familiarizamos com o uso das distribui¸ c˜ oes de probabilidade vamos ver alguns detalhes adicionais sobre seu funcionamento. type = "l") ax <.seq(70. fx[x < 95]. ay.3085375 Vamos agora “esquecer” o comando pnorm() e ver uma outra forma de resolver usando integra¸ c˜ ao num´ erica. dens = 10) Para calcular a ´ area pedida sem usar a fun¸ c˜ ao pnorm() podemos usar a fun¸ c˜ ao de integra¸ c˜ ao num´ erica. -Inf. Note ainda que na pr´ atica n˜ ao precisamos definir e usar a fun¸ ca ˜o f n pois ela fornece o mesmo resultado que a fun¸ c˜ ao dnorm(). > integrate(fn.6826895 with absolute error < 7. Para calcular a probabilidade P [X < 95] usamos o comando: > pnorm(95.1e-05 e os resultados acima evidentemente coincidem com os obtidos anterioriormente usando pnorm(). fn(95).6e-15 > integrate(fn.1e-06 Portanto para os demais ´ ıtens do problema P [90 < X < 110] e P [X > 95] fazemos: > integrate(fn. 95. Vamos refor¸ car esta id´ eia revisitando um exemplo visto na aula anterior. Podemos ent˜ ao fazer como nos comandos que se seguem. com distribui¸ c˜ ao N (100.a. 10) [1] 0. 90.

Fica como exerc´ ıcio encontrar o valor da integral acima. lambda = 500) { + fx <.03 0. 14. > fexp <.function(x. Para isto vamos criar uma fun¸ c˜ ao com a express˜ ao da exponencial e depois integrar no intervalo pedido e este resultado deve ser igual ao encontrado com a solu¸ c˜ ao anal´ ıtica.04 80 90 100 x 110 120 130 Figura 24: Fun¸ c˜ oes de densidade da N (100. Para ilustrar o uso do R vamos tamb´ em obter a resposta usando integra¸ c˜ ao num´ erica.2 Distribui¸ c˜ ao exponencial A fun¸ c˜ ao de densidade de probabilidade da distribui¸ c˜ ao exponencial com parˆ ametro λ e denotada Exp(λ) ´ e dada por: 1 −x/λ e para x ≥ 0 λ f (x) = 0 para x < 0 Seja uma vari´ avel X com distribui¸ c˜ ao exponencial de parˆ ametro λ = 500. 100) com a ´ area correspondente ` a P [X ≤ 95].00 70 0. A solu¸ c˜ ao anal´ ıtica pode ser encontrada resolvendo P [X ≥ 400] = ∞ 400 f (x)dx = ∞ 400 1 −x/λ e dx λ que ´ e uma integral que pode ser resolvida analiticamente.Introdu¸ c˜ ao ao R 111 0. 0.ifelse(x < 0. Calcular a probabilidade P [X ≥ 400].02 0.01 fx 0. (1/lambda) * exp(-x/lambda)) + return(fx) .

x = ex) 250000 with absolute error < 6. Em geral o usu´ ario n˜ ao precisa se preocupar com este mecanismo. rate=1/500. x[x > 400]. 2000). exp. l = 200) fx <. 2000) ay <. > e. lambda = 500) { + ex <.exp. 0. dens = 10) 14. Para isto vamos definir fun¸ c˜ oes para a esperan¸ ca e variˆ ancia e fazer a integra¸ c˜ ao num´ erica.function(x.c(0. 0.9 14. x[x > 400]. fx.x) { + vx <. ay. Inf) 0. Note que a fun¸ c˜ ao ´ e positiva no intervalo (0.seq(0.Introdu¸ c˜ ao ao R + } > integrate(fexp.4 Gerador de n´ umeros aleat´ orios A gera¸ c˜ ao da amostra depende de um gerador de n´ umeros aleat´ orios que ´ e controlado por uma semente (seed em inglˆ es). rate = 1/500) plot(x.449329 with absolute error < 5e-06 112 Note ainda que poder´ ıamos obter o mesmo resultado simplesmente usando a fun¸ c˜ ao pexp() com o comando pexp(400. 400. Cada vez que o comando rnorm() ´ e chamado diferentes elementos da amostra s˜ ao produzidos. +∞) mas para fazer o gr´ afico consideramos apenas o intervalo (0. 2000).exp.exp.00088 > ex <. Novamente para ilustrar o uso do R vamos “esquecer” que conhecemos estes resultados e vamos obtˆ e-los numericamente.function(x.dexp(x. dexp(c(400. 0) polygon(ax. Mas caso necess´ ario set.3 Esperan¸ ca e Variˆ ancia ∞ ancia Sabemos que para a distribui¸ c˜ ao exponencial a esperan¸ ca E [X ] = 0 xf (x)dx = λ e a variˆ ∞ V ar[X ] = 0 (x − E [X ])2 f (x)dx = λ2 pois podem ser obtidos analiticamente. onde o argumento corresponde a 1/λ na equa¸ c˜ ao da exponencial.integrate(e. 2000. 1/500). porque a semente do gerador ´ e automaticamente modificada pela fun¸ c˜ ao. Inf) 500 with absolute error < 0.exp.x)^2) * (1/lambda) * exp(-x/lambda) + return(vx) + } > integrate(v. Inf)$value > ex [1] 500 > v.x * (1/lambda) * exp(-x/lambda) + return(ex) + } > integrate(e. A Figura 25 mostra o gr´ afico desta distribui¸ c˜ ao com indica¸ ca ˜o da ´ area correspondente ` a probabilidade pedida. > > > > > > x <.exp <.exp <. exp.seed() . type = "l") ax <. lower=F). 400. Inf.c(400. lambda = 500.((x . 0. 2000.

2000.04088223 1.30640096 .seed() conforme ilustrado abaixo.dexp(x.c(0.0020 0.seq(0.02522505 0. ay. rate = 1/500) plot(x.0015 500 1000 x 1500 2000 Figura 25: Fun¸ c˜ ao de densidade da Exp(500) com a ´ area correspondente ` a P [X ≥ 400].4257775 0. > set.4464515 -2.seed(214) > rnorm(5) [1] -0.7488927 0.46774980 0.Introdu¸ c˜ ao ao R 113 > > > > > > x <.02522505 0. dexp(c(400. fx.c(400.0000 0 0. 2000) ay <.seed(214) > rnorm(5) [1] -0.00335193 2. Esta fun¸ c˜ ao define o valor inicial da semente que ´ e mudado a cada gera¸ c˜ ao subsequente de n´ umeros aleat´ orios. Portanto para gerar duas amostras idˆ enticas basta usar set.2051418 1. pode ser usada para controlar o comportamento do gerador de n´ umeros aleat´ orios. 0) polygon(ax. 2000.9818137 > set. x[x > 400].46774980 0. 2000).00335193 2. 1/500).30640096 > rnorm(5) [1] 0. l = 200) fx <. dens = 10) 0. x[x > 400].04088223 1. 400. type = "l") ax <.0005 fx 0.0010 0.

644854 1.5 ao valor pedido. 20.5] > pbinom(5. 10.Introdu¸ c˜ ao ao R 114 Nos comandos acima mostramos que depois da primeira amostra ser retirada a semente ´ e mudada e por isto os elementos da segunda amostra s˜ ao diferentes dos da primeira.0:10 px <.5). p) ≈ N (np.4257775 10. 5).872238 28.4464515 997.5) plot(xb. 10.7948582 > rnorm(4. Na pr´ atica. Isto significa que podemos usar a distribui¸ ca ˜o normal para calcular probabilidades aproximadas em casos em que seria “trabalhoso” calcular as probabilidades exatas pela binomial ou Poisson. type = "h") xn <. A aproxima¸ c˜ ao neste caso ´ e de que X ∼ B (n. > qnorm(c(0. A Figura 26 mostra o gr´ afico da distribui¸ c˜ ao binomial e da aproxima¸ c˜ ao pela normal. mean = c(10.e. De toda forma vamos ilustrar aqui este resultado. P [X < 6] Neste caso P [XB < 6] = P [XB ≤ 5] ≈ P [XN ≤ 5. 1000)) [1] 0.6 Aproxima¸ c˜ ao pela Normal Nos livros texto de estat´ ıstica podemos ver que as distribui¸ co ˜es binomial e Poisson podem ser aproximadas pela normal. 0. Seja X ∼ B (10. 100. len = 100) fx <. fx) Vamos tamb´ em calcular as seguintes probabilidades exatas e aproximadas. os desvios padr˜ ao utilizados foram (2.5) .seed)| e |help(set. 0. Isto ´ e especialmente importante no caso de usarmos calculadoras e/ou tabelas para calcular probabilidades.seed)| 14. 2. visto que ´ e f´ acil calcular as probabilidades exatas com o aux´ ılio do computador. Vejamos como fica a aproxima¸ c˜ ao no caso da distribui¸ c˜ ao binomial. p).553964 35. 14. np(1 − p)). i. > > > > > > xb <. 5)) [1] 13.95)) [1] -1. Para saber mais sobre gera¸ c˜ ao de n´ umeros aleat´ orios no R veja |help(.963627 6. mean = c(0. Quando usamos um computador esta aproxima¸ c˜ ao ´ e menos importante. sd = c(2. 0. 2. 1/2) e portanto com a aproxima¸ c˜ ao X ≈ N (5.644854 > rnorm(4. Seja X ∼ B (n. 5. lembrando que ao usar a aproxima¸ c˜ ao pela normal devemos usar a corre¸ c˜ ao de continuidade e/ou somando e subtraindo 0.05.7488927 100.584654 Note que no u ´ltimo exemplo a lei da reciclagem foi utilizada no vetor de desvios padr˜ ao.5 Argumentos vetoriais e lei da reciclagem As fun¸ c˜ oes de probabilidades aceitam tamb´ em vetores em seus argumentos conforme ilustrado nos exemplo abaixo. 40). sqrt(2.seq(0. px. 10.Random. 30. 10.dnorm(xn. em geral a aproxima¸ c˜ ao ´ e considerada aceit´ avel quando np ≥ 5 e n(1 − p) ≥ 5 e sendo tanto melhor quanto maior for o valor de n.5)) lines(xn.dbinom(xb. 5. Depois retornamos a semente ao seu estado original a a pr´ oxima amostra tem portanto os mesmos elementos da primeira.

828125 > pnorm(6. 5.5] > pbinom(6. sqrt(2. 1/2) e a aproxima¸ c˜ ao pela N (5.25 2 4 xb 6 8 10 Figura 26: Fun¸ c˜ ao de probabilidade da B (10.5) [1] 0.5.5).5] > 1 . [1] 0. 10.Introdu¸ c˜ ao ao R 115 px 0. 0. 0.8286091 P [X > 2] Neste caso P [XB > 2] = 1 − P [XB ≤ 2] ≈ 1 − P [XN ≤ 2.9453125 .15 0.20 0.pbinom(2. 5. 2.5) [1] 0. sqrt(2.05 0.10 0.6230469 > pnorm(5.5)) [1] 0. 10.00 0 0.6240852 P [X ≤ 6] Neste caso P [XB ≤ 6] ≈ P [XN ≤ 6.5.5)) [1] 0.

pnorm(2. 0.5.9430769 P [X ≥ 2] Neste caso P [XB ≥ 2] = 1 − P [XB ≤ 1] ≈ P [XN ≤ 1.pnorm(6.5.5] − P [XN ≤ 3. sqrt(2.pnorm(3. 5. 10.5.5) .5)) [1] 0. sqrt(2. sqrt(2. 0. 5.9892578 > 1 .5] > pbinom(8.Introdu¸ c˜ ao ao R > 1 . 5.5. 0. 0.8173828 > pnorm(8.5.5)) . sqrt(2.pnorm(0.5] > dbinom(7.5)) . 5. 10.5] > pbinom(5.5.5)) [1] 0.6220703 > pnorm(5.5)) [1] 0.pbinom(1. sqrt(2.8151808 P [1 ≤ X ≤ 5] Neste caso P [1 ≤ XB ≤ 5] = P [XB ≤ 5] − P [XB ≤ 0] ≈ P [XN ≤ 5. sqrt(2.1144677 P [3 < X ≤ 8] Neste caso P [3 < XB ≤ 8] = P [XB ≤ 8] − P [XB ≤ 3] ≈ P [XN ≤ 8.5)) .6218719 116 . 5.5. 10.5) [1] 0.5] − P [XN ≤ 0. 10.9865717 P [X = 7] Neste caso P [XB = 7] ≈ P [6.5) [1] 0.5] > 1 . 0. sqrt(2. 10.5) [1] 0.pbinom(3.5.pbinom(0. 5.1171875 > pnorm(7.5) [1] 0. 0. 5.pnorm(1. 5.5)) [1] 0.5)) [1] 0. sqrt(2.5) . 10.5 ≤ XN ≤ 7.

198. (Bussab & Morettin.7 Exerc´ ıcios 1. (c) Obter as probabilidades: P [X > 2] P [1. 51) A fun¸ c˜ ao de densidade de probabilidade de distribui¸ c˜ ao Weibull ´ e dada por: f (x) = λ xλ−1 e−x 0 λ para x ≥ 0 para x < 0 (a) Obter E [X ] para λ = 2. ex. pag.Introdu¸ c˜ ao ao R 117 14.5 < X < 6] P [X < 8] . Obter o resultado analitica e computacionalmente. Dica: para resolver vocˆ e vai precisar da defini¸ c˜ ao da fun¸ c˜ ao Gama: Γ(a) = 0 ∞ xa−1 e−x dx (b) Obter E [X ] para λ = 5.

O resultado desta fun¸ c˜ ao ´ e bem simples e claro: ela produz uma fun¸ c˜ ao de densidade obtida a partir dos dados sem forma param´ etrica conhecida.d) > rug(precip) Embora os resultados mostrados acima seja simples e f´ aceis de entender. h´ a muita coisa por tr´ as deles! N˜ ao vamos aqui estudar com detalhes esta fun¸ c˜ ao e os fundamentos te´ oricos nos quais se baseiam esta implementa¸ c˜ ao computacional pois isto estaria muito al´ em dos objetivos e escopo deste curso. Nesta sess˜ ao vamos ver como podemos. m´ etodos estat´ ısticos baseados em simula¸ c˜ ao podem gerar amostras de quantidades de interesse que n˜ ao seguem uma distribui¸ c˜ ao de probabilidade de forma conhecida. density() produz o resultado visto anteriormente criando uma sequˆ encia de valores no eixo-X e estimando a densidade em cada ponto usando os dados ao redor deste ponto. Portanto. Podem ser dados pesos aos dados vizinhos de acordo com sua proximidade ao ponto a ser estimado. (ii) estimar o(s) parˆ ametro(s) a partir dos dados.Introdu¸ c˜ ao ao R 118 15 Explorando distribui¸ c˜ oes de probabilidade emp´ ıricas Na Sess˜ ao 13 vimos com usar distribui¸ c˜ oes de probabilidade no R. testes Monte Carlo. Estas distribui¸ c˜ oes tem express˜ oes conhecidas e s˜ ao indexadas por um ou mais parˆ ametros. prob = T) precip.1 Estima¸ c˜ ao de densidades A estima¸ c˜ ao de densidades ´ e implementada no R pela fun¸ c˜ ao density(). Para maiores detalhes veja as referˆ encias na documenta¸ c˜ ao da fun¸ c˜ ao. 15.density(precip) lines(precip.d) Portanto podemos ver que density() “suaviza” o histograma. Depois disto procura-se verificar se o ajuste foi “bom o suficiente”. agora sem fazer o histograma. > > > > data(precip) hist(precip. a partir de um conjunto de dados explorar os poss´ ıveis formatos da distribui¸ c˜ ao geradora sem impor nenhuma forma param´ etrica para fun¸ c˜ ao de densidade. Na pr´ atica em estat´ ıstica em geral somente temos dispon´ ıvel uma amostra e n˜ ao conhecemos o mecanismo (distribui¸ c˜ ao) que gerou os dados. dentre outros. Veja este primeiro exemplo que utiliza o conjunto de dados precip que j´ a vem com o R e cont´ em valores m´ edios de precipita¸ c˜ ao em 70 cidades americanas. Vamos nos ater ` as informa¸ c˜ oes principais que nos permitam compreender o b´ asico necess´ ario sobre o uso da fun¸ c˜ ao. Vamos examinar os argumentos da fun¸ c˜ ao. capturando e concentrando-se nos principais aspectos dos dados dispon´ ıveis. que pode ser vista digitando help(density) Basicamente. Em particular. Isto ocorre com frequˆ encia em m´ etodos de inferˆ encia Bayesiana e m´ etodos computacionalmente intensivos como bootstrap. fazer um histograma de frequˆ encias relativas e depois adicionar a este histograma a linha de densidade estimada. Nos comandos a seguir vamos carregar o conjunto de dados. Muitas vezes o que se faz ´ e: (i) assumir que os dados s˜ ao provenientes de certa distribui¸ c˜ ao. conforma mostra a Figura 27. > plot(precip. caso contr´ ario tenta-se usar uma outra distribui¸ c˜ ao e recome¸ ca-se o processo.d <. conhecer a distribui¸ c˜ ao e seu(s) parˆ ametro(s) ´ e suficiente para caracterizar completamente o comportamento distribui¸ c˜ ao e extrair resultados de interesse. . A necessidade de estudar fenˆ omenos cada vez mais complexos levou ao desenvolvimento de m´ etodos estat´ ısticos que ` as vezes requerem um flexibilidade maior do que a fornecida pelas distribui¸ c˜ oes de probabilidade de forma conhecida. Vamos ver na Figura 28 uma outra forma de visualizar os dados e sua densidade estimada.

. c("bw=1". bw = 1).015 0.005 0. O R implementa v´ arios n´ ucleos diferentes cujos formatos s˜ ao mostrados na Figura 30.) NULL Os dois argumentos chave s˜ ao portanto bw e kernel que controlam a distˆ ancia na qual se procuram vizinhos e o peso a ser dado a cada vizinho. bw = 10). . ao que chamamos de n´ ucleo (kernel).035 0. kern = kernels[i]).. bw = 1). Para ilustrar isto vamos experimentar a fun¸ c˜ ao com diferentes valores para o argumento bw.Introdu¸ c˜ ao ao R 119 Histogram of precip 0. respectivamente.025 0.eval(formals(density.030 10 20 30 40 precip 50 60 70 Figura 27: Histograma para os dados precip e a densidade estimada usando a fun¸ c˜ ao density. main = "kernels com bw = 1") > for (i in 2:length(kernels)) lines(density(0.010 Density 0.default)$kernel)) > plot(density(0. > args(density) function (x. bw = 1. "bw=10").020 0. lty = 1:3) O outro argumento importante ´ e tipo de fun¸ c˜ ao de pesos. > (kernels <. Os resultados est˜ ao na Figura 29. . main = "") rug(precip) lines(density(precip. 0. lty = 3) legend(5. xlab = "". "bw=5".045. Podemos notar que o grau de suaviza¸ c˜ ao aumenta a medida de aumentamos os valores deste argumento e as densidades estimadas podem ser bastante diferentes! > > > > > plot(density(precip. lty = 2) lines(density(precip.000 0 0. bw = 5).

´ e o argumento mais importante.00 0.4. "rectangular". lty = 2. legend = kernels. main = "") rug(precip) lines(density(precip. "cosine"). y.5. col = rep(1:3. col = 3) lines(density(precip. col = 2) lines(density(precip. col = seq(kernels).848 80 Figura 28: Dados precip e a densidade estimada usando a fun¸ c˜ ao density. "biweight". "epanechnikov". col = 2) lines(density(precip. ker = "tri"). "triangular". 3). . 0. inspecionando os resultados anteriores podemos concluir que a largura de banda (bandwidth – bw) ´ e o que mais influencia a estima¸ c˜ ao de densidade.035. ker = "biw"). ker = "rec"). O tipo de n´ ucleo (kernel) ´ e de importˆ ancia secund´ aria. + cex = 0. 0.01 Density 0. lty = rep(1:2.8. ker = "cos").02 0.int = 1) Utilizando diferentes n´ ucleos no conjunto de dados precip obtemos os resultados mostrados na Figura 31. isto ´ e.Introdu¸ c˜ ao ao R 120 density. lty = 2) lines(density(precip. + col = i) > legend(1. ker = "epa"). col = 3) legend(0.default(x = precip) 0. lty = 1. legend = c("gaussian". lty = 3. each = 2)) Portanto.03 0 20 40 60 N = 70 Bandwidth = 3. Note que as densidades estimadas utilizando os diferentes n´ ucleos s˜ ao bastante similares! > > > > > > > > + + plot(density(precip).

passando agora para este argumento caracteres que identificam o valor.01 Density 0. Se quisermos mudar isto para o m´ etodo de Sheather & Jones podemos fazer como nos comandos abaixo que produzem o resultado mostrado na Figura 32. O problema ´ e que esta escolha ´ e subjetiva.00 0.04 10 20 30 40 50 N = 70 Bandwidth = 1 60 70 Figura 29: Densidade estimada usando a fun¸ c˜ ao density com diferentes valores para o argumento bw.density(precip.03 0.dSJ <. bw = "sj") > plot(precip. Estes m´ etodos podem ser especificados no mesmo argumento bw. Na Figura 33 ilustramos resultados obtidos com os diferentes m´ etodos.Introdu¸ c˜ ao ao R 121 bw=1 bw=5 bw=10 0. Felizmente para n´ os v´ arios autores se debru¸ caram sobre este problema e descobriram m´ etodos autom´ aticos de sele¸ c˜ ao que que comportam bem na maioria das situa¸ c˜ oes pr´ aticas.dSJ) > rug(precip) Os detalhes sobre os diferentes m´ etodos implementados est˜ ao na documenta¸ c˜ ao de bw. Bem. > precip.02 0.nrd(). No comando usado no in´ ıcio desta sess˜ ao onde n˜ ao especificamos o argumento bw foi utilizado o valor “default” que ´ e o m´ etodo "nrd0" que implementa a regra pr´ atica de Silverman. ao inv´ es de um valor num´ erico. > data(precip) > plot(density(precip. n = 1000)) > rug(precip) . a esta altura voce deve estar se perguntando: mas como saber qual a largura de banda adequada? A princ´ ıpio podemos tentar diferentes valores no argumento bw e inspecionar os resultados.

"SJ-ste". bw = "SJ-ste"). col = 1:6. "nrd". 3.4 gaussian epanechnikov rectangular triangular biweight cosine optcosine 0. col = 3) lines(density(precip.0 −3 0. . col = 5) lines(density(precip. "ucv". bw = "ucv"). col = 2) lines(density(precip.035. > > > > > > + lines(density(precip. Carregar o conjunto de dados faithful e obter estima¸ c˜ ao de densidade para as vari´ aveis ’tempo de erup¸ c˜ ao’ e ’dura¸ c˜ ao da erup¸ c˜ ao. "SJ-dpi"). col = 4) lines(density(precip.2 Exerc´ ıcios 1.Introdu¸ c˜ ao ao R 122 [1] "gaussian" [6] "cosine" "epanechnikov" "rectangular" "optcosine" "triangular" "biweight" kernels com bw = 1 0. bw = "bcv"). lty = 1) 15. bw = "nrd"). Carregar o conjunto airquality e densidades estimadas para as 4 vari´ aveis medidas neste conjunto de dados. "bcv".1 Density 0. legend = c("nrd0".2 0.3 −2 −1 0 1 2 3 Figura 30: Diferentes n´ ucleos implementados pela fun¸ c˜ ao density. bw = "SJ-dpi"). 0. Rodar e estudar os exemplos da sess˜ ao examples da documenta¸ c˜ ao da fun¸ c˜ ao density. col = 6) legend(55. 2.

Os dados foram os seguintes (em . Vinte pacientes foram sorteados e tiveram seu tempo de rea¸ c˜ ao anotado.848 80 Figura 31: Densidade estimada usando a fun¸ c˜ ao density com diferentes valores para o argumento kernel. escrevendo uma fun¸ c˜ ao 3.01 Density 0.Introdu¸ c˜ ao ao R 123 gaussian epanechnikov rectangular triangular biweight cosine 0.00 0. fazendo as contas passo a passo.1 M´ edia de uma distribui¸ c˜ ao normal com variˆ ancia desconhecida Considere o seguinte problema: Exemplo O tempo de rea¸ c˜ ao de um novo medicamento pode ser considerado como tendo distribui¸ c˜ ao Normal e deseja-se fazer inferˆ encia sobre a m´ edia que ´ e desconhecida obtendo um intervalo de confian¸ ca. Para fins did´ aticos mostrando os recursos do R vamos mostrar trˆ es poss´ ıveis solu¸ c˜ oes: 1. usando uma fun¸ c˜ ao j´ a existente no R 16. 16 Intervalos de confian¸ ca – I Nesta sess˜ ao vamos verificar como utilizar o R para obter intervalos de confian¸ ca para parˆ ametros de distribui¸ c˜ oes de probabilidade. utilizando o R como uma calculadora 2.02 0.03 0 20 40 60 N = 70 Bandwidth = 3.

8 5. 4.7 4.5 4. 4. 5. 3. para uma amostra de tamanho n ´ e dado por: x ¯ − tt S2 . bw = "sj") 0.4 5.5 6.4 3.3. 4. 6.5 3. 5. com n − 1 graus de liberdade.1 4. n x ¯ + tt S2 n onde tt ´ e o quantil de ordem 1 − α/2 da distribui¸ c˜ ao t de Student. 4.9.015 0.025 0.4.7.c(2. 4. 6.default(x = precip. 3.2) Sabemos que o intervalo de confian¸ ca para m´ edia de uma distribui¸ c˜ ao normal com variˆ ancia desconhecida. 5. 4.5.030 0 20 40 60 N = 70 Bandwidth = 3.4. .9.5.2 Entramos com os dados com o comando > tempo <.7 5.5.9.938 80 Figura 32: Densidade estimada para os dados precip usando a fun¸ c˜ ao density com crit´ erio de Sheather & Jones para sele¸ c˜ ao da largura de banda. minutos): 2.005 0.9 6. 3.9 4.6 4.8 5.000 0.020 0.7.8.8 5. + 5. 5.6.035 0.9 3.0 3. Vamos agora obter a resposta das trˆ es formas diferentes mencionadas acima.8.Introdu¸ c˜ ao ao R 124 density.1. 5.6 5.8.3 4.6.3.3 4. 4.010 Density 0. 3.

var(tempo) > t. > n <.m [1] 4.v/length(tempo)) > t.01 Density 0. > t. para obter um IC a 95% de confian¸ ca.v <. n = 1000) nrd0 nrd ucv bcv SJ−ste SJ−dpi 0. 16.v [1] 0.m <.1.length(tempo) > n [1] 20 > t.992079 A seguir montamos o intervalo utilizando os quantis da distribui¸ c˜ ao t.1) * sqrt(t.t.ic [1] 4.mean(tempo) > t.m + qt(c(0.02 0.211157 .Introdu¸ c˜ ao ao R 125 density.03 0 20 40 60 N = 70 Bandwidth = 3. df = n .ic <.1 Fazendo as contas passo a passo Nos comandos a seguir calculamos o tamanho da amostra.00 0.025.848 80 Figura 33: Diferentes m´ etodos para largura de banda implementados pela fun¸ c˜ ao density.278843 5.default(x = precip. 0. a m´ edia e a variˆ ancia amostral.975).745 > t.

(1 .382186 Escrever uma fun¸ c˜ ao ´ e particularmente u ´til quando um procedimento vai ser utilizados v´ arias vezes.1.95) { + n <.var(x) + quantis <.conf)/2. Montar o intervalo de confian¸ ca para a propor¸ c˜ ao de curados. Note que h´ a duas express˜ oes poss´ ıveis para este IC: o “otimista”e o “conservativo”. atrav´ es de uso de um certo medicamento em doentes contaminados com cerc´ aria.211157 > ic.745 16.test(tempo) One Sample t-test data: tempo t = 21.1. Encontre ambos intervalos. 1 . e observar que 160 deles foram curados.m(tempo.211157 sample estimates: mean of x 4.media + quantis * sqrt(variancia/n) + return(ic) + } > ic.qt(c((1 . 16.278843 5. .mean(x) + variancia <. escolhidos ao acaso.1) + ic <.m(tempo) [1] 4.107814 5. Pretende-se estimar a propor¸ c˜ ao p de cura.test pode ser utilizada como vemos no resultado do comando a sequir que coincide com os obtidos anteriormente.3048.2 Exerc´ ıcios Em cada um dos exerc´ ıcios abaixo tente obter os intervalos das trˆ es formas mostradas acima.3 Usando a fun¸ c˜ ao t. Neste caso a fun¸ c˜ ao t. Nos comandos primeiro definimos a fun¸ c˜ ao e a seguir utilizamos a fun¸ c˜ ao criada definindo intervalos a 95% e 99%.278843 5. conf = 0.function(x. conf = 0.test Mostramos as solu¸ c˜ oes acima para ilustrar a flexibilidade e o uso do programa.m <.2 Escrevendo uma fun¸ c˜ ao 126 Podemos generalizar a solu¸ c˜ ao acima agrupando os comandos em uma fun¸ c˜ ao. df = n .006e-14 alternative hypothesis: true mean is not equal to 0 95 percent confidence interval: 4.conf)/2). Um experimento consistiu em aplicar o medicamento em 200 pacientes. que ´ e uma das formas do verme da esquitosomose. p-value = 1. > t. Entretanto n˜ ao precisamos fazer isto na maioria das vezes porque o R j´ a vem com v´ arias fun¸ c˜ oes para procedimentos estat´ ısticos j´ a escritas.99) [1] 4.length(x) + media <. 1. > ic.Introdu¸ c˜ ao ao R 16. df = 19.

0 8.0 11.5 10.8 11.7 10. Obter IC’s a 90% e 99%.0 4. 0 0 0 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 3.3 10.Introdu¸ c˜ ao ao R 127 2.5 10.4 10. sorteamos dias amostras de 6 pe¸ cas de cada m´ aquina. Encontre intervalos de confian¸ ca de 95% para a m´ edia de uma distribui¸ c˜ ao Normal com variˆ ancia 1 dada a amostra abaixo 9.8 9.7 9. Para isso. Queremos verificar se duas m´ aquinas produzem pe¸ cas com a mesma homogeneidade quanto a resistˆ encia ` a tens˜ ao. Os dados abaixo s˜ ao uma amostra aleat´ oria da distribui¸ c˜ ao Bernoulli(p).6 9.9 10.8 9.7 8.4 10. .8 9.3 10.2 9. e obtivemos as seguintes resistˆ encias: M´ aquina A 145 127 136 142 141 137 M´ aquina B 143 128 132 138 142 132 Obtenha intervalos de confian¸ ca para a raz˜ ao das variˆ ancias e para a diferen¸ ca das m´ edias dos dois grupos.9 9.

Esta fun¸ c˜ ao combina as vantagens da verossimilhan¸ ca relativa e da log-verossimilhan¸ ca sendo portanto conveniente para c´ alculos computacionais e inferˆ encia. y )} = l(θ. de X ∼ N (µ. . 17. y ) = −2 l(θ. 17. Nesta sess˜ ao consideraremos que ´ e um escalar. uma vez que a fun¸ c˜ ao logar´ ıtimo ´ e uma fun¸ c˜ ao monotˆ onica. 1]. Temos que X1 . ´ e uma a. . y )/L(θ. y ) = log(L(θ. obtida a partir da fun¸ c˜ ao de verossimilhan¸ ca e conveniente em certos casos para representa¸ c˜ oes gr´ aficas. 10. y ) . 17. ˆ. O valor que maximiza a fun¸ c˜ ao de verossimilhan¸ ca ´ e tamb´ em o que maximiza a a fun¸ c˜ ao obtida pelo logar´ ıtimo da fun¸ c˜ ao de verossimilhan¸ ca. Nesta sess˜ ao vamos ver como tra¸ car gr´ aficos de fun¸ c˜ oes de verossimilhan¸ ca de um parˆ ametro utilizando o programa R. chamada fun¸ c˜ ao de log-verossimilhan¸ ca. 2. que Aplicando-se o logar´ ıtimo ` a fun¸ c˜ ao padronizada obtemos log{R(θ.2 Exemplo 1: Distribui¸ c˜ ao normal com variˆ ancia conhecida Seja o vetor (12. Esta fun¸ c˜ ao ´ eu ´til para comparar todos dos modelos dados pelos diferentes valores de θ com o modelo mais plaus´ ıvel (veross´ ıvel) para a amostra obtida. c´ alculos e inferˆ encias. . y ) sendo l(θ. A fun¸ c˜ ao de verossimilhan¸ ca relativa ou normatizada R(θ. neste exemplo n = 10. 4). 13) uma amostra aleat´ oria de uma distribui¸ c˜ ao normal de m´ edia µ e variˆ ancia conhecida e igual a 4. exp{− 8 f (µ. ˆ. Xn onde. ao inv´ es de multiplicativamente. e sendo este n´ umero -2 obtemos a chamada fun¸ c˜ ao deviance. 9. y ) ´ e dada pela raz˜ ao entre a fun¸ c˜ ao ˆ de verossimilhan¸ ca e o valor maximizado desta fun¸ c˜ ao. Tamb´ em veremos como tra¸ car a fun¸ c˜ ao deviance. Solu¸ c˜ ao: Vejamos primeiro os passos da solu¸ c˜ ao anal´ ıtica: 1. 12. 11. .1 Defini¸ c˜ oes e nota¸ c˜ oes Seja L(θ. Desta forma esta fun¸ c˜ ao pode ser multiplicada por um n´ umero negativo arbitr´ ario.Introdu¸ c˜ ao ao R 128 17 Fun¸ c˜ oes de verossimilhan¸ ca A fun¸ c˜ ao de verossimilhan¸ ca ´ e central na inferˆ encia estat´ ıstica. portanto R(θ. y )). maior a diferen¸ ca de plausibilidade entre o modelo considerado e o modelo mais plaus´ ıvel para os dados obtidos na amostra. O valor que maximiza L(θ. y ) = L(θ. onde lembramos que θ ˆ´ D(θ. O objetivo ´ e fazer um gr´ afico da fun¸ c˜ ao de logverossimilhan¸ ca. y ) a fun¸ c˜ ao de verossimilhan¸ ca. y ) ´ e chamado do estimador de m´ axima verossimilhan¸ ca e denotado ˆ por θ. xi ). Esta fun¸ c˜ ao tem portanto o seu m´ ınimo em zero e quanto maior o seu valor. 18. isto ´ e os valores obtidos em uma amostra. y ). y ).a. assumindo valores no intervalo [0. Denotamos a fun¸ c˜ ao de log-verossimilhan¸ ca por l(θ. 15. 15. y ) − l(θ tem portanto um valor sempre n˜ ao-positivo. A fun¸ c˜ ao de log-verossimilhan¸ ca ´ e mais adequada para c´ alculos computacionais e permite que modelos possam ser comparados aditivamente. y ) − l(θ e o estimador de m´ axima verossimilhan¸ ca de θ. a verossimilhan¸ ca ´ e dada por L(µ) = 10 1 1 √ 2 2π 1 (xi − µ)2 }. O termo y denota valores realizados de uma vari´ avel aleat´ oria Y . . a densidade para cada observa¸ c˜ ao ´ e dada por f (xi ) = 3. A nota¸ c˜ ao indica que o argumento da fun¸ c˜ ao ´ e θ que pode ser um escalar ou um vetor de parˆ ametros.

(sx2 . log = TRUE)) + } a seguir criamos uma sequˆ encia adequada de valores de µ e calculamos l(µ) para cada um dos valores 10 1 x2 i e 10 1 xi . Sabemos que a fun¸ c˜ ao dnorm() calcula a densidade f (x) da distribui¸ c˜ ao normal e podemos usar este fato para evitar a digita¸ c˜ ao da express˜ ao acima.Introdu¸ c˜ ao ao R 4.sum(x) 3.2 * mu. 15. 9. 17. sd = 2. mean = mu.vals^2))/8 5. 13) 2. > mu.vals * sx + 10 * (mu.sum(x^2) > sx <. 18. 11. 1 (4) 5.seq(11. > logvero <. dados) { + sum(dnorm(dados. 10.vals <. 15. type = "l". lmu. que ´ e uma fun¸ c˜ ao de µ e portanto devemos fazer um gr´ afico de l(µ) versus µ tomando v´ arios valores de µ e calculando os valores de l(µ). l = 100) 4. e a seguir calculamos os valores de l(µ) de acordo com a equa¸ c˜ ao acima > lmu <.-5 * log(8 * pi) . Primeiro entramos com os dados que armazenamos no vetor x > x <. e finalmente fazemos o gr´ afico visto na Figura 34 > plot(mu. Vamos ver agora uma primeira poss´ ıvel forma de fazer a fun¸ ca ˜o de verossimilhan¸ ca no R. Sabemos que o estimador de m´ axima verossimilhan¸ ca neste caso ´ eµ ˆ = 13. e calculamos as quantidades > sx2 <. 12. xlab = expression(mu).vals. e a log-verossimilhan¸ ca ´ e dada por 10 129 l(µ) = 1 log(f (xi )) 10 10 1 = −5 log(8π ) − ( 8 x2 i 1 − 2µ xi + 10µ2 ).c(12. 1.function(mu. 15.2 (este valor pode ser obtido com o comando mean(x)) e portanto vamos definir tomar valores ao redor deste ponto. agora tomamos uma sequˆ encia de valores para µ. ylab = expression(l(mu))) Entretanto podemos obter a fun¸ c˜ ao de verossimilhan¸ ca no R de outras forma mais geral e menos trabalhosa. Primeiro vamos criar uma fun¸ c˜ ao que calcula o valor da log-verossimilhan¸ ca para um certo valor do parˆ ametro e para um certo conjunto de dados.

vals.04545 11.09091 11.31818 11.13636 11.40909 > lmu <.22727 11.08005 Note na sintaxe acima que a fun¸ c˜ ao sapply aplica a fun¸ c˜ ao logvero anteriormente definida em cada elemento do vetor mu.sapply(mu.18182 11. lmu.71383 -30. 15.seq(11.49741 [9] -30. l = 100) > mu.16218 -30. ylab = expression(l(mu))) Para encerrar este exemplo vamos apresentar uma solu¸ c˜ ao ainda mais gen´ erica que consiste em criar uma fun¸ c˜ ao que vamos chamar de vero.12086 -31.vals.5.norm.93542 -30.00000 11. dados = x) > lmu[1:10] [1] -32. type = "l".vals.27273 11.vals <. xlab = expression(mu). logvero.36364 [10] 11.63119 -31. . > mu. > plot(mu.28615 -30.v4 para c´ alculo da verossimilhan¸ ca de distribui2 c ¸˜ oes normais com σ =4.vals[1:10] [1] 11.87344 -31.39410 -31.Introdu¸ c˜ ao ao R 130 −32 11 −31 −30 l(µ) −29 −28 −27 −26 12 13 µ 14 15 Figura 34: Fun¸ c˜ ao de verossimilhan¸ ca para o parˆ ametro µ da distribui¸ c˜ ao normal com variˆ ancia σ 2 = 4 com os dados do Exemplo 1. Esta fun¸ c˜ ao engloba os comandos acima e pode ser utilizada para obter o gr´ afico da log-verossimilhan¸ ca para o parˆ ametro µ para qualquer amostra obtida desta distribui¸ c˜ ao. Finalmente fazemos o gr´ afico.

l = 101) > loglik <. xlab = expression(lambda). dados = dados) + } > curve(vero. 11.lambda .v4(x.lik. mean = mu.vals. + log = TRUE)) + sapply(mu. dados) { + sum(dpois(dados. + ylab = expression(l(mu))) 131 17. 0.normal. dados = x).pois(x.lambda.lambda. como nos comandos abaixo. dados = y).pois <. 2. dados = y) > plot(lambda.Introdu¸ c˜ ao ao R > vero. 10.pois(x.function(lambda. sd = 2.pois(lambda.c(5. dados) { + lambda. dados) { + loglik <. 3. 0. dados = y). 1.function(lambda.est. xlab = expression(lambda).pois(lambda.mean(dados) + lik. + ylab = expression(l(lambda))) Alternativamente pode-se fazer um gr´ afico da fun¸ c˜ ao deviance.est)) + } > curve(dev. 1. lik.vals <. + ylab = expression(l(lambda))) ou simplesmente usar: > curve(lik.lik. ty = "l") E o comando para gerar o gr´ afico poderia incluir o texto do eixos: > plot(lambda.vals. 10.sapply(lambda. loglik.lik. log = TRUE)) + } + sapply(lambda.vals. > dev. 0. 2. 15. 1) de uma distribui¸ c˜ ao de Poisson de parˆ ametro λ. dados = dados) + lik. + ylab = expression(D(lambda))) Ou fazendo novamente em um intervalo menor . 1.lambda <.est <. loglik. dados = dados) + } E podemos usar esta fun¸ c˜ ao para fazer o gr´ afico da fun¸ c˜ ao de verossimilhan¸ ca como visto ` a esquerda da Figura 35 > lambda.v4 <. 10.seq(0. dados) { + logvero <. loglik.function(l.pois <.normal. type = "l".pois. logvero. dados = dados) + return(-2 * (lik. xlab = expression(mu). 2. A fun¸ c˜ ao de verossimilhan¸ ca pode ser definida por: > lik. xlab = expression(lambda).est <.3 Exemplo 2: Distribui¸ c˜ ao Poisson Considere agora a amostra armazenada no vetor y: > y <. dados) sum(dnorm(dados.function(mu. lambda = l.function(mu.

pois(x.qchisq(0.8 Caso o estimador n˜ ao tenha express˜ ao fechada pode-se usar maximiza¸ c˜ ao (ou minimiza¸ c˜ ao) num´ erica.mean(y) > lambda. > curve(dev. > curve(dev.075264e-10 A fun¸ c˜ ao optimise() ´ e adequada para minimiza¸ c˜ oes envolvendo um u ´nico parˆ ametro.5.pois. Finalmente os comandos abaixo s˜ ao usados para obter graficamente o intervalo de confian¸ ca (a 95%) baseado na fun¸ c˜ ao deviance.800004 $objective [1] 1.8. > lambda. dados = y).Introdu¸ c˜ ao ao R 132 −20 −30 −50 −60 0 2 4 λ 6 8 10 0 5 10 l(λ) 15 l(λ) −40 20 25 1 2 λ 3 4 5 Figura 35: Fun¸ c˜ ao de verossimilhan¸ ca (esquerda) e deviance (direita) para o parˆ ametro λ da distribui¸ c˜ ao Poisson.95) . 3.est <.95 <. xlab = expression(lambda). int = c(0. Neste caso sabemos que o estimador tem express˜ ao anal´ ıtica fechada λ = x ¯ e portanto pode ser obtido diretamente. xlab = expression(lambda).est [1] 1. 0. 0.5. Para ilustrar isto vamos encontrar a estimativa do parˆ ametro da Poisson e verificar que o valor obtido coincide com o valor dado pela express˜ ao fechada do estimador. 5. + ylab = expression(l(lambda))) > L. + ylab = expression(l(lambda))) O estimador de m´ axima verossimilhan¸ ca ´ e o valor que maximiza a fun¸ c˜ ao de verossimilhan¸ ca que ´ e o mesmo que minimiza a fun¸ c˜ ao deviance. df = 1) > abline(h = L. Para dois ou mais parˆ ametros deve-se usar a fun¸ c˜ ao optim() ou nlminb(). Usamos o fun¸ c˜ ao optimise() para encontrar o ponto de m´ ınimo da fun¸ c˜ ao deviance. dados = y). dados = y) $minimum [1] 1. 10). > optimise(dev.95.pois(x.

σ ). Xn onde.fc. > lim.091267 2. L. Portanto temos agora dois parˆ ametros sobre os quais queremos fazer inferˆ encia: µ e σ . len = 0. ´ e uma a.95 > ic2. . neste exemplo n = 10.5 Figura 36: Intervalo de confian¸ ca baseado na deviance para o parˆ ametro λ da distribui¸ c˜ ao Poisson. Temos que X1 . dig = 2). c(0. max(y)))$root) > ic2. . sup = uniroot(lim.lambda.76 1.function(lambda) dev. .fc <. O objetivo ´ e fazer um gr´ afico 3-D da fun¸ c˜ ao de log-verossimilhan¸ ca de dois argumentos l(µ. usando os mesmos dados por´ em agora sem assumir que a variˆ ancia ´ e conhecida. .3) 17.fc. round(ic2. 0.c(inf = uniroot(lim.8.4 Exemplo 3: Distribui¸ c˜ ao normal com variˆ ancia desconhecida Vamos agora revisitar o Exemplo 1 desta se¸ c˜ ao. ic2.lambda inf sup 1.lambda. 0.Introdu¸ c˜ ao ao R 133 l(λ) 0 2 4 6 8 10 1. + offset = 0. + c(lambda.0 1. σ 2 ).0 3.95. pos = 1.pois(lambda.lambda.764221 E adicionados ao gr´ afico com > arrows(ic2.est. lambda.lambda <.L.lambda. Solu¸ c˜ ao: Vejamos primeiro os passos da solu¸ c˜ ao anal´ ıtica: 1.5 2. Os limites do intervalo s˜ ao dados pela interse¸ c˜ ao dessa fun¸ c˜ ao com o valor do quantil da distri2 bui¸ c˜ ao χ para o n´ ıvel de significˆ ancia desejado. .est))$root.1) > text(ic2. dados = y) .5 3.0 λ 2.09 2.a. de X ∼ N (µ. cex = 0.

σ ) = 4. + 13. 10.1.8. 11.248954 2. Assim como no Exemplo 1 poder´ ıamos calcular a verossimilhan¸ ca fazendo as contas ”passo a passo”da fun¸ c˜ ao acima. l = 100). 8.expand. Vamos tamb´ em calcular as estimativas de m´ axima verossimilhan¸ ca.c(12. sd = seq(1.2.1.c(mu = mean(x). nesta ordem) e para um certo conjunto de dados.4. σ . 11. 15. 15.1.7.8.function(pars. Primeiro entramos com os dados que armazenamos no vetor x.7. + 12.2. 13. 15. l(µ.9.vals) .5. 9.5) > pars.2. 17.8. 13. σ ) e calculando os valores correspondentes de l(µ. 18.885714 sd 2.MV mu 12. 134 f (µ. que ´ e uma fun¸ c˜ ao de µ e σ e portanto devemos fazer um gr´ afico tridimensional de l(µ. log = TRUE)) 3.4. σ ) para cada um dos pares. 12.9. dados) sum(dnorm(dados.4.5. + sd = pars[2].grid(mu = seq(5. 11.1. > x <. + l = 100)) > dim(par. > logveroN <. 10.1. 12.3.8. a verossimilhan¸ ca ´ e dada por L(µ.7.MV <. a seguir vamos criar uma fun¸ c˜ ao que calcula o valor da log-verossimilhan¸ ca para um certo par de valores dos parˆ ametros (m´ edia e desvio padr˜ ao. 20. 12. σ ). 11. 15. 13. ficando a primeira como exerc´ ıcio para o leitor. 14. Neste exemplo vamos fazer apenas da segunda forma. xi ). 15.6.vals <. 12.6.Introdu¸ c˜ ao ao R 2. 12. > par. e a log-verossimilhan¸ ca ´ e dada por 10 10 1 1 √ σ 2π 1 2 exp{− 2σ 2 (xi − µ) }. 15. σ ) = 1 log(f (xi )) 10 10 2 1 = −5 log(2πσ ) − 2 ( 2σ x2 i 1 − 2µ xi + 10µ2 ).1)/length(x))) > pars. σ ) versus µ e σ tomando v´ arios valores de pares (µ. 9. 12. 12.3. ou ent˜ ao usando a fun¸ c˜ ao dnorm(). + 13. 11. sd = sqrt(var(x) * (length(x) . a densidade para cada observa¸ c˜ ao ´ e dada por f (xi ) = 3.5. a seguir criamos uma sequˆ encia adequada de pares de valores de (µ. 11.3.2.3. 1. 14.5.vals) [1] 10000 2 > head(par. 1 (5) 5. σ ) e calculamos l(µ. mean = pars[1].8.9. 9.

606061 1 -1048.MV[1]. como um mapa de curvas de isovalores obtido com image().Introdu¸ c˜ ao ao R mu sd 5.MV[2]. length = 9)))) points(pars. unique(sd).757576 1 -1009. sigma)). logveroN. matrix(logL.54545 9998 19.903 5.856 Note na sintaxe acima que a fun¸ c˜ ao apply aplica a fun¸ c˜ ao logveroN a cada par de valores em cada linha de par.vals| cont´ em na terceira coluna os valores da log-verossimilhan¸ ca correspondentes as valores dos parˆ ametros dados na primeira e segunda colunas. theta = 30. pch = 4.24242 9996 19. unique(sd). ncol = length(unique(sd))). pch = 4.vals. col = gray(seq(0. > + + > + + > > + + > with(par. image(unique(mu).vals) 1 2 3 4 5 6 mu sd logL 5.vals) mu 9995 19. matrix(logL.303030 1 5.vals.2 12. 1. by = 5)).2 > par. 12)) points(pars. pars.873 5.303030 1 -1126.39394 9997 19. ylab = expression(sigma). matrix(logL. breaks = seq(-120.2 12.2 12.vals$logL <.84848 10000 20. cex = 1.000000 1 -1208.MV[2]. contour(unique(mu).vals.064 5.454545 1 -1087.apply(par.058 5. ncol = length(unique(sd)) xlab = expression(mu). -75.vals. ylim = c(0. phi = 30)) with(par.5) with(par. by = 5). levels = seq(-120.69697 9999 19.000000 1 5.vals.3.486 5. ncol = length(unique(sd))). xlab = expression(mu). persp(unique(mu). 1. zlab = expression(l(mu.151515 1 5.606061 1 5. dados = x) > head(par. pars.757576 1 135 1 2 3 4 5 6 > tail(par. 4.2 12.2 12. ylab = expression(sigma). xlab = expression(mu).5) Notas: . O gr´ afico 3-D da fun¸ c˜ ao pode ser visualizado de trˆ es formas alternativas como mostrado na Figura 37: como uma superf´ ıcie 3D gerada pela fun¸ c˜ ao persp(). ylab = expression(sigma). Ao final o objeto |par.151515 1 -1167.00000 sd 12. ou ainda como um mapa de cores correspondentes aos valores gerado por image().MV[1]. cex = 1.454545 1 5. -75. unique(sd).

gma) 6 8 10 12 µ 14 16 18 20 Exerc´ ıcios a amostra abaixo obtida de uma distribui¸ c˜ ao Poisson de parˆ ametro λ. na fun¸ c˜ ao perp() as argumentos theta e phi s˜ ao utilizados para rotacionar o gr´ afico a fim de se obter uma melhor visualiza¸ c˜ ao. Seja 2.5 1. sem repeti-los e matrix() para os valores da fun¸ c˜ ao. "normal") > MV mean sd 12.8857143 2. 758696977788999 Obtenha o gr´ afico da fun¸ c˜ ao de log-verossimilhan¸ ca. Neste caso eles foram encontrados facilmente como mostrado acima no objeto pars. De forma mais geral. 54622453301765365372 Obtenha o gr´ afico da fun¸ c˜ ao de log-verossimilhan¸ ca. A defini¸ c˜ ao desta faixa foi feita ap´ os v´ arias tentativas pois depende do problema. o valor das estimativas de m´ axima verossimilhan¸ ca s˜ ao indicados por x nos dois u ´ltimos gr´ aficos. si l(mu. em especial do n´ umero e variabilidade dos dados.2688015) 17.3801427) ( 0.fitdistr(x.Introdu¸ c˜ ao ao R 12 −120 136 12 10 −110 8 −105 σ −100 6 −95 −90 4 sig ma −85 −80 2 mu 5 10 µ 15 20 2 4 6 σ 8 10 −115 Figura 37: Fun¸ c˜ ao de verossimilhan¸ ca para os parˆ ametros µ e σ da distribui¸ c˜ ao normal com os dados do Exemplo 1. > require(MASS) > MV <. as fun¸ c˜ oes gr´ aficas utilizadas requirem: dois vetores de tamanhos n1 e n2 com os valores dos argumentos da fun¸ c˜ ao e os valores da fun¸ c˜ ao em uma matrix de dimens˜ ao n1 × n2 .MV pois podem ser obtidos analiticamente. a obten¸ c˜ ao da fun¸ c˜ ao foi necess´ ario especificar faixas de valores para µ e σ . Seja a amostra abaixo obtida de uma distribui¸ c˜ ao Binomial de parˆ ametro p e com n = 10. . Por isto usamos unique() para extrair os valores dos argumentos.2489544 ( 0. a fun¸ c˜ ao fitdistr() do pacote MASS poide ser usada para encontrar estimativas de m´ axima verossimilhan¸ ca.

4 12.8 11. .4 Obtenha o gr´ afico da fun¸ c˜ ao de log-verossimilhan¸ ca.5 9.1 6. Seja a amostra abaixo obtida de uma distribui¸ c˜ ao χ2 de parˆ ametro 137 ν. 8.9 10.4 16.1 12.Introdu¸ c˜ ao ao R 3.9 10.9 10.

Desejamos obter: (a) o gr´ afico da fun¸ c˜ ao de verossimilhan¸ ca para p com base nestes dados (b) o estimador de m´ axima verossimilhan¸ ca de p. 1) (a) Vamos escrever uma ”fun¸ c˜ ao em Rp ¨ara obter a fun¸ c˜ ao de verossimilhan¸ ca usando a fun¸ c˜ ao de densidade da distribui¸ c˜ ao binomial com argumento log=TRUE pois obter a log-verossimilhan¸ ca.Introdu¸ c˜ ao ao R 138 18 Intervalos de confian¸ ca e fun¸ c˜ ao de verossimilhan¸ ca Nesta sess˜ ao vamos examinar um pouco mais a teoria de intervalos de confian¸ ca. 0. 1. 1.function(p. (O verdadeiro valor de p ´ e 0. + 1. . prob = p. 1. Entretanto ` as vezes temos dados binomiais do tipo n e x (n´ umero x de sucessos em n observa¸ c˜ oes). 1.c(0. 1. para os dados acima ter´ ıamos n = 25 e x = 18. log = TRUE)) + } Esta fun¸ c˜ ao exige dados do tipo 0 ou 1 da distribui¸ c˜ ao Bernoulli.sum(dados) + return(dbinom(x.length(dados) + x <. 1. dados) { + n <. 1.8) Primeiramente vamos entrar com os dados na forma de um vetor. 0. > y <. 1. 0. 1. size = n.binom <. 1. 1. intervalos de cobertura.1 Inferˆ encia para a distribui¸ c˜ ao Bernoulli 0 0 0 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 Os dados abaixo s˜ ao uma amostra aleat´ oria da distribui¸ c˜ ao Bernoulli(p). > vero. Ser˜ ao utilizados conceitos do m´ etodo da quantidade pivotal. S˜ ao ilustrados os conceitos de: obten¸ c˜ ao de intervalos de confian¸ ca pelo m´ etodo da quantidade pivotal. 1. a propriedade de normalidade assint´ otica dos estimadores de m´ axima verossimilhan¸ ca e a distribui¸ c˜ ao limite da fun¸ c˜ ao deviance. 1. a informa¸ c˜ ao observada e a informa¸ c˜ ao de Fisher (c) um intervalo de confian¸ ca de 95% para p baseado na normalidade assint´ otica de p ˆ (d) compare o intervalo obtido em (b) com um intervalo de confian¸ ca de 95% obtido com base na distribui¸ c˜ ao limite da fun¸ c˜ ao deviance (e) a probabilidade de cobertura dos intervalos obtidos em (c) e (d). 0. Vamos ent˜ ao escrever a fun¸ c˜ ao acima de forma mais geral de forma a poder utilizar dados dispon´ ıveis tanto em um formato quanto em outro. 1. Por exemplo. 1. resultados diversos da teoria de verossimilhan¸ ca. 0. 1. 0. 18.

dados = y) > plot(p. vero.function(p. dados. to = 1) l(p) −70 −60 −50 −40 −30 −20 −10 0 0. ylab = "l(p)") Note que os trˆ es comandos acima podem ser substitu´ ıdos por um u ´nico que produz o mesmo resultado: > curve(vero. l = 99) > logvero <. (b) Dos resultados para distribui¸ c˜ ao Bernoulli sabemos que o estimador de m´ axima verossimilhan¸ ca ´ e .seq(0. xlab = "p". dados = y).0 0. Evitamos os valores nos extremos do espa¸ co param´ etrico (p = 0 ou p = 1) pois nestes casos a verossimilha¸ ca ´ e zero e portanto a log-verossimilhan¸ ca retornada por dbinom() ´ e -Inf. from = 0.01. prob = p.72 0. n = length(dados).4 p 0. size = n. log = TRUE)) + } 139 Para obter o gr´ afico da fun¸ c˜ ao de verossimilhan¸ ca de um conjunto de dados cria-se uma sequˆ encia de valores para o parˆ ametro p e calcula-se o respectivo valor da (log)verossimilhan¸ ca.2 0. No R isto pode ser feito com os comandos abaixo que produzem o gr´ afico mostrado na Figura 38. > p. 0.sapply(p. x = sum(dados)) { + return(dbinom(x.6 0.vals.binom <. logvero.binom(x.vals <.99.8 1.0 Figura 38: Fun¸ c˜ ao de verossimilhan¸ ca para o parˆ ametro p da distribui¸ c˜ ao Bernoulli. type = "l". O gr´ afico da fun¸ c˜ ao ´ e obtido com os valores fixados dos parˆ ametros no eixo-x e o respectivos valores da fun¸ c˜ ao no eixo-y e unindo-se os pontos assim obtidos.Introdu¸ c˜ ao ao R > vero.vals.binom.

> dev.binom(p. + len = 0.est <.est .binom(x. Para indicar o estimador de MV o gr´ afico poder´ ıamos usar arrows() w para obter os valores num´ ericos para a amostra dada utilizamos os comandos a seguir.est * (1 .x/n + vero.binom() para calcular a deviance.8.p. cex = 0.est.5283461 0. > p. Lembrando que a deviance ´ e definida pela express˜ ao D(p) = 2{(ˆ p) − l(p)}.est)) > io [1] 124.vero. xlab = "p". p. dados. dados = y).95. p ˆ + zα/2 I (ˆ p) e para obter o intervalo no R usamos os comandos a seguir. dados = y).est.est.35.binom <.est + qnorm(c(0. 0. Com o comando curve() podemos obter o gr´ afico de fun¸ c˜ ao deviance. 0. ylab = "D(p)") inf sup 0.975)) * sqrt(1/ie) > ic1.p.8960043 (d) Vamos agora obter e mostrar em um gr´ afico o intervalo baseado na fun¸ c˜ ao deviance. n = length(dados).0079 (c) O intervalo de confian¸ ca baseado na normalidade assint´ otica do estimador de m´ axima verossimilhan¸ ca ´ e dado por: p ˆ − zα/2 I (ˆ p) . x = x)) + dev + } > curve(dev.0079 > ie [1] 124. pos = 1.binom(p.est <.est.1) > text(p.length(y)/(p.025.p [1] 0.est. x = sum(dados)) { + p. n = n.p <. p.vero. definimos umaa fun¸ c˜ ao dev.2 * (vero.binom(p. n = n. x = x) + dev <.Introdu¸ c˜ ao ao R dado por p ˆ= 140 n i=1 yi n e que a informa¸ c˜ ao esperada coincide com a esperan¸ ca observada e sendo iguais a: I (ˆ p) = n p ˆ(1 − p ˆ) . offset = 0.8686757 . min(logvero). vero.p. min(logvero). > ic1.5439957 0.mean(y) > arrows(p. 0.function(p.est.est <.ie <.p.3) > io <.

c(p.95. offset = 0. dig = 3). sup = uniroot(lim.8686757 > arrows(ICdev.L.function(x) dev.1) > text(ICdev. 0.9 Figura 39: Fun¸ c˜ ao deviance para o parˆ ametro p da distribui¸ c˜ ao Bernoulli. round(ICdev. c(0. .5 0.8686757 D(p) 0 2 4 6 8 10 12 14 0.fc.95 ICdev <.6 p 0.528 0. dados = y) .5283461 0.3) inf sup 0.fc.8 0.4 0. > > > > + > L. Depois tra¸ camos a linha de corte com abline() e os pontos de corte que definem o intervalo s˜ ao as ra´ ızes de uma fun¸ c˜ ao definida como a diferen¸ ca entre a fun¸ c˜ ao deviance e o valor do ponto de corte. cex = 0.5283461 0.qchisq(0.Introdu¸ c˜ ao ao R 141 A fun¸ c˜ ao deviance D(p) tem distribui¸ c˜ ao assint´ otica χ2 ca ´ e dado pelos n−1 e o intervalo de confian¸ 2 pontos de intersec¸ c˜ ao entre a fun¸ c˜ ao deviance e o valor de quantil da distribui¸ c˜ ao χ para o n´ ıvel de significˆ ancia desejado como ilustrado na Figura 39.95.binom(x. Nos comandos a seguir primeiro encontramos o ponto de corte para o n´ ıvel de confian¸ ca de 95%.c(inf = uniroot(lim. 1))$root) ICdev inf sup 0. df = 1) abline(h = L.869 0.95) lim. p.fc <. L. len = 0.est))$root.95 <. pos = 1. 0.est. ICdev.7 0.8.

+ p.binom <. x = sum(dados).binom(dados = y.fc.est * (1 .95.fc <. c(p.) dev..8686757 (e) O c´ alculo do intervalo de cobertura consiste em: 1. 1 . c(0.arg(tipo) + alfa <.function(dados. . "deviance")) { + tipo <. + tipo = c("assintotico". primeiro com a aproxima¸ c˜ ao assint´ otica e depois pela deviance. nivel = 0.binom(dados = y) lim. .binom() definida acima. x = x)$root) + ic <.function(y.1 . sup) + } + names(ic) <.c(inf. simular dados com o valor especificado do parˆ ametro.. tipo = "dev") lim.inf lim.sup") + ic + } E agora vamos utilizar a fun¸ c˜ ao.est))/n) + ic <.est). x = x)$root) + sup <.8960043 > ic.5439957 0. verificar se o valor est´ a dentro do intervalo 4.c("lim. 0).x/n + if (tipo == "assintotico") { + se. Espera-se que a propor¸ c˜ ao obtida seja o mais pr´ oximo poss´ ıvel do n´ ıvel de confian¸ ca definido para o intervalo. .est + qnorm(c(alfa/2. 1. Para isto vamos escrever uma fun¸ c˜ ao implementando estes passos e que utiliza internamente ic. repetir (1) a (3) e verificar a propor¸ c˜ ao de simula¸ c˜ oes onde o valor est´ a no intervalo.p.match..est.binom(y.est <. n = n..inf". uniroot(lim. 0.ifelse(identical(p. obter o intervalo de confian¸ ca. "lim. + 1).sqrt((p.Introdu¸ c˜ ao ao R 142 Agora que j´ a vimos as duas formas de obter o IC passo a passo vamos usar os comandos acima para criar uma fun¸ c˜ ao geral para encontrar IC para qualquer conjunto de dados e com op¸ c˜ oes para os dois m´ etodos.est <.ifelse(identical(p.sup 0.sup 0. + df = 1) + inf <.p.5283461 0. uniroot(lim. Note que os intervalos s˜ ao diferentes! > ic.nivel + p.p.est. 2.) .inf lim.qchisq(nivel.(alfa/2))) * se. 1).est. n = n.fc. 3.est + } + if (tipo == "deviance") { + lim.p. > ic. n = length(dados).

8.96 143 Note que a cobertura do m´ etodo baseado na deviance ´ e muito mais pr´ oxima do n´ ıvel de 95%.binom(n = length(y).binom(n = n. Para isto gere 1000 amostras de tamanho n = 10. 18. 2. o n´ umero de trens atrasados foi registrado em: .seed(3214) > cobertura. Discuta os resultados. p.Introdu¸ c˜ ao ao R > cobertura. Verifique se o intervalo cobre o verdadeiro valor de θ. Em 10 dias sucessivos.0 + for (i in 1:nsim) { + ysim <.ic. obtenha a propor¸ c˜ ao dos intervalos que cobrem o verdadeiro valor de θ.conta + 1 + } + return(conta/nsim) + } E agora vamos utilizar esta fun¸ c˜ ao para cada um dos m´ etodos de obten¸ c˜ ao dos intervalos. size = n. . · · · .function(n. Refa¸ ca o ´ ıtem (e) do exemplo acima com n = 10. nsim.seed(3214) > cobertura.8.. > set. O IC assint´ otico tende a se aproximar do n´ ıvel nominal de confian¸ ca na medida que aumenta o tamanho da amostra. θ) ∼ Γ(n.) + if (p > ic[1] & p < ic[2]) + conta <.. al´ em disso acredita-se que o n´ umero de trens atrasados em cada dia seja independente do valor de todos os outros dias. Espera-se que este valor seja pr´ oximo do n´ ıvel de confian¸ ca fixado de 90%. o que pode ser explicado pelo tamanho da amostra. tipo = "dev") [1] 0.. (d) verifique se a probabilidade de cobertura do intervalo ´ e consistente com o valor declarado de 90%.rbinom(1. θ) ∼ χ2 2n . Calcule intervalos de confian¸ ca de 90% para cada uma das amostras geradas e finalmente. prob = p) + ic <.897 > set. θ) com θ = 1 e obtenha o intervalo de confian¸ ca de 90% para θ. (e) repita o item (d) para amostras de tamanho n = 100. Encontre uma quantidade pivotal e: (a) construa um intervalo de confian¸ ca de 90% para θ (b) construa um intervalo de confian¸ ca de 90% para log θ (c) gere uma amostra de tamanho n = 10 da distribui¸ c˜ ao U (0.binom <. . nsim = 1000. 1) ent˜ ao −2 n i log F (xi .. Xn uma amostra aleat´ oria da distribui¸ c˜ ao U (0. Houve alguma mudan¸ ca na probabilidade de cobertura? Note que se − n i log F (xi . p = 0. nsim = 1000) [1] 0.binom(n = length(y). Seja X1 . x = ysim. 3. n = 50 e n = 200. θ). p = 0.2 Exerc´ ıcios 1. Acredita-se que o n´ umero de trens atrasados para uma certa esta¸ c˜ ao de trem por dia segue uma distribui¸ c˜ ao Poisson(θ).) { + conta <. X2 .

Xi .7 8. 5). Acredita-se que a produ¸ c˜ ao de trigo. 4.Introdu¸ c˜ ao ao R 144 5 0 3 2 1 2 1 1 2 1 Obtenha: (a) o gr´ afico da fun¸ c˜ ao de verossimilhan¸ ca para θ com base nestes dados (b) o estimador de m´ axima verossimilhan¸ ca de θ.0 baseando-se: (a) na distribui¸ c˜ ao assint´ otica de µ ˆ (b) na distribui¸ c˜ ao limite da fun¸ c˜ ao deviance 5. Visualize os dados simulados atrav´ es de um gr´ afico de (z × x) ˆ (b) encontre o EMV de θ.9 10.5 10. e que a variˆ ancia ´ e conhecida e igual a 1.5 10. onde φ ´ e a probabilidade de que n˜ ao hajam trens atrasados num particular dia. Assumindo que as produ¸ c˜ oes em diferentes ´ areas s˜ ao independentes. e z = (1.8 9. 1). 3. ou seja.8 11. θ ˆ´ (c) mostre que θ e um estimador n˜ ao viciado para θ (lembre-se que os valores de zi s˜ ao constantes) (d) obtenha um intervalo de aproximadamente 95% de confian¸ ca para θ baseado na distribuiˆ c ¸˜ ao assint´ otica de θ .8 9.6 9. Construa intervalos de confian¸ ca de 95% para φ como nos itens (c) e (d).3 10. onde zi ´ e quantidade (conhecida) de fertilizante utilizado na ´ area. 2.5. da ´ area i ´ e normalmente distribu´ ıda com m´ edia θzi . · · · .0 11. 4.4 10.7 10. Encontre intervalos de confian¸ ca de 95% para a m´ edia de uma distribui¸ c˜ ao Normal com variˆ ancia 1 dada a amostra 9. para i = 1.8 9. a informa¸ c˜ ao observada e a informa¸ c˜ ao de Fisher (c) um intervalo de confian¸ ca de 95% para o n´ umero m´ edio de trens atrasados por dia ˆ baseando-se na normalidade assint´ otica de θ (d) compare o intervalo obtido em (c) com um intervalo de confian¸ ca obtido com base na distribui¸ c˜ ao limite da fun¸ c˜ ao deviance (e) o estimador de m´ axima verossimilhan¸ ca de φ.2 9.7 9.3 10. Xi ∼ N (θzi .0 8.9 9. n: (a) simule dados sob esta distribui¸ c˜ ao assumindo que θ = 1.4 10.

determinados analiticamente pela express˜ ao dada acima e indicados pelos setas verticais no gr´ afico.norm.95 <. Xn a.vals. Os pontos onde esta linha cortam a fun¸ c˜ ao s˜ ao. Neste caso a fun¸ c˜ ao deviance ´ e como mostrada na Figura 40 que ´ e obtida com os comandos abaixo onde primeiro definimos uma fun¸ c˜ ao para calcular a deviance que depois ´ e mostrada em um gr´ afico para valores entre 30 e 34.function(theta.95. > > > + > > > > L.norm.seq(31. n.vals. lty = 3) IC <. xlab = expression(theta). xlab = expression(theta). 19. xbar) { n * (xbar . dev20. A Figura 41 mostra as fun¸ c˜ oes para trˆ es tamanhos de amostra.95/20) IC arrows(IC.dev. n = 20.95/10) arrows(IC10. lty = 2) . rep(L. rep(L. length = 0.vals. n = 10. A fun¸ c˜ ao de log-verossimilhan¸ ca ´ e dada por l(θ) = cte + ˆ= 2.vals <. Xi n ¯. ylab = expression(D(theta))) IC10 <. onde c∗ ´ e o quantil (1 − α/2) da distribui¸ c˜ ao Vamos considerar que temos uma amostra onde n = 20 e x ¯ = 32.dev. . (1) + Pn i=1 − θ)2 . .1) dev20.dev. Para obtermos um intervalo a 95% de confian¸ ca escolhemos o quantil correspondente na distribui¸ c˜ ao 2 χ(1) e mostrado pela linha tracejada no gr´ afico. ty = "l". 1) * sqrt(L. ty = "l".vals. Vimos que: 1.vals <.theta)^2 } thetaN. n = 10.1 M´ edia da distribui¸ c˜ ao normal com variˆ ancia conhecida 1 2 n i=1 (xi Seja X1 .v1(thetaN.95 <. 33. =X c∗ /n. 20 e 50 que s˜ ao obtidas com os comandos abaixo. neste exemplo.Introdu¸ c˜ ao ao R 145 19 Intervalos de confian¸ ca baseados na deviance Neste sess˜ ao discutiremos a obten¸ c˜ ao de intervalos de confian¸ ca baseado na fun¸ c˜ ao deviance.qchisq(0. 5. a fun¸ c˜ ao deviance ´ e D(θ) = n(¯ x − θ)2 .95.vals. length = 0. 1) * sqrt(L.norm.95. A linha horizontal mostra o efeito nas amplitudes dos IC’s. o estimador de m´ axima verossimilhan¸ ca ´ eθ 3. IC. n = 20.norm. 2).v1(thetaN. rep(0. IC10.vals. 2).qchisq(0.32 + c(-1.1) Vamos agora examinar o efeito do tamanho da amostra na fun¸ c˜ ao.a. ylab = expression(D(theta))) L. .v1(thetaN. xbar = 32) plot(thetaN.95. l = 101) dev.32 + c(-1. e neste caso a deviance tem distribui¸ c˜ ao exata χ2 (1) . . 4. dev. xbar = 32) lines(thetaN. 2). rep(0. > + + > > > + > > > > > dev.vals <. de uma distribui¸ c˜ ao normal de m´ edia θ e variˆ ancia 1.vals <. df = 1) dev10. xbar = 32) plot(thetaN.vals. df = 1) abline(h = L.95. dev10. e os limites do intervalo s˜ ao dados por x ¯− χ2 .vals.v1 <.vals. 2).

lwd = c(1.dev. 2.32 + c(-1. lwd = 2) IC50 <.0 θ 32.vals.5 32. lty = 3) legend(31.norm.7) 19. 1) para uma amostra de tamanho 20 e m´ edia 32. 2). A fun¸ c˜ ao de log-verossimilhan¸ ca ´ e dada por l(θ) = n log(θ) − θnx ¯. dev50. 2). rep(L. cex = 0. .Introdu¸ c˜ ao ao R 146 [1] 31.95.95/50) arrows(IC50.a. Vimos que: 1. xn a. IC50. ˆ= 2. 2).vals.95. length = 0. X .vals. c("n=10". lty = 2) dev50. . xbar = 32) lines(thetaN. 1) * sqrt(L. length = 0. . 2. > > > > > > > > + IC20 <.0 5 D(θ) 10 15 20 31. o estimador de m´ axima verossimilhan¸ ca ´ eθ Pn n i=1 Xi = 1 ¯. 1.0 Figura 40: Fun¸ c˜ ao deviance para N(θ.1. n = 50.95. rep(L. "n=20". 2).43826 0 31. . 1). 1) * sqrt(L.vals <. de uma distribui¸ c˜ ao exponencial de parˆ ametro θ com fun¸ c˜ ao de densidade f (x) = θ exp{−θx}. lty = c(1.2 IC para o parˆ ametro da distribui¸ c˜ ao exponencial Seja x1 .v1(thetaN. df = 1).1.95/20) arrows(IC20. lwd = 2) abline(h = qchisq(0.32 + c(-1. 2).5 33. rep(0. rep(0.56174 32. "n=50"). IC20.

l = 101) dev.function(theta.2. 0.04. xbar = 10) .0 θ 32.exp(thetaE. ou.seq(0.0 Figura 41: Fun¸ c˜ oes deviance para o parˆ ametro θ da N(θ.dev. ˆ θ A seguir vamos ilustrar a obten¸ c˜ ao destes intervalos no R. a fun¸ c˜ ao deviance ´ e D(θ) = 2n log(θ/θ ¯(θ − θ 4.(1/xbar))) } thetaE.Introdu¸ c˜ ao ao R 147 D(θ) 2 4 6 8 10 n=10 n=20 n=50 0 31. xbar) { 2 * n * (log((1/xbar)/theta) + xbar * (theta .1. 5. e os limites do intervalo n˜ ao podem ser obtidos analiticamente.vals <. 1) para amostras de m´ edia 32 e tamanhos de amostra n = 10. ˆ )+x ˆ) . n.0 31. 20 e 50. pela aproxima¸ c˜ ao quadr´ atica da verossimilhan¸ ca por s´ erie de Taylor que neste caso fornece uma express˜ ao da deviance aproximada dada por D(θ) ≈ n ˆ 2 θ −θ . n = 20. e neste caso a deviance tem distribui¸ c˜ ao assint´ otica χ2 (1) . devendo ser obtidos por: m´ etodos num´ ericos ou gr´ aficos. 3.vals <. O estimador de m´ axima verossimilhan¸ ca pode ser obtido ˆ analiticamente neste exemplo θ = 1/x ¯ = 1/10 = 0.vals. Vamos considerar que temos uma amostra onde n = 20 e x ¯ = 10 para a qual a fun¸ c˜ ao deviance ´ e mostrada na Figura 42 e obtida de forma an´ aloga ao exemplo anterior. > + + > > dev.5 33.exp <.5 32.

05 0.20 Figura 42: Fun¸ c˜ ao deviance da Exp(θ) para uma amostra de tamanho 20 e m´ edia 10. esta equa¸ c˜ ao n˜ ao tem solu¸ c˜ ao anal´ ıtica vamos examinar a seguir duas poss´ ıveis solu¸ c˜ oes para encontrar os limites do intervalo. A cada um destes valores corresponde um valor de D(θ). diferentemente do exemplo anterior. para 95% o valor de χ2 e 3.1 Solu¸ c˜ ao num´ erica/gr´ afica simplificada Iremos aqui considerar uma solu¸ c˜ ao simples baseada no gr´ afico da fun¸ c˜ ao deviance para encontrar os limites do IC que consiste no seguinte: Para fazermos o gr´ afico da deviance criamos uma sequˆ encia de valores do parˆ ametro θ. Isto ´ e feito com o c´ odigo abaixo e o resultado exibido na Figura 43. 19.15 0.2. n˜ ao determinamos a distribui¸ c˜ ao exata da deviance e usamos a distribui¸ c˜ ao assint´ otica χ2 na qual se baseia a linha de corte tracejada mostrada no gr´ afico (1) para definir o IC do parˆ ametro ao n´ ıvel de 95% de confian¸ ca. + ylab = expression(D(theta))) 148 0 2 4 D(θ) 6 8 10 12 0. dev. 1. Para encontrar os limites do IC precisamos dos valores no eixo dos parˆ ametros nos pontos onde a linha de corte toca a fun¸ c˜ ao deviance o que corresponde a resolver a equa¸ c˜ ao D(θ) = ∗ ∗ 2 ˆ )+x ˆ) = c onde c ´ 2n log(θ/θ ¯(θ − θ e quantil da distribui¸ c˜ ao da χ com 1 grau de liberdade correspondente ao n´ ıvel de confian¸ ca desejado. Neste exemplo. xlab = expression(theta). ty = "l".vals. Por exemplo.vals. Vamos ent˜ ao localizar os valores de θ para os quais D(θ) ´ e o mais pr´ oximo poss´ ıvel do ponto de corte. .10 θ 0.95 ´ Como.Introdu¸ c˜ ao ao R > plot(thetaE.0. diferentemente do anterior.84.

Introdu¸ c˜ ao ao R > + > > > > > > + > > plot(thetaE.vals, dev.vals, ty = "l", xlab = expression(theta), ylab = expression(D(theta))) L.95 <- qchisq(0.95, df = 1) abline(h = L.95, lty = 3) dif <- abs(dev.vals - L.95) theta.est <- 1/10 lim.fc <- function(x) dev.exp(x, n = 20, xbar = 10) - L.95 ICdev <- c(uniroot(lim.fc, c(0, theta.est))$root, uniroot(lim.fc, c(theta.est, 1))$root) arrows(ICdev, rep(L.95, 2), ICdev, rep(0, 2), len = 0.1) text(ICdev, 0, round(ICdev, dig = 3), pos = 1, cex = 0.8, offset = 0.3)

149

0

2

4

D(θ) 6

8

10

12

0.062

0.15

0.05

0.10 θ

0.15

0.20

Figura 43: Obten¸ c˜ ao gr´ afica do IC para o parˆ ametro θ da Exp(θ) para uma amostra de tamanho 20 e m´ edia 10. Note que neste c´ odigo procuramos primeiro o limite inferior entre os valores menores que a estimativa do parˆ ametro (1/10) e depois o limite superior entre os valores maiores que esta estimativa. Para isto usamos a fun¸ c˜ ao uniroot() que fornece ra´ ızes unidimensionais de uma fun¸ c˜ ao que definimos como a diferen¸ ca entre a fun¸ c˜ ao devian¸ ce e o valor de corte definido pela distribui¸ c˜ ao χ2 para o n´ ıvel de significˆ ancia desejado.

Introdu¸ c˜ ao ao R 19.2.2 Aproxima¸ c˜ ao quadr´ atica da verossimilhan¸ ca

150

Nesta abordagem aproximamos a fun¸ c˜ ao deviance por uma fun¸ c˜ ao quadr´ atica obtida pela expans˜ ao por s´ erie de Taylor ao redor do estimador de m´ axima verossimilhan¸ ca: D(θ) ≈ n ˆ θ−θ ˆ θ
2

.

A Figura 44 obtida com os comandos mostra o gr´ afico desta fun¸ ca ˜o deviance aproximada. A Figura tamb´ em mostra os IC’s obtido com esta fun¸ c˜ ao. Para a aproxima¸ c˜ ao quadr´ atica os limites dos intervalos s˜ ao facilmente determinados analiticamente e neste caso dados por: ˆ(1 − θ ˆ(1 + c∗ /n) , θ c∗ /n) .

> devap.exp <- function(theta, n, xbar) { + n * (xbar * (theta - (1/xbar)))^2 + } > devap.vals <- devap.exp(thetaE.vals, n = 20, xbar = 10) > plot(thetaE.vals, devap.vals, ty = "l", xlab = expression(theta), + ylab = expression(D(theta))) > L.95 <- qchisq(0.95, df = 1) > abline(h = L.95, lty = 3) > ICdevap <- (1/10) * (1 + c(-1, 1) * sqrt(L.95/20)) > ICdevap [1] 0.05617387 0.14382613 > arrows(ICdevap, rep(L.95, 2), ICdevap, rep(0, 2), len = 0.1) > text(ICdevap, 0, round(ICdev, dig = 3), pos = 1, cex = 0.8, offset = 0.3)

19.3

Comparando as duas estrat´ egias

Examinando os limites dos intervalos encontrados anteriormente podemos ver que s˜ ao diferentes. Vamos agora colocar os resultados pelos dois m´ etodos em um mesmo gr´ afico (Figura 45) para comparar os resultados. > + > > > > > + plot(thetaE.vals, dev.vals, ty = "l", xlab = expression(theta), ylab = expression(D(theta))) lines(thetaE.vals, devap.vals, lty = 2) abline(h = L.95, lty = 3) arrows(ICdev, rep(L.95, 2), ICdev, rep(0, 2), len = 0.1) arrows(ICdevap, rep(L.95, 2), ICdevap, rep(0, 2), lty = 2, len = 0.1) legend(0.07, 12, c("deviance", "aproximac~ ao quadr´ atica"), lty = c(1, 2), cex = 0.8)

Vamos agora examinar o efeito do tamanho da amostra na fun¸ c˜ ao deviance e sua aproxima¸ c˜ ao quadr´ atica. A Figura 46 mostra as fun¸ c˜ oes para trˆ es tamanhos de amostra, n = 10, 30 e 100 que s˜ ao obtidas com os comandos abaixo onde vemos que a aproxima¸ c˜ ao fica cada vez melhor com o aumento do tamanho da amostra.

Introdu¸ c˜ ao ao R

151

[1] 0.05617387 0.14382613

0

5

D(θ) 10

15

20

0.062

0.15

0.05

0.10 θ

0.15

0.20

Figura 44: Fun¸ c˜ ao deviance obtida pela aproxima¸ c˜ ao quadr´ atica para Exp(θ) e uma amostra de tamanho 20 e m´ edia 10. > > > + > > > > > + > > > > > + > > thetaE.vals <- seq(0.04, 0.2, l = 101) dev10.vals <- dev.exp(thetaE.vals, n = 10, xbar = 10) plot(thetaE.vals, dev10.vals, ty = "l", xlab = expression(theta), ylab = expression(D(theta))) devap10.vals <- devap.exp(thetaE.vals, n = 10, xbar = 10) lines(thetaE.vals, devap10.vals, lty = 2) abline(h = qchisq(0.95, df = 1), lty = 3) dev30.vals <- dev.exp(thetaE.vals, n = 30, xbar = 10) plot(thetaE.vals, dev30.vals, ty = "l", xlab = expression(theta), ylab = expression(D(theta))) devap30.vals <- devap.exp(thetaE.vals, n = 30, xbar = 10) lines(thetaE.vals, devap30.vals, lty = 2) abline(h = qchisq(0.95, df = 1), lty = 3) dev100.vals <- dev.exp(thetaE.vals, n = 100, xbar = 10) plot(thetaE.vals, dev100.vals, ty = "l", xlab = expression(theta), ylab = expression(D(theta))) devap100.vals <- devap.exp(thetaE.vals, n = 100, xbar = 10) lines(thetaE.vals, devap100.vals, lty = 2)

Introdu¸ c˜ ao ao R

152

12

deviance aproximacão quadrática

0

2

4

D(θ) 6

8

10

0.05

0.10 θ

0.15

0.20

Figura 45: Compara¸ c˜ ao dos IC’s de confian¸ ca obtidos pela solu¸ c˜ ao gr´ afica/num´ erica (linha s´ olida) e pela aproxima¸ c˜ ao quadr´ atica (linha tracejada) para o parˆ ametro θ da Exp(θ) para uma amostra de tamanho 20 e m´ edia 10. > abline(h = qchisq(0.95, df = 1), lty = 3)

19.4

Exerc´ ıcios

1. Seja 14.1, 30.0, 19.6, 28.2, 12.5, 15.2, 17.1, 11.0, 25.9, 13.2, 22.8, 22.1 a.a. de uma distribui¸ c˜ ao nor2 mal de m´ edia 20 e variˆ ancia σ . (a) Obtenha a fun¸ c˜ ao deviance para σ 2 e fa¸ ca o seu gr´ afico. (b) Obtenha a fun¸ c˜ ao deviance para σ e fa¸ ca o seu gr´ afico. (c) Obtenha os IC’s a 90% de confian¸ ca. 2. Repita as an´ alises mostradas no exemplo acima da distribui¸ c˜ ao exponencial mas agora utilizando a seguinte parametriza¸ c˜ ao para a fun¸ c˜ ao de densidade: f (x) = 1 exp (−x/λ) x ≥ 0. λ

Discuta as diferen¸ cas entre os resultados obtidos nas duas parametriza¸ c˜ oes.

Introdu¸ c˜ ao ao R

153

15

D(θ) 3

D(θ) 10

5

0

0

0.05

0.10 θ

0.15

0.20

0.05

0.10 θ

0.15

0.20

0 0.05

10

1

20

2

D(θ) 30

40

4

50

5

60

6

0.10 θ

0.15

0.20

Figura 46: Fun¸ c˜ oes deviance e deviance aproximada para o parˆ ametro θ da Exp(θ) em amostras de m´ edia 10 e tamanhos n = 10 (esquerda), 30 (centro) e 100 (direita).

20
20.1

Ilustrando propriedades de estimadores
Consistˆ encia

Um estimador ´ e consistente quando seu valor se aproxima do verdadeiro valor do parˆ ametro ` a medida que aumenta-se o tamanho da amostra. Vejamos como podemos ilustrar este resultado usando simula¸ c˜ ao. A id´ eia b´ asica ´ e a seguite: 1. escolher uma distribui¸ c˜ ao e seus parˆ ametros, 2. definir o estimador, 3. definir uma sequˆ encia crescente de valores de tamanho de amostras, 4. obter uma amostra de cada tamanho, 5. calcular a estat´ ıstica para cada amostra, 6. fazer um gr´ afico dos valores das estimativas contra o tamanho de amostra, indicando neste gr´ afico o valor verdadeiro do parˆ ametro. 20.1.1 M´ edia da distribui¸ c˜ ao normal

Seguindo os passos acima vamos: 1. tomar a distribui¸ c˜ ao Normal de m´ edia 10 e variˆ ancia 4, ¯= 2. definir o estimador X
n xi i=1 n ,

3. escolhemos os tamanhos de amostra n = 2, 5, 10, 15, 20, . . . , 1000, 1010, 1020, . . . , 5000,

0 estim 9. Y2 .a. seq(1010. Resultados como estes podem ser ilustrados computacionalmente como visto na Sess˜ ao 29. 1000. . com distribui¸ c˜ ao normal N (µ.numeric(length(ns)) for (i in 1:length(ns)) { amostra <.mean(amostra) } plot(ns. .5 10. estim) abline(h = 10) 8. σ ) ent˜ ao y ¯ ∼ N(µ. Vamos ver um exemplo: considere Y uma v.0 10.5 0 9. Yn ∼ 2 2 N(µ. Por exemplo o resultado visto na sess˜ ao 29: se Y1 . Em alguns casos estas distribui¸ c˜ oes s˜ ao derivadas analiticamente. fazemos os c´ alculos e produzimos um gr´ afico como mostrado na 47 com os comandos a seguir. σ 2 ) e seja um parˆ ametro de interesse θ = µ/σ 2 .rnorm(ns[i]. . 5000. σ /n).5 1000 2000 ns 3000 4000 5000 Figura 47: M´ edias de amostras de diferentes tamanhos. Al´ em disto este procedimento permite investigar distribui¸ c˜ oes amostrais que s˜ ao complicadas ou n˜ ao podem ser obtidas analiticamente. by = 5). 4) estim[i] <.c(2. Para obter por simula¸ c˜ ao a esperan¸ ca e variˆ ancia do estimador 2 2 ¯ ¯ T = Y /S onde Y ´ e a m´ edia e S a variˆ ancia de uma amostra seguimos os passos: .2 Momentos das distribui¸ c˜ oes amostrais de estimadores Para inferˆ encia estat´ ıstica ´ e necess´ ario conhecer a distribui¸ c˜ ao amostral dos estimadores. seq(5. > > > + + + > > ns <. 20.Introdu¸ c˜ ao ao R 154 4. by = 10)) estim <. 10. Isto se aplica a diversos resultados vistos em um curso de Inferˆ encia Estat´ ıstica.

No caso ˆ [T ] ≈ 3. Estime por simula¸ c˜ ao a esperan¸ ca e variˆ ancia do estimador λ c˜ ao de Poisson de parˆ ametro λ para um tamanho de amostra n = 30.Introdu¸ c˜ ao ao R 1.13 e Var[ ˆ T ] ≈ 1. calcular a estat´ ıstica de interesse para cada amostra. sd = 8).var(Tvals) > VarT [1] 1. ˆ = X ¯ de uma distribui¸ 3. Ilustre a consistˆ encia do estimador λ c˜ ao exponencial f (x) = λ exp{−λx}. ˆ [T ] e Var[ ˆ T ]. Para obter as masmas amostras ter´ ıamos que usar a mesma semente para gera¸ c˜ ao de n´ umeros aleat´ orios.2) ilustramos a obten¸ c˜ ao dos momentos para um tamanho fixo de amostra n = 20. 20.4 Variˆ ancia m´ ınima Fica como exerc´ ıcio. obter por simula¸ c˜ ao um n´ umero N de amostras. 2. vamos usar N = 1000.apply(amostras. Mostre em um gr´ afico como os valores de E c˜ ao de n. 3. no caso escolhemos n = 20. escolher uma distribui¸ c˜ ao e seus parˆ ametros. onde cada coluna ´ e uma amostra. 2. Repita o procedimento para ˆ [T ] e Var[ ˆ T] v´ arios tamanho de amostra e fa¸ ca um gr´ afico mostrando o comportamento de E em fun¸ c˜ ao de n.133945 > VarT <. function(x) { + mean(x)/var(x) + }) > ET <. > amostras <. .3 N˜ ao-tendenciosidade Fica como exerc´ ıcio. 64).33. 20. No exemplo dos momentos das distribui¸ c˜ oes de estimadores visto em (20. anterior foi obtido E Se voce rodar os comandos acima dever´ a obter resultados um pouco diferentes (mas n˜ ao muito!) pois nossas amostras da distribui¸ c˜ ao normal n˜ ao s˜ ao as mesmas.5 Exerc´ ıcios ˆ = 1/X ¯ de uma distribui¸ 1. 5.329038 155 Nestes comandos primeiro obtemos 1000 amostras de tamanho 20 que armazenamos em uma matriz de dimens˜ ao 20 × 1000. no caso vamos escolher uma N (180. definir um tamanho de amostra.matrix(rnorm(20 * 1000. usar as amostras para obter as estimativas E Vamos ver agora comandos do R. A seguir usamos a fun¸ c˜ ao apply para calcular a quantidade desejada que definimos com function(x) {mean(x)/var(x)}. 20. 2.mean(Tvals) > ET [1] 3. 4. nc = 1000) > Tvals <. Compare com os valores obtidos ˆ ] e Var[ ˆ ] variam em fun¸ ˆ [λ ˆ λ analiticamente. mean = 180.

Crie um exemplo para ilustrar a n˜ ao tendenciosidade de estimadores. 5.Introdu¸ c˜ ao ao R 156 4. σ ). Crie um exemplo para comparar a variˆ ancia de dois estimadores. Por exemplo compare por ¯ e T2 = (X[1] + X[n] )/2 do parˆ simula¸ c˜ ao as variˆ ancias dos estimadores T1 = X ametro µ de uma 2 distribui¸ c˜ ao N(µ. onde X[1] e X[n] s˜ ao os valores m´ ınimo e m´ aximo da amostra. respectivamente. . Sugest˜ ao: compare os n n 2 2 2 2 ¯ ¯ estimadores S = i=1 (X1 − X ) /(n − 1) e σ ˆ = i=1 (X1 − X ) /n do parˆ ametro de variˆ ancia σ 2 de uma distribui¸ c˜ ao normal.

usando uma fun¸ c˜ ao j´ a existente no R 21. 127. Nesta sess˜ ao vamos verificar como utilizar o R para fazer teste de hip´ oteses sobre parˆ ametros de distribui¸ c˜ oes para as quais os resultados s˜ ao bem conhecidos. assumindo a distribui¸ c˜ ao normal. > ma <. 142. 141. fazendo as contas passo a passo. Devemos tamb´ em fixar o n´ ıvel de significˆ ancia do teste. Os comandos e c´ alculos s˜ ao bastante parecidos com os vistos em intervalos de confian¸ ca e isto nem poderia ser diferente visto que intervalos de confian¸ ca e testes de hip´ otese s˜ ao relacionados. Eles devem ser resolvidos usando como referˆ encia qualquer texto de Estat´ ıstica B´ asica. 136. sorteamos dias amostras de 6 pe¸ cas de cada m´ aquina. 137) > na <. Assim como fizemos com intervalos de confian¸ ca. Para isso. Procure resolver primeiramente sem o uso de programa estat´ ıstico. utilizando o R como uma calculadora 2. A id´ eia ´ e relembrar como s˜ ao feitos alguns testes de hip´ otese b´ asicos e corriqueiros em estat´ ıstica.c(145. e obtivemos as seguintes resistˆ encias: M´ aquina A 145 127 136 142 141 137 M´ aquina B 143 128 132 138 142 132 O que se pode concluir fazendo um teste de hip´ otese adequado? Solu¸ c˜ ao: Da teoria de testes de hip´ otese sabemos que. escrevendo uma fun¸ c˜ ao 3. aqui sempre que poss´ ıvel e para fins did´ aticos mostrando os recursos do R vamos mostrar trˆ es poss´ ıveis solu¸ c˜ oes: 1.1 Compara¸ c˜ ao de variˆ ancias de uma distribui¸ c˜ ao normal Queremos verificar se duas m´ aquinas produzem pe¸ cas com a mesma homogeneidade quanto a resistˆ encia ` a tens˜ ao. que neste caso vamos definir como sendo 5%. o teste para a hip´ otese: 2 2 2 2 H0 : σA = σB versus Ha : σA = σB que ´ e equivalente ` a H0 : 2 2 σA σA = 1 versus H : =1 a 2 2 σB σB ´ e feito calculando-se a estat´ ıstica de teste: Fcalc = 2 SA 2 SB e em seguida comparando-se este valor com um valor da tabela de F e/ou calculando-se o p-valor associado com nA − 1 e nB − 1 graus de liberdade.length(ma) > na .Introdu¸ c˜ ao ao R 157 21 Testes de hip´ otese Os exerc´ ıcios abaixo s˜ ao referentes ao conte´ udo de Testes de Hip´ oteses conforme visto na disciplina de Estat´ ıstica Geral II. Para efetuar as an´ alises no R vamos primeiro entrar com os dados nos objetos que vamos chamar de ma e mb e calcular os tamanhos das amostras que v˜ ao ser armazenados nos objetos na e nb.

test(). para testar variˆ ancias neste exemplo utilizamos var.test".var(ma) > ma. > args(var. .1 Fazendo as contas passo a passo Vamos calcular a estat´ ıstica de teste.v [1] 40 > mb.v > fcalc [1] 1..test) function (x.level = 0. > ma. "default")) function (x.Introdu¸ c˜ ao ao R [1] 6 > mb <. Vamos verificar os argumentos da fun¸ c˜ ao.v/mb.1.1. 138.. na .1. conf. Portanto devemos pedir os argumentos da fun¸ c˜ ao ”default”.) NULL . 142. y. Por exemplo.sided".v [1] 36.9331458 No c´ alculo do P-valor acima multiplicamos o valor encontrado por 2 porque estamos realizando um teste bilateral.082056 > pval <.1. Este tipo de resultado indica que var.test() ´ e um m´ etodo com mais de uma fun¸ c˜ ao associada.c(143. > args(getS3method("var. 128.95.ma.. . ratio = 1. "less". alternative = c("two. 21.length(mb) > nb [1] 6 158 21.2 Escrevendo uma fun¸ c˜ ao Esta fica por sua conta! Escreva a sua pr´ opria fun¸ c˜ ao para testar hip´ oteses sobre variˆ ancias de duas distribui¸ c˜ oes normais.3 Usando uma fun¸ c˜ ao do R O R j´ a tem implementadas fun¸ c˜ oes para a maioria dos procedimentos estat´ ısticos “usuais”. lower = F) > pval [1] 0.96667 > fcalc <. nb .) NULL Note que esta sa´ ıda n˜ ao ´ e muito informativa.v <.var(mb) > mb.v <. 132. 132) > nb <.2 * pf(fcalc. "greater"). 21.1.. Como temos o computador a disposi¸ c˜ ao n˜ ao precisamos de da tabela da distribui¸ c˜ ao F e podemos calcular o p-valor diretamente.

O tempo m´ edio da amostra foi de 85 minutos. para executar uma tarefa. tem sido 100 minutos. com 2 variˆ ancia igual a 4. 22.0821. 24. Desejamos. com m´ edia µ e variˆ ancia 400g 2 . Como "two. O tempo m´ edio. p-value = 0. obtendo: 27. para isso. Para aplicar esta fun¸ c˜ ao nos nossos dados basta digitar: > var. Sabe-se que o ´ ındice de nicotina se distribui normalmente. A m´ aquina foi regulada para µ = 500g . usar uma amostra de 200 fam´ ılias obtendo 104 respostas afirmativas.7327847 sample estimates: ratio of variances 1. Introduziu-se uma modifica¸ c˜ ao para diminuir esse tempo. de meia em meia hora. se µ = 500g ou n˜ ao. colher uma amostra de 16 pacotes e verificar se a produ¸ c˜ ao est´ a sob controle. Uma m´ aquina autom´ atica de encher pacotes de caf´ e enche-os segundo uma distribui¸ c˜ ao normal. mb) F test to compare two variances data: ma and mb F = 1. por oper´ ario. Um laborat´ orio realiza 6 an´ alises desse ´ ındice. 21. ap´ os certo per´ ıodo.test(ma.sided" ´ e a primeira op¸ c˜ ao o “default” ´ e o teste bilateral. 3. 86mg . Nestes casos voce dever´ a fazer os c´ alculos usando o R como calculadora. 1. 25. e decide. num df = 5. A decis˜ ao baseia-se em verificar se o P-valor ´ e menor que o definido inicialmente. que por “default” a hip´ otese nula ´ e que o quociente das variˆ ancias ´ e 1 e que a alternativa pode ser bilateral ou unilateral. ao n´ ıvel de 10%. Qual a conclus˜ ao ao n´ ıvel de 5% de significˆ ancia? 4. e. Uma rede competidora deseja contestar essa afirma¸ c˜ ao. denom df = 5. isto ´ e.9331 alternative hypothesis: true ratio of variances is not equal to 1 95 percent confidence interval: 0.082056 e note que a sa´ ıda inclui os resultados do teste de hip´ otese bem como o intervalo de confian¸ ca. Pode-se aceitar.Introdu¸ c˜ ao ao R 159 Neste argumentos vemos que a fun¸ c˜ ao recebe dois vetores de de dados (x e y). a afirma¸ c˜ ao do fabricante. 21. com um desvio padr˜ ao de 15 minutos. Finalmente o n´ ıvel de confian¸ ca ´ e 95% ao menos que o u ´ltimo argumento seja modificado pelo usu´ ario. Uma companhia de cigarros anuncia que o ´ ındice m´ edio de nicotina dos cigarros que fabrica apresenta-se abaixo de 23mg por cigarro. o o desvio padr˜ ao foi 12 minutos. Estes resultados trazem evidˆ encias estat´ ısticas da melhora desejada? . Se uma dessas amostras apresentasse uma m´ edia x ¯ = 492g .1514131 7. 26.2 Exerc´ ıcios Os exerc´ ıcios a seguir foram retirados do livro de Bussab & Morettin (2003). Uma esta¸ c˜ ao de televis˜ ao afirma que 60% dos televisores estavam ligados no seu programa especial de u ´ltima segunda feira. medindo-se o tempo de execu¸ c˜ ao de cada um. voce pararia ou n˜ ao a produ¸ c˜ ao para verificar se o mostrador est´ a na posi¸ c˜ ao correta? 2. Note que nos exerc´ ıcios abaixo nem sempre voce poder´ a usar fun¸ c˜ oes de teste do R porque em alguns casos os dados brutos n˜ ao est˜ ao dispon´ ıveis. O valor de µ pode ser fixado num mostrador situado numa posi¸ c˜ ao um pouco inacess´ ıvel dessa m´ aquina. sorteou-se uma amostra de 16 oper´ arios.

9 anos Pode-se dizer que existe diferen¸ ca significativa entre o tempo de adapta¸ c˜ ao de homens e mulheres? A sua conclus˜ ao seria diferente se as amostras tivessem sido de 5 homens e 5 mulheres? .8 anos 0. de 50 homens e 50 mulheres de um grande complexo industrial.Introdu¸ c˜ ao ao R 160 5. uma amostra aleat´ oria.7 anos Desvios Padr˜ oes 0. produziu os seguintes resultados: Estat´ ısticas Homens Mulheres M´ edias 3. Num estudo comparativo do tempo m´ edio de adapta¸ c˜ ao.2 anos 3.

Entretanto este resultado deve ser visto com cautela pois a mensagem de alerta (Warning message) emitida pelo programa chama aten¸ c˜ ao ao fato de que h´ a v´ arias caselas com baixa frequˆ encia na tabela e portanto as condi¸ c˜ oes para a validade do teste n˜ ao s˜ ao perfeitamente satisfeitas.1] Eye Hair Brown Blue Hazel Green Black 32 11 10 3 Brown 38 50 25 15 Red 10 10 7 7 Blond 3 30 5 8 > chisq. df = 9. .1633. 1] X-squared = 42. > data(HairEyeColor) > HairEyeColor > as.068e-06 Warning message: Chi-squared approximation may be incorrect in: chisq.test(HairEyeColor[. a partir de dados obtidos em amostras. Para isto vamos ver alguns problemas t´ ıpicos de cursos de estat´ ıstica b´ asica. 22. Em geral existe interesse em verificar se as vari´ aveis est˜ ao associadas 2 e para isto calcula-se uma medida de associa¸ c˜ ao tal como o χ .. > HairEyeColor[. . Para ilustrar aqui o teste χ2 vamos verificar se existe associa¸ c˜ ao entre 2 atributos: cor dos olhos e cabelos entre os indiv´ ıduos do sexo feminino. Para carregar e visualizar os dados use os comando abaixo. coeficiente de contingˆ encia C . Para ilustrar o teste vamos utilizar o conjunto de dados HairEyeColor que j´ a vem dispon´ ıvel com o R. 1]) O p − value sugere que a associa¸ c˜ ao ´ e significativa. Nos comandos abaixo primeiro isolamos apenas a tabela com os indiv´ ıduos do sexo masculino e depois aplicamos o teste sobre esta tabela. com cada uma das dimens˜ oes correspondendo a um dos atributos .1 Teste χ2 de independˆ encia Quando estudamos a rela¸ c˜ ao entre duas vari´ aveis qualitativas fazemos uma tabela com o resultado do cruzamento desta vari´ aveis. p-value = 3. Uma poss´ ıvel forma de testar tal hip´ otese ´ e utilizando o teste χ2 . O passo seguinte ´ e verificar se existe evidˆ encia suficiente nos dados para declarar que a vari´ aveis est˜ ao associadas. ou similar.test(HairEyeColor[.cor dos cabelos. Portanto as hip´ oteses s˜ ao: H0 : n˜ ao existe associa¸ c˜ ao Ha : existe associa¸ c˜ ao Vamos adotar α = 5% como n´ ıvel de significˆ ancia.frame(HairEyeColor) Para saber mais sobre estes dados veja help(HairEyeColor) Note que estes dados j´ a vem “resumidos” na forma de uma tabela de frequˆ encias tri-dimensional.data.Introdu¸ c˜ ao ao R 161 22 Intervalos de confian¸ ca e testes de hip´ otese Nesta sess˜ ao vamos ver mais alguns exemplos sobre como utilizar o R para obter intervalos de confian¸ ca e testar hip´ oteses sobre parˆ ametros de interesse na popula¸ c˜ ao. olhos e sexo. ..1]) Pearson³s Chi-squared test data: HairEyeColor[.

> data(mtcars) > attach(mtcars) > cor(wt. mpg) [1] -0.test(HairEyeColor[.. df = 30. Para ilustrar o teste para o coeficiente linear de Pearson vamos estudar a rela¸ c˜ ao entre o peso e rendimento de carros. p-value = 0. mpg) Pearson³s product-moment correlation data: wt and mpg t = -9. 22. Note que uma an´ alise mais cuidadosa deveria incluir o exame do gr´ afico entre estas duas vari´ aveis para ver se o coeficiente de correla¸ c˜ ao linear ´ e adequado para medir a associa¸ c˜ ao.9338264 -0. Para isto vamos usar as vari´ aveis wt (peso) e mpg (milhas por gal˜ ao) do conjunto de dados mtcars.test(wt.294e-10 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: -0.1633.test) para mais detalhes sobre a implementa¸ c˜ ao deste teste no R.87 difere significativamente de zero. Note que se voce rodar este exemplo poder´ a obter um p − value um pouco diferente porque as simula¸ c˜ oes n˜ ao necessariamente ser˜ ao as mesmas.0004998 Note que agora a mensagem de alerta n˜ ao ´ e mais emitida e que a significˆ ancia foi confirmada (P-valor < 0.7440872 sample estimates: cor -0.559.8676594 > detach(mtcars) Portanto o p-valor acima mmostra que a correla¸ c˜ ao encontrada de -0. ao inv´ es do resultado assint´ otico usado no teste tradicional. 1] X-squared = 42. > chisq. . Lembre-se de inspecionar help(chisq. se a rela¸ c˜ ao entre elas for linear.2 Teste para o coeficiente de correla¸ c˜ ao linear de Pearson Quando temos duas vari´ aveis quantitativas podemos utilizar o coeficiente de correla¸ c˜ ao linear para medir a associa¸ c˜ ao entre as vari´ aveis.8676594 > cor. df = NA.05).1].Introdu¸ c˜ ao ao R 162 Uma possibilidade neste caso ´ e ent˜ ao usar o p − value calculado por simula¸ c˜ ao. sim=T) Pearson³s Chi-squared test with simulated p-value (based on 2000 replicates) data: HairEyeColor[. . p-value = 1.

var.2.0. 6.1 2.eq=T) Two Sample t-test data: m1 and m2 t = -0. df = 18. No exemplo abaixo veremos um teste unilateral. 9.5 9. foram medidos 6 exemplares de cada sexo e obtivemos os seguintes comprimentos: .3) > m2 <.7. 5.4 Exerc´ ıcios 1. Usando argumentos desta fun¸ c˜ ao definimos o tipo de teste desejado. Considere o seguinte exemplo: Os dados a seguir correpondem a teores de um elemento indicador da qualidade de um certo produto vegetal. 5.1. Inspecione o conjunto de dados humanos. Revisite os dados milsa visto na aula de estat´ ıstica descritiva e selecione pares de vari´ aveis adequadas para efetuar: (a) um teste χ2 (b) um teste para o coeficiente de correla¸ c˜ ao (c) um teste t 2.5 5. Para isto podemos utilizar o testeT .9. 1. 3. 2.7 2. variˆ ancias iguais ou desiguais. 2.3 1.6 8.3. 3.5) t. selecione vari´ aveis a aplique os testes vistos nesta Se¸ c˜ ao.4. Al´ em disto podemos fazer testes uni ou bilaterais. ao n´ ıvel de 5% de significˆ ancia e considerando-se as variˆ ancias iguais.6. para dois grupos com variˆ ancias consideradas iguais.1 3.test. 8.2. 1.0 1.3172.855419 sample estimates: mean of x mean of y 3.5. Todos estes podem ser efetuados com a fun¸ c˜ ao t.4 3.6.515419 1. 2.c(5.m2.7547 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -2.2 3. 22. p-value = 0.7 1.63 3. 3.1. 4.3 6. Foram coletadas 2 amostras referentes a 2 m´ etodos de produ¸ c˜ ao e deseja-se comparar as m´ edias dos m´ etodos fazendo-se um teste t bilateral.96 Os resultados mostram que n˜ ao ´ a evidˆ encias para rejeitar a hip´ otese de igualdade entre as m´ edias. 2.9 2. 1.2 3.6 4.5 3.txt. 3. 3.5.7.Introdu¸ c˜ ao ao R 163 22.3.3 5. M´ etodo 1 0.3 Compara¸ c˜ ao de duas m´ edias Quando temos uma vari´ avel qualitativa com dois n´ ıveis e outra quantitativa a an´ alise em geral recai em comparar as m´ edias da quantitativa para cada grupo da qualitativa.3.2. H´ a diferentes tipos de teste T: para amostras independentes ou pareadas.c(0. 3. Queremos verificar se machos e fˆ emeas de uma mesma esp´ ecie possuem o mesmo comprimento (em mm) Para isso.5.5 > m1 <.test(m1.3 M´ etodo 2 5.2 2.

test para testar a correla¸ c˜ ao entre o comprimento de s´ epalas e p´ etalas. Use a fun¸ c˜ ao cor.test 4. Dica: Use as fun¸ c˜ oes var. .Introdu¸ c˜ ao ao R Machos 145 127 136 142 141 137 Fˆ emeas 143 128 132 138 142 132 164 Obtenha intervalos de confian¸ ca para a raz˜ ao das variˆ ancias e para a diferen¸ ca das m´ edias dos dois grupos.test e t. Veja a descri¸ c˜ ao dos dados em help(iris). Carregue o conjunto de dados iris usando o comando data(iris).

30: 44 31: Read 30 items > tr <> tr trat 1 1 2 1 3 1 4 1 5 1 6 1 7 2 8 2 9 2 10 2 11 2 12 2 13 3 14 3 15 3 16 3 17 3 18 3 data. Vamos ver como isto poder ser feito com o programa R.. resp = y) resp 2370 1687 2592 2283 2910 3020 1282 1527 871 1025 825 920 562 321 636 317 485 842 . each = 6))..frame(trat = factor(rep(1:5. Tabela 4: N´ umero de reclama¸ c˜ oes em diferentes sistemas de atendimento Trat Repeti¸ c˜ oes 1 2 3 4 5 6 1 2370 1687 2592 2283 2910 3020 2 1282 1527 871 1025 825 920 3 562 321 636 317 485 842 4 173 127 132 150 129 227 5 193 71 82 62 96 44 Inicialmente vamos entrar com os dados usando scan() e montar um data-frame.scan() 1: 2370 2: 1687 3: 2592 . Considere o seguinte exemplo da apostila do curso. > y <.Introdu¸ c˜ ao ao R 165 23 Transforma¸ c˜ ao de dados Tranforma¸ c˜ ao de dados ´ e uma das poss´ ıveis formas de contarnar o problema de dados que n˜ ao obedecem os pressupostos da an´ alise de variˆ ancia.

5 1.5 500 6 8 6 6 6 2 8 8 2 −3 −3 Standardized residuals −2 −2 −1−1 00 11 8 Residuals Standardized residuals −500 0.av <. A menssagem ´ e clara mas podemos ainda fazer testes para verificar o desvio dos pressupostos.av) Residuals Scale−Location vs Fitted 2 Residuals Normal vs Factor Q−Q Levels 1. data = tr) > plot(tr.aov(resp ~ trat.Introdu¸ c˜ ao ao R 19 20 21 22 23 24 25 26 27 28 29 30 4 4 4 4 4 4 5 5 5 5 5 5 173 127 132 150 129 227 193 71 82 62 96 44 166 A seguir vamos fazer ajustar o modelo e inspecionar os res´ ıduos. .0 0 500 1500 Fitted values 2500 trat : −25 −1 4 0 3 21 1 2 Factor Theoretical Level Combinations Quantiles Figura 48: Gr´ aficos de diagn´ ostico para dados originais O gr´ afico de res´ ıduos vs valores preditos mostra claramente uma heterogeneidade de variˆ ancias e o QQ − plot mostra um comportamento dos dados que se afasta muito da normal. > tr.0 0 2 2 0.

8961. Desta forma o O gr´ afico mostra que o valor que maximiza a fun¸ c˜ ao ´ e aproximadamente λ pr´ oximo passo ´ e obter os dados transformados e depois fazer as an´ alise utilizando estes novos dados.586. Para tentar contornar o problema vamos usar a transforma¸ c˜ ao Box-Cox. plotit = T) > boxcox(resp ~ trat.(tr$resp^(0. NOTA: No gr´ afico da verossimilhan¸ ca perfilhada notamos que ´ e mostrado um intervalo de confian¸ ca para λ e que o valor 0 est´ a contido neste intervalo. que consiste em transformar os dados de acordo com a express˜ ao y′ = yλ − 1 . > tr. Isto indica que podemos utilizar a transforma¸ c˜ ao logar´ ıtimica dos dados e os resultados ser˜ ao bom pr´ oximos dos obtidos com a transforma¸ c˜ ao pr´ eviamente adotada. lam = seq(-1. p-value = 5. A fun¸ c˜ ao boxcox() do pacote MASS calcula a verossimilhan¸ ca perfilhada do parˆ ametro λ.avl) . λ onde λ ´ e um parˆ ameto a ser estimado dos dados. Se λ = 0 a equa¸ c˜ ao acima se reduz a y ′ = log(y ). 1.avt <. Como estamos interessados no m´ aximo fazermos um novo gr´ afico com um zoom na regi˜ ao de interesse. > tr$respt <. data = tr) > plot(tr. A an´ alise deve prosseguir usando ent˜ ao os dados transformados.942e-06 > shapiro.av$res W = 0. Devemos escolher o valor que maximiza esta fun¸ c˜ ao. data = tr.Introdu¸ c˜ ao ao R > bartlett.avt) Note que os res´ ıduos tem um comportamento bem melhor do que o observado para os dados originais.aov(respt ~ trat. data = tr. p-value = 0. onde log ´ e o logar´ ıtmo neperiano.1)/0.1.av$res) Shapiro-Wilk normality test data: tr.avl <. Nos comandos a seguir come¸ camos carregando o pacote MASS e depois obtemos o gr´ afico da verossimilhan¸ ca perfilhada. > require(MASS) > boxcox(resp ~ trat.1 > tr. data = tr) > plot(tr. 1/10)) ˆ = 0.1) .006742 167 Nos resultados acima vemos que a homogeneidade de variˆ ancias foi rejeitada.test(tr. tr$trat) Bartlett test of homogeneity of variances data: tr$resp and tr$trat Bartlett³s K-squared = 29.test(tr$resp.aov(log(resp) ~ trat. Uma vez obtido o valor de λ encontramos os valores dos dados transformados conforme a equa¸ c˜ ao acima e utilizamos estes dados transformados para efetuar as an´ alises. df = 4.

5 0. matrizes.0 log−Likelihood −220 −210 95% −280 log−Likelihood −260 −240 −220 −0. Em geral tais fun¸ c˜ oes exibem gr´ aficos para explorar a rela¸ c˜ ao entre vari´ aveis. data-frames e listas) e outros tipos de objetos. Nesta se¸ c˜ ao vamos fazer uma breve introdu¸ c˜ ao ao uso de f´ ormulas atrav´ es de alguns exemplos de an´ alises de dados. Para carregar os dados e e listar os nomes das vari´ aveis utilize os comandos a seguir. Lembre-se ainda que help(mtcars) ir´ a fornecer mais detalhes sobre estes dados. F´ ormulas podem s˜ ao em geral usadas em fun¸ c˜ oes gr´ aficas e fun¸ c˜ oes que analisam dados a partir de algum modelo definido pela f´ ormula.Introdu¸ c˜ ao ao R 168 [1] TRUE −200 95% −200 −2 −1 0 λ 1 2 −230 −1. no qual as f´ ormulas s˜ ao ainda mais importante e largamente utilizadas. Este conjunto cont´ em caracter´ ısticas t´ ecnicas de diversos modelos da autom´ ovel.5 1.1 F´ ormulas em gr´ aficos Algumas (mas n˜ ao todas!) fun¸ c˜ oes gr´ aficas do R aceitam uma f´ ormula como argumento. Para isto iremos utilizar o conjunto de dados mtcars dispon´ ıvel com o R. . O R possui dois tipos de sistemas gr´ aficos: (i) gr´ aficos base (base graphics ) e (ii) gr´ aficos lattice.0 λ 0. arrays. Gr´ aficos l´ attice s˜ ao disponibilizados pelo pacote lattice. Os exemplos mostrados aqui se referem apenas ao primeiro sistema. > data(mtcars) > names(mtcars) [1] "mpg" "cyl" [11] "carb" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" 24.0 Figura 49: Perfis de verossimilhan¸ ca para o parˆ ametro λ da transforma¸ c˜ ao Box-Cox 24 F´ ormulas e especifica¸ c˜ ao de modelos Objetos do R podem ser separados entre objetos de dados (vetores. As f´ ormulas constituem um tipo especial de objeto no Rque representam simbolicamente rela¸ c˜ ao entre vari´ aveis e/ou objetos de dados.

0 0. plot(mpg ~ wt)) A Figura 24. Considere o exemplo do texte-t para compara¸ c˜ ao de duas amostras na compara¸ c˜ ao .0 Residuals 0. A f´ ormula do tipo y ∼ x pode ser lida como: a vari´ avel y ´ e explicada por x.1 mostra agora um exemplo onde o gr´ afico de rendimento explicado pelo peso ´ e feito para cada n´ umero de cilindros separadamente.5 30 30 6 7 Scale−Location Standardized residuals 0. No primeiro a vari´ avel de rendimento (mpg : milhas por gal˜ ao) ´ e relacionada com uma vari´ avel categ´ orica (cyl : n´ umero de cilindros).5 1.factor(cyl). > coplot(mpg ~ wt | as.0 18 −1. boxplot(mpg ~ cyl)) > with(mtcars.0 1. + rows = 1) 24.5 25 18 8 9 10 Fitted values 11 12 3 −2 Constant Leverage: Theoretical Quantiles Residuals vs Factor Levels 25 −1 0 1 2 30 Standardized residuals −1 0 1 2 18 0.2 F´ ormulas em fun¸ c˜ oes Assim como no caso de gr´ aficos.1 mostra dois tipos de gr´ aficos que s˜ ao definidos a partir de f´ ormulas.5 25 18 169 Normal Q−Q 3 25 Standardized residuals −1 0 1 2 1.0 −2 30 6 7 8 9 10 Fitted values 11 12 trat : 5 4 3 2 1 Factor Level Combinations Figura 50: Gr´ aficos de diagn´ ostico para dados transformados A Figura 24.smooth. > with(mtcars.Introdu¸ c˜ ao ao R Residuals vs Fitted 1. algums fun¸ c˜ oes de an´ alise de dados tamb´ em aceitam f´ ormulas em seus argumentos. panel = panel. No segundo caso o rendimento ´ e relacionado com o peso do ve´ ıculo. plot(mpg ~ cyl)) > with(mtcars. Neste caso a formula usa o s´ ımbolo | para indicar condicionamento e ´ e do tipo y ∼ x|A podendo ser lida como a rela¸ c˜ ao entre y e x para cada n´ ıvel da vari´ avel A. data = mtcars.

> with(mtcars. df = 30. t. mpg[am == 1].5 6. p-value = 0.5 5.000285 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -10.5 30 30 4.test(mpg ~ am.5 −2 5. df = 30. var.eq = T)) Two Sample t-test data: mpg by am t = -4. p-value = 0.1061.5 trat : 5 4 3 2 1 Factor Level Combinations Figura 51: Gr´ aficos de diagn´ ostico para dados com transforma¸ c˜ ao logar´ ıtmica do rendimento de ve´ ıculos com cambio autom´ atico e manual. var.848369 -3.5 Fitted values 7.5 18 Standardized residuals −1 0 1 2 30 18 −2 0. No exemplo a seguir mostramos o uso da fun¸ c˜ ao de duas formas que produzem resultados idˆ enticos.5 6.eq = T)) Two Sample t-test data: mpg[am == 0] and mpg[am == 1] t = -4.5 Fitted values 7.0 1.0 30 4.Introdu¸ c˜ ao ao R 1.5 1.000285 alternative hypothesis: true difference in means is not equal to 0 .5 18 −0.641510 sample estimates: mean of x mean of y 17.0 0.test(mpg[am == 0]. t.1061.0 170 Residuals vs Fitted 25 Normal Q−Q 3 25 18 Standardized residuals −1 0 1 2 Residuals 0.5 −2 Scale−Location 3 25 Constant Leverage: Theoretical Quantiles Residuals vs Factor Levels 25 −1 0 1 2 Standardized residuals 0.14737 24.39231 > with(mtcars. uma sem usar f´ ormula e outra usando f´ ormula.

Introdu¸ c˜ ao ao R 171 30 30 25 25 mpg 20 20 mpg 15 10 4 5 6 cyl 7 8 10 15 20 10 15 4 6 8 25 30 2 3 wt 4 5 Figura 52: Exemplos de gr´ aficos definidos atrav´ es de f´ ormulas.factor(cyl) 8 6 4 2 3 4 5 2 3 4 5 mpg 10 15 20 25 30 2 3 4 5 wt Figura 53: Gr´ afico obtido atrav´ es de f´ ormula com termo condicional. . Given : as.

na. ## S3 method for class ³formula³: t."order") [1] 1 attr(.14737 24. bartlett.vars() e terms() s˜ ao particularmente u ´teis para manipula¸ c˜ ao de f´ ormulas o objetos dentro de fun¸ c˜ oes.Introdu¸ c˜ ao ao R 95 percent confidence interval: -10. fun¸ c˜ oes que tenham m´ etodos para esta classe tratam o objeto adequadamente. > with(mtcars. wt) attr(.test recebendo uma formula como argumento o m´ etodo formula para t. subset."term. como indica a documenta¸ c˜ ao da fun¸ c˜ ao. p-value = 0.mpg ~ wt > class(form1) [1] "formula" > all.641510 sample estimates: mean in group 0 mean in group 1 17.3 O objeto da classe formula A f´ ormula ´ e um objeto do R e possui a classe formula. Desta forma. . Por exemplo.test ´ e dispon´ ıvel. > class(mpg ~ wt) [1] "formula" > form1 <.848369 -3.39231 172 Portanto em mpg ∼ am pode-se ler: rendimento (mpg) explicado por tipo de cˆ ambio (am).action."factors") wt mpg 0 wt 1 attr(. no caso de t. De forma similar a fun¸ c˜ ao para compara¸ c˜ ao de variˆ ancias tamb´ em pode utilizar f´ ormulas.labels") [1] "wt" attr(.vars(form1) [1] "mpg" "wt" > terms(form1) mpg ~ wt attr(."variables") list(mpg. data.."intercept") . df = 1.test(formula.) A seguir refor¸ camos estas id´ eias e vemos alguns comandos aplicados ` a manipula¸ c˜ ao de f´ ormulas. As fun¸ c˜ oes all..07248 24.test(mpg ~ am)) Bartlett test of homogeneity of variances data: mpg by am Bartlett³s K-squared = 3.2259.

285 wt -5.". O modelo linear ´ e dado por: Y = β0 + β1 X + ǫ . ajustar um modelo que explique o rendimento (Y:mpg) pelo peso do ve´ ıculo (X:wt). onde o termo s() indica que a vari´ avel resposta deve ser descrita por uma fun¸ c˜ ao suave da covari´ avel inclu´ ıda neste termo. A linearidade ´ e dada pela fun¸ c˜ ao lm(). > reg1 <. ´ e que adota-se uma abordagem unificada para modelagem."response") [1] 1 attr(.lm(mpg ~ wt. o portanto no programa R. e pode ser ajustado no R usando lm() (lm : linear model ). Na sintaxe da chamada fun¸ c˜ ao mpg ∼ wt lˆ e-se: mpg ´ e modelado por wt. A Figura 54 mostra os dados e a linha s´ olida mostra a equa¸ c˜ ao do modelo ajustado.Introdu¸ c˜ ao ao R [1] 1 attr(. atrav´ es de um modelo linear lm(). o que inclui a sintaxe para especifica¸ c˜ ao de modelos. ou seja. Portanto a mesma f´ ormula pode ser usada para outros tipos de ajuste como o mostrado na linha tracejada do gr´ afico resultantes de regress˜ ao local polinomial obtida por loess()). por simplicidade. onde: ` a esquerda indica-se a(s) vari´ avel(eis) resposta o s´ ımbolo ∼ significa ´ e modelada por ` a direita indica-se a(s) covari´ avel(eis) No restante deste texto vamos. data = mtcars) > reg1 Call: lm(formula = mpg ~ wt. o que implica no modelo acima. para o conjunto de dados mtcars. . considerar que h´ a apenas uma vari´ avel resposta que poder´ a ser explicada por uma ou mais covari´ aveis. o mais importante deles ´ e sem d´ uvida o fato que f´ ormulas s˜ ao utimizadas na declara¸ c˜ ao de modelos estat´ ısticos.344 Note que a f´ ormula apenas especifica a rela¸ c˜ ao entre as vari´ aveis resposta e explanat´ orias e n˜ ao implica que o modelo seja necessariamente linear. Um aspecto particularmente importante da linguagem S.Environment") <environment: R_GlobalEnv> 173 24. Outras fun¸ c˜ oes extendem a nota¸ c˜ ao de fun¸ c˜ oes como ´ e o caso do ajuste por modelos aditivos generalizados gam() mostrado na linha s´ olida grossa. Considere. na forma resposta ∼ covariavel. data = mtcars) Coefficients: (Intercept) 37.4 Especifica¸ c˜ ao de modelos com uma covari´ avel Entre os diversos usos de f´ ormulas. como por exemplo o caso da regress˜ ao por n´ ucleo (kernel ) dada por ksmooth() cujo o ajuste ´ e mostrado na linha pontilhada. Nem todas as fun¸ c˜ oes que relacionam vari´ aveis aceitam formulas. Vari´ aveis respostas e covari´ aveis (vari´ aveis explanat´ orias) s˜ ao sempre especificadas de mesma forma b´ asica.

predict(reg1. data = mtcars) lines(wts. 1. lwd = 2) legend("topright". 1). No exemplo utilizamos este recurso para produzir o gr´ afico com a ”curva”do modelo ajustado para uma sequˆ encia de valores da covari´ avel. data = mtcars) wts <. Para a fun¸ c˜ ao lm() utilizamos apenas abline() devido ao fato que esta fun¸ c˜ ao retorna a equa¸ c˜ ao de uma reta que ´ e interpretada a tra¸ cada por um m´ etodo abline. 2)) Nos exemplos acima ´ e interessante notar o uso de predict() que ´ e utilizada para predizer o valor da resposta para um conjunto arbitr´ ario de valores da covari´ avel. lty = c(1:3.loess(mpg ~ wt. lty = 2) lines(with(mtcars.gam(mpg ~ s(wt). data. "loess()". data. lwd = c(1.frame(wt = wts)). Entretanto predict() tamb´ em poderia ser usada e a reta tra¸ cada com o comando a seguir. predict(reg2. > > > > > > > > > > + with(mtcars. "ksmooth()". Esta forma ´ e mais flex´ ıvel para tra¸ car fun¸ c˜ oes (modelos) ajustados que sejam mais complexos que uma equa¸ c˜ ao de uma reta. seq(min(wt). mpg. lty = 3) require(mgcv) reg3 <. baseando-se no modelo ajustado. len = 201)) lines(wts.with(mtcars. "gam()"). plot(mpg ~ wt)) abline(reg1) reg2 <. predict(reg3. c("lm()". ksmooth(wt. max(wt). data. > lines(wts.Introdu¸ c˜ ao ao R 174 lm() loess() ksmooth() gam() mpg 10 15 20 25 30 2 3 wt 4 5 Figura 54: Diferentes modelos ajustados para descrever a rela¸ c˜ ao entre duas vari´ aveis quantitativas. band = 1)).frame(wt = wts))) . 1.frame(wt = wts)).

onde o grau do desejado do polinˆ omio ´ e um argumento desta fun¸ c˜ ao conforme ilustrado nos comandos a seguir. len = 200) > lines(hps. Neste ajuste ´ e importante notar que a vari´ avel quadr´ atica deve ser especificada com I(hp^2) e o uso de I() ´ e obrigat´ orio para garantir que os valores de hp sejam de fato elevados ao quadrado. Na chamada das fun¸ c˜ oes utilizamos a opera¸ c˜ ao aritm´ etica log() diretamente na f´ ormula.frame(hp = hps)). O uso de hp^2 possui um significado diferente que veremos na pr´ oxima sess˜ ao. predict(polA. plot(mpg ~ hp)) abline(lm(mpg ~ hp.0 15 20 25 30 4. No exemplo ´ e importante notar que a interpreta¸ c˜ ao dos parˆ ametros ´ e diferente devido ao fato de que polinˆ omios ortogonais s˜ ao utilizados. data = mtcars)) Uma outra possibilidade para os dados originais ´ e o ajuste de um modelo dado por uma fun¸ c˜ ao polinomial.5 sugere que o modelo linear n˜ ao descreve bem a rela¸ c˜ ao entre estas vari´ aveis.5 e que ´ e ajustado com os comandos a seguir.5 Extens˜ oes de modelos com uma covari´ avel As formulas admitem operadores aritm´ eticos em seus termos. A linha s´ olida no gr´ afico da esquerda da Figura 24. Por exemplo considere a rela¸ c˜ ao entre o rendimento (mgp ) e a potˆ encia (hp ). Entretanto os valores preditos e as estat´ ısticas de ajuste . plot(mpg ~ log(hp))) abline(lm(mpg ~ log(hp). lty = 2) Uma outra forma de especificar regress˜ oes polinomiais ´ e com o uso de poly(). data. > > > > with(mtcars.Introdu¸ c˜ ao ao R 175 30 25 mpg 20 mpg 15 10 50 100 150 200 hp 250 300 10 4. 24. 350.5 Figura 55: Ilustra¸ c˜ ao do uso de operadores aritm´ eticos e fun¸ c˜ oes polinomiais na especifica¸ c˜ ao de f´ ormulas.0 log(hp) 5.lm(mpg ~ hp + I(hp^2). > polA <. data = mtcars)) with(mtcars. sem a necessidade de transformar os dados originais.seq(50. data = mtcars) > hps <. enquanto no gr´ afico da direita sugere a rela¸ c˜ ao ´ e melhor descrita por um modelo linear entre o rendimento e o logar´ ıtmo de potˆ encia.5 5. conforme mostrado na linha tracejada no gr´ afico da esquerda da Figura 24.

predict(wm1. > polA Call: lm(formula = mpg ~ hp + I(hp^2).38303 14. 2).29005 17. lty = 2) lines(hgs. > > > > > > > > > > > data(women) wm1 <. Os comandos a seguir mostram os quatro ajustes indicados na Figura 56.2133083 0. O primeiro (linha fina s´ olida) ´ e uma regress˜ ao linear.lm(weight ~ height + I(height^2) + 0. predict(wm3. by = 50) > predict(polA. data. O terceiro (linha s´ olida grossa) ´ e uma regress˜ ao quadr´ atica e o quarto (linha s´ olida grossa) ´ e uma regress˜ ao quadr´ atica passando pela origem. data. data. data = women) wm4 <.38303 14. 72. o segundo (linha fina tracejada) ´ e uma regress˜ ao linear com intercepto igual a zero.05 13. 2)2 20. agora para o conjunto de dados women que fornece peso (weight ) em libras (lbs) e altura (height ) em polegadas (in) de 15 mulheres americanas de 30-39 anos. 2)1 poly(hp.58009 13. data = mtcars) Coefficients: (Intercept) hp I(hp^2) 40.58009 13. predict(wm2.lm(weight ~ height + 0.seq(58. data = women) with(women. lwd = 2) lines(hgs.30114 > predict(polB. Caso queira-se usar potˆ encias usuais deve-se adicionar ` a chamada desta fun¸ c˜ oes o argumento raw=T.28645 17. data. data = women) wm2 <. data = mtcars) Coefficients: (Intercept) poly(hp.88123 14. a reta passa pela origem.frame(hp = hps)) 1 2 3 4 5 6 7 30. 350.lm(weight ~ height.0004208 > polB <. data.29005 17.28645 17.frame(height = hgs))) lines(hgs. isto ´ e. lwd = 2) .Introdu¸ c˜ ao ao R 176 s˜ ao iguais.lm(mpg ~ poly(hp. predict(wm4. O ajuste por polinˆ omios ortogonais ´ e numericamente mais est´ avel e portanto deve ser preferido quando poss´ ıvel.frame(height = hgs)).79574 23.seq(50. Quando se usa as op¸ c˜ oes default a fun¸ c˜ ao poly() vai sempre contruir polinˆ omios ortogonais.frame(height = hgs)).09 -26.frame(height = hgs)).frame(hp = hps)) 1 2 3 4 5 6 7 30.79574 23.4091172 -0. l = 200) lines(hgs. plot(weight ~ height)) hgs <. 2). data.lm(weight ~ height + I(height^2).30114 Vamos considerar agora um outro exemplo de ajuste de modelo linear. data = mtcars) > polB Call: lm(formula = mpg ~ poly(hp.15 > hps <. lty = 2.88123 14. data = women) wm3 <. Neste exemplo fica ent˜ ao ilustrado que a adi¸ c˜ ao do termo + 0 na f´ ormula faz com que o intercepto do modelo seja nulo e apenas o parˆ ametro referente ao coeficiente angular da reta seja estimado.

3. C. 1973). Esta nota¸ c˜ ao ´ e uma implementa¸ c˜ ao das id´ eias propostas por Wilkinson e Rogers para especifica¸ c˜ ao de modelos estat´ ısticos. c("linear". > legend("topleft". data = mtcars)) . lwd = c(1. 2. com e sem estima¸ c˜ ao do intercepto. data = mtcars)) (Intercept) I(wt + hp) 30. No.6 resume as principais opera¸ c˜ oes poss´ ıveis para definir modelos com uma ou duas vari´ aveis e que podem ser extendidas para o caso de mais vari´ aveis. A Tabela 24. + "quadr´ atico s/ intercepto"). 2).2877307 -0. (G. "linear s/ intercepto". Para ilustrar algumas destas op¸ c˜ oes vamos considerar novamente o conjunto de dados mtcars ajustando modelos para o rendimento (mpg ) explicado pelo peso (wt ) e potˆ encia (hp ) do ve´ ıculo. "quadr´ atico". > coef(lm(mpg ~ I(wt + hp). E. N.85) 24. 2. Wilkinson. Symbolic Description of Factorial Models for Analysis of Variance. lty = c(1.6 Especifica¸ c˜ oes mais gerais de modelos Nos exemplos anteriores a vari´ avel resposta era explicada por apenas uma vari´ avel explanat´ oria. Vol. Rogers.Introdu¸ c˜ ao ao R 177 linear linear s/ intercepto quadrático quadrático s/ intercepto 120 58 130 weight 140 150 160 60 62 64 66 height 68 70 72 Figura 56: Ajustes de modelos de primeiro e segundo grau. + 1. 2). Applied Statistics. Isto pode ser expandido considerando-se a presen¸ ca de duas ou mais vari´ aveis explicativas.0680239 > coef(lm(mpg ~ wt + hp. 1. cex = 0. Nos comandos a seguir mostramos os coeficientes estimados a partir de cinco formas de especifica¸ c˜ ao de modelos. 392-399. 22.

e 5. Y = β0 + β1 X1 + β2 X2 + ǫ. Y = β0 + β1 X1 + β2 X2 + β3 X3 + ǫ. .87783074 -0. Y = β0 + β1 X1 + ǫ. data = mtcars)) (Intercept) I(wt * hp) 27. Y = β0 + β1 X1 + ǫ.21662430 -0. Y = β0 + β1 X1 + ǫ. um modelo com apenas uma covari´ avel onde X1 ´ e a covari´ avel u ´nica com valores dados pela soma dos valores de wt e hp de cada ve´ ıculo.74564216 -0. X2 ´ e a covari´ avel hp e X3 ´ e a intera¸ c˜ ao dada pelo produto X3 = X1 × X2 .Introdu¸ c˜ ao ao R 178 Tabela 5: Sintaxe para especifica¸ c˜ ao de termos dos modelos Termos Especifica¸ c˜ ao A + B Efeitos principais A e B A : B Termo de intera¸ c˜ ao entre A e B A * B Efeitos principais e intera¸ c˜ ao.22727012 -3. data = mtcars)) (Intercept) wt hp wt:hp 49. corresponde a A + B %in%A A-B tudo de A exceto o que est´ a em B A^k Todos os termos de A e intera¸ c˜ ao de ordem k A + 0 exclui o intercepto de modelo I() operador de identidade aritm´ etica. um modelo com apenas uma covari´ avel onde X1 ´ e a covari´ avel u ´nica com valores dados pelo produto dos valores de wt e hp de cada ve´ ıculo.03177295 > coef(lm(mpg ~ I(wt * hp).4985252043 -0. data = mtcars)) (Intercept) wt hp wt:hp 49. um modelo com apenas uma covari´ avel onde X1 ´ e a covari´ avel u ´nica com valores dados pelo quadrado da soma dos valores de wt e hp de cada ve´ ıculo.02784815 > coef(lm(mpg ~ (wt + hp)^2. 4. Os modelos ajustados para explicar o rendimento mpg denotado por Y s˜ ao: 1.12010209 0.21662430 -0. onde X1 ´ e a covari´ avel wt. ver explica¸ c˜ ao no texto (Intercept) wt hp 37. data = mtcars)) (Intercept) I((wt + hp)^2) 24.80842343 -8. exceto pelos termos wt * hp e (wt * hp)^2 onde o mesmo modelo ´ e especificado de duas formas alternativas.0001625815 Os resultados sugerem que as f´ ormulas definem modelos diferentes. um modelo com duas covari´ aveis onde X1 ´ e a covari´ avel wt e X2 ´ e a covari´ avel hp. 6.01487156 > coef(lm(mpg ~ wt * hp.02784815 > coef(lm(mpg ~ I((wt + hp)^2).80842343 -8.12010209 0. 3. um modelo com duas covari´ aveis mais o termo de intera¸ c˜ ao entre elas. 2. corresponde a A + B + A : B B %in% A B dentro (aninhado) de A A/B Efeito principal e aninhado.

Para incluir a opera¸ c˜ ao aritm´ etica de potˆ encia ´ e necess´ ario utilizar I() no termo a ser exponenciado. e tudo do lado direito..3) poly(A.A Modelo equivalente A+B+C+B:C A+B+C+D+B:C+B:D A+B+C+A:B+A:C+B:C+A:B:C A+B+C+A:B+A:C+B:C+A:B:C A+B+C+A:B+A:C+B:C (A+B+C)^2 A+B+C+A:B+B:C poly(A.7 Atualizando e modificando f´ ormulas Uma vez que um objeto contenha uma f´ ormula.y ~ x1 + x2 + x3 form1 ~ x1 + x2 + x3 form2 <. excluindo a vari´ avel x2.raw=TRUE) poly(A. tais operadores s´ o indicam opera¸ c˜ oes aritm´ eticas com os termos envolvidos quando utilizados dentro de I().. Na tabela 24. y ~ .5. a mensagem ´ e de que os operadores soma (+)..2. divis˜ ao (/) e potˆ encia (^) tˆ em nas f´ ormulas o papel de definir numa nota¸ c˜ ao simb´ olica quais e como os termos devem ser inclu´ ıdos no modelo. O mecanismo tamb´ em reduz a chance de erros nas especifica¸ c˜ oes uma vez que garante a igualdade daquilo que ´ e indicado pela nota¸ c˜ ao de ponto (·). Este mecanismos ´ e u ´til para evitar que f´ ormulas precisem ser totalmente redigitadas a cada redefini¸ c˜ ao do modelo.update. O caracter ponto (·) indica tudo. 24. exceto por A : C regress˜ ao polinomial c´ ubica em A (*) regress˜ ao polinomial c´ ubica em A termos lineares em A e B e quadr´ atico em A (*) termos lineares em A e B e quadr´ atico em A inclui como covari´ aveis todas as vari´ aveis no objeto de dad inclui como covari´ aveis todas as vari´ aveis no objeto de dad Chama-se aten¸ c˜ ao ao fato que a nota¸ c˜ ao de ”potˆ encia” em (wt+hp)^2 n˜ ao indica uma opera¸ c˜ ao aritm´ etica mas sim a inclus˜ ao de todos os efeitos principais e intera¸ c˜ oes at´ e as de ordem indicada pela potˆ encia. > > y > > y form1 <.formula(form1. . ~ .6 s˜ ao ilustradas mais algumas especifica¸ c˜ oes de modelos. Declara¸ c˜ ao A+B*C A+B*(C+D) A*B*C (A+B+C)^3 (A+B+C)^2 (A+B+C)^3 . De forma geral. o que ´ eu ´til ao se investigar v´ arios modelos que s˜ ao obtidos uns a partir de outros. Ou seja. B+.raw=TRUE)+B A+B+. tal e qual est´ a escrita (”as is”). ~ .Introdu¸ c˜ ao ao R 179 Tabela 6: Outros exemplos de sintaxe para especifica¸ c˜ ao de modelos.formula().2)+B poly(A. Em f´ ormulas.x2 entende-se: a nova f´ ormula dever´ a possuir tudo que estava do lado esquerdo. em . A fun¸ c˜ ao I() garante que a express˜ ao nela contida seja avaliada como uma fun¸ c˜ ao aritm´ etica. . .3. Descri¸ c˜ ao todos efeitos principais e intera¸ c˜ ao dupla apenas entre B e todos efeitos principais e intera¸ c˜ oes duplas de B com C e B todos efeitos pricipais e intera¸ c˜ oes poss´ ıveis trˆ es covari´ aveis e intera¸ c˜ oes de ordem 2 e 3 (igual ao anter trˆ es covari´ aveis e intera¸ c˜ oes de ordem 2 trˆ es covari´ aveis e intera¸ c˜ oes de ordem 2 trˆ es covari´ aveis e intera¸ c˜ oes de ordem 2. produto (*).A:C A+I(A^2)+I(A^3) A+I(A^2)+I(A^3) A+I(A^2)+B A+I(A^2)+B y ~ ..x2) form2 ~ x1 + x3 A l´ ogica da sintaxe ´ e que o primeiro argumento recebe uma f´ ormula inicial e o segundo indica a modifica¸ c˜ ao. . ´ e poss´ ıvel obter uma nova f´ ormula que seja uma modifica¸ c˜ ao da original utilizando update.A:B:C (A+B+C)^2 . No caso marcado com (*) os modelos s˜ ao equivalentes por´ em os coeficientes resultantes s˜ ao diferentes como comentado sobre polinˆ omios ortogonais na Sess˜ ao 24. .

> ex01 <. sendo uma delas um fator (a vari´ avel trat) e a outra uma vari´ avel num´ erica (resp). Calculamos tamb´ em as m´ edias.numeric(ex01$resp) [1] TRUE > is.0 (Other):18 .txt".table() acima. a vari´ avel indicadora dos tratamentos ´ e do tipo factor . Caso o arquivo esteja em outro diret´ orio deve-se colocar o caminho completo deste diret´ orio no argumento de read. Vamos iniciar obtendo um r´ apido resumo dos dados que mostra que este ´ e um experimento ”balanceado”com mesmo n´ umero de repeti¸ c˜ oes (seis) para cada tratamento.factor(ex01$trat) [1] TRUE Portando o objeto ex01 ´ e um data-frame com duas vari´ aveis.ufpr.0 t6 : 6 Max. O primeiro passo ´ e ler os dados. > summary(ex01) trat resp t1 : 6 Min.:307.Introdu¸ c˜ ao ao R 180 25 Experimentos com delineamento inteiramente casualizados Nesta sess˜ ao iremos usar o R para analisar um experimento em delineamento inteiramente casualizado com apenas um fator. :474.:417. + head = T) Caso n˜ ao consiga executar o comando acima diretamente com o endere¸ co http utilize um navegador para ir at´ e esta p´ agina e copie o arquivo exemplo1. Caso isto n˜ ao ocorra ´ e necess´ ario transformar as vari´ aveis para estes tipos antes de prosseguir com as an´ alises. envolve um fator com nove n´ ıveis (tratamentos). variˆ ancias e erros padr˜ ao das m´ edias para cada tratamento separadamente. Tal procedimento ´ e tamb´ em chamado em alguns textos de ”an´ alise da variˆ ancia de simples entrada”(one-way anova ).5 t4 : 6 Mean :353.read.txt para o seu diret´ orio de trabalho.0 t2 : 6 1st Qu. Em particular ´ e importante certificar-se que a vari´ avel resposta ´ e do tipo numeric e. se os n´ ıveis de tratamentos forem qualitativos.table("http://www. neste exemplo.5 t5 : 6 3rd Qu. :115. A seguir vamos inspecionar o objeto que armazena os dados e seus componentes.leg. A seguir s˜ ao apresentados os comandos exemplificando alguns procedimentos usuais para a an´ alise dos dados de um experimento deste tipo que.5 t3 : 6 Median :377. > head(ex01) trat resp 1 t1 385 2 t1 323 3 t1 417 4 t1 370 5 t1 437 6 t1 340 > is.br/~paulojus/aulasR/dados/exemplo01.

1) ´ importante notar que as barras simplesmente refletem a variˆ E ancia dos dados dentro da cada tratamento e n˜ ao s˜ ao adequadas para detectar diferen¸ cas entre tratamentos.mds + ex01. length)) ex01.5) with(ex01. ex01.167 14.frame(Repeti¸ c~ oes = ex01.267 17.mds . ErrosPadr~ ao = ex01. function(x) sqrt(var(x)/length(x)))) data. o teste de Bartlett.500 12. Na chamada desta fun¸ c˜ ao optamos por alterar valores default de alguns argumentos como por exemplo para method="jitter" que provoca pequeno um deslocamento horizontal aleat´ orio dos pontos evitando assim sobreposi¸ c˜ ao de pontos com valores coincidentes ou muito pr´ oximos.8333 1242.ex01.se.with(ex01.767 15.3.600 17. o que ser´ a discutido mais adiante nesta sess˜ ao.367 19. O gr´ afico de esquerda utiliza a fun¸ c˜ ao boxcox() do pacote MASS para verificar a necessidade de transforma¸ c˜ ao dos dados o que neste caso n˜ ao ´ e necess´ aria visto que o valor um est´ a contido no intervalo definido pelas lines tracejadas.81198 trat-7 6 164.mds.var <. vert = T. Optamos aqui por indicar tamb´ em neste gr´ afico a m´ edia de cada tratamento.test(resp ~ trat.3333 3117.5) arrows(1:9.with(ex01. 3. code=3 informa que as ”setas”devem ser colocadas em ambas extremidades e angle=90 faz com que a ”seta”se torne uma pequena barra horizontal com o tamanho controlado por length. ex01. angle = 90.79571 trat-4 6 293.5000 987. sep = "-")) Repeti¸ c~ oes M´ edias Vari^ ancias ErrosPadr~ ao trat-1 6 378.88378 trat-6 6 406.38846 trat-9 6 415.se. cex = 1. Caso isto n˜ ao ocorresse uma poss´ ıvel alternativa seria usar o procedimento descrito na Sess˜ ao 25. stripchart(resp ~ trat. tapply(resp.with(ex01. como por exemplo. met = "jitter". Na fun¸ c˜ ao arrows() os quatro argumentos iniciais informam coordenadas para as barras.067 13.03228 trat-8 6 403. Vari^ ancias = ex01.867 22.82900 trat-3 6 346.mds <. tapply(resp.mds. trat. trat. Ainda neste gr´ afico acrescentamos as m´ edias e barras que somam e subtraem os erros padr˜ oes da m´ edia para cada tratamento.mds. o que deve ser analisado com cautela lembrando que cada boxplot ´ e produzido com apenas seis observa¸ c˜ oes.with(ex01. A transforma¸ c˜ ao Box-Cox ´ e discutida me mais detalhes em uma outra Se¸ c˜ ao deste material.6667 3494.names = paste("trat".0000 1903.Introdu¸ c˜ ao ao R > > > > > + 181 ex01.667 24.6667 1091. code = 3. trat.48497 Vamos prosseguir com a an´ alise explorat´ oria com gr´ aficos gerados pelos comandos a seguir e mostrados na Figura 25.6667 1916.nrep <. l = 101). data = ex01) . mean)) ex01. trat. data = ex01) plot(ex01) points(ex01.nrep. lambda = seq(0.se <. Neste caso o teste indica variˆ ancias homogˆ eneas. O gr´ afico da direita produzido com stripchart() ´ e uma alternativa ao boxplot para amostras de tamanho pequeno. tapply(resp. cex = 1. tapply(resp. row.13389 trat-5 6 341. M´ edias = ex01. > bartlett.87114 trat-2 6 431. var)) ex01. length = 0.8333 1513.var. O gr´ afico do meio mostra um boxplot para os dados de cada tratamento. pch = "x". 1:9.1667 2173.se. > > > > > > > + require(MASS) boxcox(resp ~ trat. 1:9. pch = 19)) points(ex01. pch = 4. col = 2. Al´ em dos gr´ aficos acima podemos tamb´ em verificar o pressuposto de homogeneidade de variˆ ancias com o testes de igualdeda de variˆ ancias.

6738. residuals() para extrair res´ ıduos e .aov(resp ~ trat.475 5. Neste exemplo.mod <.1 87201. of Freedom 8 45 Residual standard error: 44. Vamos inspecionar este objeto e seus elementos mais detalhadamente ilustrando como us´ a-lo para obter a an´ alise dos resultados e extrair elementos para a an´ alise de res´ ıduos. > ex01.5 λ 2.3 Deg.5 1.mod Call: aov(formula = resp ~ trat. tipicamente avaliada pelo quadro de an´ alise de variˆ ancia.5 3.Introdu¸ c˜ ao ao R 182 450 −308 x x x x x 400 95% 350 log−Likelihood −312 −310 resp 300 250 200 −314 150 0.0 1. Embora aov() use lm() internamente. df = 8. data = ex01) Terms: trat Residuals Sum of Squares 332918.0 0.0 t1 t2 t3 t4 t5 trat t6 t7 t8 t9 150 t1 x 200 250 resp 300 350 400 x x x 450 t2 t3 t4 t5 t6 t7 t8 t9 Bartlett test of homogeneity of variances data: resp by trat Bartlett³s K-squared = 3.mod ´ e uma lista que guarda os resultados da an´ alise para o modelo ajustado. data = ex01) > ex01.02053 Estimated effects may be unbalanced > anova(ex01. A fun¸ c˜ ao names() mostra os elementos da lista e adicionalmente existem fun¸ c˜ oes que extraem elementos do objeto. os resultados s˜ ao oranizados internamente de forma conveniente para a efetuar a an´ alise de variˆ ancia. Duas tipicamente utilizadas s˜ ao coef() para extrair os coeficientes.8853 Uma vez conclu´ ıda a an´ alise explorat´ oria e verificada a adequacidade de alguns pressupostos o passo seguinte ´ e ajustar o modelo usando aov() ou lm(). optamos por usar aov().445e-13 Residuals 45 87201 1938 Portanto o objeto ex01. por se tratar da an´ alise de um experimento. p-value = 0.mod) Analysis of Variance Table Response: resp Df Sum Sq Mean Sq F value Pr(>F) trat 8 332918 41615 21.0 2.

8333 406. AIC() logLik(). Note que apenas a interpreta¸ c˜ ao dos coeficientes muda e a an´ alise de variˆ ancia permanece a mesma.1667 403.8 415. model.00000 "rank" "contrasts" "fitted.6667 341.mod) [1] "coefficients" "residuals" [6] "assign" "qr" [11] "call" "terms" > coef(ex01.3333 293.35 > model. > names(ex01.0 164.mod. entre outras.19 -59.7 t8 50.50000 trat trat t1 t2 t3 t4 t5 t6 t7 25.85 -11. monta uma matrix do modelo de forma a que cada coeficiente corresponda ` a m´ edia de cada um dos tratamentos.7 431.6667 > anova(ex01.33333 tratt8 tratt9 25. Os demais representam a diferen¸ ca das m´ edias de cada um dos tratamentos ` a este tratamento de referˆ encia.mod) Tables of effects "effects" "df.mod1) Analysis of Variance Table Response: resp .tables(ex01. mas h´ a ainda v´ arias outras como effects().15 O resultado de coef() vai depender da parametriza¸ c˜ ao adotada e definida pelos contrastes.16667 37.mod1) tratt1 tratt2 tratt3 tratt4 tratt5 tratt6 tratt7 tratt8 tratt9 378.mod1 <.8333 415.5 346. para n´ ıveis quantititivos corresponde a ajustar um modelo com intercepto igual a zero.0000 164.1.31 t9 62. Uma outra forma de expecificar o modelo para este exemplo ´ e mostrada a seguir com o uso -1 que.3 293.Introdu¸ c˜ ao ao R 183 fitted() para valores ajustados.15 77.66667 52.2 403.83333 tratt6 27.83333 -32.5185 trat trat t1 t2 t3 t4 t5 t6 t7 t8 t9 378.values" "xlevels" tratt5 -36.00000 > model. data = ex01) > coef(ex01.8 406.5000 346. Os valores default e/ou correntes s˜ ao dados por options()$contrasts.mod) (Intercept) tratt2 tratt3 378. No caso de n´ ıveis qualitativos como neste exemplo.33333 tratt7 -214.48 -189.69 52.7 341.98 -7.aov(resp ~ trat . > ex01.treatment" que assinala o valor da m´ edia do primeiro tratamento (primeiro n´ ıvel do fator) ao primeiro coeficiente.tables(ex01.residual" "model" tratt4 -85. type = "means") Tables of means Grand mean 353.6667 431.tables(). Para fatores qualitativos como no caso deste exemplo a parametriza¸ c˜ ao default corresponde a "contr.

data = ex01)) (Intercept) trat1 trat2 trat3 trat4 353.4] [.poly" > contrasts(ex01$trat) t2 t3 t4 t5 t6 t7 t8 t9 t1 0 0 0 0 0 0 0 0 t2 1 0 0 0 0 0 0 0 t3 0 1 0 0 0 0 0 0 t4 0 0 1 0 0 0 0 0 t5 0 0 0 1 0 0 0 0 t6 0 0 0 0 1 0 0 0 t7 0 0 0 0 0 1 0 0 t8 0 0 0 0 0 0 1 0 t9 0 0 0 0 0 0 0 1 Para definir a parametriza¸ c˜ ao a ser utilizada e definida pelos contrastes.6] [. Nos comandos a seguir alteramos a op¸ c˜ ao para fatores unordered para "contr.05 < 2.481481 .3] [.treatment" "contr. o que ´ e usado. > options(contrasts = c("contr.518519 25. Os resultados da an´ alise de variˆ ancia permanece inalterado.148148 77.685185 trat6 52.2] [.314815 trat5 -11. > options()$contrasts unordered ordered "contr. Os coeficientes obtidos s˜ ao diferentes dos obtidos anteriormente sendo o primeiro a m´ edia geral e os demais uma compara¸ c˜ ao da m´ edia de cada tratamento contra as m´ edias dos demais.981481 -7.sum".8] t1 1 0 0 0 0 0 0 0 t2 0 1 0 0 0 0 0 0 t3 0 0 1 0 0 0 0 0 t4 0 0 0 1 0 0 0 0 t5 0 0 0 0 1 0 0 0 t6 0 0 0 0 0 1 0 0 t7 0 0 0 0 0 0 1 0 t8 0 0 0 0 0 0 0 1 t9 -1 -1 -1 -1 -1 -1 -1 -1 > coef(lm(resp ~ trat.185185 -59. "contr.1] [.851852 trat7 trat8 -189.Introdu¸ c˜ ao ao R Df Sum Sq Mean Sq F value Pr(>F) trat 9 7081587 786843 406.2e-16 Residuals 45 87201 1938 184 A parametriza¸ c˜ ao para os coeficientes ´ e determinada pela matriz do modelo e ´ e definida pelo argumento contrasts de options() ou pela fun¸ c˜ ao contrasts() que mostra ou atribui a matrix de contrastes a ser utilizada. pode-se usar outras op¸ c˜ oes de contrastes j´ a disponibilizadas pelo R tipicamente usando options(). Fatores s˜ ao definidos como sendo unordered (por exemplo n´ ıvies qualitativos como no caso da an´ alise vista aqui) ou ordered.poly")) > contrasts(ex01$trat) [.5] [.351852 50.7] [. por exemplo.sum". no caso de n´ ıveis quantitativos.

p-value = 0. > > > > > > > > > > ex01.res) Shapiro-Wilk normality test data: ex01.mod$df. histograma dos res´ ıduos padronizados e qqplot() dos res´ ıduos.res. exceto o u ´ltimo. vaos ver agora alguns gr´ aficos e ferramentas para avaliar o modelo ajustado. main = NULL) qqline(ex01.resid(ex01. quarto contra os trˆ es primeiros e assim por diante.sdif" do pacotes MASS.res <. > shapiro.ex01. ylab = "res´ ıduos") title("Res´ ıduos Padronizados vs \n Valores Preditos") boxplot(respad) title("Res´ ıduos Padronizados") hist(respad. terceiro contra os dois primeiros. xlab = "valores ajustados". outros contrastes definidos pelo usu´ ario e atribu´ ıdos ao fator em estudo usando a fun¸ c˜ ao contrasts(). o usu´ ario pode obter outros que desejar extraindo a informa¸ c˜ ao necess´ aria do objeto que cont´ em o ajuste do modelo.treatment": j´ a descrito o texto acima.mod) respad <.mod). Para isto obtemos os res´ ıduos padronizados dividindo os res´ ıduos do modelo pela raiz quadrada da variˆ ancia do termo de erro. ylab = "Residuos". Al´ em dos gr´ aficos ”pr´ e-preparados”pelo R.sum": fornece a m´ edia geral como primeiro coeficiente e os demais comparam cada um tratamentos com os demais. Retornamos a este t´ opico com um exemplo na Sess˜ ao 25. boxplot.res W = 0.helmert": fornece a m´ edia geral como primeiro coeficiente e os demais representam compara¸ c˜ oes sequˆ enciais dos tratamentos. main = "Histograma dos res´ ıduos padronizados") qqnorm(ex01.mod). com o primeiro tratamento sendo o de referˆ encia. "contr. respad. Al´ em destes outros pacotes podem ter outras defini¸ c˜ oes de contrastes.2263 . isto ´ e. "contr. segundo contra o primeiro. "contr.res^2)/ex01.poly": op¸ c˜ ao usada para fatores ordenados (ordered ) como no caso de n´ ıveis quantitativos.test(ex01.Introdu¸ c˜ ao ao R 185 Os contrastes j´ a definidos no R s˜ ao listados e descritos a seguir.res) plot(fitted(ex01.1. Estes contrastes s˜ ao ter˜ ao efeito se o termo -1 n˜ ao for inclu´ ıdo no modelo pois neste caso os coeficientes s˜ ao sempre as m´ edias de cada um dos tratamentos.SAS": semelhante ao anterior por´ em usando o u ´ltimo tratamento como referˆ encia. Um m´ etodo associado a plot() produz automaticamente gr´ aficos de res´ ıduos para objetos das classes lm e aov conforme ilustrado na Figura 25 produzida com o comando plot(ex01. independente da op¸ c˜ ao de contraste adotada. Na Figura 25 mostramos quatro gr´ aficos: res´ ıduos padronizados versus valores preditos. como o cado de "contr.9716. "contr. Retornando ` a an´ alise do exemplo.3.res/sqrt(sum(ex01. Al´ em dos contrastes pr´ e definidos. "contr.res) title("Gr´ afico Normal de \n Probabilidade dos Res´ ıduos") Um teste de normalidade dos residuos pode ser efetuado como indicado a seguir.

0 200 250 300 350 Fitted values 400 trat : t7 t4 t5 t3 t1 t8 t6 Factor Level Combinations t9 t2 .5 Scale−Location 20 23 17 Constant Leverage: Residuals vs Factor Levels 2 17 23 −1 0 1 Theoretical Quantiles 2 Standardized residuals 0.Introdu¸ c˜ ao ao R 186 Residuals vs Fitted 100 17 23 Normal Q−Q 17 2 23 50 −50 −100 −2 400 20 Standardized residuals −1 0 1 20 Residuals 0 200 250 300 350 Fitted values −2 1.5 1.0 −2 Standardized residuals −1 0 1 20 0.

Introdu¸ c˜ ao ao R 187 Resíduos Padronizados vs Valores Preditos 2 2 Resíduos Padronizados 1 resíduos 0 −1 −2 200 250 300 350 valores ajustados 400 −2 −1 0 1 Histograma dos resíduos padronizados 15 Gráfico Normal de Probabilidade dos Resíduos Frequency 10 5 0 −2 −1 0 respad 1 2 −50 Residuos 0 50 −2 −1 0 1 Theoretical Quantiles 2 .

18109 t4 0. o que justifica o termo ` as vezes utilizado que descreve tais procedimentos como compara¸ c˜ oes post-hoc. Os procedimentos discutidos a seguir correspondem a trˆ es possiveis abordagens ao problema de compara¸ c˜ ao de mais de duas m´ edias. pairwise.39692 1.00048 t5 0. por diferentes m´ etodos. Neste sess˜ ao vamos ilustrar trˆ es procedimentos deixando a cargo do leitor o julgamento de qual procedimento ´ e mais adequado para o problema em quest˜ ao.03768 1.00203 0. .2e-11 1. (ii) teste de Tukey e (iii) contrastes e contrastes ortogonais.5e-11 t8 1. > with(ex01. O primeiro caso se desdobra em mais op¸ co ˜es uma vez que permite que os valores p sejam ou n˜ ao ajustados.adjust. trat)) Pairwise comparisons using t tests with pooled SD data: resp and trat t2 0.00019 0. 25.03768 6. A sa´ ıda em formato texto do teste de Tukey ´ e mostrada a seguir e plot(ex01.1.00000 P value adjustment method: holm 25. A quest˜ ao do uso de compara¸ c˜ oes de tratamentos ´ e polˆ emica no meio estat´ ıstico e n˜ ao vamos aqui entrar em tal discussˆ ao.2e-07 0.28829 3.test() calcula todas as poss´ ıveis compara¸ c˜ oes entre dois grupos.adj="bonferroni".t. Mais detalhes podem ser encontrados na documenta¸ c˜ ao da fun¸ c˜ ao.00000 1. A principal diferen¸ ca ´ e que o n´ ıvel de significˆ ancia deve ser corrigido para garantir o nivel de significˆ ancia conjunto para todas compara¸ c˜ oes.00160 0.2.65049 1.8e-07 0.t.00000 0. que tamb´ em ´ e dispon´ ıvel utilizando atrav´ es do argumento p.00000 3.00000 0.00000 2.test(resp. O pacote multcomp disponibiliza uma extensa lista de procedimentos adicionais de compara¸ c˜ oes m´ ultiplas e alguns procedimentos espec´ ıficos podem ainda ser encontrados em outros pacotes do R.00000 1.4e-05 0.11918 t6 8.5e-09 1.83853 0.00000 t7 1.00000 1. podendo ser vista como uma extens˜ ao ao teste-t para duas amostras.8e-12 1.method da fun¸ c˜ ao permite o usu´ ario escolher entre diferentes m´ etodos propostos para ajustar o n´ ıvel de significˆ ancia sendo o default o prodedimento proposto por Holm. sendo eles: (i) teste-t para compara¸ c˜ oes duas a duas.33686 0.00000 t2 t3 t4 t5 t6 t7 t8 t9 t1 0.Introdu¸ c˜ ao ao R 188 25.2 Teste de Tukey O teste Tukey de compara¸ c˜ oes m´ ultiplas ´ e implementado na fun¸ c˜ ao TukeyHSD(). Os procedimentos mostrados aqui s˜ ao implementados em pacotes b´ asicos do R.65049 1.0e-10 2. e caso sejam. As sa´ ıdas da fun¸ c˜ ao mostram intervalos de confian¸ ca para as diferen¸ cas entre pares de m´ edias. retornando o valor-p para cada comparac ¸˜ ao.HSD) produz o gr´ afico mostrado na Figura 25.45676 0.00000 t3 0.00000 1.1.02345 1. que ´ e uma modifica¸ c˜ ao ao ajuste de Bonferroni.1. O argumento p.1 Comparando tratamentos Uma das formas poss´ ıveis formas de interpretar os resultados no caso de efeito de tratamentos significativos ´ e utilizar algum procedimento de compara¸ co ˜es de tratamentos ap´ os verificar o resultado da anova.1 Compara¸ c˜ oes de pares A fun¸ c˜ ao pairwise.

2479215 0.94763 94.3855262 0.0000004 0.166667 73.114299 -57.11430 204.666667 69.9342210 0.0002153 0.500000 15.114299 -73.94763 195.385701 -57.447633 2.114299 2.500000 267.719034 184.833333 62.HSD <.166667 214.11430 167.885701 99.61430 144.94763 297. ordered = TRUE) > ex01. tal como a usualmente adotada de listar as m´ edias em ordem descrescente e indicar com letras as diferen¸ cas significativas ou n˜ ao entre estas m´ edias.78097 135.78097 146.000000 64.052367 168.TukeyHSD(ex01.500000 59.833333 2.8693183 0.44763 324.94763 135.0000002 0.333333 85.280966 -45.666667 241.0000000 0.000000 137.833333 89.166667 25.666667 25.mod.333333 57.0000730 1.280966 -66.3369467 0.0000000 0.719034 94.44763 264.61430 p adj 0.947633 6.11430 119.61430 87.44763 108.HSD Tukey multiple comparisons of means 95% family-wise confidence level factor levels have been ordered Fit: aov(formula = resp ~ trat.447633 -45.614299 -30.78097 220.28097 350.000000 52. Vamos ilustrar aqui uma possivel forma .0018566 0.666667 85.947633 upr 212.1146645 0.28097 322.614299 -8.219034 55.552367 -34.780966 -18.552367 39.94763 110. data = ex01) $trat t4-t7 t5-t7 t3-t7 t1-t7 t8-t7 t6-t7 t9-t7 t2-t7 t5-t4 t3-t4 t1-t4 t8-t4 t6-t4 t9-t4 t2-t4 t3-t5 t1-t5 t8-t5 t6-t5 t9-t5 t2-t5 t1-t3 t8-t3 t6-t3 t9-t3 t2-t3 t8-t1 t6-t1 t9-t1 t2-t1 t6-t8 t9-t8 t2-t8 t9-t6 t2-t6 t2-t9 diff 129.947633 -20.000000 110.666667 182.11430 130.280966 -23.447633 -25.500000 36.44763 115.219034 27.9749062 0.500000 177.333333 122.947633 -80.44763 92.666667 32.0005599 0.28097 260.885701 -50.9999849 0.500000 239.5040619 0.052367 -78.11430 140.61430 172.833333 251.61430 334.9999286 0.833333 lwr 46.885701 159.166667 112.28097 98.333333 37.166667 27.333333 48.4998060 1.114299 -13.78097 192.44763 167.9730043 0.61430 110.166667 11.94763 156.385701 131.0000000 0.Introdu¸ c˜ ao ao R > ex01.666667 9.614299 -70.833333 27.614299 -55.780966 -29.2886707 0.0000000 0.28097 142.0024139 0.94763 107.0394343 0.61430 84.9836416 0.0000000 0.166667 52.719034 156.6203900 0.1671352 0.0000000 0.0000000 0.9993743 189 Visualiza¸ c˜ oes mais convenientes dos resultados podem ser obtidas com opera¸ c˜ oes sobre o objeto resultante.0247945 0.8721075 0.947633 -55.44763 152.385701 29.28097 119.0401018 0.833333 4.9849417 0.

Introdu¸ c˜ ao ao R 190 95% family−wise confidence level t4−t7 t2−t9 t6−t8 t2−t3 t2−t5 t3−t5 t1−t4 t6−t7 0 100 200 Differences in mean levels of trat 300 .

> dms <.ord[-(1:i)])) < dms + pos.(ex01.unname(0. diferen¸ cas = letras) m´ edias diferen¸ cas t2 431.i] <. sep = "") + pos <.8333 bc t4 293.letters[letra] + letras <.vec[i:pos. 2:3])) > dms [1] 82. letras.paste(letras.1 > letras <. Inicialmente vamos obter a DMS (diferen¸ ca m´ ınima significativa).(ex01. No caso deste experimento balanceado.character(nlevels(ex01$trat)) > while (i <= nlevels(ex01$trat)) { + print(letters[letra]) + ind <.5 * diff(ex01.mds.vec. o intervalo de confian¸ ca para cada diferen¸ ca ´ e o mesmo e a DMS ´ e portanto comum e dada por metade da amplitude do intervalo.mds. decreasing = TRUE) > i <.ord.78097 O passso seguinte ´ e ordenar as m´ edias deforma decrescente e verificar as diferen¸ cas significativas.HSD[[1]][1.frame(m´ edias = ex01. length(letras)) + letras.mds.sort(ex01.Introdu¸ c˜ ao ao R 191 de obter tal visualiza¸ c˜ ao.i > pos) { + letras.rep(" ".letra + 1 + } + i <.5000 a t9 415.6667 ab t6 406.3333 bc t5 341.8333 ab t1 378.ord <.0000 ab t8 403.i + 1 + } [1] "a" [1] "b" [1] "c" [1] "c" [1] "c" [1] "c" [1] "d" [1] "d" [1] "d" > data. > ex01.pos. isto ´ e.pos <. O c´ odigo abaixo ´ e uma (mas certamente n˜ ao a u ´nica) maneira de indicar as diferen¸ cas significativas c´ odigo de letras usual na literatura.i + letra <.i + sum(ind) + if (pos.1667 d .letra <.ord[i] . o mesmo n´ umero de repeti¸ c˜ oes em cada tratamento.6667 c t7 164.mds.vec <.6667 ab t3 346.i <.mds.

Neste exemplo vamos considerar o seguinte conjunto de contrastes entre as m´ edias dos tratamentos que s˜ ao especificados nas linhas de uma matriz como se segue. Por outro lado. Uma combina¸ c˜ ao linear dos coeficientes da forma p λp βp onde λ = [λ1 . passamos a usar lm() no ajuste do modelo.Introdu¸ c˜ ao ao R 192 Neste caso o procedimento ´ e simples pois para um experimento balanceado e pelo teste de Tukey tem-se apenas um u ´nico valor de DMS. a escolha deve ser adequada se os coeficientes devem ser interpretados. Uma classe especial de contrastes ´ e a de contrastes ortogonais. Com nove tratamentos ´ e poss´ ıvel definir oito contrastes ortogonais com cada um deles sendo associado a um dos graus de liberdade dos tratamentos. O algor´ ıtmo deve ser modificado e generalizado para outras situa¸ c˜ oes ou pode-se usar fun¸ c˜ oes de pacotes como multcompLatters do pacote multcompView. No que se segue vamos ver como obter estimativas de contrastes de interesse no R. β o vetor de p parˆ ametros (coeficientes) e ǫ o vetor de erros. Vamos iniciar revendo defini¸ c˜ oes. isto ´ e. t2 e t3 versus t4 a t9 . Para obter o desdobramento abordamos a modelagem como um problema de regress˜ ao m´ ultipla onde os contrastes definem vari´ aveis quantitativas a serem inclu´ ıdas no modelo que ´ e ajustado com lm(). Como na an´ alise de contrastes os coeficientes passam a ser diretamente interpretados. 25. X a matrix do modelo. Seja o modelo linear escrito na forma matricial Y = Xβ + ǫ onde Y ´ e a vari´ avel resposta. Ao ajustar um modelo as estimativas de contrastes podem ser obtidas de duas formas: ap´ os o ajuste do modelo. que s˜ ao um caso particular das fun¸ c˜ oes estim´ aveis para o modelo. . assegurando-se que a ortogonalidade seja mantida o que garante que a soma das somas de quadrados dos contrastes seja equivalente ` a soma de quadrados total dos tratamentos. Tais formas s˜ ao definidas pela escolha de contrastes ou fun¸ c˜ oes estim´ aveis que definir˜ ao a interpreta¸ c˜ ao dos coeficientes β do modelo. pode ser escrito como p cp βp onde p cp = 0. A defini¸ c˜ ao destes contrastes n˜ ao ´ eu ´nica e deve refletir compara¸ c˜ oes relevantes para o problema em quest˜ ao. se o interesse ´ e apenas na an´ alise de variˆ ancia a particular forma adotada ´ e irrelevante. diretamente no ajuste do modelo. λp ] ´ e um vetor de constantes ´ e dita uma fun¸ c˜ ao estim´ avel para o dado modelo se λ pode ser escrita como uma combina¸ c˜ ao linear das linhas da X . . . C1: t1. Um conjunto de contrastes ortogonais tem a propriedade de que as soma dos produtos dos coeficientes de qualquer par de contrastes deste conjunto ´ e nula. a partir de opera¸ c˜ oes matriciais sobre os coeficientes ajustados.3 Contrastes e contrastes ortogonais Na an´ alise de experimentos pode-se ter interesse em estudar determinadas compara¸ c˜ oes entre as m´ edias que podem ser especificadas pelo usu´ ario na forma de contrastes. Contrastes ortogonais s˜ ao particularmente interessantes pois permitem desdobrar (particionar) a soma de quadrados de tratamentos um parcelas referentes a cada um dos contrastes. onde f´ ormulas lineares s˜ ao usadas para definir as matrizes do modelo usadas no ajuste de modelos lineares e lineares generalizados. Desta forma os coeficientes j´ a fornecem estimativas dos contrastes a c´ alculos adicionais n˜ ao s˜ ao necess´ arios. No caso de fatores (qualitativos) a matriz X do modelo n˜ ao ´ e definida unicamente para um mesmo experimento. .1. Um contraste ´ e um caso especial de fun¸ c˜ ao estim´ avel em que a soma das constantes ´ e nula. Isto permite que cada contraste seja testado diretamente por um teste t (ou o equivalente teste F ). Vamos discutir aqui algums id´ eias iniciais sobre como implementar a segunda forma. podendo ser escrita de diversas formas alternativas que ir˜ ao produzir a ajustes equivalentes. associando ao(s) fatores a estrutura de contrastes desejadas. Portanto.

t8. -1).] 0 0 0 0 0 0 0 1 -1 193 O pr´ oximo passo ´ e fazer com que a matriz do modelo seja montada pelo R de forma que os coeficientes reflitam os contrastes desejados. rep(0. 0.lm(resp ~ trat.] 0 0 0 1 -1 0 0 0 0 [6. t7. rep(0. t5 versus t6.] 0 0 0 0 0 1 1 -1 -1 [7. 5).] 0 0 0 0 0 1 -1 0 0 [8. -1. 1. entretanto os coeficientes s˜ ao agora dados pela m´ edia geral seguda pelas estimativas de cada um dos oito contrastes definidos que que podem ser testadas diretamente pelo teste-t usando o comando summary(). 4)).445e-13 Residuals 45 87201 1938 > summary(mod1) .] 2 2 2 -1 -1 -1 -1 -1 -1 [2. -1)). > c1.3] [. -1.] 0 0 0 2 2 -1 -1 -1 -1 [5. c(1. -1. t9 C5: t4 versus t5 C6: t6 e t7 versus t8 e t9 C7: t6 versus t7 C8: t8 versus t9 > c1 <. -1. 2. 5). Para isto associamos ao fator que representa os tratamentos (trat no exemplo) o atributo contrast contendo a inversa generalizada obtida por ginv() do pacote MASS. -1. 0. -1).rbind(c(2. -1))) > c1 [. 3). + c(rep(0. 5). -1. c(0.7] [. c(1. -1. A analise de variˆ ancia deste modelo ´ e a mesma obtida anteriormente.ginv <.2] [. c(2.ginv(c1) > colnames(c1.ginv) <.8] [.ginv > mod1 <. 1.4] [. c(rep(0. sep = "") > contrasts(ex01$trat) <. c(rep(0. c(0. -1. c(2. 0)).475 5.paste("contr". 2. 1:8.9] [1. data = ex01) > anova(mod1) Analysis of Variance Table Response: resp Df Sum Sq Mean Sq F value Pr(>F) trat 8 332918 41615 21. 3). + c(rep(0. -1.1] [.c1. 1. -1. -1. rep(0.Introdu¸ c˜ ao ao R C2: t1 versus t2 e t3 C3: t2 versus t3 C4: t4. 2.] 0 1 -1 0 0 0 0 0 0 [4. c(1. -1. -1)).] 2 -1 -1 0 0 0 0 0 0 [3.6] [. c(rep(0. -1.5] [. + 6)). 6)).

2169 11. onde exclu´ ımos o intercepto (primeira coluna) e. p-value: 5.063029 0. -1]) > names(ex01co) <.17 25.anova(mod2) > av2 Analysis of Variance Table Response: resp Df Contraste 1 1 Contraste 2 1 Contraste 3 1 Contraste 4 1 Contraste 5 1 Contraste 6 1 Contraste 7 1 Contraste 8 1 Residuals 45 Sum Sq Mean Sq 27616 27616 420 420 21760 21760 7041 7041 6960 6960 93251 93251 175450 175450 420 420 87201 1938 F value 14.17 Max 85.50 44.643682 tratcontr3 85. A este data-frame adicionamos os dados e ajustamos o modelo de regress˜ ao com lm().895 0.83 25.matrix() para montar a matrix de covari´ aveis da forma desejada.67 -33.41 -0.351 0.52 5. usando model.466 0.409e-12 0.25 3.2168 Pr(>F) 0. data = ex01co) > av2 <.41 9.26e-08 tratcontr7 241.643748 .000466 tratcontr2 -20. data = ex01) Residuals: Min 1Q Median -85.67 Coefficients: Estimate Std.17 25.643682 0. Note que a soma delas corresponde a soma de quadrados de tratamentos mostrada no ajuste inicial do modelo o os coeficientes s˜ ao os mesmos.75 194 3Q 33.paste("Contraste".2292 3.643748 Residual standard error: 44.33 35.001638 tratcontr4 -118.5917 48.data.906 0. A fun¸ c˜ ao anova() sobre o modelo ajustado exibe a soma de quadrados decomposta entre os contrastes agora testados pelo teste F que ´ e equivalente ao teste-t mostrado acima pois cada contraste possui um grau de liberdade. Adjusted R-squared: 0.41e-12 tratcontr8 -11. trocamos os nomes das colunas.5405 0.02 -0.25 -1. para visualiza¸ c˜ ao adequadoa dos resultados.lm(resp ~ .99 59.7555 F-statistic: 21.02 on 45 degrees of freedom Multiple R-squared: 0.matrix(resp ~ trat.frame(model.ex01$resp > mod2 <.515 2.94 -6.775 0. Error t value Pr(>|t|) (Intercept) 353.445e-13 Nos comandos a seguir visualizamos os mesmos resultados de uma forma alternativa.Introdu¸ c˜ ao ao R Call: lm(formula = resp ~ trat.29 4.001638 0.063029 tratcontr5 -48.064503 1.064503 tratcontr6 -249.937 1.41 -1.264e-08 2. ex01)[.48 on 8 and 45 DF.. 1:8) > ex01co$resp <.41 3. > ex01co <.000466 0.466 0.1217 90.83 25.014 < 2e-16 tratcontr1 287.67 62.7924.6334 3.2512 0.83 76.

25. isto ´ e. Pode-se ainda visualizar os contrastes assinalados ao fator trat atrav´ es da inversa generalizada.16667 -118. > drop(c1 %*% ex01.text() e TukeyHSD implementadas no conjunto de pacotes b´ asicos do R. . Entre estes encontra-se os pacotes multcomp e multcompView que implementam diversos outros procedimentos e gr´ aficos para visualiza¸ c˜ oes dos resultados.NULL Finalmente vale ressaltar que o exemplo acima tratou de um experimento balanceado. se o modelo acima fosse definido por resp trat .33333 [8] -11.2 Recursos adicionais para compara¸ c˜ oes m´ ultiplas Na sess˜ ao anterior discutimos a compara¸ c˜ ao post-hoc de tratmentos utilizando fun¸ c˜ oes como pairwise.16667 Contraste 6 Contraste 7 Contraste 8 -249.83333 > fractions(contrasts(ex01$trat)) contr1 contr2 contr3 contr4 contr5 contr6 contr7 contr8 t1 1/9 1/3 0 0 0 0 0 0 t2 1/9 -1/6 1/2 0 0 0 0 0 t3 1/9 -1/6 -1/2 0 0 0 0 0 t4 -1/18 0 0 1/6 1/2 0 0 0 t5 -1/18 0 0 1/6 -1/2 0 0 0 t6 -1/18 0 0 -1/12 0 1/4 1/2 0 t7 -1/18 0 0 -1/12 0 1/4 -1/2 0 t8 -1/18 0 0 -1/12 0 -1/4 0 1/2 t9 -1/18 0 0 -1/12 0 -1/4 0 -1/2 241.51852 287.50000 85.Introdu¸ c˜ ao ao R 195 > sum(av2$Sum[1:8]) [1] 332918.33333 241.66667 -48. > contrasts(ex01$trat) <.83333 -11.16667 -118.50000 85.83333 Os coeficiente retornados equivalem ` a aplicar os contrastes desejados sobre as m´ edias dos tratamentos. Para cancelar a atribui¸ c˜ ao dos contrastes a um fator e retornar a definida por option() basta fazer atribuir a valor NULL.1 > coef(mod2) (Intercept) Contraste 1 Contraste 2 Contraste 3 Contraste 4 Contraste 5 353.66667 -48.16667 -249.83333 -20.1. com o mesmo n´ umero de repeti¸ c˜ oes para cada tratamento e no caso de desbalanceamento ajustes s˜ ao necess´ arios na defini¸ c˜ ao dos contrastes.mds) [1] 287. por exemplo.83333 Nota: A atribui¸ c˜ ao do atributo contrast ao fator n˜ ao ter´ a efeito sobre a constru¸ c˜ ao da matrix do modelo caso o termo de intercepto esteja retirado na defini¸ c˜ ao do modelo. Vale notar que estes pacotes devem ser instalados com a op¸ c˜ ao dependencies=TRUE para garantir plena funcionalidade pois suas fun¸ c˜ oes dependem de diversos outros pacotes. Outros procedimentos s˜ aqo implementados em pacotes contribu´ ıdos do R.83333 -20.t.

s˜ ao apresentados em forma diferente do visto anteriormente.3 An´ alise para variˆ ancias n˜ ao homogˆ eneas No caso de variˆ ancias n˜ ao homogˆ eneas em experimentos inteiramente casualizados a fun¸ c˜ ao oneway. data = ex01. decreasing = FALSE) 25.Introdu¸ c˜ ao ao R 196 t2 a ab ab ab ab bc bc c d 150 200 250 300 350 400 450 > install. Uma outra alternativa ´ e a an´ alise n˜ ao param´ etrica da Kruskall-Wallis implementada por kruskal. cujos resultados. A indica¸ c˜ ao de letras para diferen¸ cas entre pares de tratamentos mostrada a seguir requer que TukeyHSD seja invocada sem a ordena¸ c˜ ao dos tratamentos e uma representa¸ c˜ ao visual ´ e dada na Figura 25.2.test().mod)$trat[. > multcompLetters(TukeyHSD(ex01. compFn = "TukeyHSD". 4]) t2 t3 t4 t5 t6 t7 t8 t9 t1 "a" "bc" "b" "bc" "ac" "d" "ac" "ac" "ac" > multcompBoxplot(resp ~ trat. embora iguais.test() pode ser utilizada nas an´ alises.packages("multcompView". t7 t4 t5 t3 t1 t8 t6 t9 . dep = TRUE) > require(multcomp) > require(multcompView) Para ilustrar o uso desta pacote vamos efetuar novamente o teste de Tukey visto acima por´ em agora utilizando c´ alculos e gr´ aficos gerados por fun¸ c˜ oes destes pacotes.

As vari´ aveis tem nomes rec. 26. > head(ex04) rec esp resp 1 r1 e1 26.txt". que no caso deste experimento ´ e a vari´ avel resposta.factor(ex04$resp) [1] FALSE > is. sendo que as duas primeiras s˜ ao fatores enquanto resp ´ e uma vari´ avel num´ erica. esp e resp.leg.table(): Se voce n˜ ao tiver restri¸ c˜ oes de acesso (firewall. Vamos tamb´ em pedir o R que exiba um r´ apido resumo dos dados e verificar se cada vari´ avel possui o ”tipo”correto. + head = T) Antes de come¸ car as an´ alise vamos usar alguns comandos para inspecionar o objeto que cont´ em os dados para saber quantas observa¸ c˜ oes e vari´ aveis h´ a no arquivo.0 3 r1 e1 25.4 5 r1 e2 24. .numeric(ex04$resp) [1] TRUE Nos resultados acima vemos que o objeto ex04 que cont´ em os dados tem 24 linhas (observa¸ c˜ oes) e 3 colunas (vari´ aveis). bem como o nome das vari´ aveis. etc) pode importar o arquivo diretamente fornecendo a URL (endere¸ co web ) do arquivo.factor(ex04$rec) [1] TRUE > is. A seguir deve-se ler (”importar”) os dados para R com o comando read.table("http://www.8 6 r1 e2 24.factor(ex04$esp) [1] TRUE > is.br/~paulojus/aulasR/dados/exemplo04.2 2 r1 e1 26.read.ufpr. > ex04 <.Introdu¸ c˜ ao ao R 197 26 An´ alise de experimentos em esquema fatorial O experimento fatorial descrito em Banzato & kronka (1989) comparou o crescimento de mudas de eucalipto considerando como fatores diferentes tipos de recipientes e esp´ ecies.1 Lendo os dados Vamos considerar agora que os dados j´ a estejam digitados em um arquivo texto. Clique aqui para ver e/ou copiar o arquivo com conjunto de dados para o seu diret´ orio de trabalho.6 > dim(ex04) [1] 24 3 > names(ex04) [1] "rec" "esp" "resp" > is.0 4 r1 e1 25.

70 26.with(ex04. esp).325 As combina¸ c˜ oes dos n´ ıveis dos fatores podem ainda ser obtidas com interaction() que produz uma sa´ ıda na forma de um vetor com nomes que combinam os n´ ıveis dos fatores envolvidos.e2 r3.575 21. mean)) > ex04. > with(ex04.e1 r3. interaction(rec. mean)) r1. > ex04.7250 20.Introdu¸ c˜ ao ao R 198 26.e1 r1.6875 > ex04.e1 r3.me <. mean)) > ex04.e2 r3. esp).mr r1 r2 r3 25.48 Max.050 25.me e1 e2 23.30 21. tapply(resp.325 19.70 Vamos explorar um pouco mais os dados calculando as m´ edias para cada n´ ıvel de cada fator e tamb´ em para as combina¸ c˜ oes dos n´ ıvies dos fatores. tapply(resp.mr <.e1 r3.e1 r1. J´ a para a vari´ avel num´ erica s˜ ao mostrados algumas medidas estat´ ısticas.325 r2 25. list(rec.875 20.00 19.050 21.e2 25. median)) r1. esp).with(ex04. > summary(ex04) rec esp resp r1:8 e1:12 Min. tapply(resp.e1 r2. Nos exemplos a seguir ilustramos ambas situa¸ c˜ oes onde s˜ ao obtidas as medianas com a fun¸ c˜ ao pr´ e-definida mediam e o n´ umero de observa¸ c˜ oes acima de 22 para cada combina¸ c˜ ao dos fatores. :26.e1 r2.325 Nos comandos mostrados anteriormente a fun¸ c˜ ao mean() pode ser substitu´ ıda por qualquer outra fun¸ c˜ ao de interesse seja pr´ e definida ou definida pelo usu´ ario.60 r2:8 e2:12 1st Qu.00 19. tapply(resp.875 19.m e1 e2 r1 25.650 25.575 r3 20.with(ex04. mean)) > ex04.2 An´ alise explorat´ oria Inicialmente vamos obter um resumo de nosso conjunto de dados usando a fun¸ c˜ ao summary(). esp).e2 r2.70 Mean :22. > with(ex04.:19.e2 r2. com uma fun¸ ca ˜o definida por n´ os.97 3rd Qu.e2 r2.e1 r2. tapply(resp.75 r3:8 Median :23.85833 22. Note que para os fatores s˜ ao exibidos o n´ umero de dados em cada n´ ıvel do fator.07500 > ex04. tapply(resp. :18. interaction(rec.m <.e2 25.e2 4 4 1 4 0 1 . esp.4875 22.e2 r3.35 > with(ex04.30 25. function(x) sum(x > 22))) r1. interaction(rec.e1 r1.:25.650 25. rec.

ylab = "Resposta". ylab = "Resposta". por´ em com pontos referentes ` as observa¸ c˜ oes o que permite visualizar a variabilidade em cada grupo definido pelas combina¸ c˜ oes dos n´ ıveis dos fatores. 2].plot(esp. preferimos o mecanismo mais geral de tapply() que permite o c´ alculo de outros resumos al´ em da m´ edia. resp. ylab = "m´ edias". lty = 1.m[. points(esp[rec == "r1"]. > with(ex04. Os comandos a seguir s˜ ao usados para produzir os gr´ aficos exibidos na Figura 26.0 r1 1.6 espécie 1. col = 1:2)) with(ex04. col = 1.plot(rec. 1]. > + > > > > > > > with(ex04.default(rec.8 2. Experimente nos comandos acima substituir mean por var para calcular a variˆ ancia de cada grupo. Os comandos a seguir ilustram alguns outros tipos de gr´ aficos que podemos produzir. interaction. ty = "n". ty = "n". resp. points(rec[esp == "e2"]. resp. esp.5) with(ex04. cex = 1. pch = "x".5) with(ex04. resp[rec == "r1"]. xpd = F. interaction. add = T. Pode-se usar o R para obter outros tipos de gr´ aficos de acordo com o interesse de quem est´ a analisando os dados. plot.2 s˜ ao mostrados gr´ aficos semelhantes aos mostrados anteriormente. col = 2)) points(ex04. )) with(ex04. ylab = "m´ edias".default(esp. + xpd = F)) > with(ex04. pch = "x".plot(rec.0 e2 3.4 1.0 r3 1. resp[esp == "e1"]. points(rec[esp == "e1"].5 x x 20 x 20 x 1.2 1. col = 1)) . Inicialmente vamos fazer isto graficamente e mais a frente faremos um teste formal para presen¸ ca de intera¸ c˜ ao. col = 1)) points(ex04.Introdu¸ c˜ ao ao R 199 As m´ edias para so fatores e suas combina¸ c˜ oes tamb´ em poderiam ser obtidas com o comando model.0 r2 recipiente 2. cex = 1.2. xlab = "esp´ ecie".m[. col = 2. xlab = "esp´ ecie")) with(ex04.tables() o que ser´ a mostrado mais adiante. + xpd = F)) 26 x x x 26 x x x Resposta 22 24 Resposta 22 24 x x 1. Em experimentos fatoriais ´ e importante verificar se existe intera¸ c˜ ao entre os fatores.5 2.0 e1 Figura 57: Gr´ aficos de intera¸ c˜ ao entre os fatores. esp. interaction. Na figura 26. resp. Entretanto neste est´ agio de an´ alise descritiva. resp. resp[esp == "e2"]. plot. e por summary para obter um outro resumo dos dados. xlab = "recipiente". rec. xlab = "recipiente".

Al´ em destes gr´ aficos produzidos pelo sitema b´ asico de gr´ aficos do R pode-se usar comandos fornecidos pelo pacote lattice que implementam um poderoso conjunto alternativo de gr´ aficos mas n˜ ao ser˜ ao abordados aqui.195 4.av <. pch = "x". A seguir vemos duas f´ ormulas que especificam o mesmo modelo. A primeira usa a segunda internamente visto que o modelo ´ e linear. data = ex04) Mean Sq F value Pr(>F) 46.924e-07 *** 19.5 Resposta 22 24 x x 20 x 20 x 1. rec. col = 1.875 0. interaction. pch = "x".761 Residuals 18 23. add = T.5) with(ex04.2 1.001155 ** 31.430 36. Nestas fun¸ c˜ oes os modelos s˜ ao declarados por ”f´ ormulas”. points(esp[rec == "r3"].853 6.5) with(ex04. col = 3.090 ~ rec + esp + rec:esp. ].av <.8 2.av) Df Sum Sq rec 2 92.861 esp 1 19. xpd = F.0 r1 1. resp[rec == "r2"].635e-06 *** 1. cex = 1. col = 3)) points(ex04.0 r2 recipiente 2.0 r3 1.880 24. col = 2)) points(ex04. lty = 1. resp[rec == "r3"]. 26.082 14.plot(esp.aov(resp > ex04.0 e1 Figura 58: Gr´ aficos de pontos examinando a intera¸ c˜ ao entre os fatores. por´ em ajusta os resultados em um formato em geral mais adequado para an´ alise de experimentos. o an´ alise de variˆ ancia para este experimento inteiramente casualizado em esquema fatorial pode ser obtida com as fun¸ c˜ oes aov() (”analysis of variance”) ou lm() (”linear model”).6 espécie 1. col = 1:3)) 26 x x x 26 x x x Resposta 22 24 x x 1.082 rec:esp 2 63.3 An´ alise de variˆ ancia Seguindo o modelo adequado. > ex04. cex = 1.5 2. ].5) with(ex04.283 . pch = "x". cex = 1.Introdu¸ c˜ ao ao R > > > > > > 200 points(ex04.4 1. resp. points(esp[rec == "r2"].0 e2 3. data = ex04) ~ rec * esp.m[2. ].m[1.aov(resp > summary(ex04. col = 2.m[3.

av pertence ` as classes aov e lm. . o s´ ımbolo ":" define o termo de intera¸ c˜ ao e "*" indica da inclus˜ ao dos efeitos principais e intera¸ c˜ oes.488 22. a an´ alise de residuos. A an´ alise acima mostra que neste caso o efeito de intera¸ c˜ ao ´ e significativo.values" "assign" "call" "terms" A chamada class() mostra que o objeto ex04. No resultado est´ a inclu´ ıdo tamb´ em o n´ umero de dados que gerou cada m´ edia.050 e2 25. > names(ex04. Iremos usar mais este mecanismo no pr´ oximo passo da an´ alise.1 ³ ³ 1 Isto significa que dentro de uma f´ ormula no R. Existe uma fun¸ c˜ ao chamada summary. Isto significa que devem haver m´ etodos associados a este objeto que tornam a explora¸ c˜ ao do resultado mais f´ acil.325 19.av) [1] "coefficients" [7] "qr" [13] "model" > class(ex04.av.650 r2 25. Por exemplo a fun¸ c˜ ao model.tables aplicada a este objeto da classe aov produz tabelas dos efeitos (se type="effects") ou das m´ edias (se type="effects") definidas pelo modelo. O objeto ex04. m´ edias de cada n´ ıvel dos fatores e das combina¸ c˜ oes dos n´ ıveis dos fatores. A seguir veremos alguns exemplos.residual" "effects" "contrasts" "rank" "xlevels" "fitted.325 Mas isto ainda n˜ ao ´ e tudo que se pode extrair da an´ alise! O objeto ex04.001 ³**³ 0. codes: 201 0 ³***³ 0.av).³ 0.aov() que foi utilizada j´ a que o objeto ´ e da classe aov.av guarda todos os resultados da an´ alise e pode ser explorado por diversos comandos.075 rec:esp esp rec e1 r1 25.96667 rec rec r1 r2 r3 25.01 ³*³ 0.av possui v´ arios elementos que guardam diversas outras informa¸ c˜ oes sobre o ajuste do modelo e que podem ser exploradas subsequentemente por m´ etodos de fun¸ c˜ oes para as classes aov e lm ou por requisi¸ c˜ oes definidas pelo usu´ ario.575 21.688 esp esp e1 e2 23.05 ³.875 r3 20.725 20. type = "means") Tables of means Grand mean 22. Na verdade j´ a usamos este fato acima quando digitamos o comando summary(ex04.av) [1] "aov" "lm" "residuals" "df. O resultado mostra a m´ edia geral. confirmando o que for indicado nos gr´ aficos explorat´ orios do efeito de intera¸ c˜ ao vistos anteriormente. > model.858 22.Introdu¸ c˜ ao ao R --Signif.tables(ex04.

5 Standardized residuals 0.0 20 21 22 23 Fitted values 24 25 26 −2 rec : r3 r2 Factor Level Combinations r1 Figura 59: Gr´ aficos de res´ ıduos produzidos para objetos da classe lm. Residuals vs Fitted 3 17 Normal Q−Q 3 17 2 14 Standardized residuals 0 1 2 14 −1 0 Residuals 1 21 −1 −2 21 20 21 22 23 Fitted values 24 25 26 −2 −1 0 1 Theoretical Quantiles 2 Scale−Location 17 Constant Leverage: Residuals vs Factor Levels 3 17 1. Neste gr´ aficos pode-se usar outras vari´ aveis. etc.4. mudar texto de eixos e t´ ıtulos. tipos de gr´ aficos. Os gr´ aficos permitem uma an´ alise dos res´ ıduos que auxilia no julgamento da adequacidade do modelo. Os comandos a seguir mostram como obter os gr´ aficos boxplot dos res´ ıduos para os n´ ıveis de cada um dos fatores como mostrado na Figura 26. etc. .4.0 14 21 Standardized residuals 0 1 2 14 −1 21 0. o comando plot(ex04.av) aplicado sobre o objeto que cont´ em o ajuste do modelo produz uma figura com quatro gr´ aficos b´ asicos para an´ alise dos res´ ıduos conforme mostrado na Figura 26.Introdu¸ c˜ ao ao R 202 26.5 1. Evidentemente n˜ ao ´ e necessario limitar-se aos gr´ aficos produzidos automaticamente pelo R – voce pode criar os seus pr´ oprios gr´ aficos.4 An´ alise de res´ ıduos A an´ alise de res´ ıduos ´ e u ´til para verificar os pressupostos do modelo. Usando o mecanismos de classes. etc.

main = NULL) qqline(residuos) title("Gr´ afico Normal de \n Probabilidade dos Res´ ıduos") Al´ em da an´ alise gr´ afica de res´ ıduos h´ a alguns testes j´ a programados em fun¸ c˜ oes.av$df. e um qqplot dos res´ ıduos do modelo. um boxplot dos res´ ıduos padronizados. preditos) title("Res´ ıduos vs Preditos") s2 <. A Figura 26.9293.av) plot(residuos. Como exemplo vejamos o teste de Shapiro-Wilks para testar a normalidade dos res´ ıduos. Note que o objeto que cont´ em o ajuste foi utilizado para extrair res´ ıduos. p-value = 0.4 mostra outros gr´ aficos definidos pelo usu´ ario: res´ ıduos versus valores preditos.residuos/sqrt(s2) boxplot(respad) title("Res´ ıduos Padronizados") qqnorm(residuos.fitted(ex04.09402 .resid(ex04.av) plot(ex04$rec.Introdu¸ c˜ ao ao R > > > > > residuos <. > > > > > > > > > > preditos <. valores preditos e a estimativa s2 da variˆ ancia dos res´ ıduos.res respad <. > shapiro.test(residuos) Shapiro-Wilk normality test data: residuos W = 0. residuos) title("Res´ ıduos vs Recipientes") plot(ex04$esp.sum(residuos^2)/ex04. residuos) title("Res´ ıduos vs Esp´ ecies") 203 Resíduos vs Recipientes Resíduos vs Espécies 2 1 0 −1 r1 r2 r3 −1 0 1 2 e1 e2 Figura 60: Gr´ aficos de res´ ıduos para cada um dos fatores. ylab = "Res´ ıduos".

001 ³**³ 0. > ex04.4). 3).875 0.082 14.082 19.1 ³ ³ > ex04.8813 3.5269 3.05 ³. Iniciamente vamos extrair usando effects() os efeitos ajustados pelo modelo. codes: 0 ³***³ 0.776e-07 *** esp:rec: e2 2 69. . r2 = 2.509e-06 *** rec:esp: r1 1 0.924e-07 *** rec:esp 3 82. Desta forma podemos desdobrar os efeitos de esp´ ecie dentro de cada recipiente e vice versa conforme mostrado a seguir.561 33. codes: 0 ³***³ 0.090 1.ave foram e1=c(1.524 8.ave. data = ex04) > summary(ex04.Introdu¸ c˜ ao ao R Resíduos vs Preditos 26 2 204 Resíduos Padronizados Gráfico Normal de Probabilidade dos Resíduos 25 24 1 preditos 22 23 0 21 20 −1 0 1 residuos 2 −1 −1 −2 0 Resíduos 1 2 −1 0 1 Theoretical Quantiles 2 Figura 61: Alguns gr´ aficos de res´ ıduos definidos pelo usu´ ario.3) e e2=c(2.622 39.aov(resp ~ rec/esp.090 1. no caso de ex04.614 21.958 7. r3 = 3))) 1 c(1.05 ³.842 27.112e-07 *** rec:esp: r3 1 3.6897 rec:esp: r2 1 79. e2 = c(2.122 43.211 0.380 61. em particular como definir os elementos da lista que.avr <.155 30. 4)))) 1 Neste ponto vale uma explica¸ c˜ ao mais detalhada sobre como obter os desdobramentos da intera¸ c˜ ao usando o argumento split. Uma forma de obter tal desdobramento no R ´ e reajustar o modelo utilizando a nota¸ c˜ ao / que indica efeitos aninhados. 26.³ 0.1288 Residuals 18 23.avr.251 3. data = ex04) > summary(ex04.ave <.5345 0.283 --Signif.³ 0.001155 ** esp:rec 4 156.01 ³*³ 0.aov(resp ~ esp/rec.861 46.283 --Signif.090 3.5 Desdobrando intera¸ c˜ oes Quando a intera¸ c˜ ao entre os fatores ´ e significativa pode-se adotar como estrat´ egia de an´ alise o desdobramento dos graus de liberdade de um fator dentro de cada n´ ıvel do outro fator.438e-08 *** esp:rec: e1 2 87. split = list( esp:rec = list(e1 = Df Sum Sq Mean Sq F value Pr(>F) esp 1 19.1 ³ ³ 1.1647 0. split = list( rec:esp = list(r1 = Df Sum Sq Mean Sq F value Pr(>F) rec 2 92.750 27.251 2.01 ³*³ 0.380 79.500 34.430 36.1952 4.001 ³**³ 0.211 0.730e-06 *** Residuals 18 23.

tk1 <.0000003 r3-r2 -2.8701851 -8. espe2:recr2.6 que ´ e produzida com o comando plot(ex04.779815 -3.ave)[1:6] (Intercept) espe2 espe1:recr2 espe2:recr2 espe1:recr3 espe2:recr3 -112.0011553 $ rec:esp r2:e1-r1:e1 r3:e1-r1:e1 r1:e2-r1:e1 r2:e2-r1:e1 r3:e2-r1:e1 r3:e1-r2:e1 r1:e2-r2:e1 r2:e2-r2:e1 diff 0.770185 -3. a primeira usando uma implementa¸ c˜ ao j´ a dispon´ ıvel com a fun¸ c˜ ao TukeyHSD() e uma segunda sem fazendo os c´ alculos necess´ arios passo a passo com opera¸ c˜ oes b´ asicas do R.325 -5. 26.7625 -4.6 Teste de Tukey para compara¸ c˜ oes m´ ultiplas H´ a v´ arios testes de compara¸ c˜ oes m´ ultiplas dispon´ ıveis na literatura.8451851 upr 2.0951851 -8.995185 -3. data = ex04) $rec diff lwr upr p adj r2-r1 -2. > ex04. 3o : espe1:recr3 o e 4 : espe2:recr3. Isto mostra que a posi¸ c˜ ao dos efeitos que cont´ em a esp´ ecie1 (e1) s˜ ao 1 e 3.3201851 -8.0000120 0.656854 205 Os efeitos que temos interesse no desdobramento s˜ ao os da intera¸ c˜ ao.9983324 0.513229 -4.075 -4. o pacote multcomp ´ e inteiramente dedicado ` a implementa¸ c˜ ao de diversos procedimentos de compara¸ c˜ oes m´ ultiplas no R.220185 -3. Al´ em disto.3172128 0.368257 4.0375 -3. Por exemplo.5922128 0.054815 2.75476 -0. que s˜ ao: espe1:recr2.600 -0.783333 -2.529815 -1.3547128 0.225 -5.Introdu¸ c˜ ao ao R > effects(ex04. e especie2 (e2) s˜ ao 2 e 4 o que define os valores nos vetores indicados no argumento split.0000204 0.123724 -7. e muitos deles s˜ ao implementados nos pacotes b´ asicos do R e/ou em pacotes contribu´ ıdos.6201851 -6.0004825 0.8701851 -8.tk1).550 -6.0003395 r3-r1 -4. 2o : espe2:recr2.919596 -5.TukeyHSD(ex04.207787 -1.0000068 0. Para fun¸ c˜ ao j´ a dispon´ ıvel simplesmente digitamos os comandos a seguir e os resultados podem ser mostrados na forma texto ou gr´ afica como na Figura 26. Como ilustra¸ ca ˜o mostramos a seguir duas formas de obter resultados para o Teste de Tukey.245287 -3. Portanto temos que localizar no vetor de efeitos as posi¸ c˜ oes desses efeitos de intera¸ c˜ ao que s˜ ao: 1o : espe1:recr2.939804 6.av) > ex04.482787 -0.825 -0.1451851 -2.0000041 . procedimentos que n˜ ao estejam implementados podem ser calculados utilizando os recursos usuais do R utilizando os objetos com o ajuste dos modelos. espe1:recr3 e espe2:recr3.3701851 -3.tk1 Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = resp ~ rec * esp.300 lwr -2.9997185 0.0055472 $esp diff lwr upr p adj e2-e1 -1.279815 1.325 -6.9811892 0.754815 p adj 0.8119067 0.8000 -6.

tk2).820185 0.7951851 4.600 -4.8701851 -2.0000444 0.0 Differences in mean levels of esp r3:e2−r2:e2 r3−r2 r1:e2−r3:e1 r3:e2−r1:e1 −5 0 5 Differences in mean levels of rec:esp Figura 62: Visualiza¸ c˜ ao dos resultados do teste de Tukey de compara¸ c˜ oes m´ ultiplas.tk2 <.2951851 -3.220185 2.770185 -3.054815 -1.750 -5. Esta sa´ ıda fornece resultados detalhados de v´ arias compara¸ c˜ oes poss´ ıveis entre os n´ ıveis dos fatores e suas combina¸ c˜ oes. Como a intera¸ c˜ ao foi significativa na an´ alise deste experimento a compara¸ c˜ ao dos n´ ıveis fatores principais n˜ ao nos interessa.550 5.8201851 -6.075 -5.004815 0.070185 0.9997185 0.7298149 7.TukeyHSD(ex04.0000143 -6.275 -5.0002705 2.0004825 0.0011258 0.325 0.300 lwr -2.0000204 0. data = ex04) $ esp:rec e2:r1-e1:r1 e1:r2-e1:r1 e2:r2-e1:r1 e1:r3-e1:r1 e2:r3-e1:r1 e1:r2-e2:r1 e2:r2-e2:r1 e1:r3-e2:r1 e2:r3-e2:r1 e2:r2-e1:r2 diff -0.0000143 0.225 -6.8451851 upr 2.5 −1.325 0.1451851 -6. > ex04.ave.754815 p adj 0.454815 -3. "esp:rec") > ex04.275 -4.275 -0.0951851 -2.6201851 -8.550 -5. Entretanto.0 −1.0000041 .0201851 2. nem todos os resultados mostrados nos interessam.0000444 -3.9951851 -8.3201851 -8.0011258 -0.295185 0.5451851 -8.9983324 0.750 -4.475 1.8701851 -1.tk2 Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = resp ~ esp/rec.9902110 -1.2951851 -7.204815 0.820185 0.779815 3.095185 -3. Podemos ent˜ ao pedir a fun¸ c˜ ao que somente mostre a compara¸ c˜ ao de m´ edias entre as combina¸ c˜ oes dos n´ ıveis dos fatores e o gr´ afico com tais resultados pode ser obtido com plot(ex04.750 -7.204815 -2.000 -6.454815 0.6135909 -8. neste caso.529815 -3.0000068 0.2914242 95% family−wise confidence level 206 95% family−wise confidence level r2−r1 95% family−wise confidence level e2−e1 r3−r1 −6 −5 −4 −3 −2 −1 Differences in mean levels of rec −2.9811892 0.2701851 3.000 1.Introdu¸ c˜ ao ao R r3:e2-r2:e1 r1:e2-r3:e1 r2:e2-r3:e1 r3:e2-r3:e1 r2:e2-r1:e2 r3:e2-r1:e2 r3:e2-r2:e2 -4.729815 -1.5451851 -1.5 −2.

3.0002705 e1:r3-e2:r2 0.000 -0.paste.res > dt <. "ns")) .9902110 e2:r3-e2:r2 1.0000120 e2:r3-e1:r2 -4.95.7951851 4.600 -5.825 -8. fazendo os c´ alculos passo a passo.325 r2 25.ex04.575 r3 20.m onde as linhas se referem aos recipientes e colunas ` as esp´ ecies.550 -7."-") > m1d r1 r2 r3 r1 0. que ´ e usada junto com o valor da amplitude estudantizada fornecida por qtukey() para obter o valor da diferen¸ ca m´ ınima significativa que no c´ odigo a seguir armazenamos no objeto dt.225 -5.m1d[lower.outer(names(m1).m1n[lower. Neste ponto.043945 Este valor ´ e ent˜ ao usado para comparar as m´ edias de interesse.279815 0.sum(resid(ex04. 18) * sqrt(s2/4) > dt [1] 2. > # compara¸ c~ ao de m´ edias de recipientes para esp´ ecie 1 : > ex04.0701851 3.av$df.225 0.m1.m[.004815 0.av)^2)/ex04. sep="-") > names(m1d) <. Mais especificamente.820185 0.000 5.outer(m1. sig = ifelse(abs(m1d) > dt.600 r2 0.Introdu¸ c˜ ao ao R e1:r3-e1:r2 -5. No objeto m1 armazenamos as m´ edias para esp´ ecie1 e na sequˆ encia s˜ ao feitos c´ alculos para verificar a significˆ ancia da diferen¸ ca entre as m´ edias dos recipientes para esta esp´ ecie. vamos fazer as compara¸ c˜ oes dos recipientes para cada uma das esp´ ecies.2914242 e2:r3-e1:r3 1.0951851 -2.2701851 3. Primeiro vamos obter a estimativa da variˆ ancia dos res´ ıduos.m e1 e2 r1 25.1] > m1 r1 r2 r3 25.875 19.names(m1). > s2 <.3701851 -3.825 r3 -5.825 > m1n <.6135909 207 Mas ainda assim temos resultados que podem n˜ ao interessar.600 -5.tri(m1n)] > m1d r2-r1 r3-r1 r3-r2 0.225 5.650 25.295185 0.275 -1.875 20.050 > m1d <.750 -0. Anteriormente armazenamos as m´ edias para as combina¸ c˜ oes de todos os n´ ıveis dos fatores no objeto ex04.020185 0.qtukey(0.325 > m1 <.650 25.475 -2. considere que estamos intessados nas compara¸ c˜ oes dos n´ ıveis de um fator dentro de cada um dos n´ ıveis do outro fator.tri(m1d)] > m1d [1] 0.600 -5.050 21.225 -5.frame(dif = m1d.000 > m1d <.825 > data. "".825 0.

"-") > m2d <.75 ns 208 No c´ odigo mostrado anteriormente fazemos alguma manipula¸ c˜ ao dos objetos para formatar a sa´ ıda. sep="-") > names(m2d) <. "ns")) dif sig r2-r1 -5.frame(dif = m2d.225 ns r3-r1 -5.2] > m2d <.600 r3-r2 -5.m2.m2n[lower.m2d[lower.paste.names(m2).ex04. .outer(m2.825 > # compara¸ c~ ao de m´ edias de recipientes para esp´ ecie 2 : > m2 <. Esta sequˆ encia pode ser usada para definir uma fun¸ c˜ ao o que evitaria a digita¸ c˜ ao de todos estes comandos a cada compara¸ c˜ ao de m´ edias desejada.tri(m2d)] > m2n <.75 * r3-r1 -4.00 * r3-r2 1. Procedimento an´ alogo pode ser adotado para fazer outras compara¸ c˜ oes de interesse. sig = ifelse(abs(m2d) > dt.outer(names(m2).tri(m2n)] > data. "*".Introdu¸ c˜ ao ao R dif sig r2-r1 0.m[.

a resposta (resp) e a covari´ avel (cov).table() diretamente como mostrado a seguir.:27.factor(ex12$maq) > is.00 Median :40.00 3rd Qu.numeric(ex12$cov) [1] TRUE > is.numeric(ex12$resp) [1] TRUE > summary(ex12) maq cov resp 1:5 Min.br/~paulojus/aulasR/dados/exemplo12. Os dados a serem utilizados est˜ ao dispon´ ıveis neste link e voce pode copiar o arquivo com conjunto de dados para sua ´ area de trabalho ou usar o comando read.as.:43.0 2:5 1st Qu.13 Mean :40.leg.2 3rd Qu. > ex12 <. :32.table("http://www.txt".5 3:5 Median :24.0 Max.00 Max.read.Introdu¸ c˜ ao ao R 209 27 27.ufpr. Come¸ camos com a leitura e organiza¸ c˜ ao dos dados. + header = T) > ex12 maq cov resp 1 1 20 36 2 1 25 41 3 1 24 39 4 1 25 42 5 1 32 49 6 2 22 40 7 2 28 48 8 2 22 39 9 2 30 45 10 2 28 44 11 3 21 35 12 3 23 37 13 3 26 42 14 3 21 34 15 3 15 32 > dim(ex12) [1] 15 3 > names(ex12) [1] "maq" "cov" "resp" > ex12$maq <. Note que neste caso temos 2 vari´ aveis num´ ericas.1 An´ alise de covariˆ ancia Exemplo 1 Vejamos agora um exemplo de an´ alise de covariˆ ancia.50 1st Qu.:21.0 Mean :24.00 Min. :49.0 .:36. :32. :15.

codes: 0 ³***³ 0.cov) Df Sum Sq Mean Sq F value Pr(>F) maq 2 140.³ 0. e no segundo para verificar o efeito do tratamento. a soma das somas de quadrados n˜ ao corresonde a soma de quadrados total.01 ³*³ 0. Primeiro vamos testar a inclina¸ c˜ ao (coeficiente β1 ) da reta de regress˜ ao. data = ex12) > summary(ex12. type="III") e Anova(ex12.001 ³**³ 0. ou seja.400 70. no exemplo acima Anova(ex12. Na an´ alise de variˆ ancia abaixo devemos considerar apenas o teste referente ` a vari´ avel cov que neste caso est´ a corrigida para o efeito de maq.05 ³.05 ³.200 27.trat <. data = ex12) > summary(ex12. Se desej´ avel poderia-se tomar os resultados de cada um deles para compor um quandro de an´ alise.aov(resp ~ maq + cov. > ex12.01 ³*³ 0. > ex12.aov(resp ~ cov + maq.1 ³ ³ 1 Portanto.cov.284 2 cov 178.264e-06 *** 0.986 2. Desta forma os testes de significˆ ancia tem que ser obtidos em ajustes separados: (i) para o efeito de covari´ aveis.Introdu¸ c˜ ao ao R 210 Na an´ alise de covariˆ ancia n˜ ao temos ortogonalidade entre os fatores. por´ em com a resalva que.1 ³ ³ 1 Note que esta fun¸ c˜ ao ir´ a retornar o mesmo resultado para qualquer ordem dos termos no modelo.6106 0.trat. codes: 0 ³***³ F value Pr(>F) 34.014 69.001 ³**³ 0.cov <.1181 Residuals 11 27.986 11 --Signif. .170e-05 *** cov 1 178.6106 0. corrigido pelo efeito dos tratamentos qualitativos e (ii) para o efeito dos tratamentos qualitativos.130 305.0001089 *** 2.1180839 69. Entretanto.9330 2.3664 0.9694 4. devido a n˜ ao ortogonalidade.642 2. codes: 0 ³***³ 0.trat) Df Sum Sq Mean Sq F value Pr(>F) cov 1 305.593 5.284 6.544 --Signif. Note que para isto a vari´ avel cov tem que ser a u ´ltima na especifica¸ c˜ ao do modelo. olhamos o primeiro quadro da ANOVA para verificar o efeito da covari´ avel.264e-06 *** Residuals 11 27.³ 0.01 ³*³ 0.05 ³. corrigidos pelo efeito da covari´ avel. h´ a uma fun¸ c˜ ao Anova() no pacote car do R que j´ a monta tal quadro automaticamente conforme ilustrado a seguir. > require(car) > Anova(ex12. Para isto basta inverter a ordem dos termos na especifica¸ c˜ ao do modelo. type = "III") Anova Table (Type III tests) Response: resp Sum Sq Df (Intercept) 87.1 ³ ³ 1 A seguir testamos o efeito do fator maq corrigindo para o efeito da covari´ avel.014 178.986 2.434 1 maq 13.969 4.cov.001 ³**³ 0.014 1 Residuals 27.96e-07 *** maq 2 13.³ 0.544 --Signif.130 119. type="III") retornam os mesmos resultados.

:19. Neste caso a fun¸ c˜ ao Anova faz o mesmo que mostrado nas duas an´ alises de variˆ ancias iniciais.br/~paulojus/aulasR/dados/excovar2.txt".transform(excov2. 27.factor(BLOCO)) > summary(excov2) TRAT BLOCO STAND PROD 1:4 1:5 Min. :24.00 Median : 75. TRAT = as.75 Max.40 5:4 3rd Qu.00 Min.table("http://www. Em geral nas fun¸ c˜ oes b´ asicas do R evita-se tal jarg˜ ao e procura-se usar so conceitos ligados ` a parametriza¸ c˜ ao do modelo atrav´ es da defini¸ c˜ ao dos contrastes e por isto tal terminologia est´ a apenas em um pacote contribu´ ıdo.ufpr.: 44.leg.00 . colocado na u ´ltima posi¸ c˜ ao na especifica¸ c˜ ao do modelo. ou seja.Introdu¸ c˜ ao ao R 211 O argumento type="III" refere-se a um jarg˜ ao consagrado pelo software SAS que corresponde a soma de quadrados do tipo III. Inicialmente vamos carregar os dados e converter as colunas TRAT e BLOCO para fatores.00 Max.:16.00 1st Qu.read. > excov2 <. :135.50 4:4 4:5 Mean :17. BLOCO = as.2 Exemplo 2 Vamos considerar agora um outro exemplo retirado de um email de Andr´ e Oliveira Souza na lista R STAT.00 3rd Qu. + header = T) > excov2 TRAT BLOCO STAND PROD 1 1 1 24 97 2 1 2 19 94 3 1 3 15 77 4 1 4 14 80 5 2 1 23 126 6 2 2 21 121 7 2 3 16 83 8 2 4 17 74 9 3 1 20 135 10 3 2 19 133 11 3 3 13 92 12 3 4 11 64 13 4 1 18 45 14 4 2 18 49 15 4 3 17 42 16 4 4 16 40 17 5 1 19 45 18 5 2 18 41 19 5 3 18 38 20 5 4 17 32 > names(excov2) [1] "TRAT" "BLOCO" "STAND" "PROD" > excov2 <.: 94. :11. : 32.65 Mean : 75.25 3:4 3:5 Median :18. obtendo para cada termo a soma de quadrados quando este ´ e corrigido para os demais.00 2:4 2:5 1st Qu.factor(TRAT).

codes: 0 ³***³ 0. data = excov2) > require(car) > Anova(excov2.2 1 9.6171 3.0 4 35.001 ³**³ 0. .³ 0.05 ³.lm(PROD ~ BLOCO + TRAT + STAND.lm) Anova Table (Type II tests) Response: PROD Sum Sq Df F value Pr(>F) BLOCO 231.4 3 0.Introdu¸ c˜ ao ao R E portanto a an´ alise de covariˆ ancia pode ser obtida pelos seguintes comandos.1 212 ³ ³ 1 Para refor¸ car os conceitos compare o quadro de ANOVA obtido com os gerados pelos comandos a seguir.59733 TRAT 16819. > excov2.092e-06 *** STAND 1072.lm <.01179 * Residuals 1298.01 ³*³ 0.0822 0.6 11 --Signif.6534 0.

ufpr.01 1.31 0. amostras de referˆ encia supostamente de teores iguais foram enviadas a diferentes laborat´ orios nos quais determina¸ c˜ oes de teores foram feitas com replica¸ c˜ oes.xls") head(mgo) str(mgo) summary(mgo) Pode-se identificar duas fontes de varia¸ c˜ ao nos valores medidos.86 1.00 1.86 1.68 0. .86 2.88 1.64 1.99 2. Como exemplo.00 2.1 Efeitos aleat´ orios Componentes de variˆ ancia Introdu¸ c˜ ao O problema que ilustra este t´ opico consiste em encontrar valores ”padr˜ ao”(ou de referˆ encia) para a teores de elementos qu´ ımicos Para isto.87 1.87 1.read.86 1.xls("MgO. O objetivo ´ e encontrar um valor ”caracter´ ıstico”para as amostras.1.Introdu¸ c˜ ao ao R 213 28 28. que seria dado por alguma ”m´ edia”adequada.83 1.73 1.xls Lab A A A B B B B B C C C D D D E E E F F F G G G H H H > > > > > MgO 1. considere os dados dos teores medidos de um u ´nico elemento mostrados a seguir e que podem ser obtidos em http://www.68 1.leg. uma devido ` a variabilidade entre laborat´ orios e outra devida ` a variabilidade das replica¸ c˜ oes feitas nos laborat´ orios.28 0.86 1.88 1.85 1.84 1.85 require(gdata) mgo <.br/∼paulojus/aulasR/dados/MgO.87 1.02 2.1 28.83 1.

24737682 .261394113 0.675205 2. > intervals(mgo.lme(MgO ~ 1.1813949 18 9.lme) Linear mixed-effects model fit by REML Data: mgo AIC BIC logLik -13. which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est.02752389 0.056301 attr(.03640 9. > require(nlme) > mgo.846515 Random effects: Formula: ~1 | Lab (Intercept) Residual StdDev: 0.69303 -10. por exemplo dada por um intervalo de confian¸ ca."label") [1] "Fixed effects:" > VarCorr(mgo. upper (Intercept) 1.005807107 0.Introdu¸ c˜ ao ao R 214 associada a uma medida de variabilidade desta m´ edia.675204 0.294108 1. medidas da variabilidade entre e dentro de laborat´ orios.Error DF t-value p-value (Intercept) 1.lme <.5112672 0.06901512 -0. mgo) > summary(mgo.235126 0 Standardized Within-Group Residuals: Min Q1 Med Q3 -2. O summary() mostra um resumo dos resultados mais importantes do ajuste do modelo incluindo as estimativas da m´ edia (Fixed Effects: Intercept) e dos desvios padr˜ ao entre laborat´ orios (Random Effects: Intercept) e das replicatas (Random Effects: Residual). Nos resultados a seguir ajustamos um modelo ajustado com a fun¸ c˜ ao lme() do pacote nlme. Al´ em disto deseja-se estimar os ”componentes de variˆ ancia”.lme) Lab = pdLogChol(1) Variance StdDev (Intercept) 0.00166549 -0.07620438 Fixed effects: MgO ~ 1 Value Std.lme. isto ´ e.10150856 Number of Observations: 26 Number of Groups: 8 O intervalo de confian¸ ca para m´ edia e as estimativas das variˆ ancias e desvios padr˜ oes podem ser obtidos como mostrado a seguir.07620438 Max 3.51126716 Residual 0. random = ~1 | Lab.

optar por remover este dado da an´ alise o que pode ser feito com o comando a seguir. No primeiro desses gr´ eficos mostran-se todos os res´ ıduos.subset(mgo.6)) > dim(mgo1) [1] 25 2 O modelo ajustado assume que os dados possuem distribui¸ c˜ ao normal e os gr´ aficos de perfil de verossimilhan¸ ca do parˆ ametro da transforma¸ c˜ ao Box-Cox na figura 65 mostram que. Uma poss´ ıvel alternativa ´ e. n˜ ao deve-se tomar os resultados obtidos como corretos ou definitivos pois uma an´ alise criteriosa deve verificar anomalias dos dados e adequa¸ c˜ ao a pressupostos do modelo. enquanto que no segundo usa-se gr´ aficos condicionais do sistema gr´ afico fornecido pelo pacote lattice para separar os res´ ıduos de cada laborat´ orio.1.28 e 0.2 Avaliando o ajuste e qualidade dos dados Os resultados mostrados anteriormente devem ser vistos apenas como uma ilustra¸ c˜ ao dos comandos b´ asicos para obten¸ c˜ ao dos resultados. excluindo-se o dado at´ ıpico.lme) Figura 63: Gr´ afico de res´ ıduos do modelo ajustado 28. em acordo com o respons´ avel pelos dados.Introdu¸ c˜ ao ao R 215 > plot(mgo. Entretanto. . > mgo1 <.68 do laborat´ orio E ´ e bastante diferente das demais replicatas deste laborat´ orio (0. A observa¸ c˜ ao de valor 0. sendo que este dado tamb´ em foi considerado suspeito pela fonte dos dados. !(Lab == "E" & MgO > 0. a transforma¸ c˜ ao n˜ ao ´ e necess´ aria.31). Os gr´ afico de res´ ıduos das figuras 63 e mostram observa¸ c˜ oes discrepantes e pode-se detectar que est˜ ao concentradas nos dados do Laborat´ orio E.

2 0.5 2.Introdu¸ c˜ ao ao R 216 > print(plot(mgo. abline = 0)) 0.5 1.0 G 0.0 −0.0 1.2 0. resid(.) | Lab.5 1.1 H D Residuals E F 0.1 0.0 1.5 2.0 −0.1 0.1 0.1 A 0.lme.0 Fitted values Figura 64: Gr´ afico de res´ ıduos para cada laborat´ orio do modelo ajustado .0 B C 0.0 −0.) ~ fitted(.5 2.2 0.0 1.5 1.1 0.

5. boxcox(MgO ~ Lab.0 3.0 Figura 65: Perfis de verossimilhan¸ ca do parˆ ametro da transforma¸ c˜ ao Box-Cox na presen¸ ca e ausˆ encia do ponto at´ ıpico do Laborat´ orio E .0 λ 2. 5. 3.0 55 45 60 1.Introdu¸ c˜ ao ao R 217 > > > > require(MASS) par(mfrow = c(1. 2)) with(mgo. len = 200))) with(mgo1. len = 200))) 65 60 95% 95% log−Likelihood 50 55 log−Likelihood 2 3 λ 4 5 50 0. lam = seq(1. lam = seq(0.5. boxcox(MgO ~ Lab.

random = ~1 | Lab.55185 32.0003355097 0.1781699 0.5482108 .659078 2.242955 1. > mgo1. upper (Intercept) 1. random = ~1 | Lab.075202 attr(.55775509 Residual 0. Poderia-se ent˜ ao considerar ainda remover todas as observa¸ c˜ oes deste laborat´ orio.Introdu¸ c˜ ao ao R 218 O modelo ajustado com o novo conjunto de dados apresenta resultados diferentes do anterior.lme(MgO ~ 1. reduzindo a estimativa de variˆ ancia entre as replicatas."label") [1] "Fixed effects:" > VarCorr(mgo1.lme <.lme <.lme(MgO ~ 1. which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est.3673809 Number of Observations: 25 Number of Groups: 8 > intervals(mgo1.08601 -55.3110907386 0.lme) Linear mixed-effects model fit by REML Data: mgo1 AIC BIC logLik -59.subset(mgo.411808 0 Standardized Within-Group Residuals: Min Q1 Med Q3 -2. Lab != "E") > dim(mgo2) [1] 23 2 > mgo2. mgo1) > summary(mgo1.lme) Max 2. nota-se que na verdade todas as observa¸ c˜ oes do Laborat´ orio E parecem at´ ıpicas com valores inferiores aos obtidos nos demais laborat´ orios.3652780 -0.lme.3598894 -0.1972321 17 8.5577551 0.01831692 Fixed effects: MgO ~ 1 Value Std.01831692 Al´ em disto. mgo2) > summary(mgo2.Error DF t-value p-value (Intercept) 1.54301 Random effects: Formula: ~1 | Lab (Intercept) Residual StdDev: 0. > mgo2 <.659078 0.lme) Lab = pdLogChol(1) Variance StdDev (Intercept) 0.

0 Fitted values Figura 66: Gr´ afico de res´ ıduos para cada laborat´ orio do modelo ajustado .Introdu¸ c˜ ao ao R 219 > print(plot(mgo1. resid(.5 1. + abline = 0)) 0.5 2. type = "p") ~ fitted(.0 1.5 1.) | Lab..5 2.0 B C 0.lme.0 1.0 1.5 2.0 G 2 1 0 −1 −2 H Standardized residuals D E F 2 1 0 −1 −2 A 2 1 0 −1 −2 0.5 1.

εi ∼ N (0.854012 0.01811513 220 Max 2.4590419 Os resultados s˜ ao substancialmente diferentes e a decis˜ ao de exclus˜ ao on n˜ ao dos dados deste Laborat´ orio deve ser cuidadosamente investigada dentro do contexto destes dados e conjunto com especialista da ´ area. σǫ das medidas de replicatas dentro dos laborat´ orios.1.854012 1.29932 0 Standardized Within-Group Residuals: Min Q1 Med Q3 -2.5091805 -0. σε ) ´ representa a variabilidade de medidas fornecidas por diferentes laborat´ orios (entre laborat´ orios) e 2 2 ´ e a variabilidade )´ e o termo associado ` a j -´ esima medida feita no i-´ esimo laborat´ orio e σǫ ǫij ∼ N (0.778861 1.03545001 16 52.929162 attr(. podemos descrever os teores por um modelo de efeitos aleat´ orios: Yij = µ + εi + ǫij .3 Fundamentos Assumindo que efeitos aleat´ orios podem ser usados para descrever o efeito de laborat´ orios. which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est. em que yij s˜ ao valores observados na j -´ esima medida feita no i-´ esimo laborat´ orio.01811513 Fixed effects: MgO ~ 1 Value Std.008693816 0. .Error DF t-value p-value (Intercept) 1. 28.09324064 Residual 0.lme) Lab = pdLogChol(1) Variance StdDev (Intercept) 0.09324064 0.000328158 0. upper (Intercept) 1.1587727 0.Introdu¸ c˜ ao ao R Linear mixed-effects model fit by REML Data: mgo2 AIC BIC logLik -78.3606918 Number of Observations: 23 Number of Groups: 7 > intervals(mgo2.lme.08602 Random effects: Formula: ~1 | Lab (Intercept) Residual StdDev: 0. µ ´ e o valor real 2 2 que e o efeito aleat´ orio do i-´ esimo laborat´ orio e σε do elemento na amostra padr˜ ao."label") [1] "Fixed effects:" > VarCorr(mgo2.17204 -74.89891 42.3302089 -0.

Introdu¸ c˜ ao ao R 221 O problema ent˜ ao consiste em estimar µ e a variˆ ancia associada ` a esta estimativa. V ). Estes estimadores s˜ ao obtidos maximizando-se a fun¸ c˜ ao de verossimilha¸ ca de uma proje¸ c˜ ao do vetor dos dados no espa¸ co complementar os definido pela parte fixa do modelo. a variˆ ancia 2 de cada observa¸ c˜ ao individual. 1] (Intercept) Residual "0. Var(ˆ . Esses u ´ltimos parˆ ametros s˜ ao chamados de componentes de variˆ ancia.0003355097" "contrasts" "logLik" "method" "data" "coefficients" "varFix" "numIter" "groups" "fitted" "residuals" O intervalo de confian¸ ca para m´ edia pode ent˜ ao ser obtido por: µ ˆ ± t1−α/2. estimadores de m´ axima verossimilhan¸ ca e m´ axima verossimilhan¸ ca restrita. a matriz V pode ser obtida por um produto de Kronecker simples entre matrizes diagonais e unit´ arias multiplicadas pelos componentes de variˆ ancia. Sob o modelo assumido os observa¸ c˜ oes tem distribui¸ c˜ ao normal Y ∼ N (1lµ. Yi. que por sua 2 2 vez est´ a associada aos valores dos parˆ ametros de variˆ ancia do modelo σε e σǫ . .lme(). Tipicamente. e os demais elementos s˜ ao nulos. Nos comandos a seguir mostramos a obten¸ c˜ ao do intervalo segundo c´ alculos dessa express˜ ao e a equivalˆ encia com o informado pela fun¸ c˜ aom intervals. No exemplo em quest˜ ao s˜ ao estes os estimadores utilizados para obter as estimativas mostradas na Sess˜ ao anterior (ver o resultado de summary(mgo1. Considerando os recursos computacionais atualmente dispon´ ıveis e as propriedades dos diferentes estimadores.action" > mgo1.j ) = σε + σǫ . Cov(Yi. isto ´ e. Diferentes m´ etodos de estima¸ c˜ ao s˜ ao propostos na literatura tais como estimadores de momentos baseados na an´ alise de variˆ ancia. > names(mgo1.lme$coeff$fixed (Intercept) 1.lme) [1] "modelStruct" "dims" [6] "sigma" "apVar" [11] "call" "terms" [16] "fixDF" "na.n−1 ˆ µ). estimadores minque (estimadores de norma quadr´ atica m´ ınima).3110907386" "0. nossa preferˆ encia ´ e pelo uso de estimadores de m´ axima verossimilhan¸ ca restrita.lme)[.659078 > VarCorr(mgo1. igual n´ umero de replicatas nos diferentes laborat´ orios.lme) e com valores mostrados novamente a seguir. No caso balanceado. em que 1l ´ e um vetor unit´ ario de dimens˜ ao igual ao numero de observa¸ c˜ oes n e V ´ e a matriz de 2 2 variˆ ancias e covariˆ ancias das observa¸ c˜ oes com elementos dados por: Var(Yi.j ′ ) = σε a covariˆ ancia entre observa¸ c˜ oes diferentes do mesmo laborat´ orio.j . os estimadores de 2 2 σε e σǫ s˜ ao obtidos por maximiza¸ c˜ ao num´ erica de tal fun¸ c˜ ao e o estimador do parˆ ametro de interesse e sua variˆ ancia s˜ ao ent˜ ao obtidos por: ˆ −1 1l)−1 1l′ V ˆ −1 y µ ˆ = (1l′ V ˆ −1 1l)−1 ˆ µ) = (1l′ V Var(ˆ (6) (7) ˆ ´ em que V e a matrix de variˆ ancias e covariˆ ancias estimada das observa¸ c˜ oes obtida a partir das 2 2 estimativas σ ˆε e σ ˆǫ .

df = fixDF$X) * + sqrt(varFix)) [1] 1. E definido ela express˜ ao a seguir e calculado como mostrado nas linhas de comando.lmer) Linear mixed model fit by REML Formula: MgO ~ 1 + (1 | Lab) Data: mgo1 AIC BIC logLik deviance REMLdev -59.659078 2.lme.52 -65.n−1 2 + σ2.025. 0. > vcomp <. O comando para se obter uma an´ alise equivalente ` a anterior ´ e mostrado a seguir.0389005 > with(mgo1. upper (Intercept) 1. σ2 ρ = 2 ε 2.3110907386 0. Os resultados s˜ ao apresentados de forma diferente.242955 1.0003355097 O coeficiente de correla¸ c˜ ao intraclasse reflete a rela¸ c˜ ao entre a variabilidade das observa¸ c˜ oes dentro ´ dos laborat´ orios em rela¸ c˜ ao a variabilidade total.numeric(VarCorr(mgo1.075202 attr(."label") [1] "Fixed effects:" Para uma observa¸ c˜ ao individual o intervalo ´ e dado por y ± t1−α/2. 1]) > vcomp [1] 0.as.09 .lme)[. mgo1) > summary(mgo1.43 32.075202 > intervals(mgo1. σε + σǫ > vcomp[1]/sum(vcomp) [1] 0.9989227 28.54 -66.1.lmer(MgO ~ 1 + (1 | Lab).242955 2.09 -55.Introdu¸ c˜ ao ao R > mgo1. σε ǫ 222 2 2 e as estimativas σ ˆε eσ ˆǫ podem obtidas da seguinte forma.4 Alternativas de c´ odigo O pacote lme4 reimplementa algumas funcionalidades do nlme onde o modelo ´ e definido indicando os termos aleat´ orios entre parˆ enteses na f´ ormula e eliminando o uso do argumento random. > require(lme4) > mgo1.lme. pr´ em os elementos s˜ ao equivalentes.975). which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est.lme$varFix (Intercept) (Intercept) 0. coefficients$fixed + qt(c(0.lmer <.

6591 0. Lab (Intercept) 0.lmer.56 -65. Lab (Intercept) 0.018317 Number of obs: 25. groups: Lab.27217957 0.412 223 A op¸ c˜ ao padr˜ ao ´ e o ajuste por m´ axima verossimilhan¸ ca restrita.31109071 0.Dev.Dev. groups: Lab. Error t value (Intercept) 1.ml) Linear mixed model fit by maximum likelihood Formula: MgO ~ 1 + (1 | Lab) Data: mgo1 AIC BIC logLik deviance REMLdev -60.91 33.56 -56.521708 Residual 0. REML = FALSE) > summary(mgo1. Error t value (Intercept) 1. 8 Fixed effects: Estimate Std. 8 Fixed effects: Estimate Std. mgo1.1972 8.lmer.557755 Residual 0.993 .00033552 0.lmer(MgO ~ 1 + (1 | Lab).04 Random effects: Groups Name Variance Std.1845 8.00033551 0. > mgo1.018317 Number of obs: 25.ml <.28 -66.Introdu¸ c˜ ao ao R Random effects: Groups Name Variance Std. Estimativas de m´ axima verossimilhan¸ ca podem ser obtidas usando o argumento REML=FALSE.6591 0.

Fazemos isto com os comando abaixo e o resultado est´ a no gr´ afico da esquerda da Figura 67. 29. A seguir vamos fazer um histograma dos dados obtidos e sobrepor a curva da distribui¸ c˜ ao te´ orica.7 224 0. Uma outra forma e mais eficaz forma de comparar distribui¸ c˜ oes .rnorm(1000) > hist(z.2 0.5 0. add = T) Note que. 1) ent˜ ao Z 2 ∼ χ2 (1) . Este uso de simula¸ c˜ oes ´ e apenas um ponto de partida pois estas s˜ ao especialmente u ´teis para explorar situa¸ c˜ oes onde resultados te´ oricos n˜ ao s˜ ao conhecidos ou n˜ ao podem ser obtidos. 0.4 0. Vamos come¸ car gerando uma amostra de 1000 n´ umeros da distribui¸ c˜ ao normal padr˜ ao. Vejamos como ilustrar este resultado.6 2 4 6 z^2 8 10 12 Figura 67: Histograma das amostra da e a curva te´ orica da distribui¸ c˜ ao normal padr˜ ao (esquerda) e 2 histograma dos valores ao quadrado com a curva te´ orica da distribui¸ c˜ ao χ(1) (direita). Na teoria de estat´ ıstica existem v´ arios resultados que podem ser ilustrados via simula¸ c˜ ao. prob = T. para fazer a compara¸ c˜ ao do histograma e da curva te´ orica ´ e necess´ ario que o histograma seja de frequˆ encias relativas e para isto usamos o argumento prob = T.1 Rela¸ c˜ oes entre a distribui¸ c˜ ao normal e a χ2 Resultado 1: Se Z ∼ N(0. > hist(z^2. o que ajuda na compreens˜ ao e visualiza¸ c˜ ao dos conceitos e resultados.Introdu¸ c˜ ao ao R 0. add = T) Nos gr´ aficos anteriores comparamos o histograma da distribui¸ c˜ ao emp´ ırica obtida por simula¸ c˜ ao com a curva te´ orica da distribui¸ c˜ ao. Veremos alguns exemplos a seguir. O gr´ afico da direita da Figura 67 mostra o histograma dos quadrados do valores da amostra e a curva da distribui¸ c˜ ao de χ2 (1) .0 −3 −2 −1 0 z 1 2 3 0. prob = T. > z <. 4.3 0. 29 Usando simula¸ c˜ ao para ilustrar resultados Podemos utilizar recursos computacionais e em particular simula¸ c˜ oes para inferir distribui¸ c˜ oes amostrais de quantidades de interesse. main = "") > curve(dnorm(x). -4. 10.1 0.1 0.2 Density 0. main = "") > curve(dchisq(x. Agora vamos estudar o comportamento do quadrado da vari´ avel. Inicialmente vamos definir o valor da semente de n´ umeros aleat´ orios para que os resultados possam ser reproduzidos.4 Density 0.3 0. df = 1).0 0 0.

Por fim usamos a fun¸ c˜ ao qqplot para obter o gr´ afico mostrado na Figura 68. obter os dados. z^2) > abline(0. fazer um gr´ afico dos dados ordenados contra os quantis da distribui¸ c˜ ao. O qq-plot ´ e um gr´ afico dos dados ordenados contra os quantis esperados de uma certa distribui¸ c˜ ao. Para ilustrar este resultado vamos gerar 10. para cada amostra. . . Zn ∼ N(0.Introdu¸ c˜ ao ao R 225 emp´ ıricas e te´ oricas ´ e comparar os quantis das distribui¸ c˜ oes e para isto utilizamos o qq-plot. df = 1) > qqplot(quantis. elevar os valores ao quadrado e. 3. Depois obtemos os quantis te´ oricos da distribu¸ c˜ ao χ2 usando a fun¸ c˜ ao qchisq em um conjunto de probabilidades geradas pela fun¸ c˜ ao ppoints. .qchisq(ppoints(length(z)). somar os quadrados dos trˆ es . Quanto mais pr´ oximo os pontos estiverem da bissetriz do primeiro quadrante mais pr´ oximos os dados observados est˜ ao da distribui¸ c˜ ao considerada. df=1) acima est´ a concatenando 3 comandos e calcula os quantis da χ2 a partir de uma sequˆ encia de valores de probabilidade gerada por ppoints. O n´ umero de elementos desta sequˆ encia deve igual ao n´ umero de dados e por isto usamos length(z). Primeiro vamos considerar como dados os quadrados da amostra da normal obtida acima. 12 0 0 2 4 z^2 6 8 10 2 4 6 quantis 8 10 12 Figura 68: Comparando dados e quantis da χ2 utilizando o qq-plot 2 2 Resultado 2: Se Z1 . obter os quantis da distribui¸ c˜ ao te´ orica. > quantis <.000 amostras de 3 elementos cada da distribui¸ cˆ ao normal padr˜ ao. Portanto para fazer o qqplot seguimos os passos: 1. adicionando neste gr´ afico a bissetriz do primeiro quadrante para facilitar a avalia¸ c˜ ao do ajuste. 1) ent˜ ao n 1 Zi ∼ χ(n) . 2. 1) Note que o comando qchisq(ppoints(length(z)). Z2 . Vamos ilustrar isto nos comandos abaixo.

sz2) abline(0. Neste exemplo vamos obter 1000 amostras de tamanho 20 de uma distribui¸ c˜ ao normal de m´ edia 100 e variˆ ancia 30. df = 3) Figura 69: Histograma da uma amostra da soma dos quadrados de trˆ es valores da normal padr˜ ao e a curva te´ orica da distribui¸ c˜ ao de χ2 (esquerda) e o respectivo qq-plot .15 0.seed(23) z <.seed(381) > y <. sd = sqrt(30)). main = "". 2)) curve(dchisq(x. o histograma dos valores obtidos com a curva da distribui¸ c˜ ao esperada e no da direita o qq-plot para a distribui¸ c˜ ao χ2 (3) .20 dchisq(x. 30) hist(sz2.matrix(rnorm(30000). df = 3). 0. > > > > > > > > set. (3) n´ umeros. mean) > mean(ybar) [1] 99. sendo que as diferen¸ cas s˜ ao devidas ao erro de simula¸ c˜ ao pro trabalharmos com amostras de . e que a distribui¸ c˜ ao das m´ edias amostrais seja normal. A seguir vamos calcular a m´ edia de cada amostra.678735 Pelo Resultado 3 acima esperamos que a m´ edia das m´ edias amostrais seja 100 e a variˆ ancia seja 1.10 0.9772 > var(ybar) [1] 1. nc = 3) sz2 <. Y2 .apply(y.00 0 5 10 15 x 20 25 30 0 0 5 sz2 10 15 20 5 10 15 20 qchisq(ppoints(length(sz2)). add = T) qqplot(qchisq(ppoints(length(sz2)).5 (= 30/20).Introdu¸ c˜ ao ao R 0. . .05 0. 1) 29. Na Figura 69 mostramos no gr´ afico ` a esquerda. σ 2 /n). 2. df = 3).2 Distribui¸ c˜ ao amostral da m´ edia de amostras da distribui¸ c˜ ao normal Resultado 3: Se Y1 .25 226 0. Yn ∼ N(µ. valores bem pr´ oximos dos obtidos acima. df = 3) 0. > set. sum) par(mfrow = c(1. 1.matrix(rnorm(20000.apply(z^2. . mean = 100. nc = 1000) > ybar <. Vamos organizar as amostras em uma matriz onde cada coluna corresponde a uma amostra. σ 2 ) ent˜ ao y ¯ ∼ N(µ. prob = T.

Avalie e compare atrav´ es de simula¸ c˜ oes a eficiˆ encia dos . sd = sqrt(30/20)) 0. DICA: Voce pode come¸ car pensando nos passos necess´ arios para ilustrar este resultado: escolha os parˆ ametros de uma distribui¸ c˜ ao normal. mean = 100. mean = 100. Normal Q−Q Plot dnorm(x. escolha o tamanho de amostra n e o n´ umero de simula¸ c˜ oes N . 95. 2)) curve(dnorm(x.00 0. Ilustrar usando simula¸ c˜ ao o resultado que afirma que para o estimador S 2 = da n−1 2 2 2 variˆ ancia de uma distribui¸ c˜ ao normal. 2.20 0. a mediana na amostra.10 0. 29. sd = sqrt(30/20)). prob = T. 105) hist(ybar. gere N amostras de tamanho n. > > > > > par(mfrow = c(1. a vari´ avel V = (n − 1)S /σ tem distribui¸ c˜ ao χn−1 . add = T) qqnorm(ybar) qqline(ybar) Note que para obter o qq-plot neste exemplo utilizamos as fun¸ c˜ oes qqnorm qqline j´ a dispon´ ıveis no R para fazer qq-plot para distribui¸ c˜ ao normal. 2σ 2 n−1 com os valores 3.3 Exerc´ ıcios ¯ 2 (Yi −Y ) 1. a m´ edia da amostra e T2 = md(x).30 96 98 100 x 102 104 96 −3 Sample Quantiles 98 100 102 −2 −1 0 1 Theoretical Quantiles 2 3 Figura 70: Histograma de uma amostra da distribui¸ c˜ ao amostral da m´ edia e a curva te´ orica da distribui¸ c˜ ao e o respectivo qq-plot. No exerc´ ıcio anterior compare os valores te´ oricos E [S 2 ] = σ 2 e V ar[S 2 ] = obtidos na simula¸ c˜ ao. Considere agora dois estimadores: T1 = ¯ (x).Introdu¸ c˜ ao ao R 227 tamanho finito. fa¸ ca um histograma com os valores V e compare com a curva de uma distribui¸ c˜ ao χ2 n−1 . para cada amostra calcule S 2 e V = (n − 1)S 2 /σ 2 . Considere uma distribui¸ c˜ ao normal de m´ edia µ = 0 e variˆ ancia unit´ aria e amostras de tamanho n = 20 desta distribui¸ c˜ ao. Para completar vamos obter o gr´ afico com o histograma das m´ edias das amostras e a distribui¸ c˜ ao te´ orica conforme Figura 70 e o respectivo qq-plot.

4. . 5. de uma distribui¸ c˜ ao N(µ. .a. o que ´ e necess´ ario para ilustrar este resultado. Yn a. . Seja Y1 . ¯ −µ Y √ ∼ tn−1 S/ n onde S ´ e o desvio padr˜ ao da amostra e n o tamanho da amostra. como no exerc´ ıcio anterior. σ 2 ). Ilustrar o resultado que justifica o teste-t para m´ edia de uma amostra. . Ilustrar o resultado que diz que o quociente de duas vari´ aveis independentes com distribui¸ c˜ ao 2 χ tem distribui¸ c˜ ao F .Introdu¸ c˜ ao ao R 228 ´ poss´ dois estimadores. . DICA: come¸ ce verificando passo a passo. E ıvel identificar o mais eficiente? Qual a eficiˆ encia relativa? Repita o procedimento com diferentes tamanhos de amostra e verifique o efeito do tamanho da amostra na eficiˆ encia relativa.

1:3 <. controle de fluxo.Introdu¸ c˜ ao ao R 229 30 30.333333 30. como no ”prompt”do R as chaves s˜ ao opcionais.1:3 y <. .y/x <.x + 4 <." para digita¸ c˜ ao em uma mesma linha.y/x 1 2 3 5 6 7 5.x + 4 z <. Em certas situa¸ c˜ oes.1 Agrupando comandos.y <. Nesta sess˜ ao vamos alguns formatos para facilitar/agilizar o uso de comandos.numeric(5) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Um grupo de comandos podem ser agrupado com "{ }" e separados por ". > a > a [1] > b [1] > x > x [1] > y [1] > z [1] <.b <.2 Execu¸ c˜ ao condicional Execu¸ c˜ oes condicionais s˜ ao controladas por fun¸ c˜ oes especiais que verificam se uma condi¸ c˜ ao ´ e satisfeita para permitir a execu¸ c˜ ao de um comando. o que implica que o u ´nico tipo de comando usado ´ e uma express˜ ao ou fun¸ c˜ ao que executa o processamento da requisi¸ c˜ ao e retorna algum resultado. ”loops” e a ”fam´ ılia” *apply Agrupando comandos OR´ e uma linguagem que interpreta express˜ oes. > { + + + + } > x > y > z > x [1] > y [1] > z [1] x <. execu¸ c˜ ao condicional.000000 2.000000 3.z <. As seguintes fun¸ c˜ oes e operadores podem ser usadas para controlar execu¸ c˜ ao condicional.10 10 10 <. ´ poss´ E ıvel atribuir os mesmos valores a v´ arios objetos de uma s´ o vez utilizando atribui¸ c˜ oes m´ ultiplas de valores.

&& e ifelse() switch() 230 A estrutura if() else ´ e comumente usada. em especial dentro de fun¸ c˜ oes.2 * x + } > z [1] 20 > rm(x. caso sigam-se mais de duas linhas deve-se novamente usar chaves. Quando aplicada diretamente na linha de comando.10 > y <. . entretando.10 > y <. Quando a express˜ ao que segue o if() e/ou else tem uma u ´nica linha ela pode ser escrita diretamente. y. ´ e uma pr´ atica recomendada colocar chaves marcando o in´ ıcio e fim dos comandos de execu¸ c˜ ao condicional.z + y + } + else { + z <. Inspecione os comandos a seguir que ilustram os diferentes usos. caso contr´ ario apenas a primeira linha ser´ a considerada para execu¸ c˜ ao condicional e todas as demais s˜ ao processadas normalmente. > x <.5 * x + } > z [1] 50 > rm(x.z .2 * x + w <.10 > y <. y. agora tamb´ em depois destes de forma que todos os comandos da execu¸ c˜ ao condicional fiquem contidos na chave.15 > { + if (x > 12) + z <.y + } + } > z [1] 20 .15 > { + if (x > 8) { + z <.2 * x + else z <.15 > { + if (x > 8) + z <. z) > x <.Introdu¸ c˜ ao ao R if() (opcionalmente) acompanhado de else &. z) > x <.5 * x + w <.

3 24.0 21.3 19. 30.3 26. podemos usar: > data(mtcars) > with(mtcars.9 27.4 17.4 18.7 18. z. Apenas para ilustra¸ c˜ ao considere o seguinte exemplo resolvido de trˆ es formas diferentes com cada uma destas fun¸ c˜ oes: Dado um valor de n gerar amostrar de tamanho 1.15 > { + if (x > 8) + z <.miles per gallon ) e o tipo de cˆ ambio.y + } > z [1] 20 > w [1] 5 > rm(x.2 10. manual ou autom´ atico (am). y. com 3 casas decimais.2 13.3 Controle de fluxo O controle de fluxo no R ´ e implementado pelas fun¸ c˜ oes for(). A escolha de qual usar vai depender do contexto e objetivo do c´ odigo e em geral n˜ ao existe solu¸ c˜ ao u ´nica. .Introdu¸ c˜ ao ao R > w [1] 35 > rm(x. z.4 Outro comando com funcionalidade similar ´ e agregate().4 33.8 32.z . while() e repeat(). am)) $ 0 [1] 21. y.2 17.8 19.8 16.5 * x + w <.5 [16] 15. Entre as vari´ aveis est˜ ao as que indicam o consumo (mpg .0 22.4 10.2 $ 1 [1] 21. sendo que uma mesma tarefa pode ser feita por uma ou outra. 2. .z + y + if (x <= 8) + z <. .0 21.4 22. .2 * x + w <. Para separar os dados da vari´ avel mpg para cada tipo de cˆ ambio.7 21.5 15.10 > y <.7 15. que possui v´ arias vari´ aveis relacionadas a caracter´ ısticas de ve´ ıculos. w) > x <.4 30. w) 231 Um comando u ´til para manipula¸ c˜ ao de dados ´ e o split() que permite separa dados por grupos.4 15. split(mpg. Por exemplo considere o conjunto de dados codemtcars. . Primeiro vamos implementar uma solu¸ c˜ ao usando for().8 19. n e para calcule a m´ edia de cada amostra.1 14.4 14.3 15.0 30.

i + 1 + } + return(medias) + } > set.007 -0.numeric(n) + for (i in 1:n) { + am <.392 1.round(mean(am).086 -0.137 0.392 1.138 NOTA: as solu¸ c˜ oes acima s˜ ao apenas ilustrativas e n˜ ao representam a forma mais eficiente de efetuar tal opera¸ c˜ ao o R.514 -0.function(n) { + medias <.rnorm(i) + medias[i] <.546 0. para este tipo de c´ alculo recomenda-se o uso de fun¸ c˜ oes do tipo *apply que veremos no restante desta sess˜ ao.1 + while (i <= n) { + am <.Introdu¸ c˜ ao ao R > f1 <.1 + repeat { + am <.seed(283) > f3(10) [1] 1.341 -0.224 232 0.function(n) { + medias <.round(mean(am). dig = 3) + i <.063 -0.function(n) { + medias <.seed(283) > f1(10) [1] 1.138 0.numeric(n) + i <.rnorm(i) + medias[i] <.138 0.086 -0.007 -0.seed(283) > f2(10) [1] 1. dig = 3) + } + return(medias) + } > set.224 Agora vamos executar a mesma tarefa com while() > f2 <.numeric(n) + i <.514 -0.086 -0.rnorm(i) + medias[i] <. dig = 3) + if (i == n) + break + i <.007 -0.341 -0.round(mean(am).341 -0.063 -0.224 E finalmente a mesma tarefa com repeat() > f3 <.546 0. Na verdade.137 0.546 0.i + 1 + } + return(medias) + } > set.137 0. .392 1.063 -0.514 -0.

rnorm(i) + res$medias[i] <.j + 1 . Nas fun¸ c˜ oes acima geravamos amostras com tamanhos sequˆ enciais com incremento de 1 elemento no tamanho da amostra.1 + for (i in ns) { + am <. Para ilustrar vamos mostrar como fazer isto modificando um pouco a primeira fun¸ c˜ ao. A fun¸ c˜ ao a seguir mostra como gerar amostras de tamanhos especificados pelo usu´ ario e para isto toma como argumento um vetor de tamanhos de amostra.4 Alguns coment´ arios adicionais Nas solu¸ c˜ oes acima as amostras foram usadas para calcular as m´ edias e depois descartadas.numeric(length(ns)) + j <.function(n) { + res <.2003886 -0.f1a(4) > names(ap) [1] "amostras" "medias" > ap $amostras $amostras[[1]] [1] 1.546 Vamos agora ver uma outra modifica¸ c˜ ao.6665789 $amostras[[4]] [1] 2. > f1a <. Suponha agora que queremos preservar e retornar tamb´ em os dados simulados.3257288 $amostras[[3]] [1] 0.Introdu¸ c˜ ao ao R 233 30.numeric(n) + for (i in 1:n) { + res$amostras[[i]] <.174572 1.007 -0.round(mean(res$amostras[[i]]). dig = 3) + } + return(res) + } > set.list() + res$medias <. dig = 3) + j <.rnorm(i) + medias[j] <.list() + res$amostras <.seed(283) > ap <.0009700 -0.4913491 -1.006870 $amostras[[2]] [1] 0.214059 1. > f5 <.392 1.round(mean(am).035963 1.function(ns) { + medias <.063 -0.761383 $medias [1] 1.

177 0.546 0.rnorm(500) + modA <. f6) 0. disp = mad(x)) + return(list(A = modA. 5.392 1. apply() para uso em matrizes. Seja o problema mencionado no in´ ıcio desta sess˜ ao de gerar amostras de tamanhos sequenciais e calcular a m´ edia para cada uma delas. trim = 0.seed(283) > sapply(1:10. Considere agora a modifica¸ c˜ ao mencionado anteriormente de calcular m´ edias de amostras com tamanho fornecidos pelo usu´ ario > > > > vec <.list(pos = mean(x.seed(231) > f5(c(2. No pr´ oximo exemplo consideramos uma fun¸ c˜ ao que simula dados e calcula medidas de posi¸ c˜ ao e dispers˜ ao associadas utilizando para cada uma delas duas medidas alternativas.063 -0.056 0. disp = sd(x)) + modB <. dig = 3)) [1] 1.seed(231) sapply(vec.007 -0.177 3.158 [1] -1.c(2. sapply(). dig = 3) set.422 -0. arrays ou data-frames tapply() para uso em vetores. 10)) [1] -1. 8. Inicialmente definimos a fun¸ c˜ ao: > proc <.158 30.422 -0.Introdu¸ c˜ ao ao R + } + return(medias) + } > set. sempre retornando uma lista sapply() para uso em vetores.224 0. simplificando a estrutura de dados do resultado se poss´ ıvel (para vetor ou matriz) mapply() para uso em vetores.. Uma alternativa aos c´ odigos apresentados seria: > set.5 Evitando ”loops” — a ”fam´ ılia” *apply OR´ e uma linguagem vetorial e ”loops”podem e devem ser substitu´ ıdos por outras formas de c´ alculo sempre que poss´ ıvel. B = modB)) + } .086 -0. function(x) round(mean(rnorm(x)).514 -0.056 234 0. 10) f6 <.) { + x <.list(pos = mean(x). vers˜ ao multivariada de sapply() lapply() para ser aplicado em listas 1. Usualmente usamos as fun¸ c˜ oes apply(). 5.1)..function(n) round(mean(rnorm(n)). 8. tapply() e lapply() para implementar c´ alculos de forma mais eficiente.138 2.function(.341 -0.137 0. Vejamos algums exemplos.

020589788 0.10] -0. m´ edia aritm´ etica e aparada: > > > > > > mediaA <. proc) 235 O resultado est´ a armazanado no objeto res. mediaA) mediaAB <. function(x) sapply(x.01782913 4.2] [.4] [.9] [.02210935 0.02781770 0.05680834 -0.7] 0.sapply(res.04085053 [.0958355 0.027987878 > mAB <.06122656 0.02781770 0. que neste caso ´ e uma lista.01706928 [. mean) A B 0.006781871 -0.01706928 -0.061226561 -0.04582751 0. function(x) x$A$pos) > mA [1] [6] 0. Agora vamos extrair desta lista as m´ edias aritm´ eticas e depois ambas.01017973 0. > set.1] 0.06210404 0.1023454 0.10] -0.1] [.05981805 0.05914628 0.7] 0.05981805 0.9] [.8] [.045827513 0.02029610 E para obter as m´ edias das m´ edias de cada medida: > apply(mAB.paste("modelo".02725767 0.lapply(1:10.function(x) x$A$pos mA <.095835502 0.078982050 0.020411456 -0.02798788 -0. sep = "") mAB [. Os comandos abaixo calculam m´ edia. variˆ ancia e coeficinte de varia¸ c˜ ao do consumo para cada tipo de cambio.1023454 0.06210404 0. x$B$pos) mAB <.02385153 0.02029610 modeloA modeloB modeloA modeloB Os comandos acima podem ser reescritos em vers˜ oes simplificadas: > mA <.027257675 -0.sapply(res.6] -0.5] [.3] [.020411456 -0.2] [.Introdu¸ c˜ ao ao R Agora vamos rodar a fun¸ c˜ ao 10 vezes.02058979 0.059818054 0.02058979 0.4] [.5] [.06122656 0.02210935 0.05914628 [.02725767 -0.04582751 0. 1.07898205 0.function(x) c(x$A$pos.05680834 -0.006781871 -0.01017973 0.8] [.6] [.04085053 [.3] [. para cada um dos n´ ıveis de uma segunda vari´ avel No primeiro exemplo consideramos novamente o conjunto de dados mtcars mencionado anteriormente. . LETTERS[1:2]. mediaAB) rownames(mAB) <.07898205 -0. function(y) y$pos)) > mAB A B A B [.0958355 0.006781871 -0. A fun¸ c˜ ao tapply() pode ser usada para calcular o resultado de uma opera¸ c˜ ao sobre dados.02798788 -0.sapply(res.010179733 0.seed(126) > res <.sapply(res.

29661 38.66788 56.26204 47.90432 60. each = 10) > x [1] [9] [17] [25] [33] [41] [49] > y 55. sd = 10) > y <.69673 56.02577 > with(mtcars. mean = 50.00313 39.36997 60.62899 43.55652 34. function(x) 100 * sd(x)/mean(x))) 0 1 22. mean) > gM A B C D E 52.85114 66. mean)) > gM A B C D E 49.90542 62.02277 50.with(xy. y.66166 58.Introdu¸ c˜ ao ao R > with(mtcars.35969 > gCV <. am.65681 25. am.14737 24.24760 45.06588 50. y.89312 43.77170 40.19106 17.17599 23.53166 57.99390 44. function(z) 100 * sd(z)/mean(z)) > gCV A B C D E 16.28053 Vejamos ainda um outro exemplo onde definimos 50 dados divididos em 5 grupos. sd = 10).61359 32.05864 65. + each = 10)) > gM <.93054 37.71391 65.96075 46. tapply(mpg. mean = 50.28745 42.78913 45.72861 [1] "A" "A" "A" "A" "A" "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "B" "B" "B" "B" [20] "B" "C" "C" "C" "C" "C" "C" "C" "C" "C" "C" "D" "D" "D" "D" "D" "D" "D" "D" [39] "D" "D" "E" "E" "E" "E" "E" "E" "E" "E" "E" "E" > gM <.77284 Para organizar os dados em um data-frame: > xy <.tapply(x.13208 45.01864 38.93003 236 51.73984 57.53931 37.37572 42.41214 48.frame(x = rnorm(50.45439 47.67566 39.tapply(x.73959 39.35892 25. > x <.46560 44.48886 44.92209 39. y = rep(LETTERS[1:5].data.60778 55.21829 49.25661 .07629 50.69930 38. tapply(mpg.78483 35.17779 46. am.03091 45. mean)) 0 1 17.80234 37.rep(LETTERS[1:5].rnorm(50. tapply(mpg.37572 62.01286 40. y.08328 20.37867 48.26776 60.06800 47.33724 49.06637 66.45986 65. tapply(x.29422 61.03602 34. var)) 0 1 14.91571 51.39231 > with(mtcars.

function(x) { + mx <. Considere gerarmos uma matrix 1000 × 300 representando 1000 amostras de tamanho 300.rowMeans(x)) user 0.Introdu¸ c˜ ao ao R > gCV <. function(z) 100 * sd(z)/mean(z))) > gCV A B C D E 16. Outras fun¸ c˜ oes simulares s˜ ao colMeans().67300 16. 6. nc = 300) > system.97707 17.round(rnorm(500. > x <.092 system elapsed 0.000 0. m = 70.f(x) + }) user 0. > li <.li + rpois(li.097 > system. sd = 10)) > ls <.002 A fun¸ c˜ ao rowMeans() ´ e substancialmente mais eficiente (menos tempo de execu¸ c˜ ao.matrix(rnorm(1000 * 300). ]) + mx + } + mx <. y.time() que compara os tempos de execu¸ c˜ ao. tapply(x.time(mx <. O que desejamos ´ e calcular a m´ edia de cada uma das amostras Os c´ odigos a seguir mostras trˆ es formas alternativas de fazer isto.004 0.004 system elapsed 0. Considere o seguinte problema: Sejam li e ls vetores com os limites superiores e inferiores definindo intervalos. lam = 5) O que queremos montar um vetor com os valores u ´nicos que definem estes intervalos. para cada elemento do vetor de valores u ´nicos.35279 18.004 0. rowSums() e colSums(). 1.03077 237 5. . e testar a pertinˆ encia de cada elemento a cada um dos intervalos.mean(x[i. a pertinˆ encia a cada intervalo. Ao final teremos uma matrix incidando.with(xy.084 > system.time({ + f <.numeric(1000) + for (i in 1:1000) mx[i] <.time(mx <.080 system elapsed 0. Encapsulamos os comandos com a fun¸ c˜ ao system.apply(x. Inicialmente vamos fazer um c´ odigo usando ”loops”guardando os resultados no objeto B. Inicialmente vamos simular estes valores.13100 11. mean)) user 0.

ls)) + m <.1)) { + all[j + 1] <. guardando os resultados no objeto A.608 system elapsed 0. > system.024 system elapsed 0.aij + } + }) user 2.function(x. + 1.time({ .033 > identical(A. m) + for (j in 1:(m . > li <. interv1.sort(unique(c(li.length(li) + aij <. m = 70. Queremos montar o vetor com os valores u ´nicos que definem estes intervalos como no caso anterior. sup) ifelse(x >= inf & x <= sup.rep(min(aux).626 238 Agora. Da mesma forma que no caso anterior implementamos com um ”loop”e depois usando a estrutura vetorial da linguagem.time({ + aux <. j] <. 0) + } + B <. 0) + A <. ls))) + interv1 <. Ao final usamos identical() para testar se os resultados num´ ericos s˜ ao exatamente os mesmos.min(aux[aux > all[j]]) + } + n <. inf = li. O resultado final ´ e uma matrix indicando para cada intervalo obtido desta forma a sua pertinˆ encia a cada um dos intervalos originais. nrow = n.016 2. usando a estrutura vetorial da linguagem R vamos reimplementar este c´ odigo de maneira mais eficiente e adequada para a linguagem.Introdu¸ c˜ ao ao R > system. usando sapply(). + 1. sup = ls) + }) user 0.time({ + all <.sort(c(li.round(rnorm(500. sd = 10)) > ls <.008 0.matrix(0.li + rpois(li.length(table(aux)) + all <. lam = 5) > system. e testando a igualdade dos resultados com identical(). Note a diferen¸ ca nos tempos de execu¸ c˜ ao.ifelse(all[j] >= li[i] & all[j] <= ls[i]. Considere agora uma extens˜ ao do problema anterior. B) [1] TRUE 7. e depois usar este vetor montar intervalos com pares de elementos consecutivos deste vetor e testar se cada um destes intervalos est´ a contido em cada um dos intervalos originais.sapply(all. ncol = m) + for (i in 1:n) { + for (j in 1:m) { + aij[i. inf.

3 Q1. 1. 1. inf. por exemplo: Q1 . sup = ls) + }) user 0. ls)) m <.ifelse(all[j] >= li[i] & all[j + 1] <= ls[i]. interv1.Masculino() 4.2 Q1.matrix(0. m) for (j in 1:(m .()Volei 3.length(li) aij <. inf = li.sort(unique(c(li.()Atletismo 2.1) for (i in 1:n) { for (j in 1:m . ls))) + all12 <. j] <.Feminino() Ent~ ao teria os dados dessa forma: Q1. adapdato de mensagem enviada por Silvano C Costa Tenho uma pergunta onde pode haver mais de uma resposta. nrow = n.992 > system. 1.()Futebol 2.012 3.time({ + all <.010 239 user 2.aij } system elapsed 0.sort(c(li.rep(min(aux).028 system elapsed 0.030 > identical(A.min(aux[aux > all[j]]) } n <. B) [1] TRUE Uso da fam´ ılia *apply – outros exemplos Os exemplos a seguir foram retirados de mensagens enviada ` a lista R_STAT.Qual Esporte voc^ e pratica: 1. sup) ifelse(x[1] >= inf & x[2] <= + sup.4 Q2 .000 0. 0) } B <.() Nata¸ c~ ao Q2 .function(x. 0) + A <.1) { aij[i. 1.1 Q1.Sexo: 1.cbind(all[-length(all)]. all[-1]) + interv1 <.Introdu¸ c˜ ao ao R + + + + + + + + + + + + + + + + }) aux <.apply(all12.length(table(aux)) all <.1)) { all[j + 1] <. ncol = m .

como n˜ ao temos o question´ ario aqui vamos primeiro simular dados deste tipo como se tiv´ essemos 75 question´ arios. > + > > > esportes <. rep = TRUE).frame(matrix(sample(c(0.as. "Atletismo") esportes$S <. + ]. S)[2. "F"). S)) S Futebol F M 0 18 19 1 19 19 Desta forma. ].c("Futebol". 1). table(Futebol.] [3.Natacao 2 => Mulher praticante de Volei e Nata¸ c~ ao 2 => Mulher praticante de Atletismo 240 Gostaria de criar uma tabela cruzada entre essas vari´ aveis: M F Futebol 21 10 Nata¸ c~ ao 13 20 Volei 5 2 Atletismo 10 10 Para mostrar como obter a solu¸ c˜ ao. 75. S)[2. 300. > with(esportes. rbind(table(Futebol. ].] [4. separadamente utilizando table() e verificando a segunda linha da tablea a seguir. S)[2. "Nata¸ c~ ao".] [2. "Volei". nc = 4)) names(esportes) <. rep = TRUE) dim(esportes) 5 [1] 75 > head(esportes) 1 2 3 4 5 6 Futebol Nata¸ c~ ao Volei Atletismo S 1 1 0 0 F 0 0 1 0 F 1 1 1 0 M 1 0 1 0 F 1 1 1 0 F 0 1 1 1 F Solu¸ c˜ ao 1: Para cada esporte podemos contar os praticantes de cada sexo em cada esporte. table(Volei. podemos obter a tabela desejada combinando os resultados de tabelas para cada esporte. > with(esportes.Introdu¸ c˜ ao ao R 1 0 0 0 1 0 1 1 0 0 0 1 1 => Homem Praticante de Futebol. table(Nata¸ c~ ao.sample(c("M".data. table(Atletismo.] F 19 19 24 20 M 19 22 20 21 . S)[2. ])) [1.

3. 3. Tenho duas amostras. 7. 3.5. 5. p-value = 0.3. 5.090909 4.3. df = 14.2.8889 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -1. sum)) Futebol Nata¸ c~ ao Volei Atletismo F 19 19 24 20 M 19 22 20 21 2.ab <.c(5.2. 5.000000 Agora obtemos as 1000 reamostras deste vetor cada uma com 11 × 2 = 22 valores utilizando sample().1.5.Introdu¸ c˜ ao ao R 241 Solu¸ c˜ ao 2: alternativamente. 4. esportes$S.3. 4. function(x) tapply(x. e <.2) Depois eu queria ver aplicar o teste t(nas amostras) e ver como se comportam estes p-valores.6. 6. 3.7.5.6.5. 5. 3. 3. 5.4. Adaptado de mensagem enviada por Andr´ e Queria fazer uma amostragem e tirar as informa¸ c~ oes. 4.5. 2) > reamostras <. 5.5. 5) tt. rep = T).4. b) tt.ab Welch Two Sample t-test data: a and b t = 0. podemos usar sapply() para tomar cada esporte e. 4. 2) b <. 1:4]. Inicialmente vamos entrar com os dados e obter o teste-t.5.c(5.4.3.2) b <-c(5.test(a. + 6. 1. Aplico o teste t e tenho um P-valor.278239 1. + 2. 3. 4. 3.4. a <-c(1.1423. usar tapply() para somar os praticantes (1) de cada sexo. 4. 4. 4. > e <. 6.5.7.3. 7.4. 5. 3.4.5.3. como os dados s˜ ao codificados em 0/1. 3.3. dim = c(length(e)/2. As reamostras ser˜ ao arranjadas num array de dimens˜ ao 11 × 2 × 1000. 5. 4. 4. > > > > a <. 1000)) .3. 2. 5.14. 6.4. length(e) * 1000.4.460057 sample estimates: mean of x mean of y 4.t.c(5.6. 3.3. 2.4.5) Eu gostaria de juntar estes dois vetores num mesmo vetor e fazer 1000 reamostragens neste vetor de tamanho do vetor a e com reposi¸ c~ ao. > sapply(esportes[.6.array(sample(e.4.c(1.

apply(reamostras. como no exemplo a seguir. extra´ ımos os p-valores.886.sapply(TT. 1]. > TT[[1]] Welch Two Sample t-test data: x[. etc).name" "estimate" > pvals <. + var. comparados aos valores obtidos ` esquerda ´ na reamostragem.apply(reamostras.value" "parameter" "p.08001 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -1.1072869 sample estimates: mean of x mean of y 4.test(x[.value) Os gr´ aficos no Figura 2 mostram valores obtidos an amostra. x[. Para fazer os testes-t nas 1000 reamostras utilizamos apply() que vai gerar uma lista de 100 elementos com resultados dos testes. Para alterar algum argumento basta acrescentar o argumento desejados na chamada de apply(). p-value = 0. function(x) t.test(x[. > TT <.test() (bilateral. main = "Diferen¸ ca de m´ edias") 2) x$p. > > > > hist(sapply(TT. col x$est). 2]). A e mostrado a estimativa da diferen¸ ca de m´ edias.int" "data.7436506 0. col = hist(sapply(TT.value" "alternative" "method" "conf.ab$est. df = 19. 3. x[.val). function(x) t. > TT <. e ` a direita os p-valores. variˆ ancias diferentes.818182 Finalmente pode-se extrair uma quantidade de interesse dos resultados.equal = TRUE) . function(x) x$p.Introdu¸ c˜ ao ao R 242 Portanto cada elemento da terceira dimens˜ ao corresponde a uma reamostra.000000 4. n˜ ao pareado.8448.val. 3. 2])) Para ver o resultado do teste em uma das amostras selecionamos um elemento da lista. main = "P-valor") = 2) OBS: note que est˜ ao sendo usadas as op¸ c˜ oees default do teste-t para compara¸ c˜ ao de duas amostras dadas em t. function(x) abline(v = tt. function(x) abline(v = tt. > names(TT[[1]]) [1] "statistic" [6] "null.ab$p. 2] t = -1. 1]. 1] and x[.

5 0 0.4 0. 31 Ajuste de modelos n˜ ao lineares Modelos n˜ ao lineares permitem o ajuste de rela¸ c˜ oes mais complexas que rela¸ c˜ oes lineares ou lineariz´ aveis entre quantidades de interesse.5 3. f´ ısico. o ajuste com nls() pode incorporar procedimentos que tendem a aprimorar o comportamento dos m´ etodos num´ ericos tais como o fornecimento de fun¸ c˜ oes que informem sobre a derivada do modelo sendo ajustado. Tal procedimento. mas apenas fornecer os elementos iniciais para ilustrar a possibilidade de se obter tais resultados usando o R. 31.1 Exemplo: o modelo de van Genutchen Este exemplo mostra o ajuste de um modelo n˜ ao linear. function(x) x$p.0 3. etc) inerente ao processo em quest˜ ao. Em muitos casos tais modelos tem a sua forma funcional espec´ ıfica para o prolema sendo tratado. Entretanto. Diferentemente dos modelos lineares. inicializa¸ c˜ ao autom´ atica com valores iniciais obtidos automaticamente. o ajuste de modelos n˜ ao lineares n˜ ao permite que as express˜ oes dos estimadores dos parˆ ametros desconhecidos do modelo sejam obtidas analiticamente sendo portanto necess´ ario o uso de m´ etodos n´ umericos. function(x) x$est) 5. embora simples.val) 1. Ao final mostramos como efetuar v´ arios ajustes de uma s´ o vez de forma eficiente e extrair alguns resultados de particular .0 20 Frequency 40 60 80 Frequency 200 300 100 0.Introdu¸ c˜ ao ao R 500 120 243 Diferença de médias P−valor 400 100 0 2.0 sapply(TT. cujo ´ e um acrˆ onimo para non-linear least squares.6 0. declarando apenas a fun¸ c˜ ao e valores iniciais.8 sapply(TT.2 0. Nesta se¸ c˜ ao vamos ilustrar com dados da ´ area de f´ ısica de solos o ajuste de modelos n˜ ao lineares utilizando a fun¸ c˜ ao nls(). tipo e controle dos algor´ ıtmos dispon´ ıveis. Primeiro discutimos como efetuar um u ´nico ajuste para um conjunto de dados e algumas sugest˜ oes para examinar resultados. lineariza¸ c˜ ao parcial do modelo.5 4. Inicialmente mostramos um ajuste feito de forma ”ingˆ enua”(na¨ ıve ).0 Figura 71: Valores da diferen¸ ca de m´ edias (esquerda) e p-valor(direita) da amostra (linhas verticais) comparados aos histogramas dos valores obtinos nas reamostras .0 4. Esta fun¸ c˜ ao ´ e bastante flex´ ıvel e incorpora diversas op¸ c˜ oes para fazer ajustes incluindo caracter´ ısticas do modelo.5 5. relacionada a algum mecanismo (biol´ ogico. O objetivo destas notas n˜ ao ´ e o de investigar todas estas opc ¸˜ oes. pode se ineficiente para o uso de m´ etodos num´ ericos. al´ em da escolha e calibragem dos algor´ ıtmos.

a equa¸ c˜ ao de van Genutchen ´ e um dos modelos matem´ aticos utilizados para descrever a curva caracter´ ıstica de ´ agua no solo que caracteriza a armazenagem de ´ agua atrav´ es de rela¸ c˜ ao entre a umidade e o potencial matricial.1969 Mean : 2139.0 Max.0 3rd Qu.leg. ´ O exemplo mostrado aqui foi motivado por um quest˜ ao levantada pelo Prof.2681 6 30 64 0.br/~paulojus/aulasR/dados/cra. O objetivo ´ e determinar da curva de reten¸ c˜ ao de ´ agua no solo estimada segundo modelo de van Genutchen para cada uma das amostras. am = as.2828 4 30 45 0.table("http://www.2436 Max.ufpr. θ) e (θS . Para cada tens˜ ao aplicada a amostra perde parte do conte´ udo de ´ agua e mede-se a umidade residual na amostra. > cra <. :0.: 58.:0. Informalmente falando. obtem-se a curva de reten¸ c˜ ao de ´ agua no solo que descreve a varia¸ c˜ ao da umidade em fun¸ c˜ ao dos valores de tens˜ ao.2628 > cra <. vamos isolar os dados referentes a uma u ´nica amostra.5 Median :0. :0. Este conjunto de dados refere-se a apenas duas amostras que s˜ ao um subconjunto dos de dados original que cont´ em diversas amostras. Portanto s˜ ao obtidos dados para os pares de pontos (Ψm . Vemos a seguir que dispomos de 15 pontos medidos da curva de reten¸ c˜ ao da primeira amostra e 13 para a segunda. : 10.1199 Median : 107.csv". . Alvaro Pires da Silva do Departamento de Ciˆ encia do Solo da esalq/usp e refere-se ao ajuste da equa¸ c˜ ao de van Genutchen para a curva de reten¸ c˜ ao de ´ agua no solo (ou curva de reten¸ c˜ ao de a ´gua no solo ). O parˆ ametros desconhecidos do modelo modelo s˜ ao θS e θR que correpondem ` a umidade volum´ etrica na satura¸ c˜ ao e residual.3071 2 30 19 0. No objeto cra a primeira coluna (am) indica o n´ umero da amostra. θR .0636 41:13 1st Qu.transform(cra.2753 5 30 63 0.Introdu¸ c˜ ao ao R 244 interesse. A partir dos pares pontos com valores medidos de tens˜ ao e umidade. Alvaro que podem ser obtidos usando o comando mostrado a seguir. sep = ". :26300. θ ´ e a umidade volum´ etrica medida na amostra.0 Min.3071 Inicialmente vamos nos concentrar na discuss˜ ao do ajuste do modelo e para isto.:0.2931 3 30 30 0. Para determina¸ c˜ ao da curva caracter´ ıstica de ´ agua o procedimento usual ´ e o de se tomar uma amostra que ´ e submetida a diferentes tens˜ oes em condi¸ c˜ oes de laborat´ orio. O modelo de van Genutchen ´ e dado pela seguinte equa¸ c˜ ao: θ = θR + (θS − θR ) 1 1 + (αΨm )n 1−(1/n) (8) em que Ψm o potencial matricial aplicado ` a amostra. n) s˜ ao parˆ ametros desconhecidos a serem estimados e que caracterizam a curva de reten¸ c˜ ao.8 Mean :0. ´ Para exemplificar o ajuste utilizamos dados cedidos pelo Prof. α. respectivamente.factor(am)) > summary(cra) am pot u 30:15 Min. α e n que definem o formato da curva.1879 3rd Qu.") > head(cra) am pot u 1 30 10 0.: 1550. a segunda (pot) o potencial aplicado e a terceira (u) a umidade do solo.5 1st Qu. + head = T.read.

5 2.3071 2 30 19 0. e as demais quantidades (θR .5 4.00 0 5000 10000 Ψm 20000 0. plot(u ~ pot.5 > cra30 <.2828 4 30 45 0. θR .30 0.10 θ 0. + ylab = expression(theta).20 0.2522 8 30 89 0.subset(cra. ylab = expression(theta).0 0. + ylim = c(0.1013 15 30 26300 0.2404 9 30 105 0.20 θ 0. 0. xlab = expression(log[10](Psi[m])). ylim = c(0. > with(cra30.Introdu¸ c˜ ao ao R 245 0.2681 6 30 64 0.1655 12 30 3000 0.1468 13 30 4100 0. xlab = expression(Psi[m]).1 visualizamos os dados de umidade versus press˜ ao aplicada na amostra. α) s˜ ao parˆ ametros (coeficientes) a serem estimados a partir do . > with(cra30. os dados nas colunas u e pot do objeto de dados correspondem ` a θ e ψm na equa¸ c˜ ao 8.2931 3 30 30 0.30 1.2753 5 30 63 0.2120 11 30 490 0.35))) Uma melhor visualiza¸ c˜ ao ´ e obtida utilizando-se no eixo horizontal o logar´ ıtmo (base 10) dos valores das press˜ oes aplicadas conforme mostrado no gr´ afico ` a direita. 0.10 0.0730 No gr´ afico ` a esquerda da Figura 31.2272 10 30 138 0.0 2. n.0 log10(Ψm) 3.00 1.35))) Portanto.0 4. plot(u ~ log10(pot).5 3.1205 14 30 5000 0.2628 7 30 75 0. am == 30) > cra30 am pot u 1 30 10 0.

O comando a seguir ilustra como fazer tal procedimento a partir do gr´ afico dos dados originais mostrado anteriormente definindo uma express˜ ao para curve() com o modelo de van Genutchen.2))))) > S [1] 0.list(coef(fit30)).026202 1. + data = cra30.105207 11. uma lista com nomes dos elementos.1))^(1/n . pontanto considerando-se m´ aximos e m´ ınimos assint´ oticos para a fun¸ c˜ ao. A fun¸ c˜ ao possui trˆ es argumentos obrigat´ orios: (i) o primeiro ´ e utilizado para declarar a express˜ ao do modelo a ser ajustado.05)/((1 + (0.1/1.35 . isto ´ e. + n = 1.01104 on 11 degrees of freedom Number of iterations to convergence: 8 Achieved convergence tolerance: 6.ur)/((1 + (alpha * pot)^n)^(1 . tra¸ cando-se curvas sobre o gr´ afico dos dados. Quanto maior o valor de S . > curve(0. H´ a argumentos adicionais para controlar o comportamento algor´ ıtimo. alpha = 0. (ii) o segundo informa o objeto contendo o conjunto de dados cujas nomes das colunas relevantes devem ter o mesmo nome utilizado na declara¸ c˜ ao do modelo e.211816 0. Os valores foram escolhidos ap´ os uma s´ eria de tentativas. Error t value us 0. from = 0.017744 18.3)). e estes nomes tamb´ em devem coincidir com os utilizados na declara¸ c˜ ao do modelo. + to = 27000.35.04097127 .1/n)). visual por tentativa e erro. ur = 0.1 * x)^1.10 alpha 0. Os valores iniciais para θS e θR foram escolhidos inspecionando-se o gr´ afico e considerando a interpreta¸ c˜ ao destes como valores de satura¸ c˜ ao e residual de umidade.038780 0. especialmente em exemplos como este com um pequeno n´ umero de dados. A escolha de valores iniciais para os demais parˆ ametros ´ e menos ´ obvia. start = list(us = 0.324121 0. Este ´ e um modelo n˜ ao linear pode ser ajustado utilizando o m´ etodo de m´ ınimos quadrados conforme implementado em nls().27 ur 0.Introdu¸ c˜ ao ao R 246 ajuste do modelo te´ orico aos dados. melhor a sua qualidade f´ ısica. > fit30 = nls(u ~ ur + (us .ur)/((1 + (alpha * pot)^n)^(1 .05 + (0.557e-06 A partir do modelo ajustado pode-se calcular quantidades de interesse. tal como crit´ erio de convergˆ encia.1. Neste particular exemplo calculamos uma quantidade de interesse pr´ atico denotada por S que ´ e um indicador da qualidade f´ ısica do solo.071084 0. A documenta¸ c˜ ao de nls() fornece mais detalhes.007082 0.3)^(1 . (iii) valores iniciais para os parˆ ametros a serem ajustados que devem ser passados por uma named list. > S = with(as.0. A escolha dos valores iniciais ´ e crucial e pode influenciar nos resultados do ajuste utilizando m´ etodos num´ ericos.3)) > summary(fit30) Formula: u ~ ur + (us . lty = 2) Definidos os valores iniciais prossegue-se com o ajuste do modelo conforme os comandos a seguir.ur) * (((2 * n + 1)/(n .1/n)) Parameters: Estimate Std. Uma das formas de se obter tais valores ´ e efetuar um ajuste aproximado. add = T. abs((-n * (us .52 Residual standard error: 0.48 n 1.05.

5. c("valores iniciais". predict(fit30. na escala original.Introdu¸ c˜ ao ao R 247 Os valores preditos s˜ ao obtidos de forma direta com fitted(fit30) ou predict(fit30). pch = c(1.2 Ajustando modelo a v´ arios conjuntos de dados Vamos considerar uma situa¸ c˜ ao comum na pr´ atica onde em geral tem-se v´ arias amostras para as quais ´ deseja-se fazer ajuste individuais como ilustrado anteriormente E portanto conveniente que isto seja .10^seq(1. 0. A curva com o modelo ajustado a serem desenhadas sobre o gr´ afico dos dados s˜ ao obtidas com comandos a seguir. col = "red")) legend(3.3. Neste exemplo em particilar pode-se considerar fazer o ajuste na escala de log10 (Ψm ) j´ a que os resultados s˜ ao tipicamente visualizados desta forma. Por outro lado. g/g)))) with(cra30. Neste exemplo mostramos o qq-plot dos res´ ıduos e o gr´ afico dos res´ ıduos versus valores preditos. u. > + > > + > + > + > + > > > > > with(cra30. lty = 2:1) Coment´ arios: ´ e importante lembrar que certos modelos n˜ ao lineares s˜ ao parcialmente lineariz´ aveis e neste caso o ajuste pode ser mais preciso e numericamente est´ avel se beneficiando disto para reduzir a dimens˜ ao do problema de otimiza¸ c˜ ao num´ erica. Gr´ aficos de res´ ıduos semelhantes aos obtidos para avaliar ajuste de modelos lineares podem e devem tamb´ em ser investivados em uma an´ alise. c("observado". plot(log10(pot). points(log10(pot). pch = c(1.1 mostra os pontos ajustados no gr´ afico da esquerda.1 mostra ` a direita o modelo definido pelos valores iniciais e o modelo ajustado. > pp <. "ajustado"). 0. fitted(fit30). c("observado". col = "navy") Para obter uma melhor visualiza¸ c˜ ao do modelo ajustado pode-se obter valores na curva ajustada n˜ ao apenas nos pontos observados. xlab = expression(log[10](Psi)). Para visualiza¸ c˜ ao e avalia¸ c˜ ao do modelo ajustado podemos fazer diferentes gr´ aficos. col = "red")) legend(3. A Figura 31. plot(log10(pot). o modelo ajustado na escala original Note que neste exemplo em geral prefere-se a visualiza¸ c˜ ao na escala logar´ ıtmica do potencial conforme gr´ afico da direita. 4. ylab = expression(theta(Umidade. e a uni˜ ao destes pontos no gr´ afico da direita. l = 201) > lines(pp. 3). xlab = expression(log[10](Psi[m])). resid(fit30)) abline(h = 0. "ajustado"). 31. Finalmente cuidados usuais com ajuste de modelos utilizando m´ etodos iterativos devem ser observados. points(log10(pot). ylab = expression(theta(Umidade. "valores ajustados"). pch = 3. type = "b". A Figura 31. tais como sensibilidade a valores iniciais e verifica¸ c˜ ao de convergˆ encia do algor´ ıtmo num´ erico. mas em uma sequˆ encia de valores ao longo do gr´ afico como ilustrado a seguir. u.resid(fit30) qqnorm(rs) qqline(rs) plot(fitted(fit30). Isto reduz a escala dos valores das vari´ aveis e tamb´ em torna o problema mais est´ avel numericamente. em geral reparametriza¸ c˜ oes podem mudar a interpreta¸ c˜ ao de alguns parˆ ametros de modelo. 2)) rs <. pch = "+". col = c(1. list(pot = pp))) > legend("topright". 2)) with(cra30. 3). col = c(1. g/g)))) with(cra30. fitted(fit30).3. Para isto ´ e necess´ ario redefinir a especicifa¸ c˜ ao do modelo e utilizar o argumento method="plinear" em nls().

01 Sample Quantiles 0.00 resid(fit30) 0.5 4.02 −1 0 Theoretical Quantiles 1 −0.0 2.0 1.Introdu¸ c˜ ao ao R 248 0.01 −0.01 0.00 0.15 0.10 ++ + 1. g g) 0.20 0.5 2.25 0.5 Normal Q−Q Plot 0.20 0.15 0.5 3.15 0.02 0.30 0.25 θ(Umidade.01 0.5 4.30 + + + + observado ajustado + + + + + observado ajustado θ(Umidade.0 4.0 log10(Ψm) 3.10 0.0 4.5 3.0 1.20 fitted(fit30) 0.5 2. g g) 0.0 log10(Ψ) 3.5 1.30 .10 0.25 + + 0.0 2.

ini = list(us = 0.0 0.ur)/(1 + (alpha * pot)^n)^(1 .by(cra. + n = 1.20 0. sem a necesidade e repetir os passos acima a cada ajuste.5 2. sapply() ou similares para extrair resultados de interesse.20 θ 0.Introdu¸ c˜ ao ao R 249 0. A seguir utilizamos a fun¸ c˜ ao by() para proceder o ajuste para cada amostra individualmente.function(x. um para cada amostra. enquanto que a segunda ”simplifica”o objeto resultante se poss´ ıvel.30 0. alpha = 0. o objeto resultante allfits ´ e uma lista de listas e portanto podemos usar fun¸ c˜ oes como lapply().vG) > names(allfits) [1] "30" "41" Neste caso. Ser˜ ao mostradas duas solu¸ c˜ oes. sendo que cada um deles cont´ em o ajuste do modelo n˜ ao linear. Neste exemplo vamos considerar duas amostras.0 log10(Ψm) 3.5 4.0 4.02.1/n) .05.5 3. data = x. Esta fun¸ c˜ ao retorna uma lista com dois elementos. start = ini) > allfits <. > fit. ur = 0. Come¸ camos definindo uma fun¸ c˜ ao que cont´ em uma chamada ` a nls() como acima.10 0.00 1.vG <. quando extraindo coeficientes a fun¸ c˜ ao retorna uma matrix 4 × 2. fit.30 valores iniciais valores ajustados 1. summary) $ 30 Formula: u ~ ur + (us . Na pr´ oxima sess˜ ao ser´ a mostrado como obter os todos os ajustes com uma u ´nica chamada ` a nls(). Neste fun¸ c˜ ao estamos incluindo um argumento ini para passar valores iniciais que caso n˜ ao fornecido assumir´ a os valores indicados. j´ a que para cada uma das duas amostras s˜ ao extraidos quatro coeficientes.00 0 5000 10000 Ψm 20000 0. mas o procedimento demostrado a seguir ´ e geral e funcionar´ a igualmente para um maior n´ umero de amostras.0 2.3. cra$am. Por exemplo. Ilustramos ambos casos porque a forma mais adequada vai depender de situa¸ c˜ ao em quest˜ ao e dos objetivos da an´ alise. > lapply(allfits. Note que a primeira retorna sempre uma lista.ur)/(1 + (alpha * pot)^n)^(1 + 1/n).5 feito de forma autom´ atica.10 θ 0. Nesta sess˜ ao o ajuste ´ e feito para cada amostra individualmente automatizando v´ arias chamadas ` a fun¸ c˜ ao nls() atrav´ es de lapply() emulando o comportamento das v´ arias chamadas em um loop.3)) nlsfit = nls(u ~ ur + (us .

038780 0.171615 -0.026202 1.038779904 0.03592828 > sapply(allfits.009 Residual standard error: 0.779e-06 $ 41 Formula: u ~ ur + (us .48 n 1.324120330 0.12240208 alpha 0.113320 0. Passamos o objeto (lista) contendo todos os ajustes e a fun¸ c˜ ao que calcula S para sapply() que neste caso vai simplificar o resultado para formato de um vetor.211815991 $ 41 us ur alpha 0. Para isto simplesmente definimos uma fun¸ c˜ ao que recebe o modelo ajustado e usa os coeficiente para calcular o valor de S .006207 on 9 degrees of freedom Number of iterations to convergence: 7 Achieved convergence tolerance: 9.01104 on 11 degrees of freedom Number of iterations to convergence: 6 Achieved convergence tolerance: 8.03592828 n 1.022324 1. Vamos ent˜ ao aqui obter este ´ ındice para cada uma das amostra.24314784 -0.038779904 1.007082128 0. Error t value us 0.009446 25.ur)/(1 + (alpha * pot)^n)^(1 .007082 0.12240208 0.Introdu¸ c˜ ao ao R 250 Parameters: Estimate Std.609 n 1. Error t value us 0.741 ur -0.177e-06 > lapply(allfits.713 alpha 0.27 ur 0.24314784 ur 0.079473 14.10 alpha 0.017744 18.122402 0.211815991 1.1/n) Parameters: Estimate Std.007082128 -0. . coef) $ 30 us ur alpha n 0.11332039 n 1.324120330 0.52 Residual standard error: 0.105207 11. j´ a que a fun¸ c˜ ao calculaS retorna um escalar para cada amostra. coef) 30 41 us 0.071084 0.035928 0.324120 0.211816 0.243148 0.11332039 Quando ajustamos o modelo apenas para uma das amostras mostramos como calcular o ´ ındice S de qualidade f´ ısica do solo a partir dos coeficientes estimados.

Armazenamos os valores preditos para cada amostra no objeto allpred e optamos aqui por mostrar os ajustes para as duas amostras no mesmo gr´ afico.3 0. calculaS) > Sall 30 41 0.30 30 30 30 30 30 30 30 30 30 30 41 41 41 41 30 30 41 30 41 41 41 30 41 30 41 1. max(log(pot))) pp <.5 2. para encerrar este exemplo. Come¸ camos definindo uma sequˆ encia de valores para os quais queremos visualizar os ajustes. l = 501) allpred <. predict. u.0 log10(Ψ) 3. type = "n".04097127 0. xlab = expression(log[10](Psi)).25 41 41 41 > calculaS <. por um .Introdu¸ c˜ ao ao R 251 0. Isto pode ser adequado quando deseja-se de fato ajustes individuais e se.1))^(1/n .0 2.5 4. lpsimax.10^seq(1. g/g)))) with(cra. vamos mostrar uma poss´ ıvel forma de combinar a visualiza¸ c˜ ao dos ajustes em em um u ´nico gr´ afico. text(log10(pot). function(yp) lines(log10(pp).5 3. yp)) 31.20 Combinando ajustes Na sess˜ ao anterior obtivemos o ajusta para cada amostra separadamente fazendo v´ arias chamadas ` a fun¸ c˜ ao nls(). list(pot = pp)) with(cra. > > > > + > > lpsimax <.function(fit) with(as.sapply(allfits.2))))) > Sall <. .0 1.10 θ(Umidade. plot(log10(pot). as.0 4. abs((-n * (us + ur) * (((2 * n . ylab = expression(theta(Umidade.02950320 Finalmente.list(coef(fit)).character(am))) lapply(allpred.with(cra.1)/(n . g g) 0. u.15 0.5 0.lapply(allfits.

04). start = list(us = c(0.3). isto ´ e em uma u ´nica chamada ` a nls() que portanto vai utilizar todos os dados de todas as amostras.1/n[am]).ur[am]) * (1/(1 + (alpha * pot)^n))^(1 + 1/n). > mod1 <.3. 0).122402 0.243148 0.04.04.02759 0. θR ) enquanto que todas as amostrs conjuntamente informam sobre (α.25)) > mod1 Nonlinear regression model model: u ~ ur[am] + (us[am] . cra.038780 0.113320 residual sum-of-squares: 0.662e-06 Para ajuste assumindo valores comuns para os parˆ ametros α e n n˜ ao utilizamos o indicados de grupos para estes parˆ ametros e informamos apenas um valor inicial para cada um deles. Uma forma alternativa de obter parˆ ametros para cada amostra. 0.ur[am]) * (1/(1 + (alpha * pot)^n))^(1 1/n) data: cra us1 us2 ur1 ur2 alpha n 0. + ur = c(0.001846 Number of iterations to convergence: 5 Achieved convergence tolerance: 2.007085 -0. Nesta sess˜ ao vamos considerar fazer todos os ajustes de s´ o vez.03994 1. alpha = c(0.3. 0). o que n˜ ao seria poss´ ıvel ajustando os modelos separadamente como mostrado sess˜ ao anterior.nls(u ~ ur[am] + (us[am] . n = c(1.642e-06 Neste exemplo temos ent˜ ao um modelo inicial com oito e outro mais parcimonioso com apenas seis parˆ ametros e utilizamos um teste formal para orientar a escolha de modelo. que neste caso indica que o modelo mais parcimonioso com parˆ ametros comuns explica os dados satisfat´ oriamente. + n = 1. Neste caso interpreta-se que cada amostra informa sobre os respectivos valores para (θS .211819 1.035928 1. n) s˜ ao comuns entre as amostras. alpha = 0. > mod0 <.Introdu¸ c˜ ao ao R 252 lado s˜ ao efetuadas v´ arias chamadas ` a fun¸ c˜ ao. Os dois ajustes s˜ ao mostrados a seguir o seletor [] ´ e usado para indicar que os dados s˜ ao tratados em grupos definidos por am. e talvez mais eficiente que a mostrada anteriormente ´ e discutida a seguir. Ap´ os ajustar os modelos ”candidatos”podemos fazer uma compara¸ c˜ ao formal dos ajustes atravez de anova(). 1.24870 -0.25))) > mod0 Nonlinear regression model model: u ~ ur[am] + (us[am] .ur[am]) * (1/(1 + (alpha[am] * + pot)^n[am]))^(1 .17195 residual sum-of-squares: 0. ur = c(0.324120 0. 0. 0. cra.32106 0. por outro o n´ umero de dados em cada uma delas ´ e pequeno. 1/n[am] .3). start = list(us = c(0.03056 -0.ur[am]) * (1/(1 + (alpha[am] * pot)^n[am]))^(1 data: cra us1 us2 ur1 ur2 alpha1 alpha2 n1 n2 0.001688 Number of iterations to convergence: 6 Achieved convergence tolerance: 4.25.nls(u ~ ur[am] + (us[am] . isto pode ser interessante pois permite comparar e testar hip´ oteses para escolha entre diferentes modelos alternativos para explicar os dados Exemplificamos tal procedimento a seguir iniciando com um modelo para cada amostra e comparando com um modelo assume que os parˆ ametros (α. Al´ em do aspecto computacional. n). No caso do modelo com parˆ ametros distintos informamos oito valores iniciais para os parˆ ametros.

1/n) (1/(1 + (alpha[am] * pot)^n[am]))^(1 . mod0) Analysis of Variance Table Model 1: Model 2: Res.935 253 (1/(1 + (alpha * pot)^n))^(1 .1/n[am]) Pr(>F) 0.00015786 0.00184622 0.Sum Sq Df Sum Sq F value 0.ur[am]) * u ~ ur[am] + (us[am] .Introdu¸ c˜ ao ao R > anova(mod1.00168836 2 0.Df 1 22 2 20 u ~ ur[am] + (us[am] .ur[am]) * Res.4091 .

c ======================================================================= #include <math. double *ans) { int register i.Call. as. Maiores detalhes est˜ ao dispon´ ıveis no manual Wrinting R Extensions.Introdu¸ c˜ ao ao R 254 32 Interface com c´ odigos compilados O R pode utilizar c´ odigos compilados em Fortran. A seguir iniciamos o R e vamos definir fazer uma fun¸ c˜ ao ”wrapper” em R que vai chamar.function(u. *kappa) * bessel_k(uphi[i].c $ R Uma vez criado o objeto compartilhado test.Fortran() e para C++ . passar dados e receber resultados da rotina em C.o e test. Assume-se que exista um compilador C (por exemplo gcc dispon´ ıvel no sistema.5) ans[i] = exp(-uphi[i]). C. double *uphi. (-(*kappa-1)))/gammafn(*kappa).C("cormatern". Considere o seguinte c´ odigo em C que gravaremos no arquivo test. i++){ if (uphi[i]==0) ans[i] = 1. O mesmo recurso tamb´ em pode ser usado em outros sistemas operacionais tais como Windows.double(kappa). res = as.so $ R CMD SHLIB teste. }}}} ======================================================================= Compilamos o c´ odigo em C na linha de comando do LINUX com uma ferramenta do pr´ oprio R. As instu¸ c˜ oes a seguir s˜ ao direcionadas para o sistema operacional LINUX.h> #include <Rmath. else { cte = R_pow(2.1).h> #include <R. for (i=0. else{ if (*kappa==0.double(rep(0.h> void cormatern(int *n. kappa){ out <.dll no Windows) vamos usar uma fun¸ c˜ ao do R para acessar fun¸ c˜ ao disponibilidadas por este objeto.length(u))))$res return(out) } Depois basta carregar o objeto compartilhado (”shared object”) e usar a sua fun¸ c˜ ao em R como no exemplo a seguir. ans[i] = cte * R_pow(uphi[i]. double cte.integer(length(u)). double *kappa. i<*n. Para c´ odigo Fortran usa-se .so (seria um test.*kappa. . as. "matern" <.. Abaixo apresentamos um exemplo simples de como fazer tal interface. C++ e Delphi. as. O comando a seguir vai prodizir ambos: test.double(u). No caso de c´ odigo C mostrado a seguir usamos C().

Introdu¸ c˜ ao ao R > dyn. 1) 255 . 1) > matern(seq(0.load(³teste.l=11).1.1.so³) > matern(0.

a tela texto e a janela gr´ aficas devem ser entendidas como sa´ ıdas padr˜ ao. o argumento echo recebe os valores TRUE ou FALSE indicando se os comandos devem ser inclu´ ıdos no arquivo. A xtable() do pacote (xtable) prepara tabelas em L TEX HTML() do pacote (R2HTML) e diversas outras fun¸ c˜ oes deste pacote preparam sa´ ıdas em html A e html() do pacote Hmisc preparam. postscript() pdf() . e o conte´ udo volta a ser mostrado na tela. um arquivo. sa´ ıdas em L TEXe html. H´ a ainda outras fun¸ c˜ oes que podem redirecionar as sa´ ıdas em outros formatos. Portanto.2 Gr´ aficos Abrindo e redirecionando janelas gr´ aficas A janela gr´ afica ´ e tipicamente aberta quando o usu´ ario chama alguma fun¸ c˜ ao que produza um gr´ afico. Alguns (mas n˜ ao todos!) exemplo s˜ ao citados a seguir. cujos conte´ udos podem ser redirecionados pelo usu´ ario para outro local (dispositivo) como.off() Da mesma forma que sink() redireciona conte´ udo texto. ou somente os resultados dos comandos. os fun¸ c˜ ao listadas a seguir redirecionam para os respectivos formatos gr´ aficos. respectivamente. por exemplo. Para mais detalhes veja args(sink) e help(sink).Introdu¸ c˜ ao ao R 256 33 (Re)-direcionando sa´ ıdas texto e gr´ aficas Por ”default”o R em uma sess˜ ao interativa produz sa´ ıdas texto na janela do programa e sa´ ıdas gr´ aficas um uma janela gr´ afica. Outras ferramentas para redirecionamento de conte´ udo texto A fun¸ c˜ ao sink() redireciona as sa´ ıdas para um arquivo em formato texto. 33. Por exemplo.1 Texto Usando sink() As sa´ ıdas em formato texto podem ser redirecionadas para um arquivo usando > sink("nome_do_arquivo") que recebe como argumento o nome do arquivo (entre aspas) para onde queremos direcionar as sa´ ıdas. ela tamb´ em pode ser aberta em branco quando o usu´ ario chama a fun¸ c˜ ao de parˆ ametros gr´ aficos par() ou por um dos seguintes comandos: x11() no LINUX/UNIX indows() no Windows quartz() no Macintosh Para fechar a janela gr´ afica usamos: > dev. Depois de digitarmos este comando os resultados deixam de ser mostrado na tela sendo enviados para o arquivo. Para encerrar o envio de conte´ udo para o arquivo basta chamar a fun¸ c˜ ao sem argumento algum. Al´ em desta forma. 33. > sink() A fun¸ c˜ ao recebe tem ainda outros argumentos que podem controlar o envio de conte´ udo para o arquivo.

which=k) redirecionam o conte´ udo do dispositivo gr´ afico ativo para impressora ou arquivo.off() .off() Duas observa¸ c˜ oes importantes: 1.list() lista os dispositivos gr´ aficos dev. rate=5)) > dev. Para abri-los basta usar as fun¸ c˜ oes mencionadas acima (por ex.jpg contendo um histograma de um conjunto de dados. ou seja. Para isto pode usar os comandos: > dev. H´ a fun¸ c˜ oes para controlar o comportamento destas janelas dev. which=k) e dev. x11() no LINUX) Neste caso uma das janelas ser´ a a ”ativa”onde novos gr´ aficos ser˜ ao produzidos e as demais ficam ”inativas”. > jpeg("exemplohist.... mas todas elas recebem um argumento obrigat´ orio. Os comandos a seguir exemplificam o uso de uma destas fun¸ c˜ oes para gerar um arquivo do tipo . .prev() torna ativo o dispositivo gr´ afico anterior dev. file="meugrafico.off() ao final para ”fechar”o arquivo 2.set(which=k) torna ativo o k -´ esimo dispositivo gr´ afico dev..copy(jpeg. ´ e obrigat´ orio o uso de dev. dispositivos (”devices”) gr´ aficos m´ ultiplos. graphics.jpg que chamamos de exemplohist.next() torna ativo o pr´ oximo dispositivo gr´ afico dev. a maioria dos dispositivos gera apenas 1 (um) gr´ afico por arquivo sendo necess´ ario portanto gerar um arquivo para cada gr´ afico desejado.Introdu¸ c˜ ao ao R png() jpeg() 257 Existem ainda outros dispositivos que podem ser espec´ ıficos de uma detarminada plataforma (sistema operacional) Cada uma desta fun¸ c˜ oes recebe argumentos espec´ ıficos.jpeg..copy(device.jpg") > hist(rexp(150.print(device. ´ poss´ M´ ultiplas janelas gr´ aficas E ıvel abrir v´ arioa janelas gr´ aficas ao mesmo tempo.jpeg") > dev. suponha que voce esteja com uma janela gr´ afica aberta e queira enviar o gr´ afico que est´ a sendo mostrado na tela (na janela ativa) para um arquivo meugrafico..off() fecha todos os dispositivos gr´ aficos que est˜ ao abertos Por exemplo. o nome do arquivo para onde o gr´ afico deve ser enviado. .

Sys. Outro comando u ´til ´ e SessionInfo() que informa sobre o sistema operacional e locales (linguagem utilizada pelo sistema). . As sa´ ıdas retornadas na forma de uma list podem ainda ser u ´teis para escrever programas/rotinas que dependam destas informa¸ c˜ oes > R. ambiente e o sistema de arquivos O R pode interagir com o sistema de arquivos e o sistema operacional. a vers˜ ao do R.string _ i686-pc-linux-gnu i686 linux-gnu i686.1 Ambiente de trabalho Informa¸ c˜ oes detalhadas sobre a vers˜ ao do R e plataforma (sistema operacional) s˜ ao retornadas pelo objeto abaixo. Entretando vamos aqui dar preferˆ encia a fun¸ c˜ oes que independem do SO.version platform arch os system status major minor year month day svn rev language version. 34. Nesta se¸ c˜ ao vamos ver algumas das funcionalidades que informam sobre o ambiente de trabalho no R e tamb´ em utilidades que podem facilitar o manuseio do programa.1 2008 07 24 46120 R R version 2. linux-gnu Patched 2 7. pacotes carregados e e tamb´ em os recursos (pacotes) dispon´ ıveis. etc. .Machinedetalhes sobre atirim´ etica usada.info()lista com informa¸ c˜ oes dosbre o sistema e usu´ ario. Algumas implementa¸ c˜ oes podem ser espec´ ıficas para cada sistema operacional (SO). Note que ´ e sempre u ´til informar a sa´ ıda deste objeto quando utilizando listas de emails do projeto. > sessionInfo() .Introdu¸ c˜ ao ao R 258 34 R. Por exemplo o diret´ orio de trabalho (”workspace”) pode ser definido via menu no Windows. As sa´ ıdas das fun¸ c˜ oes mencionadas podem ser usada quando informando/reportando problemas encontrados em aplica¸ c˜ oes e/ou quando escrevendo fun¸ c˜ oes que possuam funcionalidades e op¸ c˜ oes que dependam destas informa¸ c˜ oes. cuja sa´ ıda n˜ ao mostramos aqui incluem: getRversion()retorna string com a vers˜ ao do R. disponibilizando informa¸ c˜ ao para trechos de c´ odigo dependentes de informa¸ c˜ oes sobre o sistema operacional. Os exemplos a seguir foram rodados em LINUX mas tamb´ em podem ser usados em outros SO. etc.Platformretorna ista com detalhes sobre a plataforma onde o R foi compilado.1 Patched (2008-07-24 r46120) Outros comandos relevantes sobre o sistema e recursos. tal como manor e maior representa¸ c˜ ao de n´ umeros.7.

As fun¸ c˜ oes a seguir mostram como obter o caminho e nome do diret´ orio earquivo tempor´ arios. A localiza¸ c˜ ao ”default”desta ´ area de trabalho depende do sistema operacional. No Windows ´ e um diret´ orio onde o R foi instalado. Por exemplo.LC_NUMERIC=C.home() [1] "/usr/local/lib/R" > setwd(R. no LINUX ´ e o diret´ orio de onde o R foi iniciado. guardamos esta informa¸ c˜ ao num objeto.ISO-8859-1.Introdu¸ c˜ ao ao R R version 2.LC_COLLATE=pt_BR.getwd() > wdir [1] "/home/paulojus/DEST/aulasR/Rnw" > R. > tempdir() [1] "/tmp/RtmpFxL2ie" > tempfile() [1] "/tmp/RtmpFxL2ie/file7545e146" . permiss˜ oes etc.home()) > getwd() [1] "/usr/local/lib/R" > setwd("/home/paulojus") > getwd() [1] "/home/paulojus" O R automaticamente mant´ em um diret´ orio tempor´ ario para uso em cada sess˜ ao e dentro deste um arquivo.1 Patched (2008-07-24 r46120) i686-pc-linux-gnu 259 locale: LC_CTYPE=pt_BR. Nos comandos a seguir mostramos como verificar qual o diret´ orio de trabalho sendo usado.ISO-8859-1.2 ´ Area de trabalho Ao iniciar o R ´ e aberta ou iniciada uma ´ area de trabalho (”workspace”) onde os objetos desta sess˜ ao poder˜ ao ser gravados. > getwd() [1] "/home/paulojus/DEST/aulasR/Rnw" > wdir <.7.ISO-8859-1. verificamos qual o diret´ orio onde o R foi instalado e como mudar o diret´ orio de trabalho.LC_TIME=pt_BR.LC attached base packages: [1] stats graphics grDevices utils datasets methods base 34.

files = FALSE.case = FALSE) NULL > file. full = TRUE) [1] "doc/AUTHORS" "doc/COPYING" "doc/COPYING..3 Manipula¸ c˜ ao de arquivos e diret´ orios H´ a uma diversidade de fun¸ c˜ oes para interagir com o diret´ orios e arquivos.".LIB" [4] "doc/COPYRIGHTS" "doc/CRAN_mirrors.db" "manual" "NEWS" "RESOURCES" [13] "THANKS" > dir(path = "doc".home()) > dir() [1] "bin" "COPYING" "doc" "etc" "include" [6] "lib" "library" "modules" "NEWS" "share" [11] "SVN-REVISION" > args(dir) function (path = "./") [1] "Fts" "leg" "musica" "paulojus" "temp" > setwd(R. e possui v´ arios argumentos para sele¸ c˜ ao.info() > getwd() [1] "/home/paulojus" > dir(".db" [10] "doc/manual" "doc/NEWS" "doc/RESOURCES" [13] "doc/THANKS" .info("bin") size isdir mode mtime ctime atime uid bin 4096 TRUE 755 2008-07-31 12:56:36 2008-07-31 12:56:36 2008-07-10 18:44:58 0 gid uname grname bin 0 root root > file. Por exemplo dir() vai listar o conte´ udo do diret´ orio. full. ignore.LIB" "COPYRIGHTS" [5] "CRAN_mirrors. Informa¸ c˜ oes sobre cada elemento do diret´ orio podem ser obtidas com file. pattern = NULL.info("bin")$isdir [1] TRUE > dir(path = "bin") [1] "BATCH" "build" "check" "COMPILE" "config" [6] "exec" "f77_f2c" "INSTALL" "javareconf" "libtool" [11] "LINK" "mkinstalldirs" "pager" "R" "Rcmd" [16] "Rd2dvi" "Rd2txt" "Rdconv" "Rdiff" "REMOVE" [21] "Rprof" "Rscript" "Sd2Rd" "SHLIB" "Stangle" [26] "Sweave" > dir(pattern = "COPY") [1] "COPYING" > dir(path = "doc") [1] "AUTHORS" "COPYING" "COPYING. all.csv" "FAQ" "html" "KEYWORDS" [9] "KEYWORDS.Introdu¸ c˜ ao ao R 260 34.csv" "doc/FAQ" [7] "doc/html" "doc/KEYWORDS" "doc/KEYWORDS.names = FALSE. recursive = FALSE.

"foo.exists(c("foo.txt") [1] FALSE > file.exists("foo. "ap. recursive = TRUE) Os exemplos acima s˜ ao na verdade fun¸ c˜ oes que passam comandos para o sistema operacional.txt".create("foo. > setwd("/home/paulojus") > file. como no exemplo abaixo onde o objeto mdir para a ser um vetor de caracteres com nomes de diret´ orio de trabalho e mais abaixo o objeto arqs ´ e um vetor com os nomes de todos os arquivos existerntes no diret´ orio de trabalho.exists(c("foo.dir") [1] "foo.txt") [1] FALSE > file.txt")) [1] TRUE TRUE > file. Mac. "ap. seja ele qual for.txt".txt")) [1] TRUE FALSE Da mesma forma ´ e tamb´ em poss´ ıvel criar e manipular diret´ orios. A seguir ilustramos comandos usados no LINUX.copy("foo. "ap. Note que a op¸ c˜ ao recursive=TRUE deve ser usada com muito cuidado pois apaga todo o conte´ udo do diret´ orio. mas a sintaxe do comando fica obviamente dependente do sistema operacional usado (linux. .dir") [1] TRUE > dir("~/meu.txt".txt") [1] TRUE > file.remove("ap.copy("ap.txt". > getwd() [1] "/home/paulojus" > dir. copiar e remover arquivos e/ou diret´ orios a partir do R. etc).exists(c("foo. De forma mais geral comandos do sistema operacional podem ser executados diretamento do R com a fun¸ c˜ ao system().txt") [1] TRUE > file.Introdu¸ c˜ ao ao R 261 ´ possivel efetuar opera¸ E c˜ oes do sistema operacional tais como criar.txt")) [1] FALSE TRUE > file.dir") > file. "ap.txt") [1] TRUE > file.txt") [1] TRUE > file. unix.txt") [1] TRUE > file.txt" > unlink("~/meu.exists("foo.exists("foo.dir". mover.txt". Uma op¸ c˜ ao interessante ´ e dada pelo argumento intern = TRUE que faz com que o resultado do comando seja convertido num objeto do R.txt". "~/meu.rename("foo.create("~/meu.

txt") system("ls FStest.dir") system("touch FStest.Rnw".system("pwd".dir") arqs <.Introdu¸ c˜ ao ao R > > > > > > > > > system("pwd") mdir <.dir") 262 . intern = TRUE) mdir system("mkdir FStest. intern = TRUE) arqs system("rm -rf FStest.system("ls d*.dir/arquivo.

sem a necessidade de fazer tal inclus˜ ao manualmente e passo a passo. artigos cient´ ıfico e livros.Introdu¸ c˜ ao ao R 263 35 35. As possibilidades de uso do Sweave s˜ ao diversas e podemos citar como examplos a confec¸ c˜ ao de relat´ orios. relat´ orios de an´ alises. 35. Uma outra vantagem relevante ´ e a de que todo c´ odigo usado para an´ alise fica no arquivo texto (fonte) preservando a mem´ oria dos procedimentos usados e possibilitando a reprodu¸ c˜ ao ou modificac ¸˜ ao da an´ alises facilmente e a qualquer tempo. 35. You can now run LaTeX on ³foo. sa´ ıdas computacionais e/ou gr´ aficos inclu´ ıdos automaticamente no texto. Compile e visualize o documento L TEX de forma usual. Este macanismo tamb´ em permite que o texto seja agil e autom´ aticamente atualizado para qualquer mudan¸ ca ou inclus˜ ao de dados e/ou nas an´ alises.3 Outras informa¸ c˜ oes u ´ teis para uso do Sweave A O Sweave tem algumas dependˆ encias de outroas recursos no L TEX. A 5. Leia a mensagem. No Windows a instala¸ c˜ ao do MiKTeX deve prover as ferramentas necess´ arias. listas de exerc´ ıcios. No caso do LINUX certifique-se que voce tem os seguintes pacotes instalados: tetex-bin e tetex-extra.Rnw”) eval=F Swe- Ao final destes passos. textos t´ ecnicos.Rnw 2. Usando o Sweave o usu´ ario pode ter comandos. acelerando muito o processo de edi¸ c˜ ao de textos.tex foi gerado.2 Usando o Sweave Os passos b´ asicos para uso do Sweave s˜ ao: 1. Neste documento vamos supor que seu arquivo se chama foo. Carregar o pacote tools com o comando: > require(tools) 4. . Iniciar o R 3. rodar a fun¸ c˜ ao Sweave() no seu documento com um comando do tipo: ave(”foo. Com estes aspectos o Sweave torna-se uma feramenta adequada para o que se chama de pesquisa reproduz´ ıvel (reproducible research ) uma vez que permite que o c´ odigo das an´ alises seja disponibilizado junto e inegrado ao texto. Outro exemplo ainda ´ e este material sobre o R que foi todo originalmente editado em formato Sweave.tex³ Caso outra mensagem que n˜ ao esta apare¸ ca na tela algum problema deve ter ocorrido com o c´ odigo R em seu documento.Rnw. identifique e corrija o erro e processe novamente com Sweave(). a fun¸ c˜ ao Sweave() ir´ a imprimir uma mensagem na tela como a seguir dizendo que o documento foo. provas.1 Usando o Sweave O que ´ e e por que adotar o Sweave O Sweave ´ e uma funcionalidade do R implementada por algumas fun¸ c˜ oes do pacote tools que permite A a edi¸ c˜ ao ´ agil de documentos combinando o L TEXe o R. Editar o arquivo .

Rnw O mecanismo descrito anteriormente substitui uma vers˜ ao anterior que recomendava o uso do script Sweave.Rnw. O pacote odfWeave do R oferece funcionalidade an´ aloga para edi¸ c˜ ao de documentos utilizando o editor Openoffice O Sweave for concebido por Frederich Leisch da Universidade T´ ecnica de Viena e membro do R Core Team. Vers˜ oes mais recentes do R incorporaram o comando Sweave de tal forma que ´ e poss´ ıvel processar o documento . bastando digitar: Sweave. Alternativamente voce pode copi´ a-lo para o seu diret´ orio de trabalho e rodar com: . FAQ (”Frequantly asked questions”) e informa¸ c˜ oes adicionais.Rnw para gerar o . Snw.Rnw") vai ser gerado um arquivo foo. Alguns editores facilitam o uso do Sweave (podem haver outros al´ em dos mencionados a seguir): Isto ´ e muito u ´til na prepara¸ c˜ ao dos documentos pois permite tamb´ em que o c´ odigo em R dentro dos chunks seja enviado de forma ´ agil para processamento no R.sh deve estar como arquivo execut´ avel e dispon´ ıvel no seu PATH.tex diretamente da linha de comando do LINUX sem a necessidade de iniciar o R. R CMD Sweave foo. . exemplos. Uma outra fun¸ c˜ ao u ´til ´ e Stangle() que extrai o c´ odigo R de um documento . rodando Stangle("foo. artigos.Introdu¸ c˜ ao ao R 264 A p´ agina oficial do Sweave cont´ em o manual.Rnw diretamente da linha de comando do LINUX.Rnw Este arquivo deve estar em formato execut´ avel e para assegurar isto no LINUX digita-se: chmod +x Sweave. Por exemplo.sh foo. Para isto basta digitar o comando a seguir na linha de comando do LINUX (ou o comando an´ alogo em outros sistemas operacionais).sh O script Sweave.R que cont´ em apenas o codigo R do arquivo. etc) s˜ ao reconhecidos pelos editores Emacs ou Xemacs desde que o pacote ESS do Emacs esteja instalado.Rnw. – Os documentos formato Sweave (extens˜ oes .Rnw Note que para o comando acima funcionar o ”script”Sweave./Sweave. – O Tinn-R ´ e outro editor que reconhece o formato de documentos do Sweave. sem a necessidade de iniciar o R. mas permanece de interesse caso deseje-se modificar para adaptar ` a alguma necessidade espec´ ıfica do usu´ ario.sh foi portanto substitu´ ıdo pelo comando R CMD Sweave.sh foo.sh que tamb´ em permitia rodar o Sweave no seu documento .

Rd.sty e upquote. Arquivo com o conte´ udo da se¸ c˜ ao sobre distribui¸ c˜ oes de probabilidades deste material. Para compilar este exemplo voce poder´ a precisar copiar tamb´ em os seguintes arquivos: Sweave. Mathias . onde L e A s˜ ao n´ umeros em unidades de polegadas.8\textwidth (80% da largura do texto) ou 5cm.sty. caso contr´ ario a figura ´ e escalonada automaticamente mantendo a propor¸ c˜ ao entre largura e altura. width=L.Rnw. O primeiro mecanismo usa a defini¸ c˜ ao do tamanho da imagem em argumentos do chunk como <<fig=true. o criador do Sweave Um tutotial em Espanhol P´ agina sobre Sweave mantida por Fernando Ferraz Dicas de uso por F´ abio R. Um exemplo de um arquivo . 3. height=A>>=. a primeira via R especificando o A tamanho do gr´ afico a ser gerado. 35. A No segundo mecanismo usa-se recursos do pacote graphicx do L TEXcom o comando A \setkeys{Gin}{width=L}.6 Links P´ agina do Sweave mantida por seu autor Texto sobre o Sweave por Fritz Leisch.5 Exemplos de arquivos em Sweave 1.4 Controlando o tamanho dos gr´ aficos H´ a duas formas de controlar o tamanho de gr´ aficos no Sweave.sty. Documento mostrando como obter tabelas estat´ ısticas a partir do R.Introdu¸ c˜ ao ao R 265 35. onde L ´ e uma unidade de medida do LTEXtal como 0. Pode-se definir tamb´ em a altura do gr´ afico. 2. 35. e segunda usando comandos do L TEXpara definir o tamanho dos gr´ eficos. Os dois mecanismos podem ser usados em conjunto.

packages() com o nome do pacote desejado entre aspas. Neste caso basta usar o comando install. Para usar as fun¸ c˜ oes destes pacotes deve-se carreg´ a-los antes com o comando library(). Por exemplo. lattice. Por exemplo para instalar o pacote CircStats digite: > install. Estes pacotes adicionais fornecem funcionalidades espec´ ıficas e para serem utilizados devem ser copiados. instalados e carregados. Por exemplo os pacotes MASS. Basta seguir os seguintes passos. Instala¸ c˜ ao em m´ aquinas NT/XP/LINUX na conta do usu´ ario. 2.packages(³CircStats³) O pacote vai ser instalado no sistema e ficar dispon´ ıvel para tudos os usu´ arios. Por exemplo o comando library(MASS) carrega o pacote MASS. Antes de instalar o pacote voce pode ver se ele j´ a est´ a instalado/dispon´ ıvel. sem senha de administrador (instala¸ c˜ ao na conta do usu´ ario) Neste caso o usu´ ario deve abrir um diret´ orio para instalar o pacote e depois rodar o comando de instala¸ c˜ ao especificando este diret´ orio. Se retornar F siga os passos a seguir. o R-base. os pacotes recomendados (recommended packages) que s˜ ao instalados junto com o R-base mas n˜ ao s˜ ao carregados quando iniciamos o programa. o “cora¸ c˜ ao” do R que cont´ em as fun¸ c˜ oes principais dispon´ ıveis quando iniciamos o programa. nlme s˜ ao pacotes recomendados – e h´ a v´ arios outros. suponha que voce queira instalar o pacote CircStats na sua conta no sistema Linux do LABEST. 1. Nas explica¸ c˜ oes a seguir assume-se que voce est´ a em uma m´ aquina conectada ` a internet. Na linha de comando do Linux abra um diret´ orio (se j´ a n˜ ao existir) para instalar os pacotes. Para usar o pacote basta digitar library(CircStats) ou require(CircStats). chame este diret´ orio Rpacks: % mkdir -p ~/Rpacks . Para ver a lista deste pacotes com uma descri¸ c˜ ao de cada um deles acesse a p´ agina do R e siga os links para CRAN e Package Sources. conforme explicado abaixo. os pacotes contribu´ ıdos (contributed packages) n˜ ao s˜ ao instalados junto com o R-base. 2. Estes pacotes dispon´ ıvies na p´ agina do R s˜ ao pacotes oficiais. 3. Instala¸ c˜ ao em m´ aquinas com Windows98 ou em m´ aquinas NT/XP/LINUX com senha de administrador (instala¸ c˜ ao no sistema).Introdu¸ c˜ ao ao R 266 36 Instalando e usando pacotes (packages) do R O programa R ´ e composto de 3 partes b´ asicas: 1. Para isto inicie o R e digite o comando: > require(NOME_DO_PACOTE) Se ele retornar T ´ e porque o pacote j´ a est´ a instalado/dispon´ ıvel e voce n˜ ao precisa instalar. O comando mostrado vai copiar o arquivo para seu computador. Por exemplo. instalar o pacote desejado e ao final perguntar se voce quer apagar o arquivo de instala¸ c˜ ao (responda Y (yes)) 1. A instala¸ c˜ ao e uso dos pacotes vai depender do seu sistema operacional e os privil´ egios que voce tem no seu sistema.

R INSTALL PACOTE.INSTALL FROM CRAN. Em geral o autor fornece instru¸ c˜ oes para instala¸ c˜ ao.tar.1 Pacotes n˜ ao-oficiais Al´ em dos pacotes contribu´ ıdos existem diversos pacotes n˜ ao-oficiais dispon´ ıvies em outros locais na web. lib="~/Rpacks") 3.packages("CircStats".Introdu¸ c˜ ao ao R 2. instalar usando o menu do R selecionando a op¸ c˜ ao PACKAGES . Inicie o R e na linha de comando do R digite: > install. 36.gz e s˜ ao instalados com um dos comandos abaixo (use o primeiro se for administrador do sistema e o segundo como usu´ ario comum).tar.gz ou R INSTALL -l ~/Rpacks PACOTE. Neste caso o pacote vai ser instalado na ´ area do usu´ ario e para carregar o pacote digite: > library(CircStats.tar. lib="~/Rpacks") 267 NOTA: no Windows voce pode.INSTALL FROM LOCAL . As instru¸ c˜ oes gerais para instala¸ c˜ ao s˜ ao as seguintes: Linux: Os pacotes para Linux em geral vem em um arquivo tipo PACOTE. alternativamente.gz Windows: No menu do R use a op¸ c˜ ao PACKAGES .ZIP FILE .

skeleton(name="meupack") 3. Caso o seu pacote v´ a usar c´ odigos em C.gz de distribui¸ c˜ ao co pacote use o comando a seguir. Abra uma sess˜ ao do R e coloque na sua ´ area de trabalho todas as fun¸ c˜ oes e conjunto de dados que deseja incluir no pacote. O subdiret´ orio src somente ser´ a usado caso o seu pacote v´ a usar c´ odigos em C. No ”prompt”do R use package. 2.loc = lib) return(invisible(0)) } 5. Certifique-se que o diret´ orio a ser criado ainda n˜ ao existe no seu diret´ orio de trabalho. Voce n˜ ao precisa fazer nada neste diret´ orio a menos que v´ a usar c´ odigo compilado em seu pacote (ver mais detalhes a seguir). 4. Se este for o caso voce deve colocar neste subdiret´ orio os arquivos fontes nestas linguagens. O arquivo criando pode ser usado de forma padr˜ ao para instalar pacotes no R a partir do arquivo fonte do pacote.skeleton() para gerar um diret´ orio com a estrutura de diret´ orios m´ ınima requirida para pacotes. pkg) { library. > package. C++ ou Fortran.First.R no sibdiret´ orio R com o seguinte conte´ udo ".Introdu¸ c˜ ao ao R 268 37 Construindo pacotes Os passos b´ asicos para contru¸ c˜ ao de um pacote s˜ ao listados a seguir. O subdiret´ orio man que cont´ em a documanta¸ c˜ ao de seu pacote com um arquivo para cada fun¸ c˜ ao e conjunto de dados de seu pacote. R CMD build meupack .lib" <. Para testar o seu pacote voce pode usar na linha de comando: R CMD check meupack 6.tar. Abra cada um dos arquivos em um editor de arquivos texto e edite a documenta¸ c˜ ao. se o seu pacote for se chamar meupack use o comando abaixo. Edite este arquivo tomando cuidado para n˜ ao alterar a estrutura do mesmo O subdiret´ orio data que cont´ em os conjuntos de dados que estavam em seu ”workspace”. Por exemplo. O subdiret´ orio R cont´ em arquivos com as fun¸ c˜ oes em R de seu pacote.dynam("Embrapa". preservando o formato do arquivo. Voce n˜ ao precisa fazer nada neste diret´ orio. 1. lib.function(lib. C++ ou Fortran coloque um arquivo com o nome zzz. Para montar o arquivo fonte . Tome o cuidade de remover todos os demais objetos que n˜ ao devem ser inclu´ ıdos no pacote. No diret´ orio criado voce vai encontrar: O arquivo DESCRIPTION que cont´ em uma descri¸ c˜ ao b´ asica do seu pacote. package = pkg.

. Diversos outros recursos est˜ ao dispon´ ıveis e para maiores e mais detalhadas informa¸ c˜ oes sobre como construir pacotes consulte o manual Writing R Extensions. As passos listados aqui s˜ ao bastante simplificados e s˜ ao simplesmente o m´ ınimo necess´ ario para cria¸ c˜ ao de pacotes. O pacote montado durante as aulas est´ a dispon´ ıvel neste link e voce pode inspecionar o conte´ udo para ver um exemplo de cria¸ c˜ ao de pacote.Introdu¸ c˜ ao ao R 269 Durante o curso foi demonstrado como construir pacotes no R.

No Windows 98 isto ´ e feito modificando o arquivo C:\AUTOEXEC. Gravar o arquivo e sair do xemacs. Para utilizar esta funcionalidade deve-se seguir os seguintes passos: 1. Tudo pronto! Para come¸ car a utilizar basta iniciar o programa xemacs. Modifique a vari´ avel PATH do seu computador adicionando a ela o caminho para o diret´ orio bin do R.org Este procedimento permite um uso ´ agil do programa R com facilidades para gravar o arquivo texto com os comandos de uma sess˜ ao e uso das facilidades programadas no pacote ESS (Emacs Speaks Statistics) que ´ e um complemento do editor xemacs. Para iniciar o R dentro do xemacs use a combina¸ c˜ ao de teclas: ESC SHIFT-X SHIFT-R 9. As vers˜ oes mais recentes j´ a veem com o pacote ESS inclu´ ıdo. . Instalar o programa R. 4. Se usar o Windows 98: reinicialize o seu computador.BAT inserindo a seguinte linha no final do arquivo SET PATH=%PATH%.Introdu¸ c˜ ao ao R 270 38 Rodando o R dentro do xemacs Esta p´ agina cont´ em instru¸ c˜ oes sobre como rodar o programa estat´ ıstico R dentro do editor xemacs que tem vers˜ oes dispon´ ıveis para LINUX e Windows. Sugiro que voce mude para rw apanes para n˜ ao ter que alterar a configura¸ c˜ ao abaixo toda vez que atualizar a sua vers˜ ao do R. Lembre-se que voce pode usar CTRL-X-2 para dividir a tela em duas.C:\ARQUIVOS DE PROGRAMA\rw\bin No Windows XP isto ´ e feito adicionado este diret´ orio ` a esta vari´ avel de ambiente. (clique para baixar programa de instala¸ c˜ ao) Para usu´ arios do Windows assume-se aqui que o R esteja instalado em: C:\ARQUIVOS DE PROGRAMAS\rw Note que na instala¸ c˜ ao do R ´ e sugerido um nome do diret´ orio de instala¸ c˜ ao do tipo rw2010. (clique para baixar programa de instala¸ c˜ ao) 3. Adicionar a seguinte linha: (require ’ess-site) 6.R para os seus arquivos de comandos do R. Instalar o programa xemacs.xemacs. 2. 10. Use sempre a extens˜ ao . Para obter o xemacs v´ a em http://www. Inicie o programa xemacs e clique na barra de ferramentas em: Options --> Edit init file 5. 8. 7.

os autores seguiram diferentes estrat´ egias dependendo do tipo de dado contemplado pelo pacote bem como de suas preferˆ encias pessoais. . n˜ ao temos como combinar a geometria (pol´ ıgonos) e os atributos (vari´ aveis temparatura e umidade) em uma estrutura simples de dados como a matriz do exemplo anterior. Desta forma. Por exemplo. por nem sempre poderem ser representadas de forma simples. cont´ ınua (geoestat´ ıstica) ou processos pontuais. na implementa¸ c˜ ao dos pacotes de estat´ ıstica espacial no R. Num primeiro caso vamos imaginar que dois atributos (vari´ aveis) sejam medidos em n pontos. Neste caso. Entretanto.Introdu¸ c˜ ao ao R 271 39 Classes para dados espaciais: o pacote sp Pacotes e fun¸ c˜ oes para an´ alise de dados espaciais come¸ caram a surgir desde o in´ ıcio do projeto R. p. localiza¸ ca ˜o e caracter´ ısticas da localiza¸ c˜ ao. Tais exemplos refor¸ cam a id´ eia que dados espaciais (e espa¸ co-temporais) precisam ter representa¸ c˜ oes que acomodem o tratamento de geometrias e atributos. criativa e bem estruturada proposta baseada em objetos e classes do tipo S4 do R. A implementa¸ c˜ ao foi inicialmente descrita em um artigo dos autores na R-NEWS (2005. sejam de varia¸ c˜ ao espacial discreta (dados de ´ area). Vejamos dois exemplos. Isto em parte se deve ao R fornecer um ambiente adequado para disponibiliza¸ c˜ ao de novas propostas de an´ alise e formas de implementa¸ c˜ ao de m´ etodos. acabou-se por criar uma verdadeira torre de Babel da representa¸ c˜ oes de dados espaciais. especialmente os estruturados espacialmente. Neste contexto. Tal id´ eia acabou se materializando no pacote sp de Roger Bivand e Edzer Pebesma. vol. Detalhes podem ainda ser encontrados no vignette que acompanha o pacote sp. Embora n˜ ao adotado universalmente. mas tamb´ em. no livro Analysis of Spatial Data with R que conta ainda com a co-autoria de Virg´ ılio Gomez-R´ ubio. Tais estruturas s˜ ao distintas n˜ ao somente por se referirem a elementos conceituais diferentes. Nesta sess˜ ao vamos apresentar de maneira informal e atrav´ es de exemplos simples id´ eias introdut´ orias sobre a representa¸ c˜ ao e estrutura de dados espaciais definidas pelo pacote sp. que servisse para os diferentes formatos de dados espaciais.9-13) e tamb´ em na sess˜ ao de estat´ ıstica espacial do R (CRAN Spatial Task View) e. por toda a flexibilidade que traz no tratamento e representa¸ c˜ ao de dados espaciais. Outras divis˜ oes e sub-divis˜ oes s˜ ao ainda poss´ ıveis mas vamos nos ater nesta discuss˜ ao a estas trˆ es. A tendˆ encia ´ e que a estrutura definida pelo sp seja largamente adotada. A esta discuss˜ ao soma-se o fato que a ´ area de dados espaciais ´ e tipicamente dividida em sub´ areas que dependem do formato espec´ ıfico dos dados e modelos a serem considerados. Neste caso. uma excelente. poder´ ıamos facilmente estruturar os dados em uma matriz de dimens˜ ao n × 4. combinado ao fato de que a ´ area de estat´ ıstica espacial estava na ´ epoca (e ainda est´ a!) em franco desenvolvimento. As implementa¸ c˜ oes procuravam tanto dotar o ambiente do R de funcionalidades usuais de estat´ ıstica espacial. Num segundo caso vamos imaginar agora tais atributos medidos em cada munic´ ıpio de um estado. em particular suas geometrias. mais recentemente. onde os munic´ ıpios s˜ ao identificados por pol´ ıgonos que definem suas fronteiras. como uma u ´nica tabela de dados. e talvez principalmente. poder´ ıamos ter os atributos precipita¸ c˜ ao e temperatura m´ axima di´ aria registrada em n esta¸ c˜ oes meteorol´ ogicas. come¸ cou-se a discutir a possibilidade de cria¸ ca ˜o de uma estrutura comum e geral. v´ arios pacotes de estat´ ıstica espacial agora aderem a este formato de dados e/ou possuem formas de converter as estruturas de dados de suas representa¸ c˜ oes espec´ ıficas para o formato definido pelo pacote sp. diferentemente do anterior. A caracter´ ıstica central de dados espaciais ´ e o fato das informa¸ c˜ oes possuirem duas estruturas b´ asicas e interrelacionadas: geometrias e atributos. especialmente por novos pacotes. sendo cada um destes identificado por um par de coordenadas. onde as quatro colunas seriam referentes ao par de coordenadas (geometria) e ` as duas vari´ aveis (atributos).2. Com o crescimento do n´ umero de pacotes e formas alternativas de representar os dados espaciais. como implementar novas propostas metodol´ ogicas e ainda fornecer interface com outros sistemas tais como os SIG’s (Sistemas de Informa¸ c˜ ao Geogr´ afica) e bancos de dados.

6. 30). comumente utilizada para armazenar estruturas de dados na forma de linhas (indiv´ ıduos) e colunas (vari´ aveis). 18. 2. Existem v´ arias formas de se construir um objeto do tipo SpatialPointsDataFrame e vamos ver trˆ es delas aqui. O nome ´ e praticamente autoexplicativo indicando que o dado ´ e um data-frame de atributos ligados a pontos.packages("sp". cabendo ao usu´ ario saber a que se refere cada uma das colunas. Ap´ os a convers˜ ao as coordenadas deixam de fazer parte do data-frame. 2. embora suficiente para anotar todas as informa¸ c˜ oes. Esta fun¸ c˜ ao converte um data-frame em um SpatialPointsDataFrame simplesmente indicando quais os nomes das colunas em que est˜ ao armazenadas as coordenadas. Note nos comandos como fazer tal convers˜ ao e como os objetos desta classe diferem entre si. > install. 80)) > DF var1 var2 1 23 63 2 26 76 3 18 81 4 25 59 5 30 80 > dim(DF) [1] 5 2 > SPDF <. ´ e representada por um objeto do tipo SpatialPointsDataFrame.cbind(cx = c(1. . DF) > dim(SPDF) [1] 5 4 A estrutura do data-frame. 76. 26. Este pacote tem dependˆ encias de v´ arios outros e portanto. 5). 59. Os dados ser˜ ao inicialmente armazenados na forma de uma matriz de coordenadas e um data-frame com as vari´ aveis. este tipo de dado. + 81. 25. Por motivos de apresenta¸ c˜ ao neste material vamos considerar inicialmente as geometrias e atributos separadamente . com geometria dada por pontos esparsos na regi˜ ao. 1)) > DF <.cbind(cord. 5. > cord <. usa-se o argumento dep=TRUE que faz com que todos os demais pacotes necess´ arios sejam tamb´ em instalados. a come¸ car pela mais simples dada a seguir utilizando a fun¸ c˜ ao coordinates(). adicionando ent˜ ao duas colunas. cy = c(4.frame(var1 = c(23. uma das estruturas b´ asicas de dados no R. 3. que armazena agora somente as vari´ aveis. As referˆ encias mencionadas anteriormente s˜ ao o guia definitivo para informa¸ c˜ oes mais precisas e detalhadas sobre a potencialidade de tal representa¸ c˜ ao e o texto apresentado a seguir visa somente facilitar o estudo destes materiais e n˜ ao substitu´ ı-los! O passo inicial para seguir estas notas ´ e instalar e carregar o pacote sp. n˜ ao distingue explicitamente as geometrias e atributos. var2 = c(63.Introdu¸ c˜ ao ao R 272 note-se que os recursos de tais classes v˜ ao muito al´ em dos exemplos apresentados aqui. e passam a ser somente uma informa¸ c˜ ao a ele associada. 6.data. Nesta caso poder´ ıamos ter ainda optado por incluir as coordenadas no data-frame.1 Conceitos introdut´ orios e classes para pontos esparsos Vamos iniciar considerando um exemplo simples onde os dados consistem de cinco localiza¸ c˜ oes nas quais foram medidos os valores de duas vari´ aveis conforme ilustrado na Figura 72. Na defini¸ c˜ ao de classes do sp. dep = TRUE) > require(sp) 39.

81 ) 5 ( 23 . 63 ) cy 3 4 ( 26 . Os valores dos atributos s˜ ao indicados dentro dos parˆ entesis. 59 ) 6 ( 18 . 80 ) 1 0 0 1 2 3 cx 4 5 6 7 Figura 72: Exemplo hipot´ etico com dois atributos medidos em cinco localiza¸ c˜ oes identificadas por pares de coordenadas. .Introdu¸ c˜ ao ao R 273 7 ( 25 . 76 ) 2 ( 30 .

Como estes objetos s˜ ao constru´ ıdos segundo o padr˜ ao S4 da linguagem R. "data") var1 var2 1 23 63 2 26 76 3 18 81 4 25 59 5 30 80 bbox "matrix" proj4string "CRS" . A informa¸ c˜ ao de como esta string ´ e escrita segue um padr˜ ao definido pelo projeto proj4 e pode ser alterada usando a fun¸ c˜ ao CRS(). podendo esta ser NA. como o dado est´ a georeferenciado em termos do tipo de coordenadas. 6) 25 59 5 (5. ou seja.Introdu¸ c˜ ao ao R > class(SPDF) [1] "data.nrs coords "data."package") [1] "sp" > dim(SPDF) [1] 5 2 > SPDF coordinates var1 var2 1 (1. "cy") > class(SPDF) [1] "SpatialPointsDataFrame" attr(.frame" "numeric" "matrix" > slot(SPDF. os atributos s˜ ao usualmente chamados de slots."package") [1] "sp" > getSlots("SpatialPointsDataFrame") data coords. 2) 26 76 3 (6. e uma string que define a proje¸ c˜ ao dos dados (proj4string). 5) 18 81 4 (2. Estes dois argumentos formam um primeiro grupo devido ao fato de que todo objeto Spatial* definido pelo pacote sp possui tais atributos.frame" > dim(SPDF) [1] 5 4 > coordinates(SPDF) <. Vamos descrevˆ e-los por grupos cuja divis˜ ao ficar´ a mas clara posteriormente.c("cx". Os demais atributos s˜ ao espec´ ıficos da classe SpatialPointsDataFrame. 1) 30 80 274 Todo objeto desta classe possui atributos espec´ ıficos que s˜ ao criados automaticamente podendo ainda ser modificados pelo usu´ ario. Os dois primeiros s˜ ao as coordenadas do menor retˆ angulo que envolve as localiza¸ c˜ oes dos dados (bbox). 4) 23 63 2 (3. > class(SPDF) [1] "SpatialPointsDataFrame" attr(. A listagem de slots de uma classe e a forma de extrair cada particular slot s˜ ao ilustradas nos comandos a seguir. "bbox") min max cx 1 6 cy 1 6 > slot(SPDF.

0) differ >" > slot(SPDF. > args(SpatialPointsDataFrame) function (coords. > SPDF1 <. max = c(7. 4). O resultado apenas difere do retornado pela fun¸ c˜ ao coordinates() no slot coords. 7)) > bbox(SPDF1) min max [1. data = DF. match.equal(SPDF1. data.character(NA)).Introdu¸ c˜ ao ao R 275 Uma outra forma de criar um objeto que represente dados com geometria dada por pontos esparsos ´ e usar a fun¸ c˜ ao SpatialPointsDataFrame() que recebe coordenadas e atributos separadamente em dois argumentos obrigat´ orios. permitindo portanto.SpatialPointsDataFrame(coords = cord. 7))) > all.SpatialPointsDataFrame(coords = cord. que para esta u ´ltima registra as colunas do data-frame original que foram indicadas como coordenadas. exceto por match. coords.] 0 7 A fun¸ c˜ ao possui ainda outros argumentos opcionais j´ a comentados anteriormente. > slot(SPDF1.equal(SPDF. coordenadas e atributos em ordens diferentes. bbox = NULL) NULL > DF1 <. proj4string = CRS(as.nrs. + 0). data = DF) > args(SpatialPointsDataFrame) function (coords. bbox = cbind(min = c(0.nrs") [1] 1 2 > slot(SPDF1.] 0 7 [2. desde que identificadas pelo mesmo nome da linha. SPDF2) [1] TRUE . 2.character(NA)). "coords. coords. 1.DF[c(3.nrs = numeric(0). 0). proj4string = CRS(as.nrs = numeric(0). "coords. max = c(7. No exemplo a seguir alteramos a ordem dos elementos do data-frame de atributos para ilustrar o pareamento. 5.ID = TRUE.nrs") numeric(0) Os demais atributos/slots do objeto s˜ ao definidos automaticamente mas podem ser modificados. ] > DF1 var1 var2 3 18 81 1 23 63 5 30 80 2 26 76 4 25 59 > SPDF2 <. data. match. bbox = NULL) NULL > all.ID = TRUE.ID que permite que os dois objetos sejam pareados pelos nomes das suas linhas (rownames). "bbox") <.cbind(min = c(0. SPDF1) [1] "Attributes: < Component 4: Numeric: lengths (2.

Introdu¸ c˜ ao ao R

276

At´ e aqui vimos que coordinates() e SpatialPointsDataFrame() criam diretamente objetos da referida classe. Vamos agora examinar com mais detalhe toda a concep¸ c˜ ao de classes definida no sp que tem uma estrutura hier´ aquica, come¸ cando por classes e construtores de objetos mais gerais que se tornam mais detalhados a cada n´ ıvel e onde cada classe herda os atributos da classe superior mais geral. A classe mais geral ´ e Spatial e um objeto desta classe tem apenas duas informa¸ c˜ oes (slots ): o retˆ angulo envolvente (bbox - bounding box ) e a informa¸ c˜ ao do tipo de proje¸ c˜ ao (proj4string). Este objeto ent˜ ao simplesmente define em que regi˜ ao estar˜ ao os dados e por qual sistema de coordenadas estar˜ ao referenciados, sendo que esta u ´ltima pode ser um "NA" que em SIG’s corresponde a dados sem proje¸ c˜ ao (null projection ). O retˆ angulo envolvente pode ser calculado a partir das coordenadas dos dados (como feito automaticamente pelas fun¸ c˜ oes j´ a vistas), ou definido arbitrariamente pelo usu´ ario, podendo ainda ser alterado depois de definido. Deve conter nas linhas a dimens˜ ao das coordenadas, e nas colunas os valores m´ ınimos e m´ aximos para cada uma. A string que informa sobre a proje¸ c˜ ao deve ser definida usando a fun¸ c˜ ao CRS() pois esta ir´ a validar a defini¸ c˜ ao e sintaxe. A fun¸ c˜ ao ainda verifica se os valores passados em bbox s˜ ao compat´ ıveis com a proje¸ c˜ ao informada, retornando erro caso sejam incompat´ ıveis. M´ etodos s˜ ao implementados para extrair os elementos do objeto. > getSlots("Spatial") bbox proj4string "matrix" "CRS" > bb <- t(apply(cord, 2, range)) > colnames(bb) <- c("min", "max") > S <- Spatial(bbox = bb, proj4string = CRS(projargs = as.character(NA))) > S An object of class "Spatial" Slot "bbox": min max cx 1 6 cy 1 6 Slot "proj4string": CRS arguments: NA > bbox(S) min max cx 1 6 cy 1 6 > slot(S, "bbox") <- cbind(min = c(0, 0), max = c(7, 7)) > bbox(S) min max [1,] 0 7 [2,] 0 7 > proj4string(S) [1] NA A classe Spatial possui trˆ es subclasses: SpatialPoints, SpatialLines e SpatialPolygons. Estas subclasses definem, como os nomes sugerem, o tipo de geometria dos dados. Seguindo nosso exemplo vamos criar um objeto da classe SpatialPoints que extende a classe Spatial adicionando um slot coords que armazena as coordenadas de um conjunto de pontos. Assim como no exemplo anterior vamos examinar os slots e tipos de objetos que estes recebem com a fun¸ c˜ ao getSlots()

Introdu¸ c˜ ao ao R

277

aplicada ao nome da classe. Na sa´ ıda desta fun¸ c˜ ao fica claro que a classe SpatialPoints herda os atributos de Spatial. A fun¸ c˜ ao construtora tem coords como argumento obrigat´ orio e as herdadas ´ ainda importante notar que v´ da classe Spatial, bbox e proj4string como opcionais. E arios m´ etodos ´ usuais j´ a s˜ ao definidos para este n´ ıvel de classes tais como summary(), plot(), entre outros. E ainda poss´ ıvel fazer sele¸ c˜ ao de elementos. > getSlots("SpatialPoints") coords bbox proj4string "matrix" "matrix" "CRS" > args(SpatialPoints) function (coords, proj4string = CRS(as.character(NA)), bbox = NULL) NULL > row.names(cord) <- 1:nrow(cord) > SP <- SpatialPoints(coords = cord) > SP <- SpatialPoints(coords = cord, bbox = bbox(S)) > SP SpatialPoints: cx cy [1,] 1 4 [2,] 3 2 [3,] 6 5 [4,] 2 6 [5,] 5 1 Coordinate Reference System (CRS) arguments: NA > summary(SP) Object of class SpatialPoints Coordinates: min max [1,] 0 7 [2,] 0 7 Is projected: NA proj4string : [NA] Number of points: 5 > ind <- coordinates(SP)[, 2] < 3 > SP[ind, ] SpatialPoints: cx cy [1,] 3 2 [2,] 5 1 Coordinate Reference System (CRS) arguments: NA Seguindo esta estrutura de classe e subclasses podemos revisitar a classe SpatialPointsDataFrame como sendo uma sub-sub-classe de Spatial que extende SpatialPoints acomodando uma matriz de atributos, que por default ´ e pareada com as coordenadas pelos nomes das linhas (rownames ), dai porque na cria¸ c˜ ao do objeto SpatialPoints asseguramos a defini¸ c˜ ao dos nomes de linhas. J´ a vimos acima como um objeto desta classe ´ e criado mas note-se que ele poderia ser criado ainda a partir de um objeto SpatialPoints com a simples adi¸ c˜ ao do data-frame dos atributos. Os estratores, m´ etodos e seletores continuam v´ alidos.

Introdu¸ c˜ ao ao R > getSlots("SpatialPointsDataFrame") data coords.nrs coords bbox "data.frame" "numeric" "matrix" "matrix" > SPDF3 <- SpatialPointsDataFrame(SP, DF) > all.equal(SPDF1, SPDF3) [1] TRUE > summary(SPDF3) Object of class SpatialPointsDataFrame Coordinates: min max [1,] 0 7 [2,] 0 7 Is projected: NA proj4string : [NA] Number of points: 5 Data attributes: var1 var2 Min. :18.0 Min. :59.0 1st Qu.:23.0 1st Qu.:63.0 Median :25.0 Median :76.0 Mean :24.4 Mean :71.8 3rd Qu.:26.0 3rd Qu.:80.0 Max. :30.0 Max. :81.0 > bbox(SPDF3) min max [1,] 0 7 [2,] 0 7 > SPDF3[ind, ] coordinates var1 var2 2 (3, 2) 26 76 5 (5, 1) 30 80

278

proj4string "CRS"

Neste ponto podemos revisar a estrutura das classes verificando a sa´ ıda de getClass() que informa os slots de cada classe ou subclasse, qual(is) a(s) class(es) por ela extendida – se alguma, bem como quais as subclasses definidas para esta classe em v´ arios n´ ıveis. > getClass("Spatial") Class "Spatial" Slots: Name: Class: Known Class Class Class bbox proj4string matrix CRS

Subclasses: "SpatialPoints", directly "SpatialLines", directly "SpatialPolygons", directly

Introdu¸ c˜ ao ao R Class "SpatialPointsDataFrame", by class "SpatialPoints", distance 2 Class "SpatialPixels", by class "SpatialPoints", distance 2 Class "SpatialGrid", by class "SpatialPoints", distance 3 Class "SpatialPixelsDataFrame", by class "SpatialPoints", distance 3 Class "SpatialGridDataFrame", by class "SpatialPoints", distance 4 Class "SpatialLinesDataFrame", by class "SpatialLines", distance 2 Class "SpatialPolygonsDataFrame", by class "SpatialPolygons", distance 2 > getClass("SpatialPoints") Class "SpatialPoints" Slots: Name: Class: coords matrix bbox proj4string matrix CRS

279

Extends: "Spatial" Known Subclasses: Class "SpatialPointsDataFrame", directly Class "SpatialPixels", directly Class "SpatialGrid", by class "SpatialPixels", distance 2 Class "SpatialPixelsDataFrame", by class "SpatialPixels", distance 2 Class "SpatialGridDataFrame", by class "SpatialGrid", distance 3 > getClass("SpatialPointsDataFrame") Class "SpatialPointsDataFrame" Slots: Name: Class: data data.frame coords.nrs numeric coords matrix bbox proj4string matrix CRS

Extends: Class "SpatialPoints", directly Class "Spatial", by class "SpatialPoints", distance 2 Known Subclasses: Class "SpatialPixelsDataFrame", directly, with explicit coerce

39.2

Pontos em malha regular: grid e pixel

SpatialGrid e SpatialPixels s˜ ao representa¸ c˜ oes de pontos arranjados de forma regular numa regi˜ ao, tais como modelos de eleva¸ c˜ ao digital, imagens (por ex. de sat´ elite), malhas de interpola¸ c˜ ao de pontos, entre outras. Tais representa¸ c˜ oes s˜ ao comuns em sensoriamento remoto e representa¸ c˜ oes do tipo raster em SIG’s. Todo o conjunto de pontos fica definido a partir de apenas algums informa¸ c˜ oes b´ asicas como origem e espa¸ camento, o que permite que os pontos de toda a malha sejam tratados de uma s´ o vez ao inv´ es de cada ponto individualmente. Estas classes extendem SpatialPoints de forma a registrar e utilizar as informa¸ c˜ oes sobre o arranjo regular das localiza¸ c˜ oes, o que ´ e feito com GridTopology que define as c´ elulas da malha de pontos. Como exemplo vamos criar uma

Introdu¸ c˜ ao ao R

280

malha retangular com espa¸ camento de 0, 1 × 0, 2 sobre a ´ area do exemplo anterior. As informa¸ c˜ oes necess´ arias s˜ ao o centro da primeira c´ elula da malha, o tamanho e n´ umero de c´ elulas em cada dimens˜ ao. A combina¸ c˜ ao da classe GridTopology com os elementos de Spatial gera a subclasse SpatialGrid. A Figura 39.2 mostra a sobreposi¸ c˜ ao das localiza¸ c˜ oes dos dados originais e a malha de pontos que cobre a ´ area no espa¸ camento especificado. > bbox(SPDF3) min max [1,] 0 7 [2,] 0 7 > espac <- c(0.1, 0.2) > centro1 <- bbox(SPDF3)[, 1] + espac/2 > centro1 [1] 0.05 0.10 > nums <- ceiling(diff(t(bbox(SPDF3)))/espac) > GT <- GridTopology(cellcentre.offset = centro1, cellsize = espac, + cells.dim = nums) > SG <- SpatialGrid(GT) > getClass("SpatialGrid") Class "SpatialGrid" Slots: Name: grid Class: GridTopology grid.index integer coords matrix bbox matrix proj4string CRS

Extends: Class "SpatialPixels", directly, with explicit coerce Class "SpatialPoints", by class "SpatialPixels", distance 2, with explicit coerce Class "Spatial", by class "SpatialPixels", distance 3, with explicit coerce Known Subclasses: "SpatialGridDataFrame" > plot(SPDF3, pch = 19) > plot(SG, cex = 0.4, add = T) Neste exemplo definimos a malha a partir da dimens˜ ao da ´ area. Entretanto, isto n˜ ao ´ e compuls´ orio, podendo a malha ser criada de outras formas e/ou importada de algum outro objeto ou formato e neste caso o retˆ angulo envolvente (bounding box ) ´ e criado automaticamente. Note ainda que no exemplo continuamos usando o dado sem proje¸ c˜ ao ou qualquer tipo de sistema de coordenadas. A extens˜ ao natural ´ e dada pela classe SpatialGridDataFrame que associa ` a malha um data-frame com atributos associados a cada um dos pontos. > getClass("SpatialGridDataFrame") Class "SpatialGridDataFrame" Slots: Name: Class: data grid data.frame GridTopology grid.index integer coords matrix bbox matrix proj4string CRS

directly Class "SpatialPixels". como definida em SpatialGrid. Nestes casos pode-se usar a representa¸ c˜ ao alternativa de SpatialPixels que guarda informa¸ c˜ oes apenas dos pontos de interesse. distance 3 Class "Spatial". As outras geometrias espaciais .3 Classe para linhas e pol´ ıgonos Vimos at´ e aqui que a subclasse SpatialPoints e as subclasses derivadas dela extendem a classe Spatial para acomodar coordenadas de uma geometria de pontos. por´ em guardando tamb´ em a informa¸ c˜ ao de o que se tem ´ e um subconjunto de uma malha. Al´ em disto. isto faz com que um grande volume de mem´ oria seja utilizado sem necessidade. Por exemplo. ou ainda a ´ area de estudo pode ser bem recortada. Por exemplo se a ´ area tem muitos recortes e/ou v´ arias c´ elulas n˜ ao possuem atributos. by class "SpatialGrid". em certas situa¸ c˜ oes pode-se desejar exportar dados para aplicativos externos em forma de coordenadas de pontos. Como os grids tipicamente tem alta resolu¸ c˜ ao. os valores correspondentes devem ser indicados como NA. distance 4 O formato de grid (raster) apresenta algumas limita¸ c˜ oes em certas circunstˆ ancias.Introdu¸ c˜ ao ao R 281 Extends: Class "SpatialGrid". by class "SpatialGrid". by class "SpatialGrid". distance 2 Class "SpatialPoints". 39. levando a um formato bastante irregular com muitas partes dentro de bbox por´ em fora da ´ area. em um modelo de eleva¸ c˜ ao digital de terreno poderiam haver pontos abaixo da superf´ ıcie da ´ agua. assim como em SpatialPoints.

A representa¸ c˜ ao destas geometrias no sp ´ e feita atrav´ es de uma conjunto sequencial de pontos. > getClass("SpatialLines") Class "SpatialLines" Slots: Name: Class: lines list bbox proj4string matrix CRS Extends: "Spatial" Known Subclasses: "SpatialLinesDataFrame" > getClass("SpatialPolygons") Class "SpatialPolygons" Slots: Name: Class: polygons list plotOrder integer bbox proj4string matrix CRS Extends: "Spatial" Known Subclasses: "SpatialPolygonsDataFrame" Assim como um objeto em SpatialPoints ´ e definido por um conjunto de pontos.Introdu¸ c˜ ao ao R 282 s˜ ao linhas e pol´ ıgonos que s˜ ao tratadas pelas classes SpatialLines e SpatialPolygons. sendo que outras representa¸ c˜ oes poss´ ıveis existem em ambientes de SIG. "reg3")] > areas . ou seja. Assim como em SpatialPoints.6-24 (built on 2008-12-16) is now loaded ------------------------------------------------------------> data(ca20) > areas <. respectivamente. criaram-se as fun¸ c˜ oes Line e Polygon para se especificar estes elementos.ufpr. enquanto que linhas e pol´ ıgonos s˜ ao definidos por um conjunto de pontos com uma certa estrutura. sendo o pol´ ıgono representado por uma linha fechada. > require(geoR) ------------------------------------------------------------Analysis of geostatistical data For an Introduction to geoR go to http://www. analogamente em SpatialLines ´ e definido por um conjunto de linhas e em SpatialPolygons ´ e definido por um conjunto de pol´ ıgonos. Estas duas geometrias s˜ ao semelhantes em sua forma. uma linha onde o primeiro e u ´ltimo pontos s˜ ao iguais. ambas subclasses s˜ ao extendidas pela adi¸ c˜ ao de atributos em subsubclasses SpatialLinesDataFrame e SpatialPolygonsDataFrame. Pontos s˜ ao definidos simplesmente por um par de coordenadas.br/geoR geoR version 1. A seguir vamos utilizar um exemplo envolvendo trˆ es pol´ ıgonos dispon´ ıveis em um conjunto de dados do pacote geoR.ca20[c("reg1". "reg2". Desta forma. Para nos concentrar apenas nos pol´ ıgonos vamos extra´ ı-los do objeto de dados original e armazen´ a-los em uma lista onde cada elemento ´ e uma matriz.leg.

e informa¸ c˜ oes sobre se ele ´ e interno ou externo (hole e ringDir). o primeiro passo ´ e transformar cada matriz que define um pol´ ıgono em um objeto da classe Polygon. > getClass("Polygon") Class "Polygon" Slots: Name: labpt area hole ringDir Class: numeric numeric logical integer Extends: "Line" coords matrix . por exemplo.Introdu¸ c˜ ao ao R $reg1 east north 1 5590 5690 2 5340 5800 3 5220 5700 4 5250 5370 5 5350 5370 6 5450 5500 7 5510 5600 8 5590 5690 $reg2 east north 1 5990 5100 2 5590 5300 3 5350 5370 4 5450 5500 5 5510 5600 6 5590 5690 7 5800 5690 8 5990 5690 $reg3 east north 1 5990 5100 2 5590 5300 3 5350 5370 4 5150 5370 5 4920 5000 6 4920 4900 7 5150 4920 8 5350 4900 9 5590 4800 10 5780 4800 283 Para construir um SpatialPolygon. se a coordenada do u ´ltimo ponto coincide com a do primeiro. que verifica se o pol´ ıgono est´ a bem definido. A estrutura de um objeto da classe Polygon inclui ainda o r´ otulo atribu´ ıdo ao pol´ ıgono (labpt) que ´ e dado pelo seu centroide. a sua ´ area.

drop = T].] 5340 5800 [3.] 5510 5600 [8.] 5220 5700 [4.] 5590 5690 > sapply(areas. function(x) identical(x[1. Neste objeto as informa¸ c˜ oes dos pol´ ıgonos s˜ ao n˜ ao apenas armazenadas mas tamb´ em combinadas para gerar informa¸ c˜ oes da ´ area como um todo.] 5590 5690 [2. um ou mais objetos Polygons s˜ ao combinados na forma de lista para compor um objeto da classe SpatialPolygons. function(x) { + if (identical(x[1. x[nrow(x).Introdu¸ c˜ ao ao R > Polygon(areas$reg1) An object of class "Polygon" Slot "labpt": [1] 5364.lapply(areas.] 5350 5370 [6.] 5250 5370 [5. > getClass("Polygons") Class "Polygons" Slots: Name: Class: Polygons plotOrder list integer labpt ID numeric character area numeric . Finalmente. x[1. ]) + }) 284 Normalmente. como neste exemplo.530 Slot "area": [1] 95100 Slot "hole": [1] TRUE Slot "ringDir": [1] -1 Slot "coords": east north [1.879 5596. E necess´ ario atribuir identificadores para cada pol´ ıgono que poder˜ ao ser posteriormente utilizados para associ´ a-los com atributos. .] 5450 5500 [7. . drop = T])) reg1 reg2 reg3 TRUE FALSE FALSE > areas <. . se tem mais de um pol´ ıgono. x[nrow(x). Um conjunto de pol´ ıgonos ´ e ´ agrupado na classe Polygons que cont´ em uma lista de objetos v´ alidos da classe Polygon. + . drop = T])) + x + else rbind(x. drop = T].

data. > dadosPol <. 1:3. x.frame(var1 = c(23.lapply(1:length(areas). summary entre outros s˜ ao implementados de forma usual como os demais objetos da fam´ ılia Spatial. sep = "") > SPolDF <. + ID = paste("reg". O data-frame de atributos deve ter nomes de linhas que permitam o pareamento com os nomes atribu´ ıdos aos pol´ ıgonos. "b".SpatialPolygonsDataFrame(SPol.Introdu¸ c˜ ao ao R 285 > POLS <. + "a")) > row."package") [1] "sp" > getClass("SpatialPolygons") Class "SpatialPolygons" Slots: Name: Class: polygons list plotOrder integer bbox proj4string matrix CRS Extends: "Spatial" Known Subclasses: "SpatialPolygonsDataFrame" > bbox(SPol) min max r1 4920 5990 r2 4800 5800 M´ etodos tais como plot.SpatialPolygons(POLS) > class(SPol) [1] "SpatialPolygons" attr(. 34. Atributos ligados aos pol´ ıgonos sau acoplados para cria¸ c˜ ao de SpatialPolygonsDataFrame. function(x) Polygons(list(Polygon(areas[[x]])). spplot. var2 = c("a".paste("reg".names(dadosPol) <. sep = ""))) > class(POLS) [1] "list" > SPol <. dadosPol) . 12).

Introdu¸ c˜ ao ao R 286 40 Arquivos .ufpr. .leg.Rhistory O endere¸ co http://www.br/~paulojus/embrapa/history possui alguns arquivos .Rhistory que foram criados durante o curso.

A p´ agina WEB ´ e disponibilizada usando um servidor APACHE rodando em um Debian-Linux. A A vers˜ ao para WEB foi obtida convertendo o documento L TEXpara xhtml usando o programa TeX4ht. equa¸ c˜ oes e s´ ımbolos matem´ aticos.Introdu¸ c˜ ao ao R 287 Sobre este texto Este material ´ e produzido e disponibilizado usando exclusivamente recursos de SOFTWARE LIVRE . . A op¸ c˜ ao de convers˜ ao utilizada produz documentos em formato . Este documento pode n˜ ao ser bem visualizado em alguns navegadores que n˜ ao possuam suporte a mathml.xml que utilizam mathml para impress˜ ao de f´ ormulas. Se seu navegador n˜ ao suporta mathml (por exemplo Internet Explorer) voce pode habilitar este suporte instalando o MathPlayer. Todo o material foi produzido em ambiente Debian-Linux e/ou Ubuntu-Linux. Para visualiza¸ c˜ ao pela WEB sugerimos o uso do navegador Mozilla Firefox. A O texto foi editado em L TEX e combinado com c´ odigo R usando o recurso do Sweave.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->