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 *** ---

74545 -0.18e-11 *** --Signif.Introdu¸ c˜ ao ao R Signif. . > search() [1] ".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. 1)) Tornando vis´ ıveis as colunas do data-frame.05 ³.115 0. Adjusted R-squared: 0. Error t value Pr(>|t|) (Intercept) -0.33719 Max 1.82522 -1.8912 F-statistic: 156.1 ³ ³ 1 Residual standard error: 0. Depois adicionamos a linha de regress˜ ao verdadeira (intercepto 0 e inclina¸ c˜ ao 1). codes: 0 ³***³ 0. codes: 0 ³***³ 0.03886 3Q 0. Como a fun¸ c˜ ao produz 4 gr´ aficos dividiremos a tela gr´ afica.lm(y ~ x.01 ³*³ 0.9119 on 18 degrees of freedom Multiple R-Squared: 0. Para restaurar a configura¸ c˜ ao original usamos > par(mfrow = c(1.8969.1 ³ ³ 6 1 Residual standard error: 2.GlobalEnv" [5] "package:grDevices" [9] "Autoloads" > attach(dummy) > search() [1] ". weights = 1/w^2) Residuals: Min 1Q -1.6 on 1 and 18 DF.501 on 18 degrees of freedom Multiple R-Squared: 0.³ 0. weight = 1/w^2) > summary(fm1) Call: lm(formula = y ~ x.649 6.556e-10 > fm1 <.907 F-statistic: 186.2)) dividiu a janela gr´ afica em 4 partes para acomodar os 4 gr´ aficos. p-value: 6.185e-11 Gr´ aficos de res´ ıduos s˜ ao produzidos com plot().87258 Coefficients: Estimate Std. Note que o comando acima par(mfrow=c(2.05 ³.14849 0.001 ³**³ 0.50251 Median 0.280 x 1. Adjusted R-squared: 0.³ 0.3 on 1 and 18 DF.08414 13. a linha da regress˜ ao sem pondera¸ c˜ ao e a linha de regress˜ ao ponderada. p-value: 2.01 ³*³ 0. data = dummy.92001 0. e visualizando o resultado. data = dummy.9119.001 ³**³ 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. "verdadeira"). y) lines(lrf.15 Leverage 0. 2)) Ao final destas an´ alises removemos o objeto dummy do caminho de procura. 20. 1. lty = c(1.5 0 5 10 15 Fitted values 20 > > > > > > > + lrf <.5 20 20 −1 0 1 Theoretical Quantiles 2 19 Cook’s distance 0. "ponderada". 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. lwd = 2) legend(1. 3.5 1. y) plot(x. lty = 3) abline(coef(fm)) abline(coef(fm1). "loess".5 14 18 10 15 Fitted values 20 −2 Residuals vs Leverage Standardized residuals −2 −1 0 1 2 18 0. 1.05 0.00 0.lowess(x. curtose e outliers (n˜ ao muito u ´til aqui). 1.0 1.10 0. 1).Introdu¸ c˜ ao ao R 7 > par(mfrow = c(2. lty = 2) abline(0. c("linear simples".0 0. . 2. lwd = c(1.

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.

9 -20.4 > (mds[2] . .update(fm.4 > mds .mds[1])/2 2 -26.mds[3])/12 4 -12.mds[1] .mds[4])/20 5 -5.500 -12.0 > mds <.poly")) > fm0 <.0 845.mds[1] .mds[1] .9 Expt4 -31.4 -31.0 -88.225 Enquanto que contrastes de cada tratamento contra a m´ edia geral s˜ ao obtidos da forma: > options(contrasts = c("contr.5 > (2 * mds[3] . mean) > mds 1 2 3 4 5 909.mds[3] .5 -77.375 -5.225 > mean(Speed) [1] 852.poly")) > fm0 <.4 56. Expt. "contr.0 -64. "contr.0 -64.treatment" "contr.9 .Introdu¸ c˜ ao ao R > fm0$coef (Intercept) Expt2 Expt3 909.update(fm.mds[2])/6 3 -12. Por exemplo.6 3. .6 -7.Run) > fm0$coef (Intercept) Expt1 Expt2 Expt3 852.poly" > options(contrasts = c("contr.5 > mds[-1] .mds[2] .6 3.sum".0 820. .0 856.6 -7.375 > (4 * mds[5] .5 13 Expt4 -88.mean(Speed) 1 2 3 4 5 56. contrastes de Helmert s˜ ao definidos como se segue.400 -26.5 Expt5 -77.5 E este comportamento ´ e controlado por options().500 -12. > options()$contrast unordered ordered "contr. .5 831.mds[2] .helmert".Run) > fm0$coef (Intercept) Expt1 Expt2 Expt3 Expt4 852. ~ .tapply(Speed.5 > (3 * mds[4] .0 -53. ~ .mds[1] 2 3 4 5 -53.

2672612 -6. No pr´ oximo exemplo x ´ e um vetor de 50 valores igualmente espa¸ cados no intervalo [-pi pi].Q .162278e-01 -0.C ^4 [1.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.2672612 6.324555e-01 -0.poly")) model.L . fm0) Vamos agora ver alguns gr´ aficos gerados pelas fun¸ c˜ oes contour() e image().sum(5) [.] -3.287978e-17 -0.3] [.595204e-16 0.324555e-01 -0.1] [. > detach() > rm(fm. "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.1] [.treatment".2] [.4780914 [3.324555e-01 0. "contr.162278e-01 -0.] -6.poly")) model.1195229 [2.helmert".helmert(5) [.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).sum".3] [. .matrix(Speed ~ Expt) Ao final desanexamos o objeto e limpamos novamente o workspace.matrix(Speed ~ Expt) options(contrasts = c("contr.4780914 [5. y idem.162278e-01 0.matrix(Speed ~ Expt) options(contrasts = c("contr.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.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. "contr.5345225 3.7171372 [4. > contr.162278e-01 0.324555e-01 0.5345225 1.] 3.] 6.2] [.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.poly")) model. Para entender melhor os resultados acima analise as sa´ ıdas dos comandos abaixo. > > > > > > options(contrasts = c("contr.poly(5) .5345225 -3.

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

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

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

No caso do Windows siga os links : Windows (95 and later) --> base e copie o arquivo de instala¸ c˜ ao .org voce ir´ a encontrar arquivos de instala¸ c˜ ao para os sistemas operacionais Linux. 2.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. 1. Suse. Por exemplo.tar.R-project. Maiores informa¸ c˜ oes podem ser obtidas o manual R Instalation and Administration .exe que deve ser rodado para efetuar a instala¸ c˜ ao.gz) que deve ser descompactado e instru¸ c˜ oes para compila¸ c˜ ao devem ser seguidas.list adicione a seguinte entrada: Ubuntu: deb http://cran.org/bin/linux/ubuntu dapper/ Debian: deb http://cran. 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.r-project. Debian. entre outras. para instalar no Debian ou Ubuntu LINUX pode-se fazer (com privil´ agios de root): (a) No arquivo /etc/apt/sources.br.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. Eu pessoalmente prefiro rodar os comandos dispon´ ıveis neste link. Windows e Macintosh. Nas ´ areas de download do R. Compilando a partir da fonte Neste caso pode-se baixar o arquivo fonte do R (. como por exemplo em http://cran. Al´ em disto o R est´ a dispon´ ıvel como pacote de diversas distribui¸ c˜ oes LINUX tais como Ubuntu. RedHat (Fedora).

H´ a alguns espelhos (mirrors) brasileiros da ´ area de downloads do programa chamada de CRAN (Compreensive R Arquive Network). A seguir digite (ou ”recorte e cole”) os comandos mostrados neste material.r-project. Cart˜ ao de Referˆ encia em formato PDF preparado por Tom Short. Detalhes sobre o projeto. 1. 4. 3. Inicie o R em seu computador. Seguem algumas informa¸ c˜ oes b´ asicas sobre este sistema. . Este ´ e o prompt do R indicando que o programa est´ a pronto para receber seus comandos.4 Cart˜ ao de referˆ encia Para operar o R ´ e necess´ ario conhecer e digitar comandos. Isto pode trazer alguma dificuldade no inicio at´ e que o usu´ ario se familiarize com os comandos mais comuns. documenta¸ c˜ ao e diversas outras informa¸ c˜ oes podem ser encontradas na p´ agina oficial do projeto em: http://www. Cart˜ ao de Referˆ encia em formato PDF preparado por Jonathan Baron. 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.org.ufpr. 4. 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. 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.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.3 Utilizando o R Siga os seguintes passos. 4. colaboradores.br-r-project. entre eles um situado no C3SL/UFPR que pode ser acessado em http://cran. Vocˆ e ver´ a o s´ ımbolo > indicando onde vocˆ e ir´ a digitar comandos.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. O programa pode ser copiado livremente pela internet. linhas iniciadas pelo s´ ımbolo # s˜ ao coment´ arios e s˜ ao ignoradas pelo R. 4.Introdu¸ c˜ ao ao R 19 4 Introdu¸ c˜ ao O programa computational R ´ e gratuito. Aqui v˜ ao trˆ es op¸ c˜ oes: Cart˜ ao de Referˆ encia em formato HTML e traduzido para portuguˆ es. de c´ odigo aberto e livremente distribu´ ıdo e proporciona um ambiente para an´ alises estat´ ısticas.est. Para iniciar o Rno LINUX basta digitar R na linha de comando. 2.br/Rtutorial.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.

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

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

ao digitarmos o seu nome. > x > x [1] > x > x [1] > x > x [1] <. dados.sqrt(2) > x [1] 1.224606e-16 Neste material ser´ a dada preferˆ encia ao primeiro s´ ımbolo. matrizes. etc s˜ ao armazenados na mem´ oria ativa do computador na forma de objetos.3 Objetos OR´ e uma linguagem orientada ` a objetos: vari´ aveis. Por exemplo em x <. o programa exibe o valor do objeto: > x <. Por exemplo.sqrt(2) dizemos que ”x recebe a raiz quadrada de 2”. 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 <. Usu´ arios pronunciam o comando dizendo que o objeto ”recebe” (em inglˆ es ”gets”) um certo valor. Exemplos: > x <. pode-se ainda usar os s´ ımbolos -> ou = (este apenas em vers˜ oes mais recentes do R). As linhas a seguir produzem o mesmo resultado. se um objeto x tem o valor 10. . fun¸ c˜ oes.224606e-16 <. Como pode ser esperado vocˆ e pode fazer opera¸ c˜ oes aritm´ eticas com os objetos. Vocˆ e pode armazenar um valor em um objeto com certo nome usando o s´ ımbolo <-.usualmente utilizado para atribuir valores a objetos.224606e-16 = sin(pi) 1.sin(pi) 1.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.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.sin(pi) 1.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.

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

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.na(x)) [1] TRUE > all(is.finite(x)) [1] FALSE > all(is.4 NA > mean(x) [1] NA 34 TRUE FALSE FALSE 39 1.finite(x) [1] FALSE FALSE FALSE FALSE FALSE > any(!is.(x .3 3.Introdu¸ c˜ ao ao R > is. n˜ ao est´ a dispon´ ıvel.nan(x) [1] FALSE FALSE FALSE FALSE FALSE > is. > x1 <.na(x) [1] FALSE FALSE > any(is. > x[3] <.4 Agora vamos ver outros valores especiais.na(x)) [1] FALSE > x + 5 [1] 28 39 NA 16 > x/10 [1] 2.finite(x)) [1] TRUE 24 A seguir vamos substituir o terceiro dado 12 pelo c´ odigo de dado faltante.finite(x1) [1] FALSE FALSE FALSE FALSE FALSE > !is.34)/0 > x1 [1] -Inf NaN NA -Inf NaN > is.NA > x [1] 23 34 NA 11 > is.finite(x1) [1] TRUE TRUE TRUE TRUE TRUE > is.finite(x) [1] TRUE TRUE TRUE TRUE TRUE > !is.1 3.nan(x1) [1] FALSE TRUE FALSE FALSE TRUE .

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

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

> > > > rep(1:4. a seguir.9333 > min(x9) [1] 57 > max(x9) [1] 96 > summary(x9) Min. each = 4).00 66.00 75. 1st Qu.25 74. mean = 70. 4) rep(1:4.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. Max.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.4 > var(x9) [1] 184.40 87. sd = 10)) > x9 [1] 73 91 57 77 65 75 59 96 91 70 > sum(x9) [1] 754 > mean(x9) [1] 75. Clique aqui para ver um arquivo de dados. vamos ver os comandos que podem ser usados para criar vetores para cada uma das trˆ es colunas iniciais deste arquivo.60 1. each = 12) rep(1:4. > x9 <. Median Mean 3rd Qu. A primeira coluna pode ser obtida com um dos dois comandos mostrados inicialmente. rep(12.Introdu¸ c˜ ao ao R [1] 2 5 9 5 8 12 > (1:3) * x2 [1] 1 6 18 > x2/(1:6) [1] 1.25 0. 57.50 2.50 96. Os demais reproduzem a segunda e terceira coluna do arquivo de dados. 4)) rep(rep(1:3.00 0.round(rnorm(10. 12) .00 1.

a sele¸ c˜ ao de elementos ´ e mais geral podendo atender a crit´ erios definidos pelo usu´ ario.x9 > 72 > ind.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.72 <. H´ a tamb´ em algumas fun¸ c˜ oes para cria¸ c˜ ao autom´ atica. "beltrano". > 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. sexto. O vetor pode ser ainda convertido para o formato de uma vari´ avel indicadora (”dummy”).c("fulano". oitavo e d´ ecimo) > x9[1:3] [1] 73 91 57 > x9[2 * (1:5)] [1] 91 77 75 96 70 Entretanto.72 [1] TRUE TRUE FALSE TRUE FALSE > as. A seguir mostramos que podemos criar um vetor l´ ogico ind.72 que indica se cada valor de x9 ´ e ou n˜ ao maior que 72. "cicrano") > nomes [1] "fulano" "beltrano" "cicrano" > let5 <. Examine os seguintes comandos. sep = "") [1] "fulano2" > paste(letters[1:8]. > nomes <. sep = "") .letters[1:5] > let5 [1] "a" "b" "c" "d" "e" > let10 <. quarto.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().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.numeric(ind.x9[ind. > paste(nomes.72) [1] 1 1 0 1 0 1 0 1 1 0 > x10 <. 2) [1] "fulano 2" > paste("fulano". 2. 1:3) [1] "fulano 1" "beltrano 2" "cicrano 3" > paste("fulano". 2.

sep = ""). 1:3. Note que neste caso. Entretanto h´ a mais um tipo importante de objeto: os fatores. "SC". c(4. ao criar um vetor de indicadores de “tratamentos” em uma an´ alise de experimentos devemos declarar este vetor como um “fator”. sep = ""). 1:3. > estados <. 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. diferentemente do anterior.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. 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. Nos comandos abaixo esta distin¸ c˜ ao fica mais clara onde um vetor ´ e criado inicialmente como num´ erico e depois convertido para fator. . Por exemplo. 4. 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. > factor(rep(paste("T".c("PR". O primeiro simplesmente guarda os seus elementos enquanto o segundo possui atributos que nesta caso incluem os n´ ıveis do fator. "RS") > estados [1] "PR" "SC" "RS" > class(estados) [1] "character" > attributes(estados) NULL > estados <. c(4. Considere criar um vetor com elementos: T1 T1 T1 T1 T2 T2 T2 T2 T3 T3 T3 29 > rep(paste("T". 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.

+ "RJ". "SP".sel <. ord = T. "PR". "baixo". "MG".estados[-3] > estados.c("medio".Introdu¸ c˜ ao ao R > estados. "RS". "SP". > est <. "baixo". ord=T) ou ordered(). levels = c("PR". "SC". "SC".. "medio". "alto". Note no exemplo abixo o que acontece com o valor "MG" em cada caso. 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. "alto". + "medio". "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 <. "medio". "SP". "ES". Note ainda ´ e pode-se usar duas fun¸ c˜ oes diferentes para definir fatores ordenados: factor(. 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. "RJ". mesmos que estes n´ ıveis n˜ ao estejam entre os elementos atualmente existentes no vetor. "alto")) . "RS". > grau <. "PR". "medio") > factor(grau) [1] medio baixo medio alto baixo baixo alto medio alto medio Levels: alto baixo medio > factor(grau.. 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.sel [1] PR SC Levels: PR RS SC 30 Da mesma forma pode-se criar um vetor e definir para eles n´ ıveis. "alto". "PR". "RS". "baixo".c("SC". + "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. levels = c("baixo".factor(est..

ordenar os elementos ((sort()) e a posi¸ c˜ ao de cada elemento no vetor ordenado e encontrar o ”rank”dos elementos (rank()).5 4.0 5. > vec [1] 83 66 83 73 81 63 71 > vec[-5] [1] 83 66 83 73 63 71 . 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. > vec <.round(rnorm(7. o resto e a parte inteira de uma divis˜ ao. As opera¸ c˜ oes %% e %% fornecem. "medio".0 3.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.min(vec) [1] 6 Outra opera¸ c˜ ao ´ e a remo¸ c˜ ao de elementos de vetores atrav´ es de ´ ındices negativos.0 1.0 6. "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. > which(vec > 70) [1] 1 3 4 5 7 > which. levels = c("baixo". respectivamente. m = 70.max(vec) [1] 1 > which. As func ¸˜ oes abaixo mostram como inverter a ordem dos elementos do vetor (rev()).5 2.Introdu¸ c˜ ao ao R [1] medio baixo medio alto baixo baixo alto medio alto Levels: baixo < medio < alto > ordered(grau.

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

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

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

Tabela 1: Valores da vari´ avel preditora e resposta para uma regress˜ ao linear simples. 2.2 e considere obter os coeficientes da regress˜ ao linear dados por: ˆ = (X ′X )−1 X ′y . nc = 3) > vec <. . 15.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). β (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.6 15. -2. vec) [1] 3.4 16. a solu¸ c˜ ao do sistema:   x + 3y − z = 10 5x − 2y + z = 15  2x + y − z = 7 pode ser obtida com: > mat <.615385 3.1 23.] 170 390 [.Y) retorna X ′Y . 1 2 3 4 5 6 7 8 9 10 13. O pacote MASS fornece ginv() para obten¸ c˜ ao de inversa generalizada (inversa de Moore-Penrose) > t(m4) %*% m5 [. 1.] 10 10 10 [2.1] [.matrix(c(1. -1.2] [1. 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.] 10 10 10 35 A multiplica¸ c˜ ao de matrizes ´ e feita usando o operador %*%.2] [.2 35.9 31.307692 3. 1. 3.3] [1.5 22. 5. A fun¸ c˜ ao t() faz transposi¸ c˜ ao e a invers˜ ao ´ e obtida com solve().1] [. Como exemplo vamos considerar as vari´ aveis preditora e resposta com valores fornecidos na Tabela 6.8 17. Por exemplo.3 39.] 50 110 [2.c(10.] 110 250 [3.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.3 18.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. 7) > solve(mat.Introdu¸ c˜ ao ao R > m5/m4 [.

2:3.3] [. 1 [.] 13 16 19 22 [2.4) > solve(t(X) %*% X) %*% t(X) %*% y [. Para mais detalhes sobre matrizes consulte a p´ agina: Matrizes 6. 2)) > ar1 . em um array os elementos podem ser organizados em um n´ umero arbitr´ ario de dimens˜ oes. dim = c(3. . 15.] 3 6 9 12 .3. 31.1] [1.78 > solve(crossprod(X).] 2. como por exemplo usando a decomposi¸ c˜ ao QR.06 [2.06 [2. 17.6. 35. 39.1] [.4] [1. existem formas ainda mais computacionalmente eficientes de obter o resultado acima no R.] 15 18 21 24 Examine agora os resultados dos seguintes comandos para selecionar e operar elementos do ”array”.4] [1.] 14 17 20 23 [3. Defina um array com o comando a seguir e inspecione o objeto certificando-se que vocˆ e entendeu como arrays s˜ ao criados.c(13.1. 2 [.1] [.2.3.78 Notas: 36 1.2] [. No R um array ´ e definido utilizando a fun¸ c˜ ao array(). 16. > ar1[. 23. 2.2] [.Introdu¸ c˜ ao ao R > X <. 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.1] [1. mas isto n˜ ao ser´ a discutido neste ponto. .9. 22.5.3 Arrays O conceito de array generaliza a id´ eia de matrix. 18.array(1:24.] 2.4.] 8. Enquanto em uma matrix os elementos s˜ ao organizados em duas dimens˜ oes (linhas e colunas).8.] 2 5 8 11 [3. 4.3] [.] 1 4 7 10 [2. crossprod(X.] 8.cbind(1. y)) [. > ar1 <. 1:10) > y <. ] .

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

mostrando os comandos do R utilizados sobre o array de dados. quantas pessoas havia no total? > sum(Titanic) [1] 2201 2. 2]) [1] 57 . quantas crian¸ cas sobreviveram? > sum(Titanic[. .Introdu¸ c˜ ao ao R 3rd Crew 387 670 89 3 38 . 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. quantas pessoas sobreviveram e quantas morreram? > apply(Titanic. . quantas pessoas havia na tripula¸ c˜ ao (crew)? > sum(Titanic[4. . Survived = Yes Sex Class Male Female 1st 5 1 2nd 11 13 3rd 13 14 Crew 0 0 . ]) [1] 885 3. sum) No 1490 Yes 711 4. 1. . 1. 4. Age = Adult. Age = Child. .

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

61.36979 2 8 18.36193 2 11 14. 75. 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.35972 1 2 10.frame(X = 1:10. sd = 2).32687 3 13 14.57823 1 3 11.Introdu¸ c˜ ao ao R 40 6. 67. 68.50729 1 6 14. + 14 + rnorm(5.data.59282 3 12 13. 16 + rnorm(5. 5) > d2 Y lev 1 14. matrizes e arrays for¸ cam todos os elementos a serem do mesmo ”tipo”i. 77. Y = c(51. 54. O ”data-frame”´ e uma estrutura semelhante ` a uma matriz por´ em com cada coluna sendo tratada separadamente.4 Data-frames Vetores. d1$Y) > d2 <. sd = 2).20450 2 10 20. 75. sd = 2))) > d2$lev <.19100 1 4 10.data.35594 3 . + 80.12779 3 14 13.13010 3 15 13. > d1 <..e.44532 1 5 12. Note entretanto que dentro de uma mesma coluna todos elementos ainda ser˜ ao for¸ cados a serem do mesmo tipo. Desta forma podemos ter colunas de valores num´ ericos e colunas de caracteres no mesmo objeto.frame(Y = c(10 + rnorm(5.gl(3.57557 2 7 16.51120 2 9 14. ou num´ erico ou caracter.

19 11. 14. 1st Qu.list(A = 1:10.grid(1:3.13 13. + ncol = 3)) > lis1 $A [1] 1 2 3 4 5 6 7 8 9 10 $B .59 > d3 <. 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.grid(1:3. 10. Median Mean 3rd Qu. 13. summary) INDICES: 1 Min.71 14.51 20.5 Listas Listas s˜ ao estruturas gen´ ericas e flex´ ıveis que permitem armazenar diversos formatos em um u ´nico objeto. Max. Max.80 18. 1st Qu.51 14. Median Mean 3rd Qu.45 10. d2$lev.grid() pode ser muito u ´til gerando autimaticamente combina¸ c˜ oes de valores. 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.Introdu¸ c˜ ao ao R > by(d2$Y.37 16.36 --------------------------------------------------------------INDICES: 3 Min. C = matrix(1:9.82 12.58 16.13 14. > lis1 <.58 11. > expand.33 13.36 13.20 14. Median Mean 3rd Qu.36 --------------------------------------------------------------INDICES: 2 Min. B = "THIS IS A MESSAGE". 1st Qu.expand. Max.

] 2 5 8 [3.1 ³ ³ 1 Residual standard error: 2.³ 0.1] [.0667 1.01 ³*³ 0.2788 Coefficients: Estimate Std.4424 0.86 4.2] [.05 ³.3] [1.³ 0.88 4.88 on 8 degrees of freedom Multiple R-squared: 0.9674 25.05 ³.] 3 6 9 > lis2 <.9285 F-statistic: 117.29 --Signif.9 on 1 and 8 DF. codes: 0 ³***³ 0.list(lis2) [1] TRUE > class(lis2) [1] "lm" > summary(lis2) Call: lm(formula = Y ~ X.Introdu¸ c˜ ao ao R [1] "THIS IS A MESSAGE" $C [.001 ³**³ 0.442 > is.35 8. p-value: 4.067 3. Adjusted R-squared: 0. data = d1) Coefficients: (Intercept) X 50.65 117.9515 -2.3171 10. data = d1) Residuals: Min 1Q Median -2.001 ³**³ 0.45 6.58e-06 *** --Signif. codes: 0 ³***³ 0.09e-09 *** X 3.3076 Max 4.65 977.2212 42 3Q 2.5045 -0.01 ³*³ 0.579e-06 *** Residuals 8 66.579e-06 > anova(lis2) Analysis of Variance Table Response: Y Df Sum Sq Mean Sq F value Pr(>F) X 1 977.9364.1 > names(lis2) ³ ³ 1 .lm(Y ~ X.] 1 4 7 [2. data = d1) > lis2 Call: lm(formula = Y ~ X. Error t value Pr(>|t|) (Intercept) 50.

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

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.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).. Uma fun¸ c˜ ao mais rica em detalhes ´ e str() retorna informa¸ c˜ oes sobre a estrutura do objeto.attr(*.] 3 6 44 "Maria" 6.7 Que tipo de objeto eu tenho? As fun¸ c˜ oes do tipo is. 1:4. lm glm plot plot.] 3 6 > lis1[[2]] [. estado ´ e um fator om trˆ es n´ ıveis.] 1 4 [2.Introdu¸ c˜ ao ao R $nomes [1] "Pedro" "Joao" > lis1[2] $mat [..*() mencionadas no in´ ıcio dasta sess˜ ao podem ser usadas para obter informa¸ c˜ oes sobre a natureza de um objeto.1] [. Entretanto s˜ ao pouco pr´ aticas para determinar qual o tipo de um objeto e retornam apenas um valor l´ ogico TRUE ou FALSE.."RS".$ : chr [1:3] "Baixo" "M´ edio" "Alto" . ar1 ´ e um array. o que pode sem muito u ´til quando se escreve fun¸ c˜ oes em R.default Entretanto isto n˜ ao ´ e dispon´ ıvel desta forma para todas as fun¸ c˜ oes como por exemplo em min.2] [1. Nos exemplos a seguir vemos que a fun¸ c˜ ao informa sobre objecots que criamos anteriormente: x1 ´ e um vetor num´ erico.1] [. 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. .] 2 5 [3."SC": 1 3 2 > str(ar1) int [1:3.$ : chr [1:2] "Masculino" "Feminino" . 1:2] 1 2 3 4 5 6 7 8 9 10 ..2] [1. 6.] 2 5 [3.$ : chr [1:4] "col1" "col2" "col3" "col4" . d1 ´ e um data..] 1 4 [2. "dimnames")=List of 3 . max. > str(x1) num 10 > str(estados) Factor w/ 3 levels "PR".

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 7.4 9.frame³: 10 obs.4 8.4 3.Introdu¸ c˜ ao ao R > str(d1) ³data. 1:2] 1 2 3 4 5 6 45 6.4 10.8 Exerc´ ıcios 1.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 6.4 4. 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 5.

Mostre comando(s) para construir uma matriz 10 × 10 tal que as entradas s˜ ao iguais a i ∗ j . . .1/4 + 1/5 . 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. com x variando de 0 a 50. . x2 e exp(x). .1/2 + 1/3 . (d) 1 . Construa um data-frame com uma tabela com trˆ es colunas: x. .10) faz o vetor z igual a uma seq¨ uˆ encia de 10 vetores x. . 4. 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 + . sendo i a linha e j a coluna. . 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. A fun¸ c˜ ao sum(x) retorna a soma dos elementos do vetor x. (c) 1/(1+1/1!)2 + 1/(1+1/2!)2 + 1/(1+1/3!)2 + .1/6 + . Considere a tabela de freq¨ uˆ encias a seguir. 3.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. A express˜ ao z<-rep(x. (b) 1 + 1/22 + 1/42 + 1/62 + 1/82 + . 5. .

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 .

1 . Vejamos os comandos para o primeiro exemplo. . . l = 101) > y1 <. type = "l") . mas ´ e sempre u ´til entender os comandos passo a passo! (b) log(1) + log(10) + log(100) + . .4365 7.1 Miscelˆ ania de funcionalidades do R O R como calculadora Podemos fazer algumas opera¸ c˜ oes matem´ aticas simples utilizando o R. + log(1000000). onde log ´ e o logar´ ıtmo neperiano.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. Vejamos alguns exemplos calculando as seguintes somas: (a) 102 + 112 + . Agora vamos resolver com apenas um comando: > sum(sqrt(log(10^(0:6)))) [1] 16. y1.Introdu¸ c˜ ao ao R 48 7 7. . 50.(1/x1) * sin(x1) > plot(x1.seq(0. > x1 <.2 e 7. + 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. 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.2.

(1/x) * sin(x).0 0 0. 100. > plot(function(x) 1 . 115) .Introdu¸ c˜ ao ao R 49 0. 50) Vejamos agora como obter o gr´ afico para a segunda fun¸ c˜ ao.(1/sqrt(50 * pi)) * exp(-0.4 y1 0. l = 101) > y2 <. 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 <. 100. y2. 5) > plot(x2.6 0.8 1. 120.seq(80.function() conforme pode ser visto no comando abaixo que nada mais faz que combinar os trˆ es comandos acima em apenas um. 85.2 0. y2.02 * (x2 . > x2 <.2 10 20 x1 30 40 50 Figura 1: Gr´ afico da fun¸ c˜ ao dada em (a).100)^2) > plot(x2. 0. type = "l") ou ainda: > plot(function(x) dnorm(x.0 1. 5).dnorm(x2. 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.

l = 100) x2 <. 3. 0). 7.Introdu¸ c˜ ao ao R 50 0.x^2 polygon(rbind(cbind(rev(x). l = 100) x2 <.3.function(x) x^2 > integrate(fx. cbind(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.00 80 0. -3. 3) 18 with absolute error < 2e-13 A integral acima corresponde ` a´ area mostrada no gr´ afico da Figura 7.02 y2 0. Como exemplo vamos considerar resolver a seguinte integral: I= −3 x2 dx. ty = "l") x <.x^2 plot(x. x^2.seq(-3. (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 <.04 0. col = "gray") .06 0.seq(-4. 4. x2)).08 90 100 x2 110 120 Figura 2: Gr´ afico da fun¸ c˜ ao dada em (b). Esta figura ´ e obtida com os seguinte comandos: > > > > > > x <.

100. de uma vari´ avel cont´ ınua.4e-15 > integrate(function(x) dnorm(x. ´ e possivel obter alguns resultados simb´ olicos. seja X v.d. Sabemos que para distribui¸ c˜ oes cont´ ınuas de probabilidades a integral est´ a associada a probabilidade em um intervalo.6629523 7. 100. 85.100)^2) + } > integrate(fx. 81) e portanto 1 1 2 f (x) = 9√2π exp{− 162 (x − 100) }. com distribui¸ c˜ ao N (100.6629523 with absolute error < 7.6629523 with absolute error < 7. Por exemplo. 9) [1] 0.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. Seja f (x) uma f.4 Matem´ atica simb´ olica no R Embora o R seja um programa predominantemente para opera¸ c˜ oes num´ ericas. 105) 0. 85.pnorm(85. 105) 0. 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. 9). 9) . Vejamos mais um exemplo.a. b ent˜ ao P (a < X < b) = a f (x)dx. 100.4e-15 > pnorm(105.p.function(x) { + (1/(9 * sqrt(2 * pi))) * exp(-(1/162) * (x . em particular para express˜ oes de derivadas que podem ser informadas para . > fx <.

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

.5 2.1/22 + 1/32 .5 3.1/42 + 1/52 . onde x ´ e um vetor com 100 valores igualmente espa¸ cados no intervalo [−1.Introdu¸ c˜ ao ao R 53 3. .5 f (x)dx ρ(h)dh 4..0 2. 1] e y = sin(x) ∗ exp(−x).0 3.0 3.5 3.6 0. (b) 1 .5 (a) 5.2 3. Escreva a sequˆ encia de comandos para obter um gr´ afico x versus y .0 3. (a) I1 = (b) I2 = 0.5 2. 6.5 1.. Considerando as fun¸ c˜ oes acima calcule as integrais a seguir e indique a ´ area correspondente nos gr´ aficos das fun¸ c˜ oes.5 3.1/62 + .0 2.5 1.5 1.0 2.5 2. 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.. 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 + .

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

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

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

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

1 6 225 105 2.4 6.2 800 6 1. 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.22 1 0 3 1 O conjunto mtcars est´ a no pacote datasets que ´ e carregado automaticamente quando iniciamos o R. pode ser necess´ ario ou conveniente ler os dados diretamente destes formato.875 17.02 0 1 4 4 22. A segunda lista os conjuntos de dados de um pacote espec´ ıfico (no exemplo do pacote nlme.90 2. data() data(package="nlme") 8.1 870 2 1. > 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.0 6 160 110 3. O pacote xlsReadWrite implementa tal funcionalidade para arquivos do tipo .6 6.02 0 0 3 2 18.4 6.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.7 8 360 175 3.44 1 0 3 1 18.3 6.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().4 6 258 110 3.table().8 4 108 93 3.2 793 3 2. abaixo mostramos como carregar o conjunto mtcars que est´ a no pacote datasets e depois como localizar e carregar o conjunto de dados topo. A fun¸ c˜ ao data() pode ainda ser usada para listar os conjutos de dados dispon´ ıveis.440 17. A primeira chamada a seguir lista os conjuntos de dados dos pacotes carregados.xls do MS-Excel.320 18.2 800 mpg cyl disp hp drat wt qsec vs am gear carb 21.Introdu¸ c˜ ao ao R 58 8.215 19.0 6 160 110 3.76 3. .460 20.7 6. No momento que este material est´ a sendo escrito esta pacote est´ a implementado apenas para o sistema operacional Windows.6 5. Nestes caso.61 1 1 4 1 21.46 0 1 4 4 21.620 16. Ao carregar os dados ´ e criado um objeto mtcars no seu ”workspace”. Vamos colocar aqui algumas op¸ c˜ oes para importar dados do MS-Excel para o R. Por exemplo.2 690 5 5.1 755 4 3.08 3. portanto os dados est˜ ao prontamente dispon´ ıveis.90 2.85 2.15 3. possivelmente com read. embora seja poss´ ıvel exportar a partir destes aplicativos os dados para o formato texto para depois serem lidos no R.

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

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”.2. na planilha. Fazemos de maneira similar com as colunas Grau de Instru¸ c˜ ao e Regi˜ ao de Procedˆ encia.edit(data.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. No R vari´ aveis . Uma boa forma de iniciar uma an´ alise descritiva adequada ´ e verificar os tipode de vari´ aveis dispon´ ıveis. Ap´ os isto digitamos o nome do objeto (milsa) e podemos ver o conte´ udo digitado. Veja o livro para mais detalhes sobre este dados. NAO s˜ ao num´ ericas e sim categ´ oricas. Precisamos informar para o programa ˜ que as vari´ aveis civil. 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). gr´ aficos e/ou medidas. com vari´ aveis de diferentes tipos: categ´ oricas e num´ ericas (qualitativas e quantitativas). instrucao e regiao. A planilha digitada como est´ a ainda n˜ ao est´ a pronta. na coluna de estado civil vamos digitar o c´ odigo 1 para solteiro e 2 para casado. clicar no nome da vari´ avel e escolher a op¸ c˜ ao CHANGE NAME e informar o novo nome da vari´ avel. No comando a seguir invocamos o editor. 9. Para isto basta. Para digitar rapidamente estes dados ´ e mais f´ acil usar c´ odigos para as vari´ aveis categ´ oricas.2. como mostra a tabela 9.frame. O que queremos aqui ´ e ver como. Bussab e P. Portanto o formato ideal de armazenamento destes dados no R ´ e o data. Os dados est˜ ao reproduzidos na tabela 9. Desta forma. no programa R: entrar com os dados fazer uma an´ alise descritiva Estes s˜ ao dados no ”estilo planilha”. 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. Vari´ aveis podem ser classificadas da seguinte forma: qualitativas – nominais – ordinais quantitativas – discretas – cont´ ınuas e podem ser resumidas por tabelas. > milsa <.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. Para entrar com estes dados no diretamente no R podemos usar o editor que vem com o programa.Introdu¸ c˜ ao ao R 60 9 9.

40 48 11 36 casado Superior 3 23.59 34 10 10 solteiro 2o Grau 7.74 37 5 14 casado 1o Grau 3 8.95 44 2 15 casado 2o Grau 0 9.66 28 0 7 solteiro 1o Grau 6.69 29 8 29 casado 2o Grau 5 14.85 46 7 28 casado 2o Grau 0 14.00 41 0 24 casado Superior 0 12.76 37 4 21 casado 2o Grau 1 11.13 30 5 16 solteiro 2o Grau 9.99 35 10 31 solteiro Superior 16.23 32 5 26 casado 2o Grau 2 13.53 25 8 20 solteiro 2o Grau 10.35 38 8 17 casado 2o Grau 1 9.56 32 10 3 casado 1o Grau 2 5.77 31 7 18 casado 1o Grau 2 9.06 30 9 22 solteiro 2o Grau 11.60 35 0 27 solteiro 1o Grau 13.61 36 4 33 casado Superior 3 17.39 43 4 9 casado 2o Grau 1 7.00 26 3 2 casado 1o Grau 1 4.75 33 7 35 casado 2o Grau 2 19.22 31 5 32 casado 2o Grau 1 16.12 33 6 12 solteiro 1o Grau 8. Civil Instru¸ c˜ ao No Filhos Sal´ ario Ano Mˆ es 1 solteiro 1o Grau 4.59 34 2 23 solteiro 1o Grau 12.80 39 7 19 solteiro Superior 10.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 .46 27 11 13 solteiro 2o Grau 8.26 43 7 34 solteiro Superior 18.Introdu¸ c˜ ao ao R 61 Tabela 2: Dados de Bussab & Morettin Funcion´ ario Est.79 26 1 25 casado 2o Grau 2 13.26 40 7 6 casado 1o Grau 0 6.71 40 6 30 casado 2o Grau 2 15.44 23 6 11 casado 2o Grau 2 8.86 41 0 8 solteiro 1o Grau 7.73 20 10 5 solteiro 1o Grau 6.25 36 5 4 solteiro 2o Grau 5.

59 34 10 2 1 2 NA 7.35 38 8 3 2 2 1 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.79 26 1 3 2 2 2 13.74 37 5 3 2 1 3 8.40 48 11 2 2 3 3 23.46 27 11 2 1 2 NA 8.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 .60 35 0 3 1 1 NA 13.73 20 10 3 1 1 NA 6.95 44 2 3 2 2 0 9.00 41 0 3 2 3 0 12.13 30 5 1 1 2 NA 9.23 32 5 1 2 2 2 13.86 41 0 1 1 1 NA 7.26 40 7 3 2 1 0 6.85 46 7 3 2 2 0 14.69 29 8 1 2 2 5 14.12 33 6 1 1 1 NA 8.53 25 8 1 1 2 NA 10.99 35 10 2 1 3 NA 16.22 31 5 3 2 2 1 16.25 36 5 2 1 2 NA 5.71 40 6 1 2 2 2 15.56 32 10 2 2 1 2 5.75 33 7 2 2 2 2 19.26 43 7 2 1 3 NA 18.76 37 4 1 2 2 1 11.44 23 6 3 2 2 2 8.80 39 7 3 1 3 NA 10.06 30 9 3 1 2 NA 11.77 31 7 2 2 1 2 9.61 36 4 1 2 3 3 17.00 26 3 1 2 1 1 4.39 43 4 2 2 2 1 7.66 28 0 1 1 1 NA 6.59 34 2 2 1 1 NA 12.

66667 26. Para gerar a vari´ avel idade em anos fazemos: > milsa <.56 32 10 2 3 3 2 1 2 5. 1.factor(milsa$regiao.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.factor(milsa$instrucao.91667 42. label = c("solteiro". A seguir redefinimos a vari´ avel civil com os r´ otulos (labels) solteiro e casado associados aos n´ ıveis (levels) 1 e 2.Introdu¸ c˜ ao ao R 63 categ´ oricas s˜ ao definidas usando o comando factor(). lev = c(2. + "outro"). + "2oGrau". 3)) > head(milsa) funcionario civil instrucao filhos salario ano mes regiao 1 1 solteiro 1oGrau NA 4.50000 27. "casado").33333 38.00 26 3 interior 2 2 casado 1oGrau 1 4.41667 41.00000 30.66667 [33] 43.41667 30.transform(milsa.factor(milsa$civil.58333 33.83333 [9] 34.00000 44. ord = T). Para vari´ avel instru¸ cao usamos o argumento adicional ordered = TRUE para indicar que ´ e uma vari´ avel ordinal.50000 28.16667 34.16667 + mes/12) 40.00000 46.transform(milsa.73 20 10 3 5 5 1 1 NA 6.58333 39.33333 [25] 32. instrucao = factor(instrucao. "interior". "Superior"). Por exemplo.91667 [17] 31. idade = ano > milsa$idade [1] 26.41667 20. lev = 1:3. "interior".58333 25. + label = c("capital".16667 35. que vamos usar para redefinir nossas vari´ aveis conforme os comandos a seguir. label = c("1oGrau".33333 . > head(milsa) funcionario civil instrucao filhos salario ano mes regiao 1 1 1 1 NA 4.41667 35. 3=outro.75000 40.25 36 5 capital 4 4 solteiro 2oGrau NA 5.08333 36. lev = 1:3. lev = c(2. 1=interior. Ao final inspecionamos as primeiras linhas do conjunto de dados digitando usando head().73 20 10 outro 5 5 solteiro 1oGrau NA 6.26 40 7 outro 6 6 casado 1oGrau 0 6. + 3))) Vamos ainda definir uma nova vari´ avel u ´nica idade a partir das vari´ aveis ano e mes que foram digitadas.58333 48.00000 31.83333 41. civil = factor(civil.83333 36.58333 37. + levels = 1:2) > milsa$instrucao <. Na vari´ avel regiao codificamos assim: 2=capital. "outro").41667 43.66667 37. label = c("capital".26 40 7 3 6 6 2 1 0 6. + "casado"). regiao = factor(regiao.50000 33. os comandos acima poderiam ser substitu´ ıdos por: > milsa <.25 36 5 2 4 4 1 2 NA 5. 1.83333 23.25000 32. label = c("solteiro".58333 29. levels = 1:2).66 28 0 1 > milsa$civil <.00 26 3 1 2 2 2 1 1 4. ord = T) > milsa$regiao <. label = c("1oGrau". + "2oGrau".56 32 10 capital 3 3 casado 1oGrau 2 5. "Superior"). Inicialmente inspecionamos as primeiras linhas do conjunto de dados.

o valor que ocorre com maior frequˆ encia. > 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 .Introdu¸ c˜ ao ao R Uma outra forma de se obter o mesmo resultado seria: > milsa$idade <. > is. Desta forma podemos obter: (i) uma tabela de frequˆ encias (absolutas e/ou relativas). 9. Vari´ avel Qualitativa Nominal A vari´ avel civil ´ e uma qualitativa nominal.e. 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. Para isto vamos selecionar uma vari´ avel de cada tipo para que o leitor possa. usamos names() para ver os nomes das vari´ aveis. por analogia. gr´ afico e/ou medidas que resumam a vari´ avel A partir destes resultados pode-se montar um resumo geral dos dados.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. A seguir vamos mostrar como obter tabelas.1 An´ alise Univariada A an´ alise univariada consiste basicamente em. Inspecione os comandos mostrados a seguir e os resultados por eleas produzidos. gr´ aficos e medidas com o R.2. (ii) um gr´ afico de setores. Vamos primeiro listar os dados e checar se estao na forma de um fator. A seguir mostramos como fazer an´ alises descritivas uni e bi-variadas. > attach(milsa) NOTA: este comando deve ser digitado para que os comandos mostrados a seguir tenham efeito.data. obter resultados para as demais.milsa$ano + milsa$mes/12 64 Agora que os dados est˜ ao prontos podemos come¸ car a an´ alise descritiva. que ´ e adequada para vari´ aveis deste tipo. 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. Inicialmente verificamos que o objeto milsa ´ e um data-frame. e dim() para ver o n´ umero de linhas (36 indiv´ ıduos) e colunas (9 vari´ aveis). i. (iii) a ”moda”.

2.factor(civil) [1] TRUE 65 A seguir obtemos frequˆ encias absolutas e relativas (note duas formas fiferentes de obter as frequˆ encias relativas. > X11(colortype = "pseudo.table(civil. Note ainda que optamos por armazenar as frequˆ encias absolutas em um objeto que chamamos de civil.tb)[civil.tb) civil solteiro casado 0.tb)] > civil.cube") Finalmente encontramos a moda para esta vari´ avel cujo valor optamos por armazenar no objeto civil.Introdu¸ c˜ ao ao R > is.tb civil solteiro casado 16 20 > 100 * table(civil)/length(civil) civil solteiro casado 44.1. > 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 . > civil.tb.5555556 O gr´ afico de setores ´ e adequado para representar esta vari´ avel conforme mostrado na Figura 9.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. > civil.4444444 0.mo. > 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.tb == max(civil.names(civil.44444 55.table(civil) > civil. Se este for o caso use o comando mostrado a seguir ANTES de fazer o gr´ afico.mo <.tb <.55556 > prop.

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

e n˜ ao um fator.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 .mo <.tb)] > instrucao. > 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. Note que esta deve ser uma vari´ avel num´ erica.names(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.tb)[instrucao.tb == max(instrucao.numeric(instrucao)) [1] 2 > levels(milsa$instrucao)[median(as.factor(filhos) [1] FALSE > is.

> filhos.tb 3 4 5 6 7 1 2 filhos 3 5 Figura 6: Gr´ afico de frequˆ encias absolutas para vari´ avel filhos.tb) > filhos.2.tb <.tb filhos 0 1 2 3 5 4 5 7 3 1 > filhos. 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.20 0.tbr <.25 0. .tbr filhos 0 1 2 3 5 0.table(filhos) > filhos.35 0.prop.Introdu¸ c˜ ao ao R [1] TRUE Frequˆ encias absolutas e relativas s˜ ao obtidas como anteriormente.2.15 0.05 68 O gr´ afico adequado para frequˆ encias absolutas de uma vari´ avel discreta ´ e mostrado na Figura 9. > plot(filhos.1.1 o obtido com os comandos a seguir.table(filhos.

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

268028 > filhos.23 13.99 16.76 11.dp [1] 1.00 NA³s 16. > range(filhos.77 9.ai <.00 4. 1st Qu.15379 > filhos.quantile(filhos.607895 > filhos.75 19.rm = T)) > filhos. na.rm = T) > filhos.26 6.66 6.39 7.qt <. na.71 15.30 > is.06 11.59 7.59 12.rm = T) [1] 0 5 > filhos.26 18.00 Vari´ avel quantitativa Cont´ ınua Para concluir os exemplos para an´ alise univariada vamos considerar a vari´ avel quantitativa cont´ ınua salario.me > filhos. notamos que h´ a comandos para se obter v´ arias medidas de uma s´ a vez.35 9.53 10.65 2.85 14. na. > summary(filhos) Min.86 7.00 12.69 14.74 8.cv [1] 81.diff(range(filhos. na.25 5. 1.46 [13] 8.Introdu¸ c˜ ao ao R > filhos. na. Median 0.filhos. > salario [1] 4.12 8.factor(salario) [1] FALSE > is.qt[4] .80 10.quantile(filhos.79 [25] 13. coeficiente de varia¸ c˜ ao.dp <.00 Max.sd(filhos.00 2. variˆ ancia e desvio padr˜ ao.44 8. Depois obtemos os quartis e da´ ı a amplitude interquart´ ılica.numeric(salario) [1] TRUE .56 5.73 6.60 13.rm = T) [1] 1. na.100 * filhos.cv <.rm = T) > filhos.13 9.61 17. Come¸ camos mostrando os valores da vari´ avel e verificando o seu tipo no R.A <.ai 75% 1 Finalmente. 5.40 23.dp/filhos.95 9.filhos.22 16.00 1.rm = T) 70 Passando agora para medidas de dispers˜ ao vejamos como obter m´ aximo e m´ ınimo da´ ı a amplitude. Inspecione os resultados dos comandos abaixo.qt[2] > filhos.A [1] 5 > var(filhos.qt <.00 > fivenum(filhos) [1] 0 1 2 2 5 Mean 3rd Qu.

1] (12. labels = NULL. Veja alguns exemplos a seguir.23.8.default) function (x.1.11111111 0..9] (14. usamos cut() para agrupar os dados em classes e finalmente obtemos as frequˆ encias absolotas e relativas.1.5.36] (6.8] (17.17. include. breaks. seq(3.22222222 0.12. depois usamos o crit´ erio de Sturges para definir o n´ umero de classes.5.3 > nclass.27777778 0. 23.9. dig.2.) NULL > args(cut.) NULL > salario.9.table(salario.5] 0. ..6.16666667 0.0 23.tb <.36. l = 8))) > prop.21. > range(salario) [1] 4. right = TRUE. Nos comandos mostrados a seguir verificamos inicialmente os valores m´ aximo e m´ ınimo dos dados.05555556 (20.table(cut(salario.6] 0.tb) (3.14.02777778 Na sequˆ encia vamos mostrar dois poss´ ıveis gr´ aficos para vari´ aveis cont´ ınuas: histograma e box-plot conforme Figura 9. > 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..lab = 3.20.Sturges(salario) [1] 7 > args(cut) function (x. > 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.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.lowest = FALSE.21] (9.13888889 0.. .5.6. .

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

16666667 0. O tipo de resumo vai depender dos tipos das vari´ aveis envolvidas.2 An´ alise Bivariada Na an´ alise bivariada procuramos identificar relacc˜ oes entre duas vari´ aveis. instrucao) > civ.165 14.33333333 0.1875 casado 0.4375 0.3750 0.1500 > prop.table(civ. Qualitativa vs Qualitativa Vamos considerar as vari´ aveis civil (estado civil) e instrucao (grau de instru¸ c˜ ao).Introdu¸ c˜ ao ao R Min.13888889 0.19444444 0.515 10.300 73 9. conforme ilustrado abaixo.table() para obter frequˆ encia ralativas globais.160 11.000 7.tb <.gi. 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. Depois usamos prop.270 23.000 7.tb) instrucao civil 1oGrau 2oGrau Superior solteiro 0. Median Mean 3rd Qu.tb instrucao civil 1oGrau 2oGrau Superior solteiro 7 6 3 casado 5 12 3 > prop. 23. tabelas e/ou medidas estat´ ıstica.tb.6000 0. margin = 1) instrucao civil 1oGrau 2oGrau Superior solteiro 0.2. A forma mais adequada vai depender dos objetivos da an´ alise e da interpreta¸ c˜ ao desejada para os dados.tb.552 10.gi.table(civ.120 14.300 Max.08333333 > prop.060 > fivenum(salario) [1] 4. 1st Qu.table(civil.2500 0. Iniciamente obtemos a tabela de frequˆ encias absolutas. A tabela envolvendo duas vari´ aveis ´ e chamada tabela de cruzamento e pode ser apresentada de v´ arias formas. margin = 2) . 4.gi. > civ.table(civ. An´ alises com vari´ aveis de confundimento n˜ ao ser˜ ao discutidas neste ponto. Assim como na univariada estas rela¸ c˜ oes podem ser resumidas por gr´ aficos.gi.gi. por linha e por coluna.08333333 casado 0. Estas s˜ ao chamadas vari´ aveis de confundimento.

3333333 0.gi. > barplot(civ. 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 .4166667 0.6666667 0. respectivamente. instrucao civil 1oGrau 2oGrau Superior solteiro 0.5833333 0. C = . Os comandos a seguir mostram como obter todas estas medidas.3843 Chi-squared approximation may be incorrect .tb) Number of cases in table: 36 Number of factors: 2 Test for independence of all factors: Chisq = 1.gi. beside = T.2 mostramos dois gr´ aficos de barras. legend = T) > barplot(civ. 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 .tb. ei onde oi e ei s˜ ao.2.gi.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.9125. 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. frequˆ encias observadas e esperadas nas k posi¸ c˜ oes da tabela de cruzamento das vari´ aveis. p-value = 0.5000000 Na Figura 9.tb. > summary(civ. df = 2.5000000 casado 0.

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

cl) > ins.0000000 0.2777778 Superior 0.cl instrucao (4.1] (14. com salario instrucao indicando que a vari´ avel salario ´ e explicada (∼) pela vari´ avel instrucao. mean) 1oGrau 2oGrau Superior 7.836667 11. Vamos ent˜ ao obter um boxplot dos sal´ arios para cada n´ ıvel de instru¸ c˜ ao.7300 8. ainda que parcialmente. > boxplot(salario ~ instrucao) Poder´ ıamos ainda fazer gr´ aficos com a vari´ avel salario agrupada em classes.4000 $Superior 0% 25% 50% 75% 100% 10.sal.3] 1oGrau 0.cut(salario. consideramos que a instru¸ c˜ ao deve explicar. quantile(salario)) > ins.2.715144 4.2] (10.7.3333333 0.sal. por´ em agora infromando este resumo para cada n´ ıvel do fator qualitativo.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.55] (7.3333333 0.table(instrucao.2] (10.table(ins.cl <. desvio padr˜ ao e o resumo de cinco n´ umeros do sal´ ario para cada n´ ıvel de instru¸ c˜ ao.10. instrucao.1818182 0. margin = 1) salario.55.23.1250 9.cl instrucao (4.475000 > tapply(salario.0000000 0.3775 23.sal.tb salario.502438 > tapply(salario.3] 1oGrau 6 3 2 0 2oGrau 2 6 5 5 Superior 0 0 2 4 > prop.14.4175 19.7. instrucao.1111111 0.Introdu¸ c˜ ao ao R 0% 25% 50% 75% 100% 4.0075 7.8375 10. Para as medidas o usual ´ e obter um resumo da quantitativa como mostrado na an´ alise univariada.2.14.956464 3.2777778 0.tb.0600 23.10.5300 13.55] (7.23.3000 > salario.5454545 0.1.tb <.6475 16.0000 6.1650 14.5525 10. > tapply(salario. Isto ´ e.1] (14. Note que o fun¸ ca ˜o abaixo usamos a nota¸ c˜ ao de formula do R.9100 14. salario.0000 7. o sal´ ario (e n˜ ao o contr´ ario!). sd) 1oGrau 2oGrau Superior 2.8500 $ 2oGrau 0% 25% 50% 75% 100% 5.55.7400 18.1625 13.528333 16.1.0000000 2oGrau 0. instrucao.3000 . e neste caso os gr´ aficos seriam como no caso anterior com duas vari´ aveis qualitativas.2727273 0. A seguir mostramos alguns exemplos de como obter a m´ edia. quantile) $ 1oGrau 0% 25% 50% 75% 100% 4.

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. .

cl (4. len = 4))) > salario.cl1) salario.2857143 0.cl1 (4.32.23.cut(salario.cl (20.2.5.5000000 0.32.9] 0.30.7.23.7] 2 2 2 1 (30. 1.5.cl1).8.7.2857143 0. salario.9] 1 3 3 2 (34.3] (20.2500000 0.12.cl.1111111 0.9] 8 9 9 9 > salario.34.8.7] 0.table(table(idade.1.4166667 (37.cl <.3] (20.65] (8.1] (14.9.cl1 <.55] (7.3000000 0.8.9] (12.9] (12.Introdu¸ c˜ ao ao R 78 Quantitativa vs Quantitativa Para ilustrar este caso vamos considerar as vari´ aveis salario e idade. > idade.40.8.3333333 0.8.cl <.10.48.1.1111111 0.8] 0.23. seq(0. quantile(salario)) > table(salario.3333333 0.1.23.48.37.8.2] (10. quantile(idade.2] (10.3333333 0.cl1.65.9] 0.1.34.40.5.1111111 0.cl) salario.3333333 0.55] (7.8] 4 3 5 (37.37.cut(salario. seq(0.2.9] 3 4 5 > prop.cl.cut(idade.65.2] (10.1.5] 0.2. 1.9.7.65] (8. salario.23.5] 1 3 2 3 (40.10. > idade.cl). len = 4))) > table(idade.55] (7.5] (40.1428571 (30.cl (4.7.55.cl1 (4.3333333 0.1] (14.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.48.9] 0. mar = 1) salario. Para se obter uma tabela ´ e necess´ ario agrupar as vari´ aveis em classes conforma fizemos no caso anterior.table(table(idade.3] (20.48.7] (30.1] 3 5 2 (32.55.3] (20.3333333 0.9.cl idade.cl) salario.2222222 (34.9] (34.cl idade.14.3] 8 9 9 9 > table(idade.55.48.2222222 0.30.8. mar = 1) salario.cl1. salario.3333333 (40.2000000 (32.9.7.7.cl) idade.8.2857143 0.12.cl1 idade.34.40.10.1] (14.14.2222222 0.30. quantile(salario.cl1 idade.9] 3 1 2 3 > prop. salario.14.9. quantile(idade)) > table(idade.2500000 0.8.cut(idade.1] 0.cl (4.4166667 . Nos comandos abaixo agrupamos as duas vari´ aveis em classes definidas pelos respectivos quartis gerando portanto uma tabela de cruzamento 4 × 4.cl1 <.

3651397 > cor(idade. o sal´ ario e portanto fazemos o gr´ afico com idade n eixo-X. Neste exemplo ´ e razo´ avel admitir que a idade deve explicar. > cor(idade. method = "kendall") [1] 0. salario.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. 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. 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. O gr´ afico adequado para representar duas vari´ aveis quantitativas ´ e um diagrama de dispers˜ ao.2895939 Lembre que ao iniciar as an´ alises com este conjunto de dados anexamos os dados com o comando attach(milsa). Portanto ao terminar as an´ alises com estes dados devemos desanexar este conjunto de dados com o detach() > detach(milsa) . ao menos parcialmente. > plot(idade.214456 > cor(idade. salario) [1] 0. salario) Para quantificar a associa¸ c˜ ao entre vari´ aveis deste tipo usamos um coeficiente de correla¸ c˜ ao. salario.

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. por exemplo. cores de fundo. Por exemplo.file("demo/plotmath. tipos de pontos.show(system. cores dos pontos. Inspecione o gr´ afico cuidadosamente verificando os recursos utilizados (t´ ıtulo. package="graphics")) > file. 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. legendas dos eixos. no “prompt” do programa R digite: > demo(graphics) Voce vai ver a seguinte mensagem na tela: demo(graphics) ---. 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. 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. A cada passo voce vai ter que teclar ENTER para ver o pr´ oximo gr´ afico.show(system. Prossiga inspecionando os gr´ aficos e comandos e pressionando ENTER at´ e terminar a ”demo”.~~~~~~~~ Type <Return> to start : pressione a tecla ENTER a “demo” vai ser iniciada e uma tela gr´ afica ir´ a se abrir. linhas.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. etc). Um novo gr´ afico surgir´ a ilustrando outros recursos do programa.file("demo/persp. package="graphics")) .R".file("demo/graphics.Introdu¸ c˜ ao ao R 80 9. package="graphics")) > file. vamos rodar a demo de recursos gr´ aficos.R".R". Agora voce pode visualizar na janela gr´ afica o gr´ afico produzido pelos comandos mostrados anteriormente. Experimente outras demos como demo(persp) e demo(image). 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. Note que os comandos v˜ ao aparecer na janela de comandos e os gr´ aficos ser˜ ao automaticamente produzidos na janela gr´ afica.show(system.

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

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. etc). package="graphics")) > file. legendas dos eixos.show(system. Por exemplo. cores dos pontos.~~~~~~~~ Type <Return> to start : pressione a tecla ENTER a “demo” vai ser iniciada e uma tela gr´ afica ir´ a se abrir.file("demo/plotmath.R". linhas. package="graphics")) . Prossiga inspecionando os gr´ aficos e comandos e pressionando ENTER at´ e terminar a ”demo”. por exemplo. vamos rodar a demo de recursos gr´ aficos. package="graphics")) > file. cores de fundo. Experimente outras demos como demo(persp) e demo(image). 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) ---. Um novo gr´ afico surgir´ a ilustrando outros recursos do programa.show(system.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/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. Inspecione o gr´ afico cuidadosamente verificando os recursos utilizados (t´ ıtulo. A cada passo voce vai ter que teclar ENTER para ver o pr´ oximo gr´ afico.Introdu¸ c˜ ao ao R 82 10 10. Note que os comandos v˜ ao aparecer na janela de comandos e os gr´ aficos ser˜ ao automaticamente produzidos na janela gr´ afica.file("demo/graphics.R". 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. 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.R". Agora voce pode visualizar na janela gr´ afica o gr´ afico produzido pelos comandos mostrados anteriormente.

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

Finalmente. radia¸ c˜ ao solar.6 74 5 3 4 18 313 11.3 Alguns exemplos Gr´ afico com dois eixos y distintos Considere fazer um gr´ afico de duas vari´ aveis de grandezas distintas. Isto pode ser u ´til. por exemplo.5 dados 1. Y 1 e Y 2 contra uma mesma vari´ avel X .0 72 5 2 3 12 149 12. respectivamente. 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 10 20 30 −2 −1 0 x 1 2 3 −1. 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. um ` a esquerda e outro a direita do gr´ afico. 10. para ver se as flutua¸ c˜ oes s˜ ao comuns com a varia¸ c˜ ao nos valores de X . velocidade do vento e temperatura em Nova York de Maio a Setembro de 1973.5 Figura 12: Histograma gerado com op¸ c˜ oes padr˜ ao (esquerda) e modificadas (direita).5 2. Vejamos na Figura reffig:eixos um exemplo frequentemente citado por usu´ arios.5 0. No gr´ afico da direita nota-se que o t´ ıtulo foi removido.5 −0. Vamos considerar o conjunto de dados airquality j´ a dispon´ ıvel no R que possui medidas de Ozˆ onio. Os texto dos eixos s˜ ao definidos por xlab e ylab.R Wind Temp Month Day 1 41 190 7. Gostar´ ıamos de fazer um gr´ afico destes colocando eixos distintos para Y 1 e Y 2.5 62 5 4 . 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.Introdu¸ c˜ ao ao R 40 40 84 Histogram of x 30 frequências absolutas Frequency 20 10 0 0 −2. 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. sendo que no primeiro argumento da fun¸ c˜ ao as op¸ c˜ oes 1 e 2 correspondem aos eixos das abcissas e ordenadas. > data(airquality) > head(airquality) Ozone Solar.4 67 5 1 2 36 118 8.

:31.00 NA³s : 7. : 1.25 3rd Qu.00 Mean :6. :97.Introdu¸ c˜ ao ao R 5 6 NA 28 NA 14.8 1st Qu. paste(Month.80 3rd Qu.700 Median :79.000 Min.axis = 2.:11. colocando a escala de cada uma delas em um dos eixos verticais.50 Median :205.: 18. : 7.00 1st Qu. col.400 1st Qu.00 First :8Jan60 1st Qu. axes = F.as. ann = F. :5. 4.000 3rd Qu.00 Last :30Sep2003 Median :7.: 7.00 Max. > require(date) > airquality$dates <. plot(Ozone ~ dates. col = 2)) axis(4. + "2003".00 1st Qu.700 Min. type = "l". side = 4. :334. :168. frame = T.3 NA 14. Day. as informa¸ c˜ oes sobre as datas de coleta est˜ ao nas duas u ´ltimas colunas. sep = "/"))) > summary(airquality) Ozone Solar.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. line = 3. col = 2) . 4.00 Max. col = 2) mtext("Ozone".:8.0 Min.:6.0 NA³s Month Day dates Min.8 3rd Qu.958 Mean :77.000 1st Qu.00 Median : 31.500 3rd Qu.00 : 37. :56.700 Max. : 1.000 Median :16.993 Mean :15. : 1. type = "l")) par(new = T) with(airquality.00 Min.00 Max.0 Max.9 Mean : 9.date(with(airquality.:23. > > > > + > > par(mar = c(4. Vamos inicialmente criar uma nova vari´ avel com a representa¸ c˜ ao da data.: 8.13 Mean :185.R Wind Temp Min.88 3rd Qu.:115. plot(Temp ~ dates.000 Max.:258.00 Mean : 42. :9. :20.:72.0 Median : 9.:85.: 63.9 56 66 5 5 5 6 85 Nesses dados. 4)) with(airquality.

axes = F. plot(Temp ~ dates. col = 2)) axis(4. col. type = "l")) par(new = T) with(airquality. line = 3. 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. type = "l". 4)) with(airquality.Introdu¸ c˜ ao ao R 86 > > > > > + > > > options(warn = -1) par(mar = c(4. side = 4. col = 2) mtext("Ozone". 4. plot(Ozone ~ dates. ann = F. 60 . frame = T.axis = 2.

regiao = factor(regiao. civil = factor(civil.matrix) [1] TRUE TRUE > sapply(list(t1. t1f).br/~paulojus/aulasR/dados/milsa. no caso do cruzamento de duas vari´ aveis. t1f). "interior". instrucao = factor(instrucao. 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. ord = T). No exemplo consideram-se as vari´ aveis civil e instrucao que situadas nas colunas 2 e 3 do data-frame.ftable(milsa[c(2. "outro").dat". As fun¸ c˜ oes retornam as tabelas de contingˆ encia em um objeto que pode ser uma matrix. t1f). levels = 1:2). class) [1] "table" "ftable" > sapply(list(t1. > t1 <. > dimnames(t1) .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. Entretanto a classe do objeto resultante vai depender da fun¸ c˜ ao utilizada.transform(milsa. "casado"). is. 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(). 1.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. lev = 1:3. label = c("solteiro". ou de forma mais geral.ufpr. 3)]) > t1 instrucao civil 1oGrau 2oGrau Superior solteiro 7 6 3 casado 5 12 3 > t1f <. label = c("capital". > + > + + + + > > milsa <. Repetimos aqui o preparo inicial dos dados convertendo as vari´ aveis categ´ oricas em fatores do R e criando a vari´ avel idade.table("http://www. para o cruzamento de apenas duas vari´ aveis. 3))) milsa <. "Superior"). os resultados s˜ ao exibidos de forma semelhante.leg. Neste caso. onde o n´ umero de dimens˜ oes ´ e igual ao n´ umero de vari´ aveis. head = T) milsa <. lev = c(2.read. 3)]) > t1f instrucao 1oGrau 2oGrau Superior civil solteiro 7 6 3 casado 5 12 3 > sapply(list(t1. "2oGrau". is.Introdu¸ c˜ ao ao R 87 11 11.transform(milsa. na forma de um array. label = c("1oGrau".table(milsa[c(2.

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

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

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

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

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

regiao capital interior 11 12 outro 13 Para gr´ aficos nem todos os resultados s˜ ao mais poss´ ıveis. beside = T) 0 1 2 3 4 5 . J´ a barplot() ir´ a funcionar apenas para ftable. > plot(t2.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). main = "") > barplot(t2f. mas o resultado pode n˜ ao ser satisfat´ orio pois as barras ir˜ ao mostrar as combina¸ c˜ oes de duas vari´ aveis. plot() vai funcionar para a classe table mas o resultado ´ e inapropriado para ftable.

(b) calcule a probabilidade de que X > 1 (c) calcule a probabilidade de que 0. P. exerc´ ıcio 1) Dada a fun¸ c˜ ao 2 exp(−2x) . Como a fun¸ c˜ ao tem valores positivos para x no intervalo de zero a infinito temos. 0. O gr´ afico escolhido e mostrado na Figura 16 foi o produzido pelo comando plot(f1. 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. conforme mostram os comandos abaixo. Os comandos do R a seguir mostram como fazer o gr´ afico de fun¸ c˜ ao.2 2 e−2x dx cuja representa¸ c˜ ao gr´ afica ´ e mostrada na Figura 17. a Note que h´ a uma edi¸ c˜ ao mais nova: (5 edi¸ c˜ ao. 2 < X < 0.8 pc = P (0.ifelse(x < 0.2 f (x)dx = 0. 0. 2003 . 0.5). para fazer o gr´ afico. 1987. A sa´ ıda da fun¸ c˜ ao mostra o valor da integral (1) e o erro m´ aximo da aproxima¸ c˜ ao num´ erica.d. ∞]. a fun¸ c˜ ao n˜ ao deve ter valores negativos e deve integrar 1 em seu dom´ ınio.d. A fun¸ c˜ ao recebe como argumentos o objeto com a fun¸ c˜ ao a ser integrada e os limites de integra¸ c˜ ao. 2 * exp(-2 * x)) return(fx) } plot(f1) plot(f1. 4a edi¸ c˜ ao. na pr´ atica.8 ∞ f (x)dx = 1 ∞ 2 e−2x dx 0.p.O. Saraiva) EXEMPLO 1 (adaptado de Bussab & Morettin.p. > + + + > > > f1 <.2 < X < 0. 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. Para destacar as ´ areas que . Vamos come¸ car definindo esta fun¸ c˜ ao como uma fun¸ c˜ ao no R para qual daremos o nome de f 1. 0. que definir um limite em x at´ e onde vai o gr´ afico da fun¸ c˜ ao. p´ agina 132. Neste exemplo o objeto ´ e f1 definido acima e o dom´ ınio da fun¸ c˜ ao ´ e [0. Atual Editora.8 Para ser f.Ed.A. se x < 0 (a) mostre que est´ a fun¸ c˜ ao ´ e uma f. se x ≥ 0 f (x) = 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. Os problemas nesta sess˜ ao foram retirados do livro: Bussab. A seguir fazemos o gr´ afico da fun¸ c˜ ao. 10) plot(f1. Vamos achar este limite tentando v´ arios valores. 8) = 0. O comando plot() desenha o gr´ afico da fun¸ c˜ ao.function(x) { fx <. Desta forma as solu¸ c˜ oes seriam dadas pelas express˜ oes pb = P (X > 1) = 1 0.0. > integrate(f1. 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. Estat´ ıstica B´ asica. & Morettin. W.

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

se 0 ≤ x < 1 − x + 1 .p.0 1. se x < 0 ou x ≥ 3 (a) Calcular a probabilidade de que sejam vendidos mais que 150 kg. (b) Calcular a venda esperada em 30 dias.function(x) { + fx <.a. (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. A demanda di´ aria de arroz em um supermercado.0 pc pb 0.0 . em centenas de quilos.numeric(length(x)) + fx[x < 0] <.2 * x[x >= 0 & x < 1]/3 + fx[x >= 1 & x <= 3] <. se 1 ≤ x < 3 f (x) = (3)  3 0 .Introdu¸ c˜ ao ao R 97 0.d.0 0 1 2 x 3 4 5 Figura 17: Probabilidades pedidas nos itens (b) e (c) do Exemplo 1.(-x[x >= 1 & x <= 3]/3) + 1 + fx[x > 3] <. ´ e uma v. > f2 <. X com f.0 + fx[x >= 0 & x < 1] <.5 f1 (x) 1. 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.5 2.  2  3 x .

3 0.1 0.5 f (x)dx e esta integral pode ser resolvida numericamente com o comando: > integrate(f2. 0. portanto a probabilidade P [X > 1. Para calcular a esperan¸ ca E [X ] = xf (x)dx definimos uma nova fun¸ c˜ ao e resolvemos a integral.5 centenas de quilos). Na quest˜ ao (a) pede-se a probabilidade de que sejam vendidos mais que 150 kg (1. Agora vamos responder ` as quest˜ oes levantadas. -1. A fun¸ c˜ ao integrate retorna uma lista onde um dos elementos ($value) ´ e o valor da integral.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.5 0. A ∞ probabilidade corresponde ` a´ area sob a fun¸ c˜ ao no intervalo pedido ou seja P [X > 1. 3) 1 with absolute error < 1.0 −1 0. 5] = 1. . Inf) 0. > integrate(f2.1e-15 0.4 0. 4) 1 with absolute error < 1. 5]. 1.5.3749999 with absolute error < 3.1e-15 > plot(f2.5e-05 A venda esperada em trinta dias ´ e 30 vezes o valor esperado de venda em um dia.2 f2 (x) 0.6 0 1 x 2 3 4 Figura 18: Gr´ afico da fun¸ c˜ ao densidade de probabilidade do Exemplo 2.

1 Exerc´ ıcios 1.95 e a probabilidade associada a um valor qualquer de x. 1. 3))$min plot(f2.3e-05 > 30 * integrate(ef2. 0). -1. 0. f2(1). 4) polygon(x = c(1. 0. ou seja o valor de x que deixa 95% de massa de probabilidade abaixo dele.452278 $objective [1] 7. 0).333333 with absolute error < 7. cex = 2. 3) 1. 5a edi¸ c˜ ao.452278 e a fun¸ c˜ ao objetivo com valor muito pr´ oximo de 0. k). 3). x)$value) > optimise(f.m. > f <. c(0. y = c(0. 3)) $minimum [1] 2.2.5). 0)) plot(f2. Este valor que vamos chamar de k ´ e dado por: k f (x)dx = 0. em u. (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 . (Bussab & Morettin. 28) Em uma determinada localidade a distribui¸ c˜ ao de renda.optimise(f. 1. O quantil ser´ a o valor que minimiza esta probabilidade. k. f2(k). que recebe como argumentos a fun¸ c˜ ao a ser otimizada e o intervalo no qual deve procurar a solu¸ c˜ ao. c(0. que era o que desej´ avamos. k).Introdu¸ c˜ ao ao R > ef2 <.5) Finalmente lembramos que os exemplos discutidos aqui s˜ ao simples e n˜ ao requerem solu¸ c˜ oes num´ ericas. y = c(0. 3. 0 Para encontrar este valor vamos definir uma fun¸ c˜ ao que calcula a diferen¸ ca (em valor absoluto) entre 0. 0. c(0. 2). devendo ser resolvidos analiticamente. mar = c(3. mgp = c(2.function(x) abs(0. 1. Utilizamos estes exemplos somente para ilustrar a obten¸ c˜ ao de solu¸ c˜ oes num´ ericas com o uso do R. pag. 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.95".95 . 3)$value [1] 40 99 Na quest˜ ao (c) estamos em busca do quantil 95% da distribui¸ c˜ ao de probabilidades. dens = 10) text(c(1. A resposta mostra o valor do quantil x = 2.95. 0). -1. 4) polygon(x = c(0.5. 0. 12. dens = 10) k <. ex.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. 194.5. f2(1.integrate(f2. "k"). 0). > > > > > > > par(mfrow = c(1. 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.function(x) { + x * f2(x) + } > integrate(ef2.5. c("0.

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

> > > > > x <.02 0. 10.00 0. 10.004821265 > pbinom(7. 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. type = "h") Fx <.04 N(100. 0. 10.Introdu¸ c˜ ao ao R 105 0.35) plot(x. Fx. Os gr´ aficos das fun¸ c˜ oes de densidade e probabilidade s˜ ao mostrados na Figura 23.64) N(90.0 0. 0.4 Distribuicão Normal X ~ N(100. 10. lower = F) . 0.03 0.35) [1] 0.05 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).35) [1] 0. 0.1 0.pbinom(x. 0. 10.pbinom(7. 10. 3.2 0.dbinom(x.9951787 > 1 . calcular P [X = 7] 4. type = "s") As probabilidades pedidas s˜ ao obtidas com os comandos a seguir.01 f(x) 0. 64) densidade de probabilidade 0.64) N(100. 0. calcular P [X ≥ 8] = P [X > 7] 6.35.3 −3 −2 −1 0 1 valores de X 2 3 0.02120302 > pbinom(7. > dbinom(7. calcular P [X < 8] = P [X ≤ 7] 5.35) plot(x. 10. fx.35) [1] 0.9951787 > sum(dbinom(0:7. 0.0:10 fx <.35)) [1] 0.

15 0.35)) [1] 0.909895 9. 1) e calculamos a probabilidade acumulada at´ e 0.3.35) [1] 0.25 1.75 Portanto. 0.4887607 0.35).75.75) [1] 0. max = 20) [1] 6. d ou r como mencionado anteriormente. 0.2191140 0.3148147 > punif(0.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.0 106 0.Introdu¸ c˜ ao ao R 0.028358 15.8 2 4 x 6 8 10 Figura 23: Fun¸ c˜ oes de probabilidade (esquerda) e distribui¸ c˜ ao acumulada (direita) da B (10. 20) usamos: > runif(5. q .0 0 0. 1] e os argumentos opcionais s˜ ao min e max. para simular 5 valores de X ∼ U (5.35) .4601487 > sum(dbinom(4:6. 10.6 0.3 13.4 fx 0. > args(runif) function (n.004821265 > pbinom(6. 10.pbinom(3. 0. o default ´ e uma distribui¸ c˜ ao uniforme no intervalo [0.443248 8. sorteamos 5 valores da U (0.6375592 0.10 Fx 0.7390514 0. max = 1) NULL > runif(5) [1] 0. min = 5.05 0.2 0.125244 . Nos comandos a seguir inspecionamos os argumentos.537205 11.20 0.00 0 2 4 x 6 8 10 0. 10. min = 0. 0.4601487 13. Por exemplo. [1] 0.

com ou sem reposi¸ c˜ ao (argumento replace. 15. Por exemplo para sortear n´ umeros pode-se usar sample(). podendo ser usada para sorteios.c(23. com a possibilidade de associar diferentes probabilidades a cada elemento (argumento prob. com reposi¸ c˜ ao > sample(1:6. . 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. prob = NULL) NULL Vejamos alguns exemplos: sorteio de 3 n´ umeros entre os inteiros de 0 a 20 > sample(0:20. 20. 3) [1] 9 13 6 sorteio de 5 n´ umeros entre os elementos de um certo vetor > x <. 12. 18. default probabilidades iguais para os elementos). > args(sample) function (x. rep = T) [1] 2 4 2 5 2 4 2 1 3 5 idem ao anterior. 10)). provavelmente devido a sua simplicidade. por´ em agora com a probabilidade de cada face proporcional ao valor da face.Introdu¸ c˜ ao ao R 13. > sample(1:6. rep = T) [1] 6 10 3 6 10 4 9 1 3 2 8 6 6 7 8 13. d. 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. 28. 18) > sample(x. A pr´ opria fun¸ c˜ ao trata isto internamente fazendo a pondera¸ c˜ ao adequada. 34. 13. replace = FALSE. 10. 10. embora algumas outras fun¸ c˜ oes possam ser usadas. 17. size. > sample(1:10. p e d.4 A fun¸ c˜ ao sample() A fun¸ c˜ ao sample() n˜ ao ´ e restrita ` a distribui¸ c˜ ao uniforme discreta. 22.3. default sem reposi¸ c˜ ao). prob = 1:6. s˜ ao apenas entendidos como pesos. 19.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. 5) [1] 28 34 19 13 17 sorteio de 10 n´ umeros entre os poss´ ıveis resultados do lan¸ camento de um dado.

Os exerc´ ıcios abaixo com indica¸ c˜ ao de p´ agina foram retirados de: Magalh˜ aes. 5.C. S˜ ao Paulo. IME-USP. (2001) No¸ c˜ oes de Probabilidade e Estat´ ıstica. 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.3.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. 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) = γ. M. 80) e outra Z ∼ N (85. A probabilidade de indiv´ ıduos nascerem com certa caracter´ ıstica ´ e de 0. 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.4. γ = 0. pag 193) Para X ∼ N (90. Para o nascimento de 5 indiv´ ıduos e considerando os nascimentos como eventos independentes.95 4.P. 3 ed.N. Para quatro lanc ¸amentos independentes dessa moeda. 2 e 5 graus de liberdade. pag 77) Sendo X uma vari´ avel seguindo o modelo Binomial com parˆ ametro n = 15 e p = 0. 100) densidades de distribui¸ c˜ oes χ2 com 1.4. (Ex 1. A. (Ex 8. 100). & Lima. 2. pag 67) Uma moeda viciada tem probabilidade de cara igual a 0.Introdu¸ c˜ ao ao R 108 13. (Ex 5. 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. 392p. . 1. 100) sobreponha ao gr´ afico anterior a densidade de uma vari´ avel Y ∼ N (90. 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.

1 0. . 8. Obtenha o histograma para x.1 0. (Ex 3. 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.2 109 6.1 os dados observados concordam com o modelo te´ orico? fa¸ ca um gr´ afico mostrando as frequˆ encias te´ oricas (esperadas) e observadas. A distribui¸ c˜ ao da soma de duas vari´ aveis aleat´ orias uniformes n˜ ao ´ e uniforme. 9. Verifique o histograma.3 0. irm˜ aos.4 0. (extra´ ıdo de Magalh˜ aes e Lima. 2001) A resistˆ encia (em toneladas) de vigas de concreto produzidas por uma empresa. pag 65) Num estudo sobre a incidˆ encia de cˆ ancer foi registrado.1 0. tios.6. pergunta-se: (a) P (X ≥ 120) (b) P (135 < X ≤ 145) (c) P (X < 120 ou X ≥ 150) 7. para cada paciente com este diagn´ ostico o n´ umero de casos de cˆ ancer em parentes pr´ oximos (pais. 1] com 3000 valores cada e fazendo z = x + y .3 0. Verifique isto gerando dois vetores x e y com distribui¸ c˜ ao uniforme [0. Sendo X uma vari´ avel seguindo o modelo Normal com m´ edia µ = 130 e variˆ ancia σ 2 = 64. y e z .1 0.1 0. (Dica: Use o comando ifelse() do R). comporta-se como abaixo: Simule a resistˆ encia de 5000 vigas a partir de valores gerados de uma uniforme [0. Descreva os comandos que utilizou.2 0.Introdu¸ c˜ ao ao R Resistˆ encia 2 3 4 5 6 pi 0.1]. filhos e sobrinhos).

70.3085375 with absolute error < 2.function(x) { + fx <. 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. ay. Vamos refor¸ car esta id´ eia revisitando um exemplo visto na aula anterior. Note que esta fun¸ c˜ ao.1e-05 e os resultados acima evidentemente coincidem com os obtidos anterioriormente usando pnorm(). com distribui¸ c˜ ao N (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.(1/sqrt(2 * pi * 100)) * exp((-1/200) * (x . .1e-06 Portanto para os demais ´ ıtens do problema P [90 < X < 110] e P [X > 95] fazemos: > integrate(fn. 10) [1] 0. portanto entre 70 e 130. Seja X uma v. Para calcular a probabilidade P [X < 95] usamos o comando: > pnorm(95. 90. 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().6e-15 > integrate(fn. > > > > > > x <. fx. 14. 100. type = "l") ax <.c(0. 95) ay <. diferentemente da pnorm() reporta ainda o erro de aproxima¸ c˜ ao num´ erica.seq(70. fn(95). 100). 95. 0) polygon(ax. fn(70).a.6826895 with absolute error < 7. x[x < 95]. Podemos ent˜ ao fazer como nos comandos que se seguem.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 +/.fn(x) plot(x. -Inf. fx[x < 95]. 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. l = 200) fx <.3085375 Vamos agora “esquecer” o comando pnorm() e ver uma outra forma de resolver usando integra¸ c˜ ao num´ erica.6914625 with absolute error < 8.trˆ es desvios padr˜ oes. 110) 0. +Inf) 0. > integrate(fn. 130. 95.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.c(70. 95) 0. 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 <.

lambda = 500) { + fx <. Para ilustrar o uso do R vamos tamb´ em obter a resposta usando integra¸ c˜ ao num´ erica. 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.04 80 90 100 x 110 120 130 Figura 24: Fun¸ c˜ oes de densidade da N (100.Introdu¸ c˜ ao ao R 111 0. (1/lambda) * exp(-x/lambda)) + return(fx) .02 0. 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.00 70 0. > fexp <. 14. Fica como exerc´ ıcio encontrar o valor da integral acima. 100) com a ´ area correspondente ` a P [X ≤ 95].ifelse(x < 0.function(x.01 fx 0. Calcular a probabilidade P [X ≥ 400]. 0.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.03 0.

exp.00088 > ex <.dexp(x. lambda = 500. 0. 0.((x . Para isto vamos definir fun¸ c˜ oes para a esperan¸ ca e variˆ ancia e fazer a integra¸ c˜ ao num´ erica. Inf)$value > ex [1] 500 > v.function(x.exp <.c(0. x[x > 400]. dens = 10) 14. +∞) mas para fazer o gr´ afico consideramos apenas o intervalo (0. 2000. Note que a fun¸ c˜ ao ´ e positiva no intervalo (0. 2000) ay <. x[x > 400]. > > > > > > x <.x)^2) * (1/lambda) * exp(-x/lambda) + return(vx) + } > integrate(v. Inf.x) { + vx <. 400. > e.Introdu¸ c˜ ao ao R + } > integrate(fexp. l = 200) fx <. lambda = 500) { + ex <.exp. Inf) 500 with absolute error < 0.integrate(e. type = "l") ax <. 2000).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).x * (1/lambda) * exp(-x/lambda) + return(ex) + } > integrate(e. rate=1/500. A Figura 25 mostra o gr´ afico desta distribui¸ c˜ ao com indica¸ ca ˜o da ´ area correspondente ` a probabilidade pedida. Mas caso necess´ ario set.exp.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. 0. rate = 1/500) plot(x. porque a semente do gerador ´ e automaticamente modificada pela fun¸ c˜ ao. Em geral o usu´ ario n˜ ao precisa se preocupar com este mecanismo. 2000). 0) polygon(ax.seq(0. Cada vez que o comando rnorm() ´ e chamado diferentes elementos da amostra s˜ ao produzidos.x = ex) 250000 with absolute error < 6. ay.exp. exp. 400.exp <. 1/500). fx. 2000. Novamente para ilustrar o uso do R vamos “esquecer” que conhecemos estes resultados e vamos obtˆ e-los numericamente. exp.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.c(400.seed() .9 14. Inf) 0. dexp(c(400. onde o argumento corresponde a 1/λ na equa¸ c˜ ao da exponencial.function(x. lower=F).

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

20. 2. 0. 1000)) [1] 0.4464515 997.553964 35.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. 5. mean = c(10.seed)| e |help(set.05. i. Isto ´ e especialmente importante no caso de usarmos calculadoras e/ou tabelas para calcular probabilidades. Depois retornamos a semente ao seu estado original a a pr´ oxima amostra tem portanto os mesmos elementos da primeira. visto que ´ e f´ acil calcular as probabilidades exatas com o aux´ ılio do computador. A aproxima¸ c˜ ao neste caso ´ e de que X ∼ B (n. > > > > > > xb <. P [X < 6] Neste caso P [XB < 6] = P [XB ≤ 5] ≈ P [XN ≤ 5. mean = c(0. os desvios padr˜ ao utilizados foram (2. 5.5)) lines(xn. sqrt(2. Na pr´ atica.5 ao valor pedido.644854 1.5) plot(xb.0:10 px <. lembrando que ao usar a aproxima¸ c˜ ao pela normal devemos usar a corre¸ c˜ ao de continuidade e/ou somando e subtraindo 0. 0.95)) [1] -1. 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. 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. p) ≈ N (np. 2.4257775 10. type = "h") xn <.5). Seja X ∼ B (10. p).644854 > rnorm(4. Para saber mais sobre gera¸ c˜ ao de n´ umeros aleat´ orios no R veja |help(.872238 28.7488927 100.seed)| 14.dbinom(xb.5) . px. A Figura 26 mostra o gr´ afico da distribui¸ c˜ ao binomial e da aproxima¸ c˜ ao pela normal. Quando usamos um computador esta aproxima¸ c˜ ao ´ e menos importante.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.5] > pbinom(5. 30. 1/2) e portanto com a aproxima¸ c˜ ao X ≈ N (5. Seja X ∼ B (n.e.584654 Note que no u ´ltimo exemplo a lei da reciclagem foi utilizada no vetor de desvios padr˜ ao.7948582 > rnorm(4. 40). fx) Vamos tamb´ em calcular as seguintes probabilidades exatas e aproximadas. 10.dnorm(xn. 10. > qnorm(c(0.Random. len = 100) fx <.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. sd = c(2. 5). 100. De toda forma vamos ilustrar aqui este resultado. 14. 0. 5)) [1] 13.seq(0. 10. 10.963627 6. np(1 − p)). Vejamos como fica a aproxima¸ c˜ ao no caso da distribui¸ c˜ ao binomial.

sqrt(2.5).828125 > pnorm(6. 5.5] > 1 . [1] 0. 5. 2.6230469 > pnorm(5.5)) [1] 0. 0. 10.10 0.20 0.05 0.15 0.6240852 P [X ≤ 6] Neste caso P [XB ≤ 6] ≈ P [XN ≤ 6.25 2 4 xb 6 8 10 Figura 26: Fun¸ c˜ ao de probabilidade da B (10. 10.9453125 .8286091 P [X > 2] Neste caso P [XB > 2] = 1 − P [XB ≤ 2] ≈ 1 − P [XN ≤ 2.00 0 0.5) [1] 0.5] > pbinom(6. sqrt(2. 1/2) e a aproxima¸ c˜ ao pela N (5.5) [1] 0.pbinom(2.5.5.5)) [1] 0.Introdu¸ c˜ ao ao R 115 px 0. 0.

5) .pnorm(3.5)) [1] 0.5] > pbinom(8.5) [1] 0.8173828 > pnorm(8. sqrt(2. sqrt(2. 5. 10.5] − P [XN ≤ 3.8151808 P [1 ≤ X ≤ 5] Neste caso P [1 ≤ XB ≤ 5] = P [XB ≤ 5] − P [XB ≤ 0] ≈ P [XN ≤ 5.5)) [1] 0. 10.5) . 5.5)) . 5. 0.5.pbinom(1. 10.6220703 > pnorm(5.5. 0.9865717 P [X = 7] Neste caso P [XB = 7] ≈ P [6. sqrt(2. sqrt(2.5)) [1] 0.1144677 P [3 < X ≤ 8] Neste caso P [3 < XB ≤ 8] = P [XB ≤ 8] − P [XB ≤ 3] ≈ P [XN ≤ 8. 5.5) [1] 0. 0. sqrt(2. 5.5.5)) [1] 0.5)) .pnorm(6.pnorm(0. 10.5 ≤ XN ≤ 7.5)) [1] 0.5. 10.pbinom(3. 5.pnorm(1.5)) .6218719 116 . 5. 0. 0.5.5] − P [XN ≤ 0.9892578 > 1 .5.Introdu¸ c˜ ao ao R > 1 .5) [1] 0.5) [1] 0.5] > 1 .1171875 > pnorm(7. 0.5.5] > pbinom(5. 10. 5.9430769 P [X ≥ 2] Neste caso P [XB ≥ 2] = 1 − P [XB ≤ 1] ≈ P [XN ≤ 1.pbinom(0. sqrt(2.5] > dbinom(7.5.pnorm(2. sqrt(2. sqrt(2.

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. (c) Obter as probabilidades: P [X > 2] P [1.7 Exerc´ ıcios 1.Introdu¸ c˜ ao ao R 117 14. 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. (Bussab & Morettin. pag.5 < X < 6] P [X < 8] . ex. 198.

que pode ser vista digitando help(density) Basicamente. 15. 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. (ii) estimar o(s) parˆ ametro(s) a partir dos dados.d) > rug(precip) Embora os resultados mostrados acima seja simples e f´ aceis de entender. prob = T) precip. agora sem fazer o histograma. 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. Estas distribui¸ c˜ oes tem express˜ oes conhecidas e s˜ ao indexadas por um ou mais parˆ ametros. testes Monte Carlo. > > > > data(precip) hist(precip. Vamos nos ater ` as informa¸ c˜ oes principais que nos permitam compreender o b´ asico necess´ ario sobre o uso da fun¸ c˜ ao. dentre outros. Muitas vezes o que se faz ´ e: (i) assumir que os dados s˜ ao provenientes de certa distribui¸ c˜ ao. capturando e concentrando-se nos principais aspectos dos dados dispon´ ıveis.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. Nesta sess˜ ao vamos ver como podemos. caso contr´ ario tenta-se usar uma outra distribui¸ c˜ ao e recome¸ ca-se o processo. Em particular. conforma mostra a Figura 27. 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.1 Estima¸ c˜ ao de densidades A estima¸ c˜ ao de densidades ´ e implementada no R pela fun¸ c˜ ao density(). > plot(precip. Podem ser dados pesos aos dados vizinhos de acordo com sua proximidade ao ponto a ser estimado. Nos comandos a seguir vamos carregar o conjunto de dados. Portanto. 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. 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. 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. 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. Para maiores detalhes veja as referˆ encias na documenta¸ c˜ ao da fun¸ c˜ ao.d) Portanto podemos ver que density() “suaviza” o histograma. 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. 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. Depois disto procura-se verificar se o ajuste foi “bom o suficiente”.density(precip) lines(precip.d <. 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. Vamos examinar os argumentos da fun¸ c˜ ao. . Vamos ver na Figura 28 uma outra forma de visualizar os dados e sua densidade estimada.

. > args(density) function (x.035 0.025 0. O R implementa v´ arios n´ ucleos diferentes cujos formatos s˜ ao mostrados na Figura 30.045. c("bw=1".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. respectivamente. main = "") rug(precip) lines(density(precip.020 0.. bw = 1).005 0.default)$kernel)) > plot(density(0.010 Density 0. . "bw=10"). Os resultados est˜ ao na Figura 29.015 0. Para ilustrar isto vamos experimentar a fun¸ c˜ ao com diferentes valores para o argumento bw. ao que chamamos de n´ ucleo (kernel). xlab = "". bw = 10). lty = 1:3) O outro argumento importante ´ e tipo de fun¸ c˜ ao de pesos..Introdu¸ c˜ ao ao R 119 Histogram of precip 0. bw = 1. main = "kernels com bw = 1") > for (i in 2:length(kernels)) lines(density(0. 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. 0. "bw=5". kern = kernels[i]). bw = 1). lty = 3) legend(5.000 0 0. bw = 5).) 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.eval(formals(density. lty = 2) lines(density(precip. > (kernels <.

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

Bem. ao inv´ es de um valor num´ erico. > precip. Estes m´ etodos podem ser especificados no mesmo argumento bw. passando agora para este argumento caracteres que identificam o valor. Na Figura 33 ilustramos resultados obtidos com os diferentes m´ etodos.03 0.nrd(). bw = "sj") > plot(precip. 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.Introdu¸ c˜ ao ao R 121 bw=1 bw=5 bw=10 0.density(precip.02 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.00 0.01 Density 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. 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. > data(precip) > plot(density(precip. O problema ´ e que esta escolha ´ e subjetiva.dSJ <. 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.

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

Introdu¸ c˜ ao ao R 123 gaussian epanechnikov rectangular triangular biweight cosine 0. usando uma fun¸ c˜ ao j´ a existente no R 16. 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. Os dados foram os seguintes (em . utilizando o R como uma calculadora 2. 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. escrevendo uma fun¸ c˜ ao 3.02 0. Para fins did´ aticos mostrando os recursos do R vamos mostrar trˆ es poss´ ıveis solu¸ c˜ oes: 1.00 0.03 0 20 40 60 N = 70 Bandwidth = 3.01 Density 0. 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.

5.3 4.6.7. 5. 5.3. 4. com n − 1 graus de liberdade.9 3.2) Sabemos que o intervalo de confian¸ ca para m´ edia de uma distribui¸ c˜ ao normal com variˆ ancia desconhecida.0 3.000 0. 3. 4. 6.4.5.025 0.030 0 20 40 60 N = 70 Bandwidth = 3.005 0. Vamos agora obter a resposta das trˆ es formas diferentes mencionadas acima.7 4.default(x = precip.6 4.8.4 5.9. n x ¯ + tt S2 n onde tt ´ e o quantil de ordem 1 − α/2 da distribui¸ c˜ ao t de Student.3 4. 6.5 3.6.035 0.8.1.5 4.c(2.5. 5.9 6.7 5. bw = "sj") 0. 3.015 0.1 4.4. 4. 4.6 5.5 6. 5.9.9 4.2 Entramos com os dados com o comando > tempo <.7. para uma amostra de tamanho n ´ e dado por: x ¯ − tt S2 .4 3. 4. + 5.8.3.8 5. 4.Introdu¸ c˜ ao ao R 124 density. minutos): 2.8 5. 5. .020 0.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.010 Density 0. 3.9.8 5. 3. 4.

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

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

9 9.3 10.6 9.9 10. 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.0 8. Obter IC’s a 90% e 99%.5 10.4 10. Queremos verificar se duas m´ aquinas produzem pe¸ cas com a mesma homogeneidade quanto a resistˆ encia ` a tens˜ ao.3 10.Introdu¸ c˜ ao ao R 127 2. 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.5 10.7 9. 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.7 8.2 9.0 11.8 9.8 11. Para isso.8 9.0 4.8 9.4 10. . Os dados abaixo s˜ ao uma amostra aleat´ oria da distribui¸ c˜ ao Bernoulli(p).7 10. sorteamos dias amostras de 6 pe¸ cas de cada m´ aquina.

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

-5 * log(8 * pi) . 15.seq(11. 12. Primeiro entramos com os dados que armazenamos no vetor x > x <. 15. > mu.sum(x^2) > sx <.vals * sx + 10 * (mu.2 (este valor pode ser obtido com o comando mean(x)) e portanto vamos definir tomar valores ao redor deste ponto.vals <. 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(µ). e calculamos as quantidades > sx2 <. mean = mu. 18. 11. Vamos ver agora uma primeira poss´ ıvel forma de fazer a fun¸ ca ˜o de verossimilhan¸ ca no R. ylab = expression(l(mu))) Entretanto podemos obter a fun¸ c˜ ao de verossimilhan¸ ca no R de outras forma mais geral e menos trabalhosa. 1 (4) 5.vals.2 * mu. agora tomamos uma sequˆ encia de valores para µ. 15. 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. Sabemos que o estimador de m´ axima verossimilhan¸ ca neste caso ´ eµ ˆ = 13. xlab = expression(mu).Introdu¸ c˜ ao ao R 4. 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. > logvero <.sum(x) 3. dados) { + sum(dnorm(dados.c(12. e a seguir calculamos os valores de l(µ) de acordo com a equa¸ c˜ ao acima > lmu <. sd = 2. 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 .function(mu. 9. e finalmente fazemos o gr´ afico visto na Figura 34 > plot(mu. l = 100) 4. 1. 17. type = "l".(sx2 . 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 ). 13) 2. lmu. 10.vals^2))/8 5.

31818 11.28615 -30.12086 -31. Finalmente fazemos o gr´ afico.vals.sapply(mu.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.27273 11.09091 11. logvero. type = "l".vals[1:10] [1] 11.49741 [9] -30.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.22727 11. > mu. 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.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. lmu.40909 > lmu <. xlab = expression(mu). .vals.18182 11.00000 11.vals <.5.13636 11.04545 11. dados = x) > lmu[1:10] [1] -32.87344 -31.71383 -30.seq(11. l = 100) > mu.93542 -30.v4 para c´ alculo da verossimilhan¸ ca de distribui2 c ¸˜ oes normais com σ =4.39410 -31.36364 [10] 11.63119 -31.vals. > plot(mu. 15.norm.

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

5.95) .075264e-10 A fun¸ c˜ ao optimise() ´ e adequada para minimiza¸ c˜ oes envolvendo um u ´nico parˆ ametro.800004 $objective [1] 1. > optimise(dev.pois.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. Neste caso sabemos que o estimador tem express˜ ao anal´ ıtica fechada λ = x ¯ e portanto pode ser obtido diretamente. + ylab = expression(l(lambda))) > L.95 <. dados = y).pois(x. 0.pois(x. xlab = expression(lambda). int = c(0.qchisq(0. > curve(dev. 5.est <. df = 1) > abline(h = L.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. Para dois ou mais parˆ ametros deve-se usar a fun¸ c˜ ao optim() ou nlminb(). > lambda. + 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. dados = y) $minimum [1] 1. Usamos o fun¸ c˜ ao optimise() para encontrar o ponto de m´ ınimo da fun¸ c˜ ao deviance. 10). dados = y). 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. xlab = expression(lambda).est [1] 1.5.95.8. 3. > curve(dev. Finalmente os comandos abaixo s˜ ao usados para obter graficamente o intervalo de confian¸ ca (a 95%) baseado na fun¸ c˜ ao deviance. 0.

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

2.2.vals) [1] 10000 2 > head(par. > logveroN <.248954 2. Primeiro entramos com os dados que armazenamos no vetor x. + 12.9. que ´ e uma fun¸ c˜ ao de µ e σ e portanto devemos fazer um gr´ afico tridimensional de l(µ. σ ) e calculando os valores correspondentes de l(µ. 11.4. nesta ordem) e para um certo conjunto de dados.8. 17.5. 15. + l = 100)) > dim(par. 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.1.expand. + sd = pars[2]. 9. σ ) = 1 log(f (xi )) 10 10 2 1 = −5 log(2πσ ) − 2 ( 2σ x2 i 1 − 2µ xi + 10µ2 ). dados) sum(dnorm(dados. 20. 12. 15. 9. 11.7.grid(mu = seq(5. + 13.3. 14. 12. 15.8.1)/length(x))) > pars.4. 12. > par.2. a seguir criamos uma sequˆ encia adequada de pares de valores de (µ. 11.3.5. 18. 134 f (µ. sd = seq(1.5. + 13.885714 sd 2.c(12. l = 100).4.6. 13. Vamos tamb´ em calcular as estimativas de m´ axima verossimilhan¸ ca. l(µ. 11.9. 15. sd = sqrt(var(x) * (length(x) .MV mu 12. a densidade para cada observa¸ c˜ ao ´ e dada por f (xi ) = 3. σ . > x <.1. 11. 10.MV <. mean = pars[1].5.8.vals <. σ ) = 4.9.6. 9.7. log = TRUE)) 3. 12. 12. ou ent˜ ao usando a fun¸ c˜ ao dnorm(). 1. σ ) para cada um dos pares. ficando a primeira como exerc´ ıcio para o leitor. 13. 12. 15. 12.1.1.function(pars. 15.5) > pars. 8. 10.Introdu¸ c˜ ao ao R 2. σ ) e calculamos l(µ. e a log-verossimilhan¸ ca ´ e dada por 10 10 1 1 √ σ 2π 1 2 exp{− 2σ 2 (xi − µ) }. Neste exemplo vamos fazer apenas da segunda forma. 1 (5) 5. xi ).8.3.vals) . a verossimilhan¸ ca ´ e dada por L(µ. σ ) versus µ e σ tomando v´ arios valores de pares (µ.c(mu = mean(x).3. 11. 13. 14.7. Assim como no Exemplo 1 poder´ ıamos calcular a verossimilhan¸ ca fazendo as contas ”passo a passo”da fun¸ c˜ ao acima.2.8. σ ).1.

903 5. col = gray(seq(0. unique(sd). ylab = expression(sigma).2 12.apply(par.486 5.vals) 1 2 3 4 5 6 mu sd logL 5.MV[1].151515 1 -1167. Ao final o objeto |par.vals.00000 sd 12.39394 9997 19.873 5. pch = 4. ylim = c(0. cex = 1. by = 5)). ncol = length(unique(sd))). ou ainda como um mapa de cores correspondentes aos valores gerado por image(). 4.2 12.MV[2].vals. breaks = seq(-120.2 12.24242 9996 19.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.303030 1 -1126.vals) mu 9995 19. matrix(logL. 12)) points(pars.MV[2]. matrix(logL.757576 1 -1009.Introdu¸ c˜ ao ao R mu sd 5. 1. matrix(logL. como um mapa de curvas de isovalores obtido com image().454545 1 -1087. unique(sd). dados = x) > head(par. > + + > + + > > + + > with(par. cex = 1.454545 1 5. xlab = expression(mu).151515 1 5. 1. sigma)). contour(unique(mu). levels = seq(-120. ncol = length(unique(sd))). image(unique(mu).69697 9999 19. ncol = length(unique(sd)) xlab = expression(mu). unique(sd).5) with(par.MV[1]. -75.5) Notas: . persp(unique(mu). ylab = expression(sigma).757576 1 135 1 2 3 4 5 6 > tail(par.2 12.3. pars. xlab = expression(mu).vals$logL <.2 12.000000 1 -1208. logveroN. theta = 30.vals.606061 1 5. pch = 4.058 5.606061 1 -1048.000000 1 5. pars. zlab = expression(l(mu.303030 1 5.54545 9998 19. -75. by = 5). length = 9)))) points(pars.vals| cont´ em na terceira coluna os valores da log-verossimilhan¸ ca correspondentes as valores dos parˆ ametros dados na primeira e segunda colunas.vals. phi = 30)) with(par.064 5.84848 10000 20. ylab = expression(sigma). 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().2 > par.vals.

fitdistr(x. > require(MASS) > MV <.2489544 ( 0. em especial do n´ umero e variabilidade dos dados. o valor das estimativas de m´ axima verossimilhan¸ ca s˜ ao indicados por x nos dois u ´ltimos gr´ aficos.8857143 2. Seja 2. 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 . "normal") > MV mean sd 12. .2688015) 17. gma) 6 8 10 12 µ 14 16 18 20 Exerc´ ıcios a amostra abaixo obtida de uma distribui¸ c˜ ao Poisson de parˆ ametro λ. 758696977788999 Obtenha o gr´ afico da fun¸ c˜ ao de log-verossimilhan¸ ca. 54622453301765365372 Obtenha o gr´ afico da fun¸ c˜ ao de log-verossimilhan¸ ca. a obten¸ c˜ ao da fun¸ c˜ ao foi necess´ ario especificar faixas de valores para µ e σ . Neste caso eles foram encontrados facilmente como mostrado acima no objeto pars.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. si l(mu. 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.5 1.3801427) ( 0. sem repeti-los e matrix() para os valores da fun¸ c˜ ao. A defini¸ c˜ ao desta faixa foi feita ap´ os v´ arias tentativas pois depende do problema.MV pois podem ser obtidos analiticamente. a fun¸ c˜ ao fitdistr() do pacote MASS poide ser usada para encontrar estimativas de m´ axima verossimilhan¸ ca. 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. De forma mais geral.

.4 16. Seja a amostra abaixo obtida de uma distribui¸ c˜ ao χ2 de parˆ ametro 137 ν.9 10.1 6.4 Obtenha o gr´ afico da fun¸ c˜ ao de log-verossimilhan¸ ca.1 12.4 12.Introdu¸ c˜ ao ao R 3. 8.9 10.5 9.9 10.8 11.

1. 0. log = TRUE)) + } Esta fun¸ c˜ ao exige dados do tipo 0 ou 1 da distribui¸ c˜ ao Bernoulli. > y <. 1. 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. size = n. 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. 0. 1.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.sum(dados) + return(dbinom(x.c(0. Entretanto ` as vezes temos dados binomiais do tipo n e x (n´ umero x de sucessos em n observa¸ c˜ oes). 1. > vero. 18. + 1.length(dados) + x <. 0. 1. 0. 1. Por exemplo. 1. 0. 1. (O verdadeiro valor de p ´ e 0. 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. 1. prob = p. para os dados acima ter´ ıamos n = 25 e x = 18. 1. . resultados diversos da teoria de verossimilhan¸ ca. 0. 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). 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. Ser˜ ao utilizados conceitos do m´ etodo da quantidade pivotal. 1. 1. intervalos de cobertura.8) Primeiramente vamos entrar com os dados na forma de um vetor. S˜ ao ilustrados os conceitos de: obten¸ c˜ ao de intervalos de confian¸ ca pelo m´ etodo da quantidade pivotal. dados) { + n <.function(p. 1. 1.binom <.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).

No R isto pode ser feito com os comandos abaixo que produzem o gr´ afico mostrado na Figura 38.binom(x. 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. 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. dados. 0.6 0.2 0.function(p. from = 0.vals. dados = y).binom <. vero. (b) Dos resultados para distribui¸ c˜ ao Bernoulli sabemos que o estimador de m´ axima verossimilhan¸ ca ´ e .sapply(p. n = length(dados).4 p 0.72 0.01. l = 99) > logvero <. 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. > p.vals. x = sum(dados)) { + return(dbinom(x. dados = y) > plot(p. logvero. xlab = "p". prob = p. size = n.seq(0.vals <.8 1. type = "l".binom.0 Figura 38: Fun¸ c˜ ao de verossimilhan¸ ca para o parˆ ametro p da distribui¸ c˜ ao Bernoulli.99. to = 1) l(p) −70 −60 −50 −40 −30 −20 −10 0 0.0 0.Introdu¸ c˜ ao ao R > vero. 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.

35. n = n. pos = 1. > ic1.binom(p. x = x) + dev <.8960043 (d) Vamos agora obter e mostrar em um gr´ afico o intervalo baseado na fun¸ c˜ ao deviance. p. ylab = "D(p)") inf sup 0. 0.est .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 ˆ) .binom <. > dev.function(p. n = length(dados).est. x = x)) + dev + } > curve(dev.binom(p.0079 > ie [1] 124.est. min(logvero).vero.p <.3) > io <.x/n + vero.binom(p. dados = y). > p.5283461 0. definimos umaa fun¸ c˜ ao dev.est.binom(x. Lembrando que a deviance ´ e definida pela express˜ ao D(p) = 2{(ˆ p) − l(p)}. dados = y). + len = 0.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) .est <. 0. Com o comando curve() podemos obter o gr´ afico de fun¸ c˜ ao deviance.8686757 . 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.975)) * sqrt(1/ie) > ic1.p.p [1] 0. offset = 0. vero.est.est)) > io [1] 124.p.ie <.est <.5439957 0. p. cex = 0.est + qnorm(c(0.binom() para calcular a deviance. xlab = "p". 0.mean(y) > arrows(p.vero.est. n = n.025.2 * (vero.p. x = sum(dados)) { + p.length(y)/(p.8. dados.p.95. p ˆ + zα/2 I (ˆ p) e para obter o intervalo no R usamos os comandos a seguir.est * (1 .1) > text(p.est <. min(logvero).

c(inf = uniroot(lim.est))$root. dados = y) .4 0.528 0. ICdev.6 p 0. cex = 0. df = 1) abline(h = L.fc.L. L.8. 0.869 0.fc <.95 ICdev <.5 0.binom(x. 1))$root) ICdev inf sup 0.7 0. round(ICdev.95.8 0.qchisq(0. offset = 0. len = 0.1) > text(ICdev.9 Figura 39: Fun¸ c˜ ao deviance para o parˆ ametro p da distribui¸ c˜ ao Bernoulli. c(p.function(x) dev.8686757 D(p) 0 2 4 6 8 10 12 14 0. p. pos = 1. sup = uniroot(lim.5283461 0. dig = 3). 0.est. > > > > + > L.95) lim. .5283461 0.95. 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. Nos comandos a seguir primeiro encontramos o ponto de corte para o n´ ıvel de confian¸ ca de 95%. c(0.95 <.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.fc.3) inf sup 0.8686757 > arrows(ICdev.

Para isto vamos escrever uma fun¸ c˜ ao implementando estes passos e que utiliza internamente ic.8686757 (e) O c´ alculo do intervalo de cobertura consiste em: 1.8960043 > ic. n = n. n = length(dados).) dev.5439957 0.est))/n) + ic <.qchisq(nivel.est + qnorm(c(alfa/2. 0.p. n = n. c(0. uniroot(lim. 0).ifelse(identical(p. 2.est <. repetir (1) a (3) e verificar a propor¸ c˜ ao de simula¸ c˜ oes onde o valor est´ a no intervalo.fc <.1 .est.fc. + df = 1) + inf <.x/n + if (tipo == "assintotico") { + se. 1 ..est. + 1).95.binom(dados = y.5283461 0.fc.est <. x = sum(dados).inf lim.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. sup) + } + names(ic) <. "deviance")) { + tipo <.binom() definida acima. nivel = 0. > ic. 1).. c(p.sup") + ic + } E agora vamos utilizar a fun¸ c˜ ao. .binom <. verificar se o valor est´ a dentro do intervalo 4. Note que os intervalos s˜ ao diferentes! > ic.p.inf".ifelse(identical(p. uniroot(lim.binom(y.sup 0.) ..inf lim. obter o intervalo de confian¸ ca.est.. 1. + p.binom(dados = y) lim.est).p.sup 0.est * (1 . x = x)$root) + ic <.sqrt((p.arg(tipo) + alfa <.est + } + if (tipo == "deviance") { + lim. x = x)$root) + sup <.c("lim.nivel + p. "lim.c(inf. 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. . .function(dados.function(y. + tipo = c("assintotico".match. tipo = "dev") lim.(alfa/2))) * se. primeiro com a aproxima¸ c˜ ao assint´ otica e depois pela deviance. simular dados com o valor especificado do parˆ ametro. 3.p.

0 + for (i in 1:nsim) { + ysim <.ic. X2 .Introdu¸ c˜ ao ao R > cobertura. Discuta os resultados.rbinom(1. nsim... θ) ∼ Γ(n.binom(n = length(y).seed(3214) > cobertura. (e) repita o item (d) para amostras de tamanho n = 100. o n´ umero de trens atrasados foi registrado em: . nsim = 1000) [1] 0.8.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. O IC assint´ otico tende a se aproximar do n´ ıvel nominal de confian¸ ca na medida que aumenta o tamanho da amostra. θ). al´ em disso acredita-se que o n´ umero de trens atrasados em cada dia seja independente do valor de todos os outros dias. 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(θ).) + if (p > ic[1] & p < ic[2]) + conta <.96 143 Note que a cobertura do m´ etodo baseado na deviance ´ e muito mais pr´ oxima do n´ ıvel de 95%. Em 10 dias sucessivos. obtenha a propor¸ c˜ ao dos intervalos que cobrem o verdadeiro valor de θ.binom(n = n. 2. Espera-se que este valor seja pr´ oximo do n´ ıvel de confian¸ ca fixado de 90%. Calcule intervalos de confian¸ ca de 90% para cada uma das amostras geradas e finalmente. > set. 1) ent˜ ao −2 n i log F (xi . Seja X1 . 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. p. p = 0. . · · · .binom <.. o que pode ser explicado pelo tamanho da amostra. x = ysim.2 Exerc´ ıcios 1. Para isto gere 1000 amostras de tamanho n = 10.binom(n = length(y). p = 0. (d) verifique se a probabilidade de cobertura do intervalo ´ e consistente com o valor declarado de 90%. θ) com θ = 1 e obtenha o intervalo de confian¸ ca de 90% para θ.. 3.8. 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 .) { + conta <. n = 50 e n = 200.seed(3214) > cobertura.function(n.897 > set. nsim = 1000. Refa¸ ca o ´ ıtem (e) do exemplo acima com n = 10. tipo = "dev") [1] 0. Verifique se o intervalo cobre o verdadeiro valor de θ. . prob = p) + ic <. 18. size = n. θ) ∼ χ2 2n .

4. para i = 1.6 9. 3. 2.3 10.0 11. 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.0 8. Construa intervalos de confian¸ ca de 95% para φ como nos itens (c) e (d).8 9. e z = (1. Xi .7 10. 5).5.8 11. ou seja.0 baseando-se: (a) na distribui¸ c˜ ao assint´ otica de µ ˆ (b) na distribui¸ c˜ ao limite da fun¸ c˜ ao deviance 5.7 9.4 10. θ ˆ´ (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 θ .9 10. onde zi ´ e quantidade (conhecida) de fertilizante utilizado na ´ area. da ´ area i ´ e normalmente distribu´ ıda com m´ edia θzi .3 10.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 θ. 1). 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 φ.7 8.4 10.5 10.2 9. Visualize os dados simulados atrav´ es de um gr´ afico de (z × x) ˆ (b) encontre o EMV de θ. Xi ∼ N (θzi . Acredita-se que a produ¸ c˜ ao de trigo. · · · .9 9. e que a variˆ ancia ´ e conhecida e igual a 1. n: (a) simule dados sob esta distribui¸ c˜ ao assumindo que θ = 1.8 9. 4.5 10. onde φ ´ e a probabilidade de que n˜ ao hajam trens atrasados num particular dia.8 9. Assumindo que as produ¸ c˜ oes em diferentes ´ areas s˜ ao independentes.

vals. onde c∗ ´ e o quantil (1 − α/2) da distribui¸ c˜ ao Vamos considerar que temos uma amostra onde n = 20 e x ¯ = 32. 2). rep(L.95. . > + + > > > + > > > > > dev.v1(thetaN. neste exemplo. n = 20. IC.vals. rep(0. xbar = 32) plot(thetaN. o estimador de m´ axima verossimilhan¸ ca ´ eθ 3.vals.v1(thetaN.95/20) IC arrows(IC.vals <. ty = "l". 20 e 50 que s˜ ao obtidas com os comandos abaixo. 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. 5.vals. Xi n ¯.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. dev. 2). Os pontos onde esta linha cortam a fun¸ c˜ ao s˜ ao.function(theta.vals. lty = 3) IC <.vals <.vals. 19.95 <. length = 0.norm. 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. (1) + Pn i=1 − θ)2 . e neste caso a deviance tem distribui¸ c˜ ao exata χ2 (1) . xlab = expression(theta). .dev.dev.vals <.95. rep(0. xbar = 32) lines(thetaN.theta)^2 } thetaN.a.95. 2). lty = 2) . n.1) Vamos agora examinar o efeito do tamanho da amostra na fun¸ c˜ ao. a fun¸ c˜ ao deviance ´ e D(θ) = n(¯ x − θ)2 . 1) * sqrt(L.vals. df = 1) dev10. Vimos que: 1. length = 0. xlab = expression(theta). 4.95 <.norm.32 + c(-1.norm.vals. ylab = expression(D(theta))) IC10 <. n = 20.1) dev20.qchisq(0. df = 1) abline(h = L.seq(31.vals.norm. xbar) { n * (xbar .95/10) arrows(IC10.vals <.v1 <. rep(L.32 + c(-1. l = 101) dev. =X c∗ /n. A Figura 41 mostra as fun¸ c˜ oes para trˆ es tamanhos de amostra.1 M´ edia da distribui¸ c˜ ao normal com variˆ ancia conhecida 1 2 n i=1 (xi Seja X1 . ylab = expression(D(theta))) L.95.v1(thetaN. 1) * sqrt(L. determinados analiticamente pela express˜ ao dada acima e indicados pelos setas verticais no gr´ afico. .qchisq(0. ty = "l". dev10. n = 10.dev. Xn a. de uma distribui¸ c˜ ao normal de m´ edia θ e variˆ ancia 1. A linha horizontal mostra o efeito nas amplitudes dos IC’s. . n = 10. A fun¸ c˜ ao de log-verossimilhan¸ ca ´ e dada por l(θ) = cte + ˆ= 2. 2). dev20. IC10. 33. > > > + > > > > L.95. xbar = 32) plot(thetaN. e os limites do intervalo s˜ ao dados por x ¯− χ2 .

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

3.04. ou.exp(thetaE. e neste caso a deviance tem distribui¸ c˜ ao assint´ otica χ2 (1) .vals. > + + > > dev.1.seq(0. 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 θ −θ . 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. a fun¸ c˜ ao deviance ´ e D(θ) = 2n log(θ/θ ¯(θ − θ 4. devendo ser obtidos por: m´ etodos num´ ericos ou gr´ aficos. l = 101) dev. e os limites do intervalo n˜ ao podem ser obtidos analiticamente. xbar = 10) . n. 20 e 50.(1/xbar))) } thetaE.function(theta. O estimador de m´ axima verossimilhan¸ ca pode ser obtido ˆ analiticamente neste exemplo θ = 1/x ¯ = 1/10 = 0.dev.exp <.0 Figura 41: Fun¸ c˜ oes deviance para o parˆ ametro θ da N(θ. 1) para amostras de m´ edia 32 e tamanhos de amostra n = 10. xbar) { 2 * n * (log((1/xbar)/theta) + xbar * (theta .vals <. ˆ )+x ˆ) .5 32.5 33. 5. n = 20. ˆ θ A seguir vamos ilustrar a obten¸ c˜ ao destes intervalos no R.0 31.2.vals <.Introdu¸ c˜ ao ao R 147 D(θ) 2 4 6 8 10 n=10 n=20 n=50 0 31.0 θ 32. 0.

05 0. Neste exemplo.Introdu¸ c˜ ao ao R > plot(thetaE. 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.84.20 Figura 42: Fun¸ c˜ ao deviance da Exp(θ) para uma amostra de tamanho 20 e m´ edia 10.15 0. Vamos ent˜ ao localizar os valores de θ para os quais D(θ) ´ e o mais pr´ oximo poss´ ıvel do ponto de corte. dev. 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. 19.2.0. + ylab = expression(D(theta))) 148 0 2 4 D(θ) 6 8 10 12 0. Por exemplo. ty = "l". diferentemente do anterior.95 ´ Como. xlab = expression(theta). A cada um destes valores corresponde um valor de D(θ). .vals. 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. para 95% o valor de χ2 e 3. 1.vals. Isto ´ e feito com o c´ odigo abaixo e o resultado exibido na Figura 43.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 θ.10 θ 0. diferentemente do exemplo anterior.

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,

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

20. 4. A seguir usamos a fun¸ c˜ ao apply para calcular a quantidade desejada que definimos com function(x) {mean(x)/var(x)}. 3. onde cada coluna ´ e uma amostra.33. 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.133945 > VarT <. 2. Compare com os valores obtidos ˆ ] e Var[ ˆ ] variam em fun¸ ˆ [λ ˆ λ analiticamente. mean = 180. 20. 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.matrix(rnorm(20 * 1000.5 Exerc´ ıcios ˆ = 1/X ¯ de uma distribui¸ 1. Ilustre a consistˆ encia do estimador λ c˜ ao exponencial f (x) = λ exp{−λx}. vamos usar N = 1000.3 N˜ ao-tendenciosidade Fica como exerc´ ıcio. ˆ = X ¯ de uma distribui¸ 3. function(x) { + mean(x)/var(x) + }) > ET <.apply(amostras. no caso escolhemos n = 20. 64). calcular a estat´ ıstica de interesse para cada amostra. Mostre em um gr´ afico como os valores de E c˜ ao de n.2) ilustramos a obten¸ c˜ ao dos momentos para um tamanho fixo de amostra n = 20. nc = 1000) > Tvals <. definir um tamanho de amostra. 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. no caso vamos escolher uma N (180. 2. 20. .13 e Var[ ˆ T ] ≈ 1. sd = 8). Para obter as masmas amostras ter´ ıamos que usar a mesma semente para gera¸ c˜ ao de n´ umeros aleat´ orios. ˆ [T ] e Var[ ˆ T ]. 2.var(Tvals) > VarT [1] 1.Introdu¸ c˜ ao ao R 1. No exemplo dos momentos das distribui¸ c˜ oes de estimadores visto em (20. 5.329038 155 Nestes comandos primeiro obtemos 1000 amostras de tamanho 20 que armazenamos em uma matriz de dimens˜ ao 20 × 1000.mean(Tvals) > ET [1] 3. obter por simula¸ c˜ ao um n´ umero N de amostras. No caso ˆ [T ] ≈ 3. escolher uma distribui¸ c˜ ao e seus parˆ ametros. usar as amostras para obter as estimativas E Vamos ver agora comandos do R.4 Variˆ ancia m´ ınima Fica como exerc´ ıcio. > amostras <.

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(µ. σ ).Introdu¸ c˜ ao ao R 156 4. 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. . 5. Crie um exemplo para ilustrar a n˜ ao tendenciosidade de estimadores. Crie um exemplo para comparar a variˆ ancia de dois estimadores. onde X[1] e X[n] s˜ ao os valores m´ ınimo e m´ aximo da amostra. respectivamente.

assumindo a distribui¸ c˜ ao normal. escrevendo uma fun¸ c˜ ao 3. 136.length(ma) > na . A id´ eia ´ e relembrar como s˜ ao feitos alguns testes de hip´ otese b´ asicos e corriqueiros em estat´ ıstica. 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. usando uma fun¸ c˜ ao j´ a existente no R 21. 142. 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. 141. Assim como fizemos com intervalos de confian¸ ca. sorteamos dias amostras de 6 pe¸ cas de cada m´ aquina. Para isso. Eles devem ser resolvidos usando como referˆ encia qualquer texto de Estat´ ıstica B´ asica.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. 127. > ma <.c(145. 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. 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. fazendo as contas passo a passo. Procure resolver primeiramente sem o uso de programa estat´ ıstico. 137) > na <. 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. utilizando o R como uma calculadora 2. 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. que neste caso vamos definir como sendo 5%.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. Devemos tamb´ em fixar o n´ ıvel de significˆ ancia do teste.

"default")) function (x. 21.. 21. 138. conf. 142. na . 128.var(ma) > ma.1 Fazendo as contas passo a passo Vamos calcular a estat´ ıstica de teste.test() ´ e um m´ etodo com mais de uma fun¸ c˜ ao associada.v [1] 36. > ma. y.var(mb) > mb.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. 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. > args(var.length(mb) > nb [1] 6 158 21.95. para testar variˆ ancias neste exemplo utilizamos var.) NULL Note que esta sa´ ıda n˜ ao ´ e muito informativa.level = 0.test".082056 > pval <.. Este tipo de resultado indica que var.test().v > fcalc [1] 1. alternative = c("two.1.v/mb. Por exemplo. 132) > nb <. "greater"). ratio = 1.Introdu¸ c˜ ao ao R [1] 6 > mb <.c(143.) NULL .96667 > fcalc <.1.v <. lower = F) > pval [1] 0. Vamos verificar os argumentos da fun¸ c˜ ao. "less".2 * pf(fcalc. ..v [1] 40 > mb. nb .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”.v <. 132.9331458 No c´ alculo do P-valor acima multiplicamos o valor encontrado por 2 porque estamos realizando um teste bilateral. .test) function (x. > args(getS3method("var.1..1. Portanto devemos pedir os argumentos da fun¸ c˜ ao ”default”.ma.1.sided".

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

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? . produziu os seguintes resultados: Estat´ ısticas Homens Mulheres M´ edias 3.2 anos 3. uma amostra aleat´ oria. Num estudo comparativo do tempo m´ edio de adapta¸ c˜ ao.8 anos 0.Introdu¸ c˜ ao ao R 160 5.7 anos Desvios Padr˜ oes 0. de 50 homens e 50 mulheres de um grande complexo industrial.

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. Para isto vamos ver alguns problemas t´ ıpicos de cursos de estat´ ıstica b´ asica.1]) Pearson³s Chi-squared test data: HairEyeColor[. a partir de dados obtidos em amostras. ou similar. com cada uma das dimens˜ oes correspondendo a um dos atributos . . > HairEyeColor[.cor dos cabelos. Uma poss´ ıvel forma de testar tal hip´ otese ´ e utilizando o teste χ2 .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. 22.. coeficiente de contingˆ encia C . 1]) O p − value sugere que a associa¸ c˜ ao ´ e significativa. p-value = 3. Nos comandos abaixo primeiro isolamos apenas a tabela com os indiv´ ıduos do sexo masculino e depois aplicamos o teste sobre esta tabela. Para carregar e visualizar os dados use os comando abaixo. 1] X-squared = 42. Para ilustrar o teste vamos utilizar o conjunto de dados HairEyeColor que j´ a vem dispon´ ıvel com o R. O passo seguinte ´ e verificar se existe evidˆ encia suficiente nos dados para declarar que a vari´ aveis est˜ ao associadas.test(HairEyeColor[.data.test(HairEyeColor[. 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. df = 9. > data(HairEyeColor) > HairEyeColor > as. olhos e sexo.068e-06 Warning message: Chi-squared approximation may be incorrect in: chisq. . 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 χ .1633.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. . 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 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. 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.

ao inv´ es do resultado assint´ otico usado no teste tradicional.test(wt. > chisq. 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.test(HairEyeColor[. 1] X-squared = 42. 22.. Para isto vamos usar as vari´ aveis wt (peso) e mpg (milhas por gal˜ ao) do conjunto de dados mtcars.Introdu¸ c˜ ao ao R 162 Uma possibilidade neste caso ´ e ent˜ ao usar o p − value calculado por simula¸ c˜ ao.559. Lembre-se de inspecionar help(chisq. mpg) [1] -0. df = NA.05).8676594 > cor. df = 30. > data(mtcars) > attach(mtcars) > cor(wt.1633. mpg) Pearson³s product-moment correlation data: wt and mpg t = -9. Para ilustrar o teste para o coeficiente linear de Pearson vamos estudar a rela¸ c˜ ao entre o peso e rendimento de carros.8676594 > detach(mtcars) Portanto o p-valor acima mmostra que a correla¸ c˜ ao encontrada de -0. se a rela¸ c˜ ao entre elas for linear.9338264 -0. p-value = 0. .0004998 Note que agora a mensagem de alerta n˜ ao ´ e mais emitida e que a significˆ ancia foi confirmada (P-valor < 0. sim=T) Pearson³s Chi-squared test with simulated p-value (based on 2000 replicates) data: HairEyeColor[. p-value = 1.1].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.87 difere significativamente de zero.test) para mais detalhes sobre a implementa¸ c˜ ao deste teste no R. . 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.294e-10 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: -0.7440872 sample estimates: cor -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.txt. p-value = 0.m2.3 6.2 3. para dois grupos com variˆ ancias consideradas iguais.2.Introdu¸ c˜ ao ao R 163 22.test(m1.3. H´ a diferentes tipos de teste T: para amostras independentes ou pareadas.3 5. 3.5) t.5.0. ao n´ ıvel de 5% de significˆ ancia e considerando-se as variˆ ancias iguais. Inspecione o conjunto de dados humanos. 1. Al´ em disto podemos fazer testes uni ou bilaterais. 2.515419 1.5.855419 sample estimates: mean of x mean of y 3.3.7 1. 2. No exemplo abaixo veremos um teste unilateral.7 2. Queremos verificar se machos e fˆ emeas de uma mesma esp´ ecie possuem o mesmo comprimento (em mm) Para isso.5. 5.2 3.6 8.4 Exerc´ ıcios 1. 3.2.9 2.4. 1.7. 4. Considere o seguinte exemplo: Os dados a seguir correpondem a teores de um elemento indicador da qualidade de um certo produto vegetal.5 9.6.3) > m2 <. 9.4 3.63 3. foram medidos 6 exemplares de cada sexo e obtivemos os seguintes comprimentos: . selecione vari´ aveis a aplique os testes vistos nesta Se¸ c˜ ao.5 3.6.5 5.3. df = 18.test.3172.eq=T) Two Sample t-test data: m1 and m2 t = -0. 2. 8. 3. Todos estes podem ser efetuados com a fun¸ c˜ ao t.1. 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.7.96 Os resultados mostram que n˜ ao ´ a evidˆ encias para rejeitar a hip´ otese de igualdade entre as m´ edias. 3.2. 3.6 4. M´ etodo 1 0. variˆ ancias iguais ou desiguais. 3.2 2.3 1. Para isto podemos utilizar o testeT .c(5. Usando argumentos desta fun¸ c˜ ao definimos o tipo de teste desejado.1 3. 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.7547 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -2. 6. 1.1 2.c(0.5 > m1 <. 22. 2. var. 5.1.9.3 M´ etodo 2 5.0 1.

Dica: Use as fun¸ c˜ oes var. Use a fun¸ c˜ ao cor.test para testar a correla¸ c˜ ao entre o comprimento de s´ epalas e p´ etalas.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 4. .test e t. Veja a descri¸ c˜ ao dos dados em help(iris). Carregue o conjunto de dados iris usando o comando data(iris).

frame(trat = factor(rep(1:5. resp = y) resp 2370 1687 2592 2283 2910 3020 1282 1527 871 1025 825 920 562 321 636 317 485 842 . 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. > y <... each = 6)). 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. Vamos ver como isto poder ser feito com o programa R.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.scan() 1: 2370 2: 1687 3: 2592 . Considere o seguinte exemplo da apostila do curso.

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. data = tr) > plot(tr.av) Residuals Scale−Location vs Fitted 2 Residuals Normal vs Factor Q−Q Levels 1.av <.aov(resp ~ trat.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.0 0 2 2 0.5 1. A menssagem ´ e clara mas podemos ainda fazer testes para verificar o desvio dos pressupostos.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. . > tr.

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.942e-06 > shapiro. data = tr) > plot(tr. plotit = T) > boxcox(resp ~ trat. Devemos escolher o valor que maximiza esta fun¸ c˜ ao.aov(respt ~ trat.586. 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. > tr$respt <. p-value = 5. Para tentar contornar o problema vamos usar a transforma¸ c˜ ao Box-Cox.avl) .avl <.test(tr. lam = seq(-1. data = tr. Nos comandos a seguir come¸ camos carregando o pacote MASS e depois obtemos o gr´ afico da verossimilhan¸ ca perfilhada.1)/0. 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.av$res) Shapiro-Wilk normality test data: tr. > tr. tr$trat) Bartlett test of homogeneity of variances data: tr$resp and tr$trat Bartlett³s K-squared = 29.avt <. 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. Se λ = 0 a equa¸ c˜ ao acima se reduz a y ′ = log(y ). > require(MASS) > boxcox(resp ~ trat. df = 4. data = tr.(tr$resp^(0.1. que consiste em transformar os dados de acordo com a express˜ ao y′ = yλ − 1 . λ onde λ ´ e um parˆ ameto a ser estimado dos dados.Introdu¸ c˜ ao ao R > bartlett. data = tr) > plot(tr.av$res W = 0. p-value = 0.avt) Note que os res´ ıduos tem um comportamento bem melhor do que o observado para os dados originais. A fun¸ c˜ ao boxcox() do pacote MASS calcula a verossimilhan¸ ca perfilhada do parˆ ametro λ.aov(log(resp) ~ trat.006742 167 Nos resultados acima vemos que a homogeneidade de variˆ ancias foi rejeitada.1) .test(tr$resp. onde log ´ e o logar´ ıtmo neperiano. 1/10)) ˆ = 0. A an´ alise deve prosseguir usando ent˜ ao os dados transformados. 1.1 > tr.8961. Como estamos interessados no m´ aximo fazermos um novo gr´ afico com um zoom na regi˜ ao de interesse.

Lembre-se ainda que help(mtcars) ir´ a fornecer mais detalhes sobre estes dados. Gr´ aficos l´ attice s˜ ao disponibilizados pelo pacote lattice. 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 isto iremos utilizar o conjunto de dados mtcars dispon´ ıvel com o R.Introdu¸ c˜ ao ao R 168 [1] TRUE −200 95% −200 −2 −1 0 λ 1 2 −230 −1. Este conjunto cont´ em caracter´ ısticas t´ ecnicas de diversos modelos da autom´ ovel. data-frames e listas) e outros tipos de objetos. matrizes.0 λ 0.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. > data(mtcars) > names(mtcars) [1] "mpg" "cyl" [11] "carb" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" 24. Para carregar os dados e e listar os nomes das vari´ aveis utilize os comandos a seguir.5 1. arrays.5 0.0 log−Likelihood −220 −210 95% −280 log−Likelihood −260 −240 −220 −0. Os exemplos mostrados aqui se referem apenas ao primeiro sistema. 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. no qual as f´ ormulas s˜ ao ainda mais importante e largamente utilizadas.1 F´ ormulas em gr´ aficos Algumas (mas n˜ ao todas!) fun¸ c˜ oes gr´ aficas do R aceitam uma f´ ormula como argumento. . O R possui dois tipos de sistemas gr´ aficos: (i) gr´ aficos base (base graphics ) e (ii) gr´ aficos lattice. Em geral tais fun¸ c˜ oes exibem gr´ aficos para explorar a rela¸ c˜ ao entre vari´ aveis. 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 −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. data = mtcars.0 0. + 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.0 Residuals 0. > with(mtcars. No segundo caso o rendimento ´ e relacionado com o peso do ve´ ıculo. plot(mpg ~ cyl)) > with(mtcars.Introdu¸ c˜ ao ao R Residuals vs Fitted 1. panel = panel. A f´ ormula do tipo y ∼ x pode ser lida como: a vari´ avel y ´ e explicada por x.5 30 30 6 7 Scale−Location Standardized residuals 0.factor(cyl). > coplot(mpg ~ wt | as. 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.1 mostra dois tipos de gr´ aficos que s˜ ao definidos a partir de f´ ormulas. Considere o exemplo do texte-t para compara¸ c˜ ao de duas amostras na compara¸ c˜ ao .0 18 −1. plot(mpg ~ wt)) A Figura 24. boxplot(mpg ~ cyl)) > with(mtcars.5 1.5 25 18 169 Normal Q−Q 3 25 Standardized residuals −1 0 1 2 1. algums fun¸ c˜ oes de an´ alise de dados tamb´ em aceitam f´ ormulas em seus argumentos.1 mostra agora um exemplo onde o gr´ afico de rendimento explicado pelo peso ´ e feito para cada n´ umero de cilindros separadamente. 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).0 1.smooth.

t.5 30 30 4.5 18 Standardized residuals −1 0 1 2 30 18 −2 0.0 170 Residuals vs Fitted 25 Normal Q−Q 3 25 18 Standardized residuals −1 0 1 2 Residuals 0.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.test(mpg ~ am.Introdu¸ c˜ ao ao R 1.0 30 4.5 5.1061.5 1.000285 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -10.5 −2 Scale−Location 3 25 Constant Leverage: Theoretical Quantiles Residuals vs Factor Levels 25 −1 0 1 2 Standardized residuals 0.5 Fitted values 7.000285 alternative hypothesis: true difference in means is not equal to 0 .0 0.eq = T)) Two Sample t-test data: mpg[am == 0] and mpg[am == 1] t = -4.848369 -3.641510 sample estimates: mean of x mean of y 17. t.1061.5 Fitted values 7. p-value = 0. uma sem usar f´ ormula e outra usando f´ ormula.39231 > with(mtcars.5 6.eq = T)) Two Sample t-test data: mpg by am t = -4.5 6.14737 24. > with(mtcars.5 −2 5. var.test(mpg[am == 0]. df = 30. mpg[am == 1]. p-value = 0. No exemplo a seguir mostramos o uso da fun¸ c˜ ao de duas formas que produzem resultados idˆ enticos. var. df = 30.5 18 −0.0 1.

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. Given : as. .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.

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

Um aspecto particularmente importante da linguagem S.". 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. considerar que h´ a apenas uma vari´ avel resposta que poder´ a ser explicada por uma ou mais covari´ aveis.4 Especifica¸ c˜ ao de modelos com uma covari´ avel Entre os diversos usos de f´ ormulas. para o conjunto de dados mtcars. Nem todas as fun¸ c˜ oes que relacionam vari´ aveis aceitam formulas. na forma resposta ∼ covariavel.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. e pode ser ajustado no R usando lm() (lm : linear model ). como por exemplo o caso da regress˜ ao por n´ ucleo (kernel ) dada por ksmooth() cujo o ajuste ´ e mostrado na linha pontilhada. data = mtcars) Coefficients: (Intercept) 37.285 wt -5. 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()). data = mtcars) > reg1 Call: lm(formula = mpg ~ wt. ajustar um modelo que explique o rendimento (Y:mpg) pelo peso do ve´ ıculo (X:wt). o que implica no modelo acima. . A linearidade ´ e dada pela fun¸ c˜ ao lm(). atrav´ es de um modelo linear lm(). o portanto no programa R. Na sintaxe da chamada fun¸ c˜ ao mpg ∼ wt lˆ e-se: mpg ´ e modelado por wt.Introdu¸ c˜ ao ao R [1] 1 attr(. ´ e que adota-se uma abordagem unificada para modelagem.Environment") <environment: R_GlobalEnv> 173 24. 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. Considere. A Figura 54 mostra os dados e a linha s´ olida mostra a equa¸ c˜ ao do modelo ajustado. ou seja. O modelo linear ´ e dado por: Y = β0 + β1 X + ǫ . o mais importante deles ´ e sem d´ uvida o fato que f´ ormulas s˜ ao utimizadas na declara¸ c˜ ao de modelos estat´ ısticos. > reg1 <. por simplicidade."response") [1] 1 attr(. Vari´ aveis respostas e covari´ aveis (vari´ aveis explanat´ orias) s˜ ao sempre especificadas de mesma forma b´ asica. 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.lm(mpg ~ wt. o que inclui a sintaxe para especifica¸ c˜ ao de modelos.

data.frame(wt = wts)). "ksmooth()". data = mtcars) wts <. Entretanto predict() tamb´ em poderia ser usada e a reta tra¸ cada com o comando a seguir. lwd = 2) legend("topright". data. predict(reg1.with(mtcars. 1. predict(reg3. "gam()"). data. lty = 3) require(mgcv) reg3 <. 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. 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. band = 1)).frame(wt = wts)). baseando-se no modelo ajustado.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. plot(mpg ~ wt)) abline(reg1) reg2 <. 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. 1. predict(reg2. lty = c(1:3. seq(min(wt). ksmooth(wt. len = 201)) lines(wts. lwd = c(1. max(wt). 1). mpg.gam(mpg ~ s(wt). > lines(wts. data = mtcars) lines(wts. lty = 2) lines(with(mtcars. c("lm()". "loess()".loess(mpg ~ wt.frame(wt = wts))) . > > > > > > > > > > + with(mtcars. 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.

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

l = 200) lines(hgs. lwd = 2) lines(hgs. 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. 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. data. data. predict(wm3.30114 > predict(polB.38303 14. data = mtcars) > polB Call: lm(formula = mpg ~ poly(hp. > > > > > > > > > > > data(women) wm1 <. Os comandos a seguir mostram os quatro ajustes indicados na Figura 56.88123 14. 72.0004208 > polB <. predict(wm2.lm(weight ~ height + I(height^2) + 0.lm(weight ~ height.09 -26. lwd = 2) . data = mtcars) Coefficients: (Intercept) hp I(hp^2) 40.lm(mpg ~ poly(hp. data = women) with(women.88123 14. Caso queira-se usar potˆ encias usuais deve-se adicionar ` a chamada desta fun¸ c˜ oes o argumento raw=T. 350. data.30114 Vamos considerar agora um outro exemplo de ajuste de modelo linear.29005 17.58009 13.28645 17. O primeiro (linha fina s´ olida) ´ e uma regress˜ ao linear.79574 23.frame(height = hgs)). data.lm(weight ~ height + 0. a reta passa pela origem. predict(wm1.lm(weight ~ height + I(height^2). Quando se usa as op¸ c˜ oes default a fun¸ c˜ ao poly() vai sempre contruir polinˆ omios ortogonais.58009 13.frame(hp = hps)) 1 2 3 4 5 6 7 30.28645 17.38303 14. 2). O ajuste por polinˆ omios ortogonais ´ e numericamente mais est´ avel e portanto deve ser preferido quando poss´ ıvel.seq(58.seq(50. data = women) wm2 <.frame(height = hgs))) lines(hgs. 2). plot(weight ~ height)) hgs <. by = 50) > predict(polA.4091172 -0. 2)1 poly(hp. isto ´ e.Introdu¸ c˜ ao ao R 176 s˜ ao iguais.frame(height = hgs)).05 13.29005 17. data = women) wm4 <.79574 23. data = mtcars) Coefficients: (Intercept) poly(hp. 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. 2)2 20. o segundo (linha fina tracejada) ´ e uma regress˜ ao linear com intercepto igual a zero. > polA Call: lm(formula = mpg ~ hp + I(hp^2).frame(height = hgs)).2133083 0. data. data = women) wm3 <. data. lty = 2. lty = 2) lines(hgs.frame(hp = hps)) 1 2 3 4 5 6 7 30. predict(wm4.15 > hps <.

> legend("topleft".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. cex = 0. Applied Statistics. > coef(lm(mpg ~ I(wt + hp).2877307 -0. Isto pode ser expandido considerando-se a presen¸ ca de duas ou mais vari´ aveis explicativas. Vol. A Tabela 24. "linear s/ intercepto". 2).85) 24. 2. E. C. 2). No. N. 1. com e sem estima¸ c˜ ao do intercepto. 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. (G. 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. + 1. "quadr´ atico". 1973). Rogers. 2. + "quadr´ atico s/ intercepto"). Wilkinson. c("linear". 22. lwd = c(1. 3. data = mtcars)) (Intercept) I(wt + hp) 30. Symbolic Description of Factorial Models for Analysis of Variance.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. data = mtcars)) . Nos comandos a seguir mostramos os coeficientes estimados a partir de cinco formas de especifica¸ c˜ ao de modelos.0680239 > coef(lm(mpg ~ wt + hp. 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. 392-399.

21662430 -0.74564216 -0.02784815 > coef(lm(mpg ~ (wt + hp)^2. data = mtcars)) (Intercept) I(wt * hp) 27.80842343 -8.4985252043 -0.80842343 -8. 6.02784815 > coef(lm(mpg ~ I((wt + hp)^2). corresponde a A + B + A : B B %in% A B dentro (aninhado) de A A/B Efeito principal e aninhado. 2.12010209 0. 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. Y = β0 + β1 X1 + ǫ. Y = β0 + β1 X1 + ǫ.03177295 > coef(lm(mpg ~ I(wt * hp). Y = β0 + β1 X1 + β2 X2 + β3 X3 + ǫ. Y = β0 + β1 X1 + β2 X2 + ǫ. data = mtcars)) (Intercept) I((wt + hp)^2) 24.22727012 -3.21662430 -0. um modelo com duas covari´ aveis onde X1 ´ e a covari´ avel wt e X2 ´ e a covari´ avel hp.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. exceto pelos termos wt * hp e (wt * hp)^2 onde o mesmo modelo ´ e especificado de duas formas alternativas. . um modelo com duas covari´ aveis mais o termo de intera¸ c˜ ao entre elas. data = mtcars)) (Intercept) wt hp wt:hp 49. 3. Y = β0 + β1 X1 + ǫ. Os modelos ajustados para explicar o rendimento mpg denotado por Y s˜ ao: 1. 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.0001625815 Os resultados sugerem que as f´ ormulas definem modelos diferentes. 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.87783074 -0. 4.01487156 > coef(lm(mpg ~ wt * hp. X2 ´ e a covari´ avel hp e X3 ´ e a intera¸ c˜ ao dada pelo produto X3 = X1 × X2 . ver explica¸ c˜ ao no texto (Intercept) wt hp 37. onde X1 ´ e a covari´ avel wt. e 5. 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.12010209 0.

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. a mensagem ´ e de que os operadores soma (+). 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. Ou seja. 24.raw=TRUE)+B A+B+. 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. tais operadores s´ o indicam opera¸ c˜ oes aritm´ eticas com os termos envolvidos quando utilizados dentro de I().raw=TRUE) poly(A. . . De forma geral.3) poly(A..Introdu¸ c˜ ao ao R 179 Tabela 6: Outros exemplos de sintaxe para especifica¸ c˜ ao de modelos.. 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. Este mecanismos ´ e u ´til para evitar que f´ ormulas precisem ser totalmente redigitadas a cada redefini¸ c˜ ao do 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 (·).formula(form1. . o que ´ eu ´til ao se investigar v´ arios modelos que s˜ ao obtidos uns a partir de outros. ~ . A fun¸ c˜ ao I() garante que a express˜ ao nela contida seja avaliada como uma fun¸ c˜ ao aritm´ etica. Na tabela 24.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. .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 ~ .7 Atualizando e modificando f´ ormulas Uma vez que um objeto contenha uma f´ ormula. > > y > > y form1 <.6 s˜ ao ilustradas mais algumas especifica¸ c˜ oes de modelos. produto (*). excluindo a vari´ avel x2. B+... ´ e poss´ ıvel obter uma nova f´ ormula que seja uma modifica¸ c˜ ao da original utilizando update. 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 . O caracter ponto (·) indica tudo.formula().2)+B poly(A.2.3.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. y ~ . Em f´ ormulas. ~ . em .y ~ x1 + x2 + x3 form1 ~ x1 + x2 + x3 form2 <.update. e tudo do lado direito. .A:B:C (A+B+C)^2 . tal e qual est´ a escrita (”as is”). Para incluir a opera¸ c˜ ao aritm´ etica de potˆ encia ´ e necess´ ario utilizar I() no termo a ser exponenciado.x2 entende-se: a nova f´ ormula dever´ a possuir tudo que estava do lado esquerdo.5.

read.table() acima. A seguir s˜ ao apresentados os comandos exemplificando alguns procedimentos usuais para a an´ alise dos dados de um experimento deste tipo que. variˆ ancias e erros padr˜ ao das m´ edias para cada tratamento separadamente.numeric(ex01$resp) [1] TRUE > is.5 t3 : 6 Median :377. A seguir vamos inspecionar o objeto que armazena os dados e seus componentes.txt para o seu diret´ orio de trabalho.leg.5 t5 : 6 3rd Qu. :115. a vari´ avel indicadora dos tratamentos ´ e do tipo factor .: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. O primeiro passo ´ e ler os dados. Em particular ´ e importante certificar-se que a vari´ avel resposta ´ e do tipo numeric e.txt". Caso o arquivo esteja em outro diret´ orio deve-se colocar o caminho completo deste diret´ orio no argumento de read. Tal procedimento ´ e tamb´ em chamado em alguns textos de ”an´ alise da variˆ ancia de simples entrada”(one-way anova ). Caso isto n˜ ao ocorra ´ e necess´ ario transformar as vari´ aveis para estes tipos antes de prosseguir com as an´ alises.0 (Other):18 .ufpr.:417.factor(ex01$trat) [1] TRUE Portando o objeto ex01 ´ e um data-frame com duas vari´ aveis.5 t4 : 6 Mean :353. 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.br/~paulojus/aulasR/dados/exemplo01. > head(ex01) trat resp 1 t1 385 2 t1 323 3 t1 417 4 t1 370 5 t1 437 6 t1 340 > is.0 t2 : 6 1st Qu. envolve um fator com nove n´ ıveis (tratamentos). > ex01 <.0 t6 : 6 Max. + 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. > summary(ex01) trat resp t1 : 6 Min. Calculamos tamb´ em as m´ edias. :474. neste exemplo.table("http://www. se os n´ ıveis de tratamentos forem qualitativos. sendo uma delas um fator (a vari´ avel trat) e a outra uma vari´ avel num´ erica (resp).

81198 trat-7 6 164.6667 1916.6667 1091. Caso isto n˜ ao ocorresse uma poss´ ıvel alternativa seria usar o procedimento descrito na Sess˜ ao 25.3. cex = 1.3333 3117.5000 987.82900 trat-3 6 346.ex01. l = 101). angle = 90. trat.600 17. > > > > > > > + require(MASS) boxcox(resp ~ trat. tapply(resp.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.5) arrows(1:9. tapply(resp. o que ser´ a discutido mais adiante nesta sess˜ ao. 1:9.1667 2173. mean)) ex01.Introdu¸ c˜ ao ao R > > > > > + 181 ex01.mds .se <.8333 1242. 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.nrep.13389 trat-5 6 341.var. 1:9. length = 0. code = 3.mds. met = "jitter". o que deve ser analisado com cautela lembrando que cada boxplot ´ e produzido com apenas seis observa¸ c˜ oes. O gr´ afico da direita produzido com stripchart() ´ e uma alternativa ao boxplot para amostras de tamanho pequeno.500 12.03228 trat-8 6 403. o teste de Bartlett.nrep <. 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. sep = "-")) Repeti¸ c~ oes M´ edias Vari^ ancias ErrosPadr~ ao trat-1 6 378.5) with(ex01. tapply(resp.se. trat. data = ex01) plot(ex01) points(ex01.with(ex01.with(ex01.with(ex01.test(resp ~ trat.var <.6667 3494. row. 3. ex01. pch = 19)) points(ex01. length)) ex01.87114 trat-2 6 431. stripchart(resp ~ trat. como por exemplo. O gr´ afico do meio mostra um boxplot para os dados de cada tratamento. vert = T. cex = 1. A transforma¸ c˜ ao Box-Cox ´ e discutida me mais detalhes em uma outra Se¸ c˜ ao deste material. col = 2. M´ edias = ex01.mds.se.267 17. Na fun¸ c˜ ao arrows() os quatro argumentos iniciais informam coordenadas para as barras.names = paste("trat".88378 trat-6 6 406.367 19.167 14.se. ErrosPadr~ ao = ex01. data = ex01) . Vari^ ancias = ex01.0000 1903.mds <. trat. trat. lambda = seq(0.067 13.667 24. 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. Optamos aqui por indicar tamb´ em neste gr´ afico a m´ edia de cada tratamento. pch = "x".767 15. tapply(resp. > bartlett. Neste caso o teste indica variˆ ancias homogˆ eneas. function(x) sqrt(var(x)/length(x)))) data. Ainda neste gr´ afico acrescentamos as m´ edias e barras que somam e subtraem os erros padr˜ oes da m´ edia para cada tratamento.with(ex01.mds.frame(Repeti¸ c~ oes = ex01. pch = 4. ex01.79571 trat-4 6 293. 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.48497 Vamos prosseguir com a an´ alise explorat´ oria com gr´ aficos gerados pelos comandos a seguir e mostrados na Figura 25.867 22. var)) ex01.38846 trat-9 6 415.8333 1513.

of Freedom 8 45 Residual standard error: 44. df = 8. os resultados s˜ ao oranizados internamente de forma conveniente para a efetuar a an´ alise de variˆ ancia.02053 Estimated effects may be unbalanced > anova(ex01. data = ex01) Terms: trat Residuals Sum of Squares 332918. 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.475 5.0 1.5 λ 2. residuals() para extrair res´ ıduos e .3 Deg.1 87201. > ex01. por se tratar da an´ alise de um experimento.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().6738. Neste exemplo.mod) Analysis of Variance Table Response: resp Df Sum Sq Mean Sq F value Pr(>F) trat 8 332918 41615 21.0 0.mod ´ e uma lista que guarda os resultados da an´ alise para o modelo ajustado.mod <. A fun¸ c˜ ao names() mostra os elementos da lista e adicionalmente existem fun¸ c˜ oes que extraem elementos do objeto.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. Embora aov() use lm() internamente. data = ex01) > ex01.445e-13 Residuals 45 87201 1938 Portanto o objeto ex01.0 2.5 1.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 Call: aov(formula = resp ~ trat. tipicamente avaliada pelo quadro de an´ alise de variˆ ancia. Duas tipicamente utilizadas s˜ ao coef() para extrair os coeficientes.aov(resp ~ trat. optamos por usar aov(). p-value = 0.5 3.

monta uma matrix do modelo de forma a que cada coeficiente corresponda ` a m´ edia de cada um dos tratamentos.mod) [1] "coefficients" "residuals" [6] "assign" "qr" [11] "call" "terms" > coef(ex01.tables(ex01.residual" "model" tratt4 -85.tables(ex01.15 O resultado de coef() vai depender da parametriza¸ c˜ ao adotada e definida pelos contrastes.69 52. para n´ ıveis quantititivos corresponde a ajustar um modelo com intercepto igual a zero. Os valores default e/ou correntes s˜ ao dados por options()$contrasts.tables().3 293. Para fatores qualitativos como no caso deste exemplo a parametriza¸ c˜ ao default corresponde a "contr.mod) Tables of effects "effects" "df.5 346.8333 406.31 t9 62.1667 403.mod. Note que apenas a interpreta¸ c˜ ao dos coeficientes muda e a an´ alise de variˆ ancia permanece a mesma. mas h´ a ainda v´ arias outras como effects().35 > model.1.0000 164.48 -189.3333 293.6667 341.mod) (Intercept) tratt2 tratt3 378.98 -7. > names(ex01.00000 > model.16667 37.8 406.6667 431.33333 tratt8 tratt9 25.6667 > anova(ex01.7 t8 50.8333 415.treatment" que assinala o valor da m´ edia do primeiro tratamento (primeiro n´ ıvel do fator) ao primeiro coeficiente.mod1 <.2 403. entre outras. type = "means") Tables of means Grand mean 353.7 341.66667 52.33333 tratt7 -214.mod1) tratt1 tratt2 tratt3 tratt4 tratt5 tratt6 tratt7 tratt8 tratt9 378.7 431.50000 trat trat t1 t2 t3 t4 t5 t6 t7 25. model.83333 -32.Introdu¸ c˜ ao ao R 183 fitted() para valores ajustados.8 415.5185 trat trat t1 t2 t3 t4 t5 t6 t7 t8 t9 378.mod1) Analysis of Variance Table Response: resp .15 77. Uma outra forma de expecificar o modelo para este exemplo ´ e mostrada a seguir com o uso -1 que.85 -11.values" "xlevels" tratt5 -36. data = ex01) > coef(ex01.aov(resp ~ trat . AIC() logLik(). > ex01.19 -59.00000 "rank" "contrasts" "fitted. No caso de n´ ıveis qualitativos como neste exemplo. Os demais representam a diferen¸ ca das m´ edias de cada um dos tratamentos ` a este tratamento de referˆ encia.0 164.83333 tratt6 27.5000 346.

"contr.981481 -7.314815 trat5 -11.poly")) > contrasts(ex01$trat) [.481481 .185185 -59.685185 trat6 52. por exemplo. no caso de n´ ıveis quantitativos. o que ´ e usado.Introdu¸ c˜ ao ao R Df Sum Sq Mean Sq F value Pr(>F) trat 9 7081587 786843 406. pode-se usar outras op¸ c˜ oes de contrastes j´ a disponibilizadas pelo R tipicamente usando options().1] [.7] [.5] [.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.148148 77. Nos comandos a seguir alteramos a op¸ c˜ ao para fatores unordered para "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.3] [. > options()$contrasts unordered ordered "contr.351852 50.2] [.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. > options(contrasts = c("contr.sum".6] [.sum".518519 25.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.05 < 2. data = ex01)) (Intercept) trat1 trat2 trat3 trat4 353.treatment" "contr.851852 trat7 trat8 -189. Fatores s˜ ao definidos como sendo unordered (por exemplo n´ ıvies qualitativos como no caso da an´ alise vista aqui) ou ordered. Os resultados da an´ alise de variˆ ancia permanece inalterado.4] [.

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

0 −2 Standardized residuals −1 0 1 20 0.5 1.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.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 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 .

test() calcula todas as poss´ ıveis compara¸ c˜ oes entre dois grupos.02345 1.03768 6.adj="bonferroni". (ii) teste de Tukey e (iii) contrastes e contrastes ortogonais. As sa´ ıdas da fun¸ c˜ ao mostram intervalos de confian¸ ca para as diferen¸ cas entre pares de m´ edias.65049 1.adjust.18109 t4 0. retornando o valor-p para cada comparac ¸˜ ao.8e-07 0. O argumento p.00000 1. trat)) Pairwise comparisons using t tests with pooled SD data: resp and trat t2 0. pairwise.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.00160 0.test(resp.00048 t5 0. 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.Introdu¸ c˜ ao ao R 188 25.00000 2.28829 3. e caso sejam.1.5e-09 1. que ´ e uma modifica¸ c˜ ao ao ajuste de Bonferroni. Os procedimentos discutidos a seguir correspondem a trˆ es possiveis abordagens ao problema de compara¸ c˜ ao de mais de duas m´ edias.00019 0.t.00000 3.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.00000 1.2.1. O primeiro caso se desdobra em mais op¸ co ˜es uma vez que permite que os valores p sejam ou n˜ ao ajustados.4e-05 0.00000 t3 0.1. Os procedimentos mostrados aqui s˜ ao implementados em pacotes b´ asicos do R.00000 1. 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.t.2 Teste de Tukey O teste Tukey de compara¸ c˜ oes m´ ultiplas ´ e implementado na fun¸ c˜ ao TukeyHSD().83853 0.1 Compara¸ c˜ oes de pares A fun¸ c˜ ao pairwise.39692 1. 25. que tamb´ em ´ e dispon´ ıvel utilizando atrav´ es do argumento p.8e-12 1. A sa´ ıda em formato texto do teste de Tukey ´ e mostrada a seguir e plot(ex01. 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.2e-07 0.11918 t6 8.00203 0.00000 t2 t3 t4 t5 t6 t7 t8 t9 t1 0.00000 0.00000 P value adjustment method: holm 25. Mais detalhes podem ser encontrados na documenta¸ c˜ ao da fun¸ c˜ ao.00000 1. o que justifica o termo ` as vezes utilizado que descreve tais procedimentos como compara¸ c˜ oes post-hoc. .00000 0. > with(ex01. sendo eles: (i) teste-t para compara¸ c˜ oes duas a duas. por diferentes m´ etodos.65049 1.0e-10 2.2e-11 1.HSD) produz o gr´ afico mostrado na Figura 25. podendo ser vista como uma extens˜ ao ao teste-t para duas amostras.33686 0.5e-11 t8 1.00000 t7 1.03768 1.45676 0. 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.

447633 -25.0000730 1.61430 334.947633 upr 212.833333 27.000000 64.28097 98.447633 -45.280966 -23.0000000 0.9749062 0.333333 85. 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.94763 195.11430 140.780966 -29.94763 94.0000000 0.44763 152.44763 264.0394343 0.500000 36.000000 110.61430 144.666667 25.94763 297.61430 110.166667 214.44763 108.28097 260.0000000 0. Vamos ilustrar aqui uma possivel forma .HSD Tukey multiple comparisons of means 95% family-wise confidence level factor levels have been ordered Fit: aov(formula = resp ~ trat.385701 -57. ordered = TRUE) > ex01.833333 lwr 46.6203900 0.166667 27.833333 4.2479215 0.28097 322.28097 350.000000 52.333333 37.9999286 0.0000004 0.11430 130.666667 85.9836416 0.11430 119.94763 107.11430 167.0247945 0.114299 2.HSD <.94763 110.44763 115.9730043 0.614299 -70.666667 182.885701 -50.4998060 1.219034 55.833333 62.947633 -20.5040619 0. 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.552367 -34.0000002 0.885701 159.385701 131.166667 11.833333 251.Introdu¸ c˜ ao ao R > ex01.219034 27.666667 69.1146645 0.94763 135.333333 48.9999849 0.000000 137.2886707 0.666667 241.719034 184.9993743 189 Visualiza¸ c˜ oes mais convenientes dos resultados podem ser obtidas com opera¸ c˜ oes sobre o objeto resultante.947633 6.9342210 0.0018566 0.385701 29.mod.28097 119.61430 p adj 0.552367 39.0000000 0.8721075 0.500000 239.166667 25.61430 87.114299 -13.0000000 0.614299 -30.0000000 0.8693183 0.61430 172.833333 2.3369467 0.052367 -78.280966 -66.0000000 0.333333 122.44763 167.166667 73.614299 -8.166667 112.666667 9.114299 -73.333333 57.114299 -57.947633 -80.947633 -55.78097 192.719034 94.166667 52.1671352 0.44763 324.TukeyHSD(ex01.0002153 0.0401018 0.0005599 0.28097 142.614299 -55.500000 15.94763 156.78097 135.0024139 0.78097 220.666667 32.500000 177.78097 146.885701 99.500000 59.500000 267.3855262 0.9849417 0.61430 84.280966 -45.052367 168.719034 156.447633 2.780966 -18.833333 89.44763 92.11430 204.

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 .

i] <. 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.mds.vec[i:pos.1 > letras <.i + 1 + } [1] "a" [1] "b" [1] "c" [1] "c" [1] "c" [1] "c" [1] "d" [1] "d" [1] "d" > data.1667 d . decreasing = TRUE) > i <.(ex01. > dms <.6667 ab t6 406.vec <.i + letra <.Introdu¸ c˜ ao ao R 191 de obter tal visualiza¸ c˜ ao.rep(" ". 2:3])) > dms [1] 82.5000 a t9 415.unname(0. letras. > ex01.8333 bc t4 293.letra <.i + sum(ind) + if (pos.i > pos) { + letras.vec.character(nlevels(ex01$trat)) > while (i <= nlevels(ex01$trat)) { + print(letters[letra]) + ind <. isto ´ e.HSD[[1]][1.mds.sort(ex01.pos <.6667 c t7 164.frame(m´ edias = ex01.ord <.3333 bc t5 341.8333 ab t1 378.mds. diferen¸ cas = letras) m´ edias diferen¸ cas t2 431.letra + 1 + } + i <.0000 ab t8 403.5 * diff(ex01. Inicialmente vamos obter a DMS (diferen¸ ca m´ ınima significativa).i <.mds. length(letras)) + letras.(ex01.letters[letra] + letras <.paste(letras. 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.ord.6667 ab t3 346.ord[i] .pos. o mesmo n´ umero de repeti¸ c˜ oes em cada tratamento.78097 O passso seguinte ´ e ordenar as m´ edias deforma decrescente e verificar as diferen¸ cas significativas.ord[-(1:i)])) < dms + pos.mds. No caso deste experimento balanceado. sep = "") + pos <.

se o interesse ´ e apenas na an´ alise de variˆ ancia a particular forma adotada ´ e irrelevante. associando ao(s) fatores a estrutura de contrastes desejadas. onde f´ ormulas lineares s˜ ao usadas para definir as matrizes do modelo usadas no ajuste de modelos lineares e lineares generalizados. Como na an´ alise de contrastes os coeficientes passam a ser diretamente interpretados. podendo ser escrita de diversas formas alternativas que ir˜ ao produzir a ajustes equivalentes. .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. Portanto. 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. Vamos iniciar revendo defini¸ c˜ oes. Contrastes ortogonais s˜ ao particularmente interessantes pois permitem desdobrar (particionar) a soma de quadrados de tratamentos um parcelas referentes a cada um dos contrastes. t2 e t3 versus t4 a t9 . a escolha deve ser adequada se os coeficientes devem ser interpretados. a partir de opera¸ c˜ oes matriciais sobre os coeficientes ajustados. . 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. Uma classe especial de contrastes ´ e a de contrastes ortogonais. Desta forma os coeficientes j´ a fornecem estimativas dos contrastes a c´ alculos adicionais n˜ ao s˜ ao necess´ arios. diretamente no ajuste do modelo. 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. . Ao ajustar um modelo as estimativas de contrastes podem ser obtidas de duas formas: ap´ os o ajuste do modelo. No caso de fatores (qualitativos) a matriz X do modelo n˜ ao ´ e definida unicamente para um mesmo experimento. Uma combina¸ c˜ ao linear dos coeficientes da forma p λp βp onde λ = [λ1 . β o vetor de p parˆ ametros (coeficientes) e ǫ o vetor de erros. Isto permite que cada contraste seja testado diretamente por um teste t (ou o equivalente teste F ). 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. 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(). isto ´ e. . 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. C1: t1. Por outro lado. A defini¸ c˜ ao destes contrastes n˜ ao ´ eu ´nica e deve refletir compara¸ c˜ oes relevantes para o problema em quest˜ ao. que s˜ ao um caso particular das fun¸ c˜ oes estim´ aveis para o modelo. Seja o modelo linear escrito na forma matricial Y = Xβ + ǫ onde Y ´ e a vari´ avel resposta. Um contraste ´ e um caso especial de fun¸ c˜ ao estim´ avel em que a soma das constantes ´ e nula.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. 25. passamos a usar lm() no ajuste do modelo. Com nove tratamentos ´ e poss´ ıvel definir oito contrastes ortogonais com cada um deles sendo associado a um dos graus de liberdade dos tratamentos. Vamos discutir aqui algums id´ eias iniciais sobre como implementar a segunda forma.1. No que se segue vamos ver como obter estimativas de contrastes de interesse no R. pode ser escrito como p cp βp onde p cp = 0. λ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 . X a matrix do modelo.

+ 6)). 1. 0. 1.1] [. -1. > c1. 2.ginv > mod1 <. 5).6] [. c(0. rep(0. c(0.445e-13 Residuals 45 87201 1938 > summary(mod1) . -1. t8.] 0 1 -1 0 0 0 0 0 0 [4. -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().lm(resp ~ trat. -1. 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.Introdu¸ c˜ ao ao R C2: t1 versus t2 e t3 C3: t2 versus t3 C4: t4.] 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. c(2. 1. 4)).475 5. 2.] 0 0 0 0 0 1 1 -1 -1 [7. t5 versus t6. 1:8.9] [1.ginv <.c1.4] [. -1. -1)). -1.ginv) <. A analise de variˆ ancia deste modelo ´ e a mesma obtida anteriormente. -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 2 2 -1 -1 -1 -1 -1 -1 [2. t7. 0)). 0. c(rep(0. -1.7] [. rep(0. 5). data = ex01) > anova(mod1) Analysis of Variance Table Response: resp Df Sum Sq Mean Sq F value Pr(>F) trat 8 332918 41615 21.paste("contr".] 0 0 0 1 -1 0 0 0 0 [6. -1.5] [. rep(0.3] [. sep = "") > contrasts(ex01$trat) <. c(2. -1.ginv(c1) > colnames(c1. -1. -1). c(1. 2.] 2 -1 -1 0 0 0 0 0 0 [3.] 0 0 0 0 0 1 -1 0 0 [8. c(1. c(1. -1))) > c1 [. 3). 6)). -1. c(rep(0. -1. + c(rep(0.rbind(c(2. 3). + c(rep(0.2] [. -1)).] 0 0 0 2 2 -1 -1 -1 -1 [5. 5). c(rep(0.8] [.

064503 1.937 1.643748 . -1]) > names(ex01co) <.2169 11.7924.906 0.matrix() para montar a matrix de covari´ aveis da forma desejada.lm(resp ~ .83 76.000466 0. onde exclu´ ımos o intercepto (primeira coluna) e.17 25.515 2.matrix(resp ~ trat.466 0.67 Coefficients: Estimate Std.6334 3.001638 0. usando model.26e-08 tratcontr7 241.643682 tratcontr3 85.17 Max 85..41e-12 tratcontr8 -11. 1:8) > ex01co$resp <.000466 tratcontr2 -20.001638 tratcontr4 -118. para visualiza¸ c˜ ao adequadoa dos resultados.17 25.data.41 -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.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.52 5.351 0.445e-13 Nos comandos a seguir visualizamos os mesmos resultados de uma forma alternativa.50 44.41 -1.02 on 45 degrees of freedom Multiple R-squared: 0. data = ex01co) > av2 <.643682 0. p-value: 5.94 -6.063029 tratcontr5 -48.frame(model.83 25.41 3.99 59.2512 0.775 0.25 3.83 25.7555 F-statistic: 21. 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.48 on 8 and 45 DF.064503 tratcontr6 -249. > ex01co <.02 -0.25 -1.264e-08 2.33 35. Adjusted R-squared: 0.895 0.paste("Contraste".063029 0.2168 Pr(>F) 0.409e-12 0. Error t value Pr(>|t|) (Intercept) 353. trocamos os nomes das colunas.014 < 2e-16 tratcontr1 287.5405 0.29 4.1217 90. data = ex01) Residuals: Min 1Q Median -85.ex01$resp > mod2 <. A este data-frame adicionamos os dados e ajustamos o modelo de regress˜ ao com lm().5917 48.643748 Residual standard error: 44.67 -33.41 9.2292 3.67 62.466 0. ex01)[.75 194 3Q 33.Introdu¸ c˜ ao ao R Call: lm(formula = resp ~ trat.

Outros procedimentos s˜ aqo implementados em pacotes contribu´ ıdos do R.51852 287.t. Entre estes encontra-se os pacotes multcomp e multcompView que implementam diversos outros procedimentos e gr´ aficos para visualiza¸ c˜ oes dos resultados.50000 85. 25.33333 241. . > drop(c1 %*% ex01.text() e TukeyHSD implementadas no conjunto de pacotes b´ asicos do R.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. Pode-se ainda visualizar os contrastes assinalados ao fator trat atrav´ es da inversa generalizada. por exemplo.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. 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.1 > coef(mod2) (Intercept) Contraste 1 Contraste 2 Contraste 3 Contraste 4 Contraste 5 353.16667 -118.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.33333 [8] -11. se o modelo acima fosse definido por resp trat . isto ´ e.83333 -11.83333 Os coeficiente retornados equivalem ` a aplicar os contrastes desejados sobre as m´ edias dos tratamentos.66667 -48. 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.50000 85.16667 -118.16667 -249.83333 -20. > contrasts(ex01$trat) <.66667 -48.1.Introdu¸ c˜ ao ao R 195 > sum(av2$Sum[1:8]) [1] 332918.16667 Contraste 6 Contraste 7 Contraste 8 -249. Para cancelar a atribui¸ c˜ ao dos contrastes a um fator e retornar a definida por option() basta fazer atribuir a valor NULL.NULL Finalmente vale ressaltar que o exemplo acima tratou de um experimento balanceado.mds) [1] 287.83333 -20.

cujos resultados.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. Uma outra alternativa ´ e a an´ alise n˜ ao param´ etrica da Kruskall-Wallis implementada por kruskal. t7 t4 t5 t3 t1 t8 t6 t9 . 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. > multcompLetters(TukeyHSD(ex01. compFn = "TukeyHSD".test() pode ser utilizada nas an´ alises.2.packages("multcompView".Introdu¸ c˜ ao ao R 196 t2 a ab ab ab ab bc bc c d 150 200 250 300 350 400 450 > install.mod)$trat[. data = ex01. 4]) t2 t3 t4 t5 t6 t7 t8 t9 t1 "a" "bc" "b" "bc" "ac" "d" "ac" "ac" "ac" > multcompBoxplot(resp ~ trat. s˜ ao apresentados em forma diferente do visto anteriormente. embora iguais. decreasing = FALSE) 25. 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.test().

1 Lendo os dados Vamos considerar agora que os dados j´ a estejam digitados em um arquivo texto.table("http://www.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).txt".4 5 r1 e2 24. que no caso deste experimento ´ e a vari´ avel resposta. Vamos tamb´ em pedir o R que exiba um r´ apido resumo dos dados e verificar se cada vari´ avel possui o ”tipo”correto.table(): Se voce n˜ ao tiver restri¸ c˜ oes de acesso (firewall.ufpr. + 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.leg. > head(ex04) rec esp resp 1 r1 e1 26. > ex04 <. 26. sendo que as duas primeiras s˜ ao fatores enquanto resp ´ e uma vari´ avel num´ erica.6 > dim(ex04) [1] 24 3 > names(ex04) [1] "rec" "esp" "resp" > is. A seguir deve-se ler (”importar”) os dados para R com o comando read.factor(ex04$resp) [1] FALSE > is. bem como o nome das vari´ aveis. esp e resp.factor(ex04$esp) [1] TRUE > is.8 6 r1 e2 24. Clique aqui para ver e/ou copiar o arquivo com conjunto de dados para o seu diret´ orio de trabalho.0 4 r1 e1 25.factor(ex04$rec) [1] TRUE > is.read. etc) pode importar o arquivo diretamente fornecendo a URL (endere¸ co web ) do arquivo. As vari´ aveis tem nomes rec. .br/~paulojus/aulasR/dados/exemplo04.0 3 r1 e1 25.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.2 2 r1 e1 26.

875 20. com uma fun¸ ca ˜o definida por n´ os.e2 25.with(ex04.050 25.30 21. esp). tapply(resp.:19.e2 25. tapply(resp. interaction(rec. :18. median)) r1.7250 20. > with(ex04.75 r3:8 Median :23.575 21.875 19.Introdu¸ c˜ ao ao R 198 26.e1 r2. tapply(resp. esp).85833 22.e2 r3. interaction(rec.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.e1 r3.e1 r1.e1 r2.325 r2 25.m <.e2 r2.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. mean)) r1.e2 r3.m e1 e2 r1 25.70 Mean :22.325 19.mr <.97 3rd Qu.mr r1 r2 r3 25. mean)) > ex04. tapply(resp.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. tapply(resp.e1 r1.70 26.07500 > ex04. > ex04.650 25. esp.e2 r2.00 19.with(ex04.35 > with(ex04. > with(ex04.050 21.e2 4 4 1 4 0 1 . esp).e1 r3.30 25.6875 > ex04. rec. mean)) > ex04.00 19.60 r2:8 e2:12 1st Qu.4875 22. function(x) sum(x > 22))) r1. interaction(rec.2 An´ alise explorat´ oria Inicialmente vamos obter um resumo de nosso conjunto de dados usando a fun¸ c˜ ao summary().e2 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.with(ex04.me e1 e2 23.me <.48 Max. :26.575 r3 20. > summary(ex04) rec esp resp r1:8 e1:12 Min. Note que para os fatores s˜ ao exibidos o n´ umero de dados em cada n´ ıvel do fator.e1 r2.:25. tapply(resp. list(rec.e1 r3. esp).650 25.e2 r3.e1 r1. mean)) > ex04. J´ a para a vari´ avel num´ erica s˜ ao mostrados algumas medidas estat´ ısticas.

e por summary para obter um outro resumo dos dados. xpd = F. ylab = "Resposta". esp. Os comandos a seguir s˜ ao usados para produzir os gr´ aficos exibidos na Figura 26. preferimos o mecanismo mais geral de tapply() que permite o c´ alculo de outros resumos al´ em da m´ edia.2. col = 2)) points(ex04. Pode-se usar o R para obter outros tipos de gr´ aficos de acordo com o interesse de quem est´ a analisando os dados. > with(ex04.4 1.0 r3 1. + xpd = F)) 26 x x x 26 x x x Resposta 22 24 Resposta 22 24 x x 1.5) with(ex04. Em experimentos fatoriais ´ e importante verificar se existe intera¸ c˜ ao entre os fatores.6 espécie 1. + xpd = F)) > with(ex04. lty = 1. resp[rec == "r1"]. resp.plot(rec. points(rec[esp == "e2"]. ylab = "Resposta". Inicialmente vamos fazer isto graficamente e mais a frente faremos um teste formal para presen¸ ca de intera¸ c˜ ao. ty = "n". resp[esp == "e1"].plot(esp. xlab = "recipiente".2 1.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.5 x x 20 x 20 x 1. col = 2.tables() o que ser´ a mostrado mais adiante. pch = "x".2 s˜ ao mostrados gr´ aficos semelhantes aos mostrados anteriormente.0 r1 1. points(esp[rec == "r1"]. ylab = "m´ edias". xlab = "esp´ ecie")) with(ex04. resp. col = 1)) . 2].5 2. xlab = "recipiente". cex = 1. col = 1)) points(ex04. rec. cex = 1. Entretanto neste est´ agio de an´ alise descritiva.m[. pch = "x". )) with(ex04.default(rec. 1]. ylab = "m´ edias". col = 1:2)) with(ex04. resp[esp == "e2"]. ty = "n".5) with(ex04. interaction. esp. plot. 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. points(rec[esp == "e1"]. > + > > > > > > > with(ex04.m[. resp.plot(rec. 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.0 e1 Figura 57: Gr´ aficos de intera¸ c˜ ao entre os fatores. Na figura 26. resp.0 e2 3.default(esp. plot. add = T. xlab = "esp´ ecie". col = 1.0 r2 recipiente 2. interaction.8 2. resp. interaction.

aov(resp > summary(ex04. A primeira usa a segunda internamente visto que o modelo ´ e linear. cex = 1.761 Residuals 18 23. Nestas fun¸ c˜ oes os modelos s˜ ao declarados por ”f´ ormulas”. 26.082 rec:esp 2 63. ].861 esp 1 19. > ex04.924e-07 *** 19.0 e1 Figura 58: Gr´ aficos de pontos examinando a intera¸ c˜ ao entre os fatores.3 An´ alise de variˆ ancia Seguindo o modelo adequado. rec. ]. cex = 1.875 0. resp.5 Resposta 22 24 x x 20 x 20 x 1. lty = 1.av) Df Sum Sq rec 2 92.aov(resp > ex04. 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”).195 4.0 r1 1.0 r3 1.4 1.430 36. resp[rec == "r3"]. points(esp[rec == "r3"]. add = T. 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. pch = "x".001155 ** 31.m[3. pch = "x".5) with(ex04.5) with(ex04.8 2.plot(esp.853 6. points(esp[rec == "r2"].5 2. col = 3.6 espécie 1. col = 1:3)) 26 x x x 26 x x x Resposta 22 24 x x 1. col = 3)) points(ex04.av <.283 . col = 2)) points(ex04. A seguir vemos duas f´ ormulas que especificam o mesmo modelo.082 14.m[1. interaction.880 24. col = 2. cex = 1. ]. xpd = F. data = ex04) Mean Sq F value Pr(>F) 46. resp[rec == "r2"].2 1.090 ~ rec + esp + rec:esp.Introdu¸ c˜ ao ao R > > > > > > 200 points(ex04.5) with(ex04. data = ex04) ~ rec * esp. por´ em ajusta os resultados em um formato em geral mais adequado para an´ alise de experimentos. pch = "x".0 r2 recipiente 2.av <. col = 1.635e-06 *** 1.m[2.0 e2 3.

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

o comando plot(ex04. tipos de gr´ aficos.4. mudar texto de eixos e t´ ıtulos.4. etc.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. . etc. Os gr´ aficos permitem uma an´ alise dos res´ ıduos que auxilia no julgamento da adequacidade do modelo.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.5 Standardized residuals 0. Neste gr´ aficos pode-se usar outras vari´ aveis. 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.0 14 21 Standardized residuals 0 1 2 14 −1 21 0.Introdu¸ c˜ ao ao R 202 26. etc. 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. Evidentemente n˜ ao ´ e necessario limitar-se aos gr´ aficos produzidos automaticamente pelo R – voce pode criar os seus pr´ oprios gr´ aficos. Usando o mecanismos de classes.4 An´ alise de res´ ıduos A an´ alise de res´ ıduos ´ e u ´til para verificar os pressupostos do modelo.5 1.

av) plot(ex04$rec.Introdu¸ c˜ ao ao R > > > > > residuos <.res respad <.fitted(ex04. residuos) title("Res´ ıduos vs Recipientes") plot(ex04$esp. Note que o objeto que cont´ em o ajuste foi utilizado para extrair res´ ıduos. > > > > > > > > > > preditos <.av$df.09402 .9293. preditos) title("Res´ ıduos vs Preditos") s2 <.residuos/sqrt(s2) boxplot(respad) title("Res´ ıduos Padronizados") qqnorm(residuos. e um qqplot dos res´ ıduos do modelo.av) plot(residuos. 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.sum(residuos^2)/ex04. Como exemplo vejamos o teste de Shapiro-Wilks para testar a normalidade dos res´ ıduos.4 mostra outros gr´ aficos definidos pelo usu´ ario: res´ ıduos versus valores preditos.test(residuos) Shapiro-Wilk normality test data: residuos W = 0. 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.resid(ex04. p-value = 0. ylab = "Res´ ıduos". A Figura 26. > shapiro. um boxplot dos res´ ıduos padronizados. valores preditos e a estimativa s2 da variˆ ancia dos res´ ıduos.

001155 ** esp:rec 4 156.875 0.524 8.01 ³*³ 0.001 ³**³ 0.1952 4.251 2. no caso de ex04.1 ³ ³ 1.4).776e-07 *** esp:rec: e2 2 69.5345 0. r2 = 2.380 61.090 1.aov(resp ~ rec/esp.380 79.112e-07 *** rec:esp: r3 1 3.05 ³. e2 = c(2. 26.614 21.ave foram e1=c(1. > ex04.438e-08 *** esp:rec: e1 2 87.430 36.05 ³.³ 0.500 34.561 33.211 0. data = ex04) > summary(ex04.155 30. Uma forma de obter tal desdobramento no R ´ e reajustar o modelo utilizando a nota¸ c˜ ao / que indica efeitos aninhados.509e-06 *** rec:esp: r1 1 0.861 46.924e-07 *** rec:esp 3 82.251 3. split = list( rec:esp = list(r1 = Df Sum Sq Mean Sq F value Pr(>F) rec 2 92. data = ex04) > summary(ex04.211 0.6897 rec:esp: r2 1 79.122 43. 4)))) 1 Neste ponto vale uma explica¸ c˜ ao mais detalhada sobre como obter os desdobramentos da intera¸ c˜ ao usando o argumento split.³ 0.283 --Signif.750 27.090 3. split = list( esp:rec = list(e1 = Df Sum Sq Mean Sq F value Pr(>F) esp 1 19.3) e e2=c(2. codes: 0 ³***³ 0.ave <.ave.1647 0.01 ³*³ 0.1288 Residuals 18 23.082 14.622 39.1 ³ ³ > ex04.283 --Signif. r3 = 3))) 1 c(1. em particular como definir os elementos da lista que.082 19.avr.aov(resp ~ esp/rec.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.5269 3. 3). Iniciamente vamos extrair usando effects() os efeitos ajustados pelo modelo.958 7. Desta forma podemos desdobrar os efeitos de esp´ ecie dentro de cada recipiente e vice versa conforme mostrado a seguir. codes: 0 ³***³ 0.090 1.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.001 ³**³ 0.8813 3.842 27. .730e-06 *** Residuals 18 23.avr <.

data = ex04) $rec diff lwr upr p adj r2-r1 -2.325 -5.7625 -4. que s˜ ao: espe1:recr2.207787 -1.919596 -5.3701851 -3.075 -4. espe2:recr2.6201851 -6.600 -0. 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.225 -5.8119067 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. Por exemplo.tk1 <.770185 -3. e especie2 (e2) s˜ ao 2 e 4 o que define os valores nos vetores indicados no argumento split.0000068 0.8701851 -8.300 lwr -2. Como ilustra¸ ca ˜o mostramos a seguir duas formas de obter resultados para o Teste de Tukey.8701851 -8. Isto mostra que a posi¸ c˜ ao dos efeitos que cont´ em a esp´ ecie1 (e1) s˜ ao 1 e 3.75476 -0.783333 -2. espe1:recr3 e espe2:recr3. 3o : espe1:recr3 o e 4 : espe2:recr3.6 que ´ e produzida com o comando plot(ex04.123724 -7.482787 -0.1451851 -2.9983324 0.513229 -4.0004825 0.550 -6.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.0000003 r3-r2 -2.0000204 0. 2o : espe2:recr2. Portanto temos que localizar no vetor de efeitos as posi¸ c˜ oes desses efeitos de intera¸ c˜ ao que s˜ ao: 1o : espe1:recr2.0003395 r3-r1 -4.754815 p adj 0. Al´ em disto.0000041 .656854 205 Os efeitos que temos interesse no desdobramento s˜ ao os da intera¸ c˜ ao.245287 -3.3201851 -8.054815 2.Introdu¸ c˜ ao ao R > effects(ex04. procedimentos que n˜ ao estejam implementados podem ser calculados utilizando os recursos usuais do R utilizando os objetos com o ajuste dos modelos. 26.ave)[1:6] (Intercept) espe2 espe1:recr2 espe2:recr2 espe1:recr3 espe2:recr3 -112.tk1).220185 -3.0000120 0.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.8000 -6.9811892 0.5922128 0.9997185 0. e muitos deles s˜ ao implementados nos pacotes b´ asicos do R e/ou em pacotes contribu´ ıdos.0951851 -8.TukeyHSD(ex04.3547128 0.0375 -3. > ex04.3172128 0.529815 -1.995185 -3.368257 4.av) > ex04.0055472 $esp diff lwr upr p adj e2-e1 -1.279815 1.325 -6.779815 -3.825 -0.8451851 upr 2. o pacote multcomp ´ e inteiramente dedicado ` a implementa¸ c˜ ao de diversos procedimentos de compara¸ c˜ oes m´ ultiplas no R.tk1 Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = resp ~ rec * esp.939804 6.

070185 0.ave.550 5.729815 -1.0000444 0.8701851 -2.9811892 0.454815 -3.0000204 0.0002705 2.2701851 3.600 -4.275 -0. 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.295185 0.7951851 4.204815 -2. 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.tk2).6201851 -8.225 -6.3201851 -8. neste caso.275 -5.820185 0.5451851 -1.754815 p adj 0.325 0.095185 -3.300 lwr -2.1451851 -6.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.454815 0.0000143 -6. 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.0011258 0.820185 0.2951851 -3.tk2 Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = resp ~ esp/rec.9902110 -1.750 -4.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.7298149 7.275 -4. Entretanto.0000143 0. nem todos os resultados mostrados nos interessam.0201851 2.8701851 -1.8201851 -6.220185 2.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.0011258 -0. "esp:rec") > ex04.5451851 -8.6135909 -8.054815 -1.529815 -3.075 -5.5 −2.5 −1.0 −1.tk2 <.8451851 upr 2.550 -5. 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.475 1.004815 0.750 -5.779815 3.2951851 -7.325 0.0000041 .000 -6.9983324 0.0951851 -2.750 -7.204815 0.TukeyHSD(ex04.0000444 -3.770185 -3.0000068 0.9951851 -8.0004825 0.000 1. > ex04.9997185 0.

600 -5.m e1 e2 r1 25.825 r3 -5.m onde as linhas se referem aos recipientes e colunas ` as esp´ ecies.tri(m1n)] > m1d r2-r1 r3-r1 r3-r2 0.Introdu¸ c˜ ao ao R e1:r3-e1:r2 -5.0951851 -2.650 25.av$df.875 20.0002705 e1:r3-e2:r2 0. sep="-") > names(m1d) <. sig = ifelse(abs(m1d) > dt.frame(dif = m1d.7951851 4.325 r2 25.600 -5.875 19. vamos fazer as compara¸ c˜ oes dos recipientes para cada uma das esp´ ecies.2914242 e2:r3-e1:r3 1. 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.275 -1.600 -5.295185 0.043945 Este valor ´ e ent˜ ao usado para comparar as m´ edias de interesse.m1n[lower.outer(m1. > # compara¸ c~ ao de m´ edias de recipientes para esp´ ecie 1 : > ex04.825 > data. > s2 <. fazendo os c´ alculos passo a passo.575 r3 20.6135909 207 Mas ainda assim temos resultados que podem n˜ ao interessar.600 r2 0.000 > m1d <. 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.outer(names(m1).95.tri(m1d)] > m1d [1] 0."-") > m1d r1 r2 r3 r1 0. 18) * sqrt(s2/4) > dt [1] 2.825 -8.325 > m1 <.qtukey(0.820185 0.650 25.paste.1] > m1 r1 r2 r3 25.050 21.m[.0701851 3.av)^2)/ex04.225 5. Neste ponto.2701851 3.050 > m1d <.550 -7.825 > m1n <.names(m1).sum(resid(ex04.ex04.res > dt <.225 -5. "".279815 0.0000120 e2:r3-e1:r2 -4.000 -0.475 -2.m1. Primeiro vamos obter a estimativa da variˆ ancia dos res´ ıduos. 3. considere que estamos intessados nas compara¸ c˜ oes dos n´ ıveis de um fator dentro de cada um dos n´ ıveis do outro fator.225 0.3701851 -3.225 -5.9902110 e2:r3-e2:r2 1.750 -0.020185 0. Anteriormente armazenamos as m´ edias para as combina¸ c˜ oes de todos os n´ ıveis dos fatores no objeto ex04.825 0.000 5.004815 0.m1d[lower. Mais especificamente. "ns")) .

00 * r3-r2 1.m2n[lower.paste.outer(names(m2)."-") > m2d <.m2d[lower.frame(dif = m2d.75 * r3-r1 -4.75 ns 208 No c´ odigo mostrado anteriormente fazemos alguma manipula¸ c˜ ao dos objetos para formatar a sa´ ıda. sep="-") > names(m2d) <.m[.2] > m2d <.825 > # compara¸ c~ ao de m´ edias de recipientes para esp´ ecie 2 : > m2 <.ex04.tri(m2d)] > m2n <.tri(m2n)] > data. 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. . "ns")) dif sig r2-r1 -5. Procedimento an´ alogo pode ser adotado para fazer outras compara¸ c˜ oes de interesse.names(m2).225 ns r3-r1 -5.Introdu¸ c˜ ao ao R dif sig r2-r1 0. "*". sig = ifelse(abs(m2d) > dt.m2.outer(m2.600 r3-r2 -5.

50 1st Qu.13 Mean :40. :15. Come¸ camos com a leitura e organiza¸ c˜ ao dos dados.ufpr.leg. :32.0 Max.table("http://www. a resposta (resp) e a covari´ avel (cov).0 Mean :24.numeric(ex12$cov) [1] TRUE > is.Introdu¸ c˜ ao ao R 209 27 27.numeric(ex12$resp) [1] TRUE > summary(ex12) maq cov resp 1:5 Min.:21.5 3:5 Median :24.as.00 Median :40.:43.2 3rd Qu.table() diretamente como mostrado a seguir.00 Max.1 An´ alise de covariˆ ancia Exemplo 1 Vejamos agora um exemplo de an´ alise de covariˆ ancia.br/~paulojus/aulasR/dados/exemplo12.0 2:5 1st Qu.:27.read. :49.factor(ex12$maq) > is.00 Min. :32. + 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 <. 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.00 3rd Qu.txt". Note que neste caso temos 2 vari´ aveis num´ ericas.:36.0 . > ex12 <.

05 ³.cov. Desta forma os testes de significˆ ancia tem que ser obtidos em ajustes separados: (i) para o efeito de covari´ aveis.aov(resp ~ cov + maq.cov.986 11 --Signif.01 ³*³ 0.1181 Residuals 11 27.014 69.170e-05 *** cov 1 178. .³ 0.264e-06 *** Residuals 11 27. Para isto basta inverter a ordem dos termos na especifica¸ c˜ ao do modelo.284 2 cov 178. codes: 0 ³***³ 0. Note que para isto a vari´ avel cov tem que ser a u ´ltima na especifica¸ c˜ ao do modelo. devido a n˜ ao ortogonalidade.264e-06 *** 0.0001089 *** 2. Se desej´ avel poderia-se tomar os resultados de cada um deles para compor um quandro de an´ alise.trat <.³ 0. data = ex12) > summary(ex12. > ex12. > ex12.642 2.593 5.cov) Df Sum Sq Mean Sq F value Pr(>F) maq 2 140.6106 0. type = "III") Anova Table (Type III tests) Response: resp Sum Sq Df (Intercept) 87.01 ³*³ 0.200 27.cov <.trat) Df Sum Sq Mean Sq F value Pr(>F) cov 1 305.96e-07 *** maq 2 13.434 1 maq 13.Introdu¸ c˜ ao ao R 210 Na an´ alise de covariˆ ancia n˜ ao temos ortogonalidade entre os fatores. e no segundo para verificar o efeito do tratamento.9694 4.1 ³ ³ 1 A seguir testamos o efeito do fator maq corrigindo para o efeito da covari´ avel.544 --Signif. type="III") e Anova(ex12. por´ em com a resalva que. Entretanto.001 ³**³ 0.05 ³.001 ³**³ 0.aov(resp ~ maq + cov. corrigidos pelo efeito da covari´ avel.trat. > require(car) > Anova(ex12. ou seja.284 6.986 2.3664 0.1 ³ ³ 1 Note que esta fun¸ c˜ ao ir´ a retornar o mesmo resultado para qualquer ordem dos termos no modelo.400 70.014 178. codes: 0 ³***³ F value Pr(>F) 34.130 305.³ 0. codes: 0 ³***³ 0.014 1 Residuals 27.130 119.986 2.001 ³**³ 0.05 ³.9330 2.1180839 69. Primeiro vamos testar a inclina¸ c˜ ao (coeficiente β1 ) da reta de regress˜ ao.544 --Signif. type="III") retornam os mesmos resultados.6106 0. a soma das somas de quadrados n˜ ao corresonde a soma de quadrados total.1 ³ ³ 1 Portanto. 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.01 ³*³ 0. corrigido pelo efeito dos tratamentos qualitativos e (ii) para o efeito dos tratamentos qualitativos. data = ex12) > summary(ex12.969 4. h´ a uma fun¸ c˜ ao Anova() no pacote car do R que j´ a monta tal quadro automaticamente conforme ilustrado a seguir. olhamos o primeiro quadro da ANOVA para verificar o efeito da covari´ avel. no exemplo acima Anova(ex12.

00 2:4 2:5 1st Qu.read.:16. colocado na u ´ltima posi¸ c˜ ao na especifica¸ c˜ ao do modelo.ufpr. BLOCO = as.65 Mean : 75.: 94.00 .25 3:4 3:5 Median :18. 27. :11. TRAT = as.00 Max. > excov2 <.75 Max.factor(TRAT). :24.table("http://www.txt".00 1st Qu. Neste caso a fun¸ c˜ ao Anova faz o mesmo que mostrado nas duas an´ alises de variˆ ancias iniciais. obtendo para cada termo a soma de quadrados quando este ´ e corrigido para os demais.factor(BLOCO)) > summary(excov2) TRAT BLOCO STAND PROD 1:4 1:5 Min.50 4:4 4:5 Mean :17.2 Exemplo 2 Vamos considerar agora um outro exemplo retirado de um email de Andr´ e Oliveira Souza na lista R STAT.br/~paulojus/aulasR/dados/excovar2. :135.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.: 44.leg. + 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 <.00 Median : 75. ou seja. Inicialmente vamos carregar os dados e converter as colunas TRAT e BLOCO para fatores.00 Min. : 32.transform(excov2. 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.:19.40 5:4 3rd Qu.00 3rd Qu.

01179 * Residuals 1298. > excov2.6171 3.0822 0.05 ³.0 4 35.lm <.Introdu¸ c˜ ao ao R E portanto a an´ alise de covariˆ ancia pode ser obtida pelos seguintes comandos. .001 ³**³ 0. codes: 0 ³***³ 0.lm(PROD ~ BLOCO + TRAT + STAND.lm) Anova Table (Type II tests) Response: PROD Sum Sq Df F value Pr(>F) BLOCO 231.6 11 --Signif.092e-06 *** STAND 1072. data = excov2) > require(car) > Anova(excov2.1 212 ³ ³ 1 Para refor¸ car os conceitos compare o quadro de ANOVA obtido com os gerados pelos comandos a seguir.01 ³*³ 0.³ 0.59733 TRAT 16819.6534 0.2 1 9.4 3 0.

85 1. 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.leg.xls") head(mgo) str(mgo) summary(mgo) Pode-se identificar duas fontes de varia¸ c˜ ao nos valores medidos.86 2.88 1. que seria dado por alguma ”m´ edia”adequada.87 1.83 1.1 28.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.87 1.1.read.br/∼paulojus/aulasR/dados/MgO. Como exemplo.99 2.87 1.86 1.ufpr. uma devido ` a variabilidade entre laborat´ orios e outra devida ` a variabilidade das replica¸ c˜ oes feitas nos laborat´ orios.02 2.86 1.01 1.31 0.83 1.73 1. .xls("MgO.Introdu¸ c˜ ao ao R 213 28 28.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.28 0.88 1.00 2.68 1.86 1. considere os dados dos teores medidos de um u ´nico elemento mostrados a seguir e que podem ser obtidos em http://www.86 1. O objetivo ´ e encontrar um valor ”caracter´ ıstico”para as amostras.85 require(gdata) mgo <.84 1.64 1.68 0.00 1.

lme) Linear mixed-effects model fit by REML Data: mgo AIC BIC logLik -13.06901512 -0.03640 9.235126 0 Standardized Within-Group Residuals: Min Q1 Med Q3 -2. Al´ em disto deseja-se estimar os ”componentes de variˆ ancia”.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. Nos resultados a seguir ajustamos um modelo ajustado com a fun¸ c˜ ao lme() do pacote nlme.5112672 0. medidas da variabilidade entre e dentro de laborat´ orios.02752389 0.lme) Lab = pdLogChol(1) Variance StdDev (Intercept) 0. 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).675204 0. > intervals(mgo. random = ~1 | Lab. > require(nlme) > mgo.1813949 18 9.00166549 -0.294108 1.lme. isto ´ e.lme <. mgo) > summary(mgo.51126716 Residual 0.056301 attr(.07620438 Fixed effects: MgO ~ 1 Value Std.005807107 0."label") [1] "Fixed effects:" > VarCorr(mgo.Error DF t-value p-value (Intercept) 1. por exemplo dada por um intervalo de confian¸ ca.261394113 0.Introdu¸ c˜ ao ao R 214 associada a uma medida de variabilidade desta m´ edia. upper (Intercept) 1.07620438 Max 3.675205 2.24737682 . which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est.lme(MgO ~ 1.69303 -10.846515 Random effects: Formula: ~1 | Lab (Intercept) Residual StdDev: 0.

No primeiro desses gr´ eficos mostran-se todos os res´ ıduos. a transforma¸ c˜ ao n˜ ao ´ e necess´ aria. sendo que este dado tamb´ em foi considerado suspeito pela fonte dos dados.subset(mgo. excluindo-se o dado at´ ıpico. em acordo com o respons´ avel pelos dados.68 do laborat´ orio E ´ e bastante diferente das demais replicatas deste laborat´ orio (0.lme) Figura 63: Gr´ afico de res´ ıduos do modelo ajustado 28. .28 e 0.1.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. optar por remover este dado da an´ alise o que pode ser feito com o comando a seguir.Introdu¸ c˜ ao ao R 215 > plot(mgo. > mgo1 <. 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. A observa¸ c˜ ao de valor 0. Entretanto. Uma poss´ ıvel alternativa ´ e. !(Lab == "E" & MgO > 0. 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.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.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.

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

3.0 3. 2)) with(mgo.5. boxcox(MgO ~ Lab.0 λ 2.0 55 45 60 1.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 . 5. len = 200))) 65 60 95% 95% log−Likelihood 50 55 log−Likelihood 2 3 λ 4 5 50 0.5.Introdu¸ c˜ ao ao R 217 > > > > require(MASS) par(mfrow = c(1. len = 200))) with(mgo1. lam = seq(0. boxcox(MgO ~ Lab. lam = seq(1.

mgo1) > summary(mgo1.lme(MgO ~ 1. random = ~1 | Lab.242955 1.lme. reduzindo a estimativa de variˆ ancia entre as replicatas. > mgo1.5577551 0.55185 32. which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est.1781699 0.3598894 -0.subset(mgo.lme <.3110907386 0.lme) Linear mixed-effects model fit by REML Data: mgo1 AIC BIC logLik -59."label") [1] "Fixed effects:" > VarCorr(mgo1.Introdu¸ c˜ ao ao R 218 O modelo ajustado com o novo conjunto de dados apresenta resultados diferentes do anterior.lme(MgO ~ 1.08601 -55.3652780 -0. 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.lme <. > mgo2 <.01831692 Al´ em disto. mgo2) > summary(mgo2.411808 0 Standardized Within-Group Residuals: Min Q1 Med Q3 -2.5482108 .lme) Lab = pdLogChol(1) Variance StdDev (Intercept) 0.3673809 Number of Observations: 25 Number of Groups: 8 > intervals(mgo1.659078 0. Lab != "E") > dim(mgo2) [1] 23 2 > mgo2.01831692 Fixed effects: MgO ~ 1 Value Std.659078 2.Error DF t-value p-value (Intercept) 1. Poderia-se ent˜ ao considerar ainda remover todas as observa¸ c˜ oes deste laborat´ orio.55775509 Residual 0.0003355097 0.lme) Max 2.1972321 17 8.54301 Random effects: Formula: ~1 | Lab (Intercept) Residual StdDev: 0. upper (Intercept) 1.075202 attr(. random = ~1 | Lab.

5 2.Introdu¸ c˜ ao ao R 219 > print(plot(mgo1.0 1.0 Fitted values Figura 66: Gr´ afico de res´ ıduos para cada laborat´ orio do modelo ajustado ..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.0 1.lme.0 B C 0.5 2.0 1.5 1.5 1.5 2. type = "p") ~ fitted(.5 1.) | Lab. resid(. + abline = 0)) 0.

εi ∼ N (0.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.17204 -74. 28.3606918 Number of Observations: 23 Number of Groups: 7 > intervals(mgo2.854012 1.008693816 0.01811513 Fixed effects: MgO ~ 1 Value Std. σε ) ´ 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.lme.929162 attr(.3 Fundamentos Assumindo que efeitos aleat´ orios podem ser usados para descrever o efeito de laborat´ orios.01811513 220 Max 2.Introdu¸ c˜ ao ao R Linear mixed-effects model fit by REML Data: mgo2 AIC BIC logLik -78. which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est.Error DF t-value p-value (Intercept) 1. σǫ das medidas de replicatas dentro dos laborat´ orios.lme) Lab = pdLogChol(1) Variance StdDev (Intercept) 0.3302089 -0.29932 0 Standardized Within-Group Residuals: Min Q1 Med Q3 -2.5091805 -0.854012 0.08602 Random effects: Formula: ~1 | Lab (Intercept) Residual StdDev: 0."label") [1] "Fixed effects:" > VarCorr(mgo2. podemos descrever os teores por um modelo de efeitos aleat´ orios: Yij = µ + εi + ǫij .1587727 0. upper (Intercept) 1.1. .89891 42.09324064 0.778861 1.000328158 0. em que yij s˜ ao valores observados na j -´ esima medida feita no i-´ esimo laborat´ orio.09324064 Residual 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.03545001 16 52.

estimadores de m´ axima verossimilhan¸ ca e m´ axima verossimilhan¸ ca restrita.Introdu¸ c˜ ao ao R 221 O problema ent˜ ao consiste em estimar µ e a variˆ ancia associada ` a esta estimativa. Sob o modelo assumido os observa¸ c˜ oes tem distribui¸ c˜ ao normal Y ∼ N (1lµ. No caso balanceado. Esses u ´ltimos parˆ ametros s˜ ao chamados de componentes de variˆ ancia. a variˆ ancia 2 de cada observa¸ c˜ ao individual. isto ´ e.n−1 ˆ µ).lme) [1] "modelStruct" "dims" [6] "sigma" "apVar" [11] "call" "terms" [16] "fixDF" "na. 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.lme$coeff$fixed (Intercept) 1. . nossa preferˆ encia ´ e pelo uso de estimadores de m´ axima verossimilhan¸ ca restrita. Cov(Yi. e os demais elementos s˜ ao nulos. Var(ˆ . Diferentes m´ etodos de estima¸ c˜ ao s˜ ao propostos na literatura tais como estimadores de momentos baseados na an´ alise de variˆ ancia. 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. Considerando os recursos computacionais atualmente dispon´ ıveis e as propriedades dos diferentes estimadores. Tipicamente. Yi. estimadores minque (estimadores de norma quadr´ atica m´ ınima).action" > mgo1. 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 σ ˆǫ .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. que por sua 2 2 vez est´ a associada aos valores dos parˆ ametros de variˆ ancia do modelo σε e σǫ . V ). a matriz V pode ser obtida por um produto de Kronecker simples entre matrizes diagonais e unit´ arias multiplicadas pelos componentes de variˆ ancia.j ) = σε + σǫ .lme)[.659078 > VarCorr(mgo1.lme(). > names(mgo1.lme) e com valores mostrados novamente a seguir.j ′ ) = σε a covariˆ ancia entre observa¸ c˜ oes diferentes do mesmo laborat´ orio. igual n´ umero de replicatas nos diferentes laborat´ orios.j . 1] (Intercept) Residual "0.3110907386" "0. 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. 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.

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.975).09 -55.lme$varFix (Intercept) (Intercept) 0.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. mgo1) > summary(mgo1.9989227 28.242955 2.242955 1.075202 > intervals(mgo1.lmer(MgO ~ 1 + (1 | Lab)."label") [1] "Fixed effects:" Para uma observa¸ c˜ ao individual o intervalo ´ e dado por y ± t1−α/2. σε ǫ 222 2 2 e as estimativas σ ˆε eσ ˆǫ podem obtidas da seguinte forma. > require(lme4) > mgo1.numeric(VarCorr(mgo1.lme.52 -65.n−1 2 + σ2.1.54 -66. 0. upper (Intercept) 1.lmer) Linear mixed model fit by REML Formula: MgO ~ 1 + (1 | Lab) Data: mgo1 AIC BIC logLik deviance REMLdev -59.43 32. σε + σǫ > vcomp[1]/sum(vcomp) [1] 0. pr´ em os elementos s˜ ao equivalentes.lme)[. E definido ela express˜ ao a seguir e calculado como mostrado nas linhas de comando.025.075202 attr(. coefficients$fixed + qt(c(0. σ2 ρ = 2 ε 2.lme.lmer <. > vcomp <.659078 2.as.0389005 > with(mgo1. df = fixDF$X) * + sqrt(varFix)) [1] 1. which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est. Os resultados s˜ ao apresentados de forma diferente. 1]) > vcomp [1] 0. O comando para se obter uma an´ alise equivalente ` a anterior ´ e mostrado a seguir.Introdu¸ c˜ ao ao R > mgo1.3110907386 0.09 .

Estimativas de m´ axima verossimilhan¸ ca podem ser obtidas usando o argumento REML=FALSE.6591 0.91 33.56 -65.56 -56.6591 0.557755 Residual 0. 8 Fixed effects: Estimate Std. mgo1.1845 8.521708 Residual 0. Lab (Intercept) 0.31109071 0.00033552 0.018317 Number of obs: 25.Dev.1972 8. Error t value (Intercept) 1. Lab (Intercept) 0. groups: Lab. 8 Fixed effects: Estimate Std.lmer.00033551 0.27217957 0.ml) Linear mixed model fit by maximum likelihood Formula: MgO ~ 1 + (1 | Lab) Data: mgo1 AIC BIC logLik deviance REMLdev -60.04 Random effects: Groups Name Variance Std.28 -66.Dev.412 223 A op¸ c˜ ao padr˜ ao ´ e o ajuste por m´ axima verossimilhan¸ ca restrita.ml <.993 . Error t value (Intercept) 1.018317 Number of obs: 25.Introdu¸ c˜ ao ao R Random effects: Groups Name Variance Std. > mgo1. REML = FALSE) > summary(mgo1. groups: Lab.lmer.lmer(MgO ~ 1 + (1 | Lab).

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. df = 1).1 Rela¸ c˜ oes entre a distribui¸ c˜ ao normal e a χ2 Resultado 1: Se Z ∼ N(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. 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) .2 0. Fazemos isto com os comando abaixo e o resultado est´ a no gr´ afico da esquerda da Figura 67.5 0. 0.0 −3 −2 −1 0 z 1 2 3 0. add = T) Note que.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). Veremos alguns exemplos a seguir. main = "") > curve(dnorm(x).4 Density 0.Introdu¸ c˜ ao ao R 0.2 Density 0. Vamos come¸ car gerando uma amostra de 1000 n´ umeros da distribui¸ c˜ ao normal padr˜ ao. 10. Inicialmente vamos definir o valor da semente de n´ umeros aleat´ orios para que os resultados possam ser reproduzidos.3 0.3 0. prob = T. > z <.0 0 0. Na teoria de estat´ ıstica existem v´ arios resultados que podem ser ilustrados via simula¸ c˜ ao. 29. A seguir vamos fazer um histograma dos dados obtidos e sobrepor a curva da distribui¸ c˜ ao te´ orica.4 0. o que ajuda na compreens˜ ao e visualiza¸ c˜ ao dos conceitos e resultados. 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. 4.1 0. prob = T. -4. main = "") > curve(dchisq(x.7 224 0. Vejamos como ilustrar este resultado. Uma outra forma e mais eficaz forma de comparar distribui¸ c˜ oes .1 0. > hist(z^2. Agora vamos estudar o comportamento do quadrado da vari´ avel. 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. 1) ent˜ ao Z 2 ∼ χ2 (1) .rnorm(1000) > hist(z.

Para ilustrar este resultado vamos gerar 10.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.qchisq(ppoints(length(z)). somar os quadrados dos trˆ es . para cada amostra. obter os dados. . df = 1) > qqplot(quantis. Por fim usamos a fun¸ c˜ ao qqplot para obter o gr´ afico mostrado na Figura 68. 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 . . 3. 1) ent˜ ao n 1 Zi ∼ χ(n) . Portanto para fazer o qqplot seguimos os passos: 1. obter os quantis da distribui¸ c˜ ao te´ orica.000 amostras de 3 elementos cada da distribui¸ cˆ ao normal padr˜ ao. fazer um gr´ afico dos dados ordenados contra os quantis da distribui¸ c˜ ao. 2. Z2 . z^2) > abline(0. Vamos ilustrar isto nos comandos abaixo. . O qq-plot ´ e um gr´ afico dos dados ordenados contra os quantis esperados de uma certa distribui¸ c˜ ao. elevar os valores ao quadrado e. O n´ umero de elementos desta sequˆ encia deve igual ao n´ umero de dados e por isto usamos length(z). > quantis <. Primeiro vamos considerar como dados os quadrados da amostra da normal obtida acima. 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. adicionando neste gr´ afico a bissetriz do primeiro quadrante para facilitar a avalia¸ c˜ ao do ajuste. 1) Note que o comando qchisq(ppoints(length(z)). Zn ∼ N(0. 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.

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

> > > > > par(mfrow = c(1. Normal Q−Q Plot dnorm(x. a vari´ avel V = (n − 1)S /σ tem distribui¸ c˜ ao χn−1 .00 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. sd = sqrt(30/20)). 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.10 0. gere N amostras de tamanho n. sd = sqrt(30/20)) 0. 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. No exerc´ ıcio anterior compare os valores te´ oricos E [S 2 ] = σ 2 e V ar[S 2 ] = obtidos na simula¸ c˜ ao. a mediana na amostra. 29. escolha o tamanho de amostra n e o n´ umero de simula¸ c˜ oes N . 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.Introdu¸ c˜ ao ao R 227 tamanho finito.20 0. prob = T. 95. mean = 100. Avalie e compare atrav´ es de simula¸ c˜ oes a eficiˆ encia dos . 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. 105) hist(ybar. para cada amostra calcule S 2 e V = (n − 1)S 2 /σ 2 . 2σ 2 n−1 com os valores 3.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. mean = 100. fa¸ ca um histograma com os valores V e compare com a curva de uma distribui¸ c˜ ao χ2 n−1 . a m´ edia da amostra e T2 = md(x). 2. 2)) curve(dnorm(x.3 Exerc´ ıcios ¯ 2 (Yi −Y ) 1. Considere agora dois estimadores: T1 = ¯ (x).

de uma distribui¸ c˜ ao N(µ. 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.a. DICA: come¸ ce verificando passo a passo. . 4. o que ´ e necess´ ario para ilustrar este resultado. . 5. ¯ −µ Y √ ∼ tn−1 S/ n onde S ´ e o desvio padr˜ ao da amostra e n o tamanho da amostra.Introdu¸ c˜ ao ao R 228 ´ poss´ dois estimadores. . Ilustrar o resultado que justifica o teste-t para m´ edia de uma amostra. . . Yn a. Seja Y1 . como no exerc´ ıcio anterior. Ilustrar o resultado que diz que o quociente de duas vari´ aveis independentes com distribui¸ c˜ ao 2 χ tem distribui¸ c˜ ao F . σ 2 ).

Em certas situa¸ c˜ oes. > a > a [1] > b [1] > x > x [1] > y [1] > z [1] <.000000 3. . 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. execu¸ c˜ ao condicional. ”loops” e a ”fam´ ılia” *apply Agrupando comandos OR´ e uma linguagem que interpreta express˜ oes. controle de fluxo." para digita¸ c˜ ao em uma mesma linha.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. como no ”prompt”do R as chaves s˜ ao opcionais.z <.x + 4 z <.y/x <.x + 4 <.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 ".y/x 1 2 3 5 6 7 5. As seguintes fun¸ c˜ oes e operadores podem ser usadas para controlar execu¸ c˜ ao condicional.Introdu¸ c˜ ao ao R 229 30 30.1 Agrupando comandos.333333 30.10 10 10 <.b <.y <. Nesta sess˜ ao vamos alguns formatos para facilitar/agilizar o uso de comandos.1:3 y <. > { + + + + } > x > y > z > x [1] > y [1] > z [1] x <.000000 2. ´ poss´ E ıvel atribuir os mesmos valores a v´ arios objetos de uma s´ o vez utilizando atribui¸ c˜ oes m´ ultiplas de valores.1:3 <.

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

3 24.4 30.0 30. Entre as vari´ aveis est˜ ao as que indicam o consumo (mpg . manual ou autom´ atico (am).4 33.7 18. 30. . w) > x <. z.y + } > z [1] 20 > w [1] 5 > rm(x.15 > { + if (x > 8) + z <. Para separar os dados da vari´ avel mpg para cada tipo de cˆ ambio.8 16. com 3 casas decimais. que possui v´ arias vari´ aveis relacionadas a caracter´ ısticas de ve´ ıculos. while() e repeat().z .8 19. Por exemplo considere o conjunto de dados codemtcars.2 13.1 14.4 17.4 14.0 21.2 $ 1 [1] 21.8 19.2 17.5 * x + w <. . 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. y.4 18.3 15.4 Outro comando com funcionalidade similar ´ e agregate(). n e para calcule a m´ edia de cada amostra.2 10.3 19.4 22.Introdu¸ c˜ ao ao R > w [1] 35 > rm(x.5 [16] 15. . Primeiro vamos implementar uma solu¸ c˜ ao usando for().9 27. podemos usar: > data(mtcars) > with(mtcars. . y.4 15. 2. w) 231 Um comando u ´til para manipula¸ c˜ ao de dados ´ e o split() que permite separa dados por grupos.3 26. am)) $ 0 [1] 21. split(mpg. sendo que uma mesma tarefa pode ser feita por uma ou outra.2 * x + w <. z. 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.8 32.z + y + if (x <= 8) + z <.3 Controle de fluxo O controle de fluxo no R ´ e implementado pelas fun¸ c˜ oes for().10 > y <.miles per gallon ) e o tipo de cˆ ambio. .4 10.5 15.7 15.7 21.0 22.0 21.

138 0.392 1.rnorm(i) + medias[i] <.round(mean(am).392 1.546 0.1 + repeat { + am <.224 Agora vamos executar a mesma tarefa com while() > f2 <.392 1.function(n) { + medias <.086 -0.numeric(n) + i <.514 -0.seed(283) > f2(10) [1] 1.rnorm(i) + medias[i] <.224 232 0.063 -0.138 0.function(n) { + medias <.514 -0.i + 1 + } + return(medias) + } > set.function(n) { + medias <.seed(283) > f1(10) [1] 1. dig = 3) + if (i == n) + break + i <.007 -0.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.063 -0.546 0.341 -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.round(mean(am).rnorm(i) + medias[i] <.086 -0.341 -0.1 + while (i <= n) { + am <.seed(283) > f3(10) [1] 1.137 0.Introdu¸ c˜ ao ao R > f1 <.224 E finalmente a mesma tarefa com repeat() > f3 <.round(mean(am).341 -0.numeric(n) + for (i in 1:n) { + am <.514 -0.137 0.546 0.i + 1 + } + return(medias) + } > set.007 -0. .137 0. dig = 3) + } + return(medias) + } > set. Na verdade.numeric(n) + i <.007 -0.086 -0.063 -0. dig = 3) + i <.

4913491 -1.1 + for (i in ns) { + am <.2003886 -0.function(ns) { + medias <.Introdu¸ c˜ ao ao R 233 30.214059 1.f1a(4) > names(ap) [1] "amostras" "medias" > ap $amostras $amostras[[1]] [1] 1.007 -0.3257288 $amostras[[3]] [1] 0. dig = 3) + j <.function(n) { + res <.4 Alguns coment´ arios adicionais Nas solu¸ c˜ oes acima as amostras foram usadas para calcular as m´ edias e depois descartadas.0009700 -0. Suponha agora que queremos preservar e retornar tamb´ em os dados simulados. > f1a <.035963 1.round(mean(res$amostras[[i]]). dig = 3) + } + return(res) + } > set.rnorm(i) + res$medias[i] <.j + 1 .round(mean(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.174572 1.392 1.list() + res$medias <.seed(283) > ap <.list() + res$amostras <.numeric(n) + for (i in 1:n) { + res$amostras[[i]] <.rnorm(i) + medias[j] <.006870 $amostras[[2]] [1] 0.761383 $medias [1] 1.063 -0. > f5 <.546 Vamos agora ver uma outra modifica¸ c˜ ao.numeric(length(ns)) + j <. Nas fun¸ c˜ oes acima geravamos amostras com tamanhos sequˆ enciais com incremento de 1 elemento no tamanho da amostra.6665789 $amostras[[4]] [1] 2.

vers˜ ao multivariada de sapply() lapply() para ser aplicado em listas 1. f6) 0.138 2. sempre retornando uma lista sapply() para uso em vetores. 5.137 0. function(x) round(mean(rnorm(x)). disp = mad(x)) + return(list(A = modA.Introdu¸ c˜ ao ao R + } + return(medias) + } > set.514 -0.392 1.list(pos = mean(x).function(n) round(mean(rnorm(n)). B = modB)) + } .341 -0. dig = 3) set.086 -0.rnorm(500) + modA <.422 -0. 8.) { + x <. 5.177 0. Inicialmente definimos a fun¸ c˜ ao: > proc <.function(. trim = 0.224 0.056 0. 10)) [1] -1. arrays ou data-frames tapply() para uso em vetores.158 [1] -1.seed(283) > sapply(1:10. tapply() e lapply() para implementar c´ alculos de forma mais eficiente. dig = 3)) [1] 1.063 -0.list(pos = mean(x..056 234 0.422 -0. Vejamos algums exemplos.158 30. sapply().007 -0.546 0. 10) f6 <. Considere agora a modifica¸ c˜ ao mencionado anteriormente de calcular m´ edias de amostras com tamanho fornecidos pelo usu´ ario > > > > vec <. Usualmente usamos as fun¸ c˜ oes apply(). apply() para uso em matrizes.seed(231) sapply(vec.1).c(2.177 3.seed(231) > f5(c(2.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. disp = sd(x)) + modB <. simplificando a estrutura de dados do resultado se poss´ ıvel (para vetor ou matriz) mapply() para uso em vetores. 8. 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.. 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. Uma alternativa aos c´ odigos apresentados seria: > set.

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

48886 44.rep(LETTERS[1:5].tapply(x.41214 48. tapply(mpg.17779 46.03091 45. mean) > gM A B C D E 52.91571 51.28053 Vejamos ainda um outro exemplo onde definimos 50 dados divididos em 5 grupos.35892 25. > x <.55652 34. function(z) 100 * sd(z)/mean(z)) > gCV A B C D E 16.99390 44.data.06800 47. var)) 0 1 14.37572 42.03602 34.62899 43.66788 56.25661 .45439 47.93054 37.85114 66.05864 65.14737 24.35969 > gCV <.77284 Para organizar os dados em um data-frame: > xy <. am.06588 50.66166 58.90542 62.92209 39.69673 56. y = rep(LETTERS[1:5].33724 49.78483 35.71391 65.29661 38. mean)) 0 1 17.with(xy. + each = 10)) > gM <.73984 57.53931 37.rnorm(50.07629 50.73959 39. y.37867 48.01864 38.26776 60.37572 62. sd = 10) > y <.39231 > with(mtcars.06637 66.61359 32. tapply(x.93003 236 51.80234 37.26204 47.46560 44. each = 10) > x [1] [9] [17] [25] [33] [41] [49] > y 55.53166 57. am.65681 25.60778 55.17599 23.00313 39.89312 43. function(x) 100 * sd(x)/mean(x))) 0 1 22. mean)) > gM A B C D E 49. am.Introdu¸ c˜ ao ao R > with(mtcars.01286 40.02277 50. y. mean = 50.29422 61.28745 42.45986 65. mean = 50.tapply(x.69930 38.77170 40.frame(x = rnorm(50. y.08328 20.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 <.19106 17.24760 45.78913 45. sd = 10).36997 60.96075 46. tapply(mpg. tapply(mpg.02577 > with(mtcars.21829 49.90432 60.67566 39.13208 45.

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

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

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

> with(esportes. "Nata¸ c~ ao". S)[2. table(Atletismo. table(Volei. rbind(table(Futebol. + ].data. ]. S)[2. ])) [1. como n˜ ao temos o question´ ario aqui vamos primeiro simular dados deste tipo como se tiv´ essemos 75 question´ arios. > with(esportes. 1).Introdu¸ c˜ ao ao R 1 0 0 0 1 0 1 1 0 0 0 1 1 => Homem Praticante de Futebol. podemos obter a tabela desejada combinando os resultados de tabelas para cada esporte. 300.sample(c("M". "F"). table(Futebol.] [2. 75.] [3.frame(matrix(sample(c(0. nc = 4)) names(esportes) <.as. 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. "Atletismo") esportes$S <. table(Nata¸ c~ ao. separadamente utilizando table() e verificando a segunda linha da tablea a seguir. ]. > + > > > esportes <.c("Futebol". rep = TRUE). S)) S Futebol F M 0 18 19 1 19 19 Desta forma.] [4.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. S)[2. "Volei".] F 19 19 24 20 M 19 22 20 21 . S)[2.

> e <. 6. podemos usar sapply() para tomar cada esporte e.4. 2.3.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. 3. e <.6.14. + 6.5. 2) b <. 2) > reamostras <. 6. 3. 4. > > > > a <. 4.278239 1. como os dados s˜ ao codificados em 0/1.4. 5. 3.c(5.4.090909 4.Introdu¸ c˜ ao ao R 241 Solu¸ c˜ ao 2: alternativamente.2) b <-c(5.test(a. 7.3. length(e) * 1000. rep = T). Inicialmente vamos entrar com os dados e obter o teste-t. 5. a <-c(1. p-value = 0. Adaptado de mensagem enviada por Andr´ e Queria fazer uma amostragem e tirar as informa¸ c~ oes. 2.5. b) tt.5. 3.array(sample(e. 4. + 2.8889 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -1.c(5.4.6. Aplico o teste t e tenho um P-valor. 1000)) .3.4.5. As reamostras ser˜ ao arranjadas num array de dimens˜ ao 11 × 2 × 1000. 3. 3. sum)) Futebol Nata¸ c~ ao Volei Atletismo F 19 19 24 20 M 19 22 20 21 2. 4. 6.6.ab <. 5. 7.3.000000 Agora obtemos as 1000 reamostras deste vetor cada uma com 11 × 2 = 22 valores utilizando sample(). 3. 5.7. 5.3.2) Depois eu queria ver aplicar o teste t(nas amostras) e ver como se comportam estes p-valores.5.2.6.4. Tenho duas amostras. 4.3. > sapply(esportes[. 3.ab Welch Two Sample t-test data: a and b t = 0.c(5.4. 4. 4. 5. usar tapply() para somar os praticantes (1) de cada sexo. 5. df = 14.3. esportes$S. 4. 1. 4.4.5.4.3.5.3. function(x) tapply(x. 3. 1:4].t. 3.1423.7.c(1.4.2. 5. 4.5.1. 5) tt.460057 sample estimates: mean of x mean of y 4.5. 5. dim = c(length(e)/2.3.

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

Inicialmente mostramos um ajuste feito de forma ”ingˆ enua”(na¨ ıve ).0 20 Frequency 40 60 80 Frequency 200 300 100 0.5 5. lineariza¸ c˜ ao parcial do modelo. cujo ´ e um acrˆ onimo para non-linear least squares.0 3. O objetivo destas notas n˜ ao ´ e o de investigar todas estas opc ¸˜ oes. relacionada a algum mecanismo (biol´ ogico. Entretanto.8 sapply(TT.val) 1. function(x) x$est) 5. 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. Ao final mostramos como efetuar v´ arios ajustes de uma s´ o vez de forma eficiente e extrair alguns resultados de particular . Diferentemente dos modelos lineares. etc) inerente ao processo em quest˜ ao. f´ ısico. declarando apenas a fun¸ c˜ ao e valores iniciais. mas apenas fornecer os elementos iniciais para ilustrar a possibilidade de se obter tais resultados usando o R. 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.2 0.0 4.5 3. embora simples. inicializa¸ c˜ ao autom´ atica com valores iniciais obtidos automaticamente. pode se ineficiente para o uso de m´ etodos num´ ericos. function(x) x$p. Em muitos casos tais modelos tem a sua forma funcional espec´ ıfica para o prolema sendo tratado.5 0 0.1 Exemplo: o modelo de van Genutchen Este exemplo mostra o ajuste de um modelo n˜ ao linear. tipo e controle dos algor´ ıtmos dispon´ ıveis.0 sapply(TT. Tal procedimento. al´ em da escolha e calibragem dos algor´ ıtmos.4 0.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 . 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().6 0.5 4. 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. 31.Introdu¸ c˜ ao ao R 500 120 243 Diferença de médias P−valor 400 100 0 2. Primeiro discutimos como efetuar um u ´nico ajuste para um conjunto de dados e algumas sugest˜ oes para examinar resultados. Esta fun¸ c˜ ao ´ e bastante flex´ ıvel e incorpora diversas op¸ c˜ oes para fazer ajustes incluindo caracter´ ısticas do modelo.

5 1st Qu. + head = T.1969 Mean : 2139. a segunda (pot) o potencial aplicado e a terceira (u) a umidade do solo. > cra <.ufpr. ´ O exemplo mostrado aqui foi motivado por um quest˜ ao levantada pelo Prof.leg. 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.0636 41:13 1st Qu.0 3rd Qu. . A partir dos pares pontos com valores medidos de tens˜ ao e umidade. α e n que definem o formato da curva.0 Max. 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. Este conjunto de dados refere-se a apenas duas amostras que s˜ ao um subconjunto dos de dados original que cont´ em diversas amostras. 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. :0.2628 > cra <.3071 Inicialmente vamos nos concentrar na discuss˜ ao do ajuste do modelo e para isto.5 Median :0.2828 4 30 45 0. :26300. 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 ). Informalmente falando. θ) e (θS . Portanto s˜ ao obtidos dados para os pares de pontos (Ψm . Alvaro que podem ser obtidos usando o comando mostrado a seguir. θR .8 Mean :0. No objeto cra a primeira coluna (am) indica o n´ umero da amostra. 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.2931 3 30 30 0.table("http://www.:0. O parˆ ametros desconhecidos do modelo modelo s˜ ao θS e θR que correpondem ` a umidade volum´ etrica na satura¸ c˜ ao e residual.2681 6 30 64 0.0 Min.1879 3rd Qu.Introdu¸ c˜ ao ao R 244 interesse.3071 2 30 19 0. 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. : 10. ´ Para exemplificar o ajuste utilizamos dados cedidos pelo Prof.factor(am)) > summary(cra) am pot u 30:15 Min.2753 5 30 63 0. Para cada tens˜ ao aplicada a amostra perde parte do conte´ udo de ´ agua e mede-se a umidade residual na amostra. n) s˜ ao parˆ ametros desconhecidos a serem estimados e que caracterizam a curva de reten¸ c˜ ao.: 58. Vemos a seguir que dispomos de 15 pontos medidos da curva de reten¸ c˜ ao da primeira amostra e 13 para a segunda. sep = ".:0.br/~paulojus/aulasR/dados/cra. am = as.2436 Max.") > head(cra) am pot u 1 30 10 0. :0. θ ´ e a umidade volum´ etrica medida na amostra.read.transform(cra.csv". respectivamente.: 1550. vamos isolar os dados referentes a uma u ´nica amostra.1199 Median : 107. α.

35))) Portanto.20 0.1655 12 30 3000 0.0 2. plot(u ~ pot.20 θ 0. xlab = expression(log[10](Psi[m])).2404 9 30 105 0.00 0 5000 10000 Ψm 20000 0.0 log10(Ψm) 3. e as demais quantidades (θR .2753 5 30 63 0.00 1.5 > cra30 <. ylab = expression(theta). > with(cra30.2272 10 30 138 0. + ylab = expression(theta).30 0.3071 2 30 19 0.2628 7 30 75 0.0 0.5 3. n. plot(u ~ log10(pot).30 1.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 4. θR .1468 13 30 4100 0.2931 3 30 30 0.5 4. xlab = expression(Psi[m]). ylim = c(0. am == 30) > cra30 am pot u 1 30 10 0.Introdu¸ c˜ ao ao R 245 0.10 θ 0.2120 11 30 490 0. os dados nas colunas u e pot do objeto de dados correspondem ` a θ e ψm na equa¸ c˜ ao 8.0730 No gr´ afico ` a esquerda da Figura 31.1 visualizamos os dados de umidade versus press˜ ao aplicada na amostra. 0.10 0.2828 4 30 45 0.2681 6 30 64 0. + ylim = c(0.1013 15 30 26300 0. 0.1205 14 30 5000 0. α) s˜ ao parˆ ametros (coeficientes) a serem estimados a partir do .5 2.subset(cra.2522 8 30 89 0. > with(cra30.

start = list(us = 0.04097127 . abs((-n * (us . A documenta¸ c˜ ao de nls() fornece mais detalhes. H´ a argumentos adicionais para controlar o comportamento algor´ ıtimo. + n = 1.1/1.1/n)).ur)/((1 + (alpha * pot)^n)^(1 . > S = with(as.1/n)) Parameters: Estimate Std. (iii) valores iniciais para os parˆ ametros a serem ajustados que devem ser passados por uma named list.27 ur 0.list(coef(fit30)). 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.48 n 1.35.52 Residual standard error: 0. visual por tentativa e erro.05)/((1 + (0.3)^(1 . melhor a sua qualidade f´ ısica. Error t value us 0. Os valores foram escolhidos ap´ os uma s´ eria de tentativas. A escolha de valores iniciais para os demais parˆ ametros ´ e menos ´ obvia. Este ´ e um modelo n˜ ao linear pode ser ajustado utilizando o m´ etodo de m´ ınimos quadrados conforme implementado em nls().05. 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. > curve(0.05 + (0. uma lista com nomes dos elementos.105207 11. add = T.ur) * (((2 * n + 1)/(n . 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. > fit30 = nls(u ~ ur + (us .038780 0. tal como crit´ erio de convergˆ encia. isto ´ e.0.1))^(1/n . from = 0.3)) > summary(fit30) Formula: u ~ ur + (us . A escolha dos valores iniciais ´ e crucial e pode influenciar nos resultados do ajuste utilizando m´ etodos num´ ericos. especialmente em exemplos como este com um pequeno n´ umero de dados.557e-06 A partir do modelo ajustado pode-se calcular quantidades de interesse.2))))) > S [1] 0. e estes nomes tamb´ em devem coincidir com os utilizados na declara¸ c˜ ao do modelo. Quanto maior o valor de S .3)).ur)/((1 + (alpha * pot)^n)^(1 .007082 0. Neste particular exemplo calculamos uma quantidade de interesse pr´ atico denotada por S que ´ e um indicador da qualidade f´ ısica do solo.01104 on 11 degrees of freedom Number of iterations to convergence: 8 Achieved convergence tolerance: 6. + data = cra30.324121 0.1. alpha = 0. + to = 27000. pontanto considerando-se m´ aximos e m´ ınimos assint´ oticos para a fun¸ c˜ ao.017744 18.35 .1 * x)^1.10 alpha 0. Uma das formas de se obter tais valores ´ e efetuar um ajuste aproximado. tra¸ cando-se curvas sobre o gr´ afico dos dados. ur = 0.Introdu¸ c˜ ao ao R 246 ajuste do modelo te´ orico aos dados.026202 1. lty = 2) Definidos os valores iniciais prossegue-se com o ajuste do modelo conforme os comandos a seguir.211816 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.071084 0.

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. 31. g/g)))) with(cra30.5. pch = c(1. list(pot = pp))) > legend("topright". > + > > + > + > + > + > > > > > with(cra30. l = 201) > lines(pp. 0. 3). plot(log10(pot). ylab = expression(theta(Umidade. Neste exemplo mostramos o qq-plot dos res´ ıduos e o gr´ afico dos res´ ıduos versus valores preditos. "ajustado"). c("valores iniciais". points(log10(pot). col = c(1. col = "red")) legend(3. 2)) rs <. resid(fit30)) abline(h = 0. Para visualiza¸ c˜ ao e avalia¸ c˜ ao do modelo ajustado podemos fazer diferentes gr´ aficos.1 mostra os pontos ajustados no gr´ afico da esquerda. pch = c(1. 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. 2)) with(cra30. 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.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 . u. em geral reparametriza¸ c˜ oes podem mudar a interpreta¸ c˜ ao de alguns parˆ ametros de modelo. "ajustado"). tais como sensibilidade a valores iniciais e verifica¸ c˜ ao de convergˆ encia do algor´ ıtmo num´ erico. Por outro lado. xlab = expression(log[10](Psi)). 0.3. 4. na escala original. e a uni˜ ao destes pontos no gr´ afico da direita. u. 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. "valores ajustados"). xlab = expression(log[10](Psi[m])). A Figura 31. pch = "+". 3). type = "b". Isto reduz a escala dos valores das vari´ aveis e tamb´ em torna o problema mais est´ avel numericamente. c("observado".1 mostra ` a direita o modelo definido pelos valores iniciais e o modelo ajustado. c("observado". col = "red")) legend(3. Finalmente cuidados usuais com ajuste de modelos utilizando m´ etodos iterativos devem ser observados. predict(fit30. Para isto ´ e necess´ ario redefinir a especicifa¸ c˜ ao do modelo e utilizar o argumento method="plinear" em nls(). ylab = expression(theta(Umidade. col = c(1.resid(fit30) qqnorm(rs) qqline(rs) plot(fitted(fit30). mas em uma sequˆ encia de valores ao longo do gr´ afico como ilustrado a seguir. A curva com o modelo ajustado a serem desenhadas sobre o gr´ afico dos dados s˜ ao obtidas com comandos a seguir. 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.3. pch = 3.Introdu¸ c˜ ao ao R 247 Os valores preditos s˜ ao obtidos de forma direta com fitted(fit30) ou predict(fit30). > pp <.10^seq(1. fitted(fit30). g/g)))) with(cra30. fitted(fit30). plot(log10(pot). points(log10(pot). A Figura 31.

0 1.02 −1 0 Theoretical Quantiles 1 −0.20 fitted(fit30) 0.5 4.15 0.5 3.0 log10(Ψm) 3.01 0.5 3.0 1.5 2.0 2.02 0.00 0.5 Normal Q−Q Plot 0.Introdu¸ c˜ ao ao R 248 0.0 4. g g) 0.15 0.20 0.30 + + + + observado ajustado + + + + + observado ajustado θ(Umidade.01 Sample Quantiles 0.0 4.01 −0.25 0.30 0.30 .10 0.5 4.00 resid(fit30) 0.10 0.5 2.15 0.10 ++ + 1.5 1.25 θ(Umidade. g g) 0.01 0.20 0.0 log10(Ψ) 3.0 2.25 + + 0.

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

071084 0.171615 -0.609 n 1.007082128 -0.113320 0.741 ur -0. Para isto simplesmente definimos uma fun¸ c˜ ao que recebe o modelo ajustado e usa os coeficiente para calcular o valor de S .017744 18.211815991 1. Vamos ent˜ ao aqui obter este ´ ındice para cada uma das amostra. coef) $ 30 us ur alpha n 0.009 Residual standard error: 0.11332039 n 1. j´ a que a fun¸ c˜ ao calculaS retorna um escalar para cada amostra.52 Residual standard error: 0.ur)/(1 + (alpha * pot)^n)^(1 .105207 11.324120330 0.038780 0.243148 0.079473 14.006207 on 9 degrees of freedom Number of iterations to convergence: 7 Achieved convergence tolerance: 9.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.038779904 0.007082128 0.009446 25.27 ur 0.48 n 1. Error t value us 0. coef) 30 41 us 0.026202 1.038779904 1.211815991 $ 41 us ur alpha 0.324120 0. .022324 1.713 alpha 0.122402 0.324120330 0.007082 0.035928 0.01104 on 11 degrees of freedom Number of iterations to convergence: 6 Achieved convergence tolerance: 8.779e-06 $ 41 Formula: u ~ ur + (us . Error t value us 0.03592828 > sapply(allfits.03592828 n 1.177e-06 > lapply(allfits.211816 0.10 alpha 0.Introdu¸ c˜ ao ao R 250 Parameters: Estimate Std.12240208 alpha 0.24314784 ur 0.24314784 -0.1/n) Parameters: Estimate Std. 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.12240208 0.

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

+ ur = c(0. por outro o n´ umero de dados em cada uma delas ´ e pequeno.04.001688 Number of iterations to convergence: 6 Achieved convergence tolerance: 4. alpha = c(0. n) s˜ ao comuns entre as amostras.25)) > mod1 Nonlinear regression model model: u ~ ur[am] + (us[am] . o que n˜ ao seria poss´ ıvel ajustando os modelos separadamente como mostrado sess˜ ao anterior.ur[am]) * (1/(1 + (alpha[am] * pot)^n[am]))^(1 data: cra us1 us2 ur1 ur2 alpha1 alpha2 n1 n2 0.3.243148 0.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. 0. isto ´ e em uma u ´nica chamada ` a nls() que portanto vai utilizar todos os dados de todas as amostras. > mod0 <.25))) > mod0 Nonlinear regression model model: u ~ ur[am] + (us[am] .25.3). 0).ur[am]) * (1/(1 + (alpha[am] * + pot)^n[am]))^(1 . Nesta sess˜ ao vamos considerar fazer todos os ajustes de s´ o vez.03994 1.17195 residual sum-of-squares: 0. 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 (α. n). 1/n[am] .ur[am]) * (1/(1 + (alpha * pot)^n))^(1 + 1/n). alpha = 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. start = list(us = c(0.3. 0.32106 0.007085 -0. 0.122402 0.211819 1. 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.Introdu¸ c˜ ao ao R 252 lado s˜ ao efetuadas v´ arias chamadas ` a fun¸ c˜ ao. Ap´ os ajustar os modelos ”candidatos”podemos fazer uma compara¸ c˜ ao formal dos ajustes atravez de anova().04). que neste caso indica que o modelo mais parcimonioso com parˆ ametros comuns explica os dados satisfat´ oriamente.038780 0. Uma forma alternativa de obter parˆ ametros para cada amostra.1/n[am]). Neste caso interpreta-se que cada amostra informa sobre os respectivos valores para (θS . ur = c(0.035928 1.nls(u ~ ur[am] + (us[am] . n = c(1.04. 0). > mod1 <.24870 -0.ur[am]) * (1/(1 + (alpha * pot)^n))^(1 1/n) data: cra us1 us2 ur1 ur2 alpha n 0.nls(u ~ ur[am] + (us[am] .324120 0. Al´ em do aspecto computacional. + n = 1. 1. θR ) enquanto que todas as amostrs conjuntamente informam sobre (α. start = list(us = c(0.02759 0.3).03056 -0.001846 Number of iterations to convergence: 5 Achieved convergence tolerance: 2. cra.113320 residual sum-of-squares: 0. e talvez mais eficiente que a mostrada anteriormente ´ e discutida a seguir. cra. No caso do modelo com parˆ ametros distintos informamos oito valores iniciais para os parˆ ametros.

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

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

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

os fun¸ c˜ ao listadas a seguir redirecionam para os respectivos formatos gr´ aficos. cujos conte´ udos podem ser redirecionados pelo usu´ ario para outro local (dispositivo) como. Portanto. 33.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. sa´ ıdas em L TEXe html.off() Da mesma forma que sink() redireciona conte´ udo texto. um arquivo. Para mais detalhes veja args(sink) e help(sink). 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. por exemplo. respectivamente. postscript() pdf() . Depois de digitarmos este comando os resultados deixam de ser mostrado na tela sendo enviados para o arquivo. 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. a tela texto e a janela gr´ aficas devem ser entendidas como sa´ ıdas padr˜ ao.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. Al´ em desta forma. ou somente os resultados dos comandos. Por exemplo. Outras ferramentas para redirecionamento de conte´ udo texto A fun¸ c˜ ao sink() redireciona as sa´ ıdas para um arquivo em formato texto. Para encerrar o envio de conte´ udo para o arquivo basta chamar a fun¸ c˜ ao sem argumento algum.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. Alguns (mas n˜ ao todos!) exemplo s˜ ao citados a seguir. H´ a ainda outras fun¸ c˜ oes que podem redirecionar as sa´ ıdas em outros formatos. e o conte´ udo volta a ser mostrado na tela. > sink() A fun¸ c˜ ao recebe tem ainda outros argumentos que podem controlar o envio de conte´ udo para o arquivo. o argumento echo recebe os valores TRUE ou FALSE indicando se os comandos devem ser inclu´ ıdos no arquivo. 33.

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

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

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

db" "manual" "NEWS" "RESOURCES" [13] "THANKS" > dir(path = "doc". pattern = NULL. Por exemplo dir() vai listar o conte´ udo do diret´ orio. all.db" [10] "doc/manual" "doc/NEWS" "doc/RESOURCES" [13] "doc/THANKS" .home()) > dir() [1] "bin" "COPYING" "doc" "etc" "include" [6] "lib" "library" "modules" "NEWS" "share" [11] "SVN-REVISION" > args(dir) function (path = ".LIB" "COPYRIGHTS" [5] "CRAN_mirrors.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. ignore.info() > getwd() [1] "/home/paulojus" > dir(".files = FALSE. e possui v´ arios argumentos para sele¸ c˜ ao. Informa¸ c˜ oes sobre cada elemento do diret´ orio podem ser obtidas com file.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.csv" "doc/FAQ" [7] "doc/html" "doc/KEYWORDS" "doc/KEYWORDS. recursive = FALSE.Introdu¸ c˜ ao ao R 260 34.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.".names = FALSE. full.csv" "FAQ" "html" "KEYWORDS" [9] "KEYWORDS./") [1] "Fts" "leg" "musica" "paulojus" "temp" > setwd(R.case = FALSE) NULL > file.LIB" [4] "doc/COPYRIGHTS" "doc/CRAN_mirrors. full = TRUE) [1] "doc/AUTHORS" "doc/COPYING" "doc/COPYING..

"foo. De forma mais geral comandos do sistema operacional podem ser executados diretamento do R com a fun¸ c˜ ao system().txt")) [1] TRUE FALSE Da mesma forma ´ e tamb´ em poss´ ıvel criar e manipular diret´ orios.txt") [1] FALSE > file. "~/meu.Introdu¸ c˜ ao ao R 261 ´ possivel efetuar opera¸ E c˜ oes do sistema operacional tais como criar. > getwd() [1] "/home/paulojus" > dir. > setwd("/home/paulojus") > file. seja ele qual for.txt") [1] FALSE > file.exists(c("foo. 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. recursive = TRUE) Os exemplos acima s˜ ao na verdade fun¸ c˜ oes que passam comandos para o sistema operacional.txt" > unlink("~/meu. A seguir ilustramos comandos usados no LINUX.txt".create("foo.copy("foo.txt")) [1] TRUE TRUE > file.rename("foo.exists("foo. mas a sintaxe do comando fica obviamente dependente do sistema operacional usado (linux. mover.txt") [1] TRUE > file.txt".dir". Mac.txt")) [1] FALSE TRUE > file.exists(c("foo.txt". unix. "ap.exists(c("foo. "ap. etc).txt") [1] TRUE > file.txt".txt". 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.copy("ap. "ap.dir") [1] TRUE > dir("~/meu.exists("foo.dir") [1] "foo. copiar e remover arquivos e/ou diret´ orios a partir do R.remove("ap.dir") > file. "ap.txt") [1] TRUE > file.txt". Note que a op¸ c˜ ao recursive=TRUE deve ser usada com muito cuidado pois apaga todo o conte´ udo do diret´ orio.create("~/meu. .txt") [1] TRUE > file.exists("foo.txt") [1] TRUE > file.

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

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. 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. Compile e visualize o documento L TEX de forma usual. Usando o Sweave o usu´ ario pode ter comandos.2 Usando o Sweave Os passos b´ asicos para uso do Sweave s˜ ao: 1. acelerando muito o processo de edi¸ c˜ ao de textos. 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. 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. Iniciar o R 3. listas de exerc´ ıcios. Neste documento vamos supor que seu arquivo se chama foo. artigos cient´ ıfico e livros.Rnw 2. Outro exemplo ainda ´ e este material sobre o R que foi todo originalmente editado em formato Sweave. sem a necessidade de fazer tal inclus˜ ao manualmente e passo a passo.Introdu¸ c˜ ao ao R 263 35 35. rodar a fun¸ c˜ ao Sweave() no seu documento com um comando do tipo: ave(”foo.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. provas.Rnw”) eval=F Swe- Ao final destes passos. No caso do LINUX certifique-se que voce tem os seguintes pacotes instalados: tetex-bin e tetex-extra. A 5. No Windows a instala¸ c˜ ao do MiKTeX deve prover as ferramentas necess´ arias. identifique e corrija o erro e processe novamente com Sweave().3 Outras informa¸ c˜ oes u ´ teis para uso do Sweave A O Sweave tem algumas dependˆ encias de outroas recursos no L TEX.tex foi gerado. 35. . Carregar o pacote tools com o comando: > require(tools) 4. sa´ ıdas computacionais e/ou gr´ aficos inclu´ ıdos automaticamente no texto. Editar o arquivo . You can now run LaTeX on ³foo.Rnw. a fun¸ c˜ ao Sweave() ir´ a imprimir uma mensagem na tela como a seguir dizendo que o documento foo. Leia a mensagem. 35. 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. textos t´ ecnicos.

Por exemplo. Uma outra fun¸ c˜ ao u ´til ´ e Stangle() que extrai o c´ odigo R de um documento . 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. Snw. artigos. FAQ (”Frequantly asked questions”) e informa¸ c˜ oes adicionais. 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. – Os documentos formato Sweave (extens˜ oes .Rnw") vai ser gerado um arquivo foo.Rnw Este arquivo deve estar em formato execut´ avel e para assegurar isto no LINUX digita-se: chmod +x Sweave. bastando digitar: Sweave.sh foi portanto substitu´ ıdo pelo comando R CMD Sweave.Rnw O mecanismo descrito anteriormente substitui uma vers˜ ao anterior que recomendava o uso do script Sweave.sh foo.sh deve estar como arquivo execut´ avel e dispon´ ıvel no seu PATH.Rnw Note que para o comando acima funcionar o ”script”Sweave. .Rnw.Introdu¸ c˜ ao ao R 264 A p´ agina oficial do Sweave cont´ em o manual./Sweave. mas permanece de interesse caso deseje-se modificar para adaptar ` a alguma necessidade espec´ ıfica do usu´ ario. etc) s˜ ao reconhecidos pelos editores Emacs ou Xemacs desde que o pacote ESS do Emacs esteja instalado.Rnw para gerar o .sh foo. R CMD Sweave foo.Rnw. exemplos. – O Tinn-R ´ e outro editor que reconhece o formato de documentos do Sweave.R que cont´ em apenas o codigo R do arquivo. rodando Stangle("foo. Vers˜ oes mais recentes do R incorporaram o comando Sweave de tal forma que ´ e poss´ ıvel processar o documento . sem a necessidade de iniciar o R. 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.tex diretamente da linha de comando do LINUX sem a necessidade de iniciar o R.sh que tamb´ em permitia rodar o Sweave no seu documento .Rnw diretamente da linha de comando do LINUX. Alternativamente voce pode copi´ a-lo para o seu diret´ orio de trabalho e rodar com: .

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

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

tar. Inicie o R e na linha de comando do R digite: > install. lib="~/Rpacks") 267 NOTA: no Windows voce pode.gz Windows: No menu do R use a op¸ c˜ ao PACKAGES .INSTALL FROM CRAN.ZIP FILE . instalar usando o menu do R selecionando a op¸ c˜ ao PACKAGES . 36. 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. lib="~/Rpacks") 3.tar.gz ou R INSTALL -l ~/Rpacks PACOTE.INSTALL FROM LOCAL . R INSTALL PACOTE.Introdu¸ c˜ ao ao R 2.1 Pacotes n˜ ao-oficiais Al´ em dos pacotes contribu´ ıdos existem diversos pacotes n˜ ao-oficiais dispon´ ıvies em outros locais na web. Em geral o autor fornece instru¸ c˜ oes para instala¸ c˜ ao.packages("CircStats". Neste caso o pacote vai ser instalado na ´ area do usu´ ario e para carregar o pacote digite: > library(CircStats.tar. alternativamente.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).

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

. 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.Introdu¸ c˜ ao ao R 269 Durante o curso foi demonstrado como construir pacotes no R. 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. As passos listados aqui s˜ ao bastante simplificados e s˜ ao simplesmente o m´ ınimo necess´ ario para cria¸ c˜ ao de pacotes.

Use sempre a extens˜ ao . Gravar o arquivo e sair do xemacs. 10.R para os seus arquivos de comandos do R. Tudo pronto! Para come¸ car a utilizar basta iniciar o programa xemacs. 8. 4. Instalar o programa R.C:\ARQUIVOS DE PROGRAMA\rw\bin No Windows XP isto ´ e feito adicionado este diret´ orio ` a esta vari´ avel de ambiente. 7. 2.xemacs. Para obter o xemacs v´ a em http://www.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.BAT inserindo a seguinte linha no final do arquivo SET PATH=%PATH%. Instalar o programa xemacs. (clique para baixar programa de instala¸ c˜ ao) 3. No Windows 98 isto ´ e feito modificando o arquivo C:\AUTOEXEC. Inicie o programa xemacs e clique na barra de ferramentas em: Options --> Edit init file 5. Para iniciar o R dentro do xemacs use a combina¸ c˜ ao de teclas: ESC SHIFT-X SHIFT-R 9. 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. Para utilizar esta funcionalidade deve-se seguir os seguintes passos: 1. . As vers˜ oes mais recentes j´ a veem com o pacote ESS inclu´ ıdo. Modifique a vari´ avel PATH do seu computador adicionando a ela o caminho para o diret´ orio bin do R. Lembre-se que voce pode usar CTRL-X-2 para dividir a tela em duas. Se usar o Windows 98: reinicialize o seu computador. (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. Adicionar a seguinte linha: (require ’ess-site) 6.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.

p. 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. mas tamb´ em.2. Vejamos dois exemplos. Embora n˜ ao adotado universalmente. 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. 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. como uma u ´nica tabela de dados. os autores seguiram diferentes estrat´ egias dependendo do tipo de dado contemplado pelo pacote bem como de suas preferˆ encias pessoais. Tal id´ eia acabou se materializando no pacote sp de Roger Bivand e Edzer Pebesma. 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. onde as quatro colunas seriam referentes ao par de coordenadas (geometria) e ` as duas vari´ aveis (atributos). especialmente por novos pacotes. sejam de varia¸ c˜ ao espacial discreta (dados de ´ area). . 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. vol. A implementa¸ c˜ ao foi inicialmente descrita em um artigo dos autores na R-NEWS (2005.9-13) e tamb´ em na sess˜ ao de estat´ ıstica espacial do R (CRAN Spatial Task View) e. Desta forma. Num primeiro caso vamos imaginar que dois atributos (vari´ aveis) sejam medidos em n pontos. em particular suas geometrias. por toda a flexibilidade que traz no tratamento e representa¸ c˜ ao de dados espaciais. Neste caso. poder´ ıamos facilmente estruturar os dados em uma matriz de dimens˜ ao n × 4. no livro Analysis of Spatial Data with R que conta ainda com a co-autoria de Virg´ ılio Gomez-R´ ubio. Entretanto. onde os munic´ ıpios s˜ ao identificados por pol´ ıgonos que definem suas fronteiras. sendo cada um destes identificado por um par de coordenadas.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. especialmente os estruturados espacialmente. acabou-se por criar uma verdadeira torre de Babel da representa¸ c˜ oes de dados espaciais. poder´ ıamos ter os atributos precipita¸ c˜ ao e temperatura m´ axima di´ aria registrada em n esta¸ c˜ oes meteorol´ ogicas. Detalhes podem ainda ser encontrados no vignette que acompanha o pacote sp. 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. localiza¸ ca ˜o e caracter´ ısticas da localiza¸ c˜ ao. que servisse para os diferentes formatos de dados espaciais. Neste caso. uma excelente. mais recentemente. Neste contexto. Num segundo caso vamos imaginar agora tais atributos medidos em cada munic´ ıpio de um estado. A tendˆ encia ´ e que a estrutura definida pelo sp seja largamente adotada. Outras divis˜ oes e sub-divis˜ oes s˜ ao ainda poss´ ıveis mas vamos nos ater nesta discuss˜ ao a estas trˆ es. 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. Tais estruturas s˜ ao distintas n˜ ao somente por se referirem a elementos conceituais diferentes. e talvez principalmente. Com o crescimento do n´ umero de pacotes e formas alternativas de representar os dados espaciais. Por exemplo. criativa e bem estruturada proposta baseada em objetos e classes do tipo S4 do R. combinado ao fato de que a ´ area de estat´ ıstica espacial estava na ´ epoca (e ainda est´ a!) em franco desenvolvimento. por nem sempre poderem ser representadas de forma simples. come¸ cou-se a discutir a possibilidade de cria¸ ca ˜o de uma estrutura comum e geral. cont´ ınua (geoestat´ ıstica) ou processos pontuais. 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. As implementa¸ c˜ oes procuravam tanto dotar o ambiente do R de funcionalidades usuais de estat´ ıstica espacial. na implementa¸ c˜ ao dos pacotes de estat´ ıstica espacial no R.

Este pacote tem dependˆ encias de v´ arios outros e portanto. com geometria dada por pontos esparsos na regi˜ ao. uma das estruturas b´ asicas de dados no R. 25. 76. a come¸ car pela mais simples dada a seguir utilizando a fun¸ c˜ ao coordinates(). Na defini¸ c˜ ao de classes do sp. 5). + 81. var2 = c(63. que armazena agora somente as vari´ aveis.data. embora suficiente para anotar todas as informa¸ c˜ oes. Ap´ os a convers˜ ao as coordenadas deixam de fazer parte do data-frame. 26. cabendo ao usu´ ario saber a que se refere cada uma das colunas. dep = TRUE) > require(sp) 39. cy = c(4. DF) > dim(SPDF) [1] 5 4 A estrutura do data-frame. 6. comumente utilizada para armazenar estruturas de dados na forma de linhas (indiv´ ıduos) e colunas (vari´ aveis). > install. 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. 59.Introdu¸ c˜ ao ao R 272 note-se que os recursos de tais classes v˜ ao muito al´ em dos exemplos apresentados aqui. n˜ ao distingue explicitamente as geometrias e atributos. 5.cbind(cord. usa-se o argumento dep=TRUE que faz com que todos os demais pacotes necess´ arios sejam tamb´ em instalados. 3.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. 30). Nesta caso poder´ ıamos ter ainda optado por incluir as coordenadas no data-frame. 1)) > DF <. O nome ´ e praticamente autoexplicativo indicando que o dado ´ e um data-frame de atributos ligados a pontos.frame(var1 = c(23. 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 <. 2. Existem v´ arias formas de se construir um objeto do tipo SpatialPointsDataFrame e vamos ver trˆ es delas aqui. 18. adicionando ent˜ ao duas colunas. Por motivos de apresenta¸ c˜ ao neste material vamos considerar inicialmente as geometrias e atributos separadamente . 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. . 6.cbind(cx = c(1. Note nos comandos como fazer tal convers˜ ao e como os objetos desta classe diferem entre si. ´ e representada por um objeto do tipo SpatialPointsDataFrame.packages("sp". 2. e passam a ser somente uma informa¸ c˜ ao a ele associada. > cord <. 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.

.Introdu¸ c˜ ao ao R 273 7 ( 25 . 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. 81 ) 5 ( 23 . 63 ) cy 3 4 ( 26 . 76 ) 2 ( 30 . Os valores dos atributos s˜ ao indicados dentro dos parˆ entesis. 59 ) 6 ( 18 .

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

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

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

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

Introdu¸ c˜ ao ao R 282 s˜ ao linhas e pol´ ıgonos que s˜ ao tratadas pelas classes SpatialLines e SpatialPolygons. enquanto que linhas e pol´ ıgonos s˜ ao definidos por um conjunto de pontos com uma certa estrutura. 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. respectivamente. 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. analogamente em SpatialLines ´ e definido por um conjunto de linhas e em SpatialPolygons ´ e definido por um conjunto de pol´ ıgonos.br/geoR geoR version 1. Desta forma.ca20[c("reg1".6-24 (built on 2008-12-16) is now loaded ------------------------------------------------------------> data(ca20) > areas <. ou seja.ufpr. A seguir vamos utilizar um exemplo envolvendo trˆ es pol´ ıgonos dispon´ ıveis em um conjunto de dados do pacote geoR. "reg3")] > areas . > require(geoR) ------------------------------------------------------------Analysis of geostatistical data For an Introduction to geoR go to http://www. 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. "reg2". sendo que outras representa¸ c˜ oes poss´ ıveis existem em ambientes de SIG. Assim como em SpatialPoints. Pontos s˜ ao definidos simplesmente por um par de coordenadas. sendo o pol´ ıgono representado por uma linha fechada.leg. criaram-se as fun¸ c˜ oes Line e Polygon para se especificar estes elementos. Estas duas geometrias s˜ ao semelhantes em sua forma.

por exemplo. > getClass("Polygon") Class "Polygon" Slots: Name: labpt area hole ringDir Class: numeric numeric logical integer Extends: "Line" coords matrix . 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. e informa¸ c˜ oes sobre se ele ´ e interno ou externo (hole e ringDir).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. o primeiro passo ´ e transformar cada matriz que define um pol´ ıgono em um objeto da classe Polygon. a sua ´ area. se a coordenada do u ´ltimo ponto coincide com a do primeiro. que verifica se o pol´ ıgono est´ a bem definido.

> getClass("Polygons") Class "Polygons" Slots: Name: Class: Polygons plotOrder list integer labpt ID numeric character area numeric . x[nrow(x). function(x) identical(x[1.] 5450 5500 [7. 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. 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. x[nrow(x).879 5596. E necess´ ario atribuir identificadores para cada pol´ ıgono que poder˜ ao ser posteriormente utilizados para associ´ a-los com atributos. x[1. se tem mais de um pol´ ıgono. drop = T])) reg1 reg2 reg3 TRUE FALSE FALSE > areas <.] 5590 5690 [2.530 Slot "area": [1] 95100 Slot "hole": [1] TRUE Slot "ringDir": [1] -1 Slot "coords": east north [1.] 5250 5370 [5. . drop = T].] 5350 5370 [6.] 5340 5800 [3. drop = T].] 5220 5700 [4. Finalmente.] 5590 5690 > sapply(areas.] 5510 5600 [8. . ]) + }) 284 Normalmente. como neste exemplo.lapply(areas.Introdu¸ c˜ ao ao R > Polygon(areas$reg1) An object of class "Polygon" Slot "labpt": [1] 5364. . 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.

"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. function(x) Polygons(list(Polygon(areas[[x]])). 1:3.names(dadosPol) <. 12).frame(var1 = c(23.paste("reg".Introdu¸ c˜ ao ao R 285 > POLS <. x.SpatialPolygonsDataFrame(SPol. var2 = c("a". dadosPol) . > dadosPol <. Atributos ligados aos pol´ ıgonos sau acoplados para cria¸ c˜ ao de SpatialPolygonsDataFrame.SpatialPolygons(POLS) > class(SPol) [1] "SpatialPolygons" attr(.lapply(1:length(areas). sep = ""))) > class(POLS) [1] "list" > SPol <. + "a")) > row. O data-frame de atributos deve ter nomes de linhas que permitam o pareamento com os nomes atribu´ ıdos aos pol´ ıgonos. 34. "b". spplot. summary entre outros s˜ ao implementados de forma usual como os demais objetos da fam´ ılia Spatial.data. sep = "") > SPolDF <. + ID = paste("reg".

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

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

Sign up to vote on this title
UsefulNot useful