You are on page 1of 290

Introdu¸˜o ao Ambiente Estat´stico R ca ı

Paulo Justiniano Ribeiro Junior ´ Ultima atualiza¸˜o: 29 de maio de 2011 ca
Estas notas1 foram inicialmente escritas para um curso de introdu¸˜o ao sistema estat´ ca ıstico R ministrado para profissionais da EMBRAPA em Bras´ ılia, 30/05 a 03/06 de 2005. Desde sua vers˜o inicial o material tem sido constantemente modificado com a expans˜o, corre¸ao e a a c˜ inclus˜o de t´picos. a o O objetivo ´ ilustrar aspectos b´sicos do sistema com ˆnfase na compreens˜o de aspectos e a e a b´sicos da linguagem, a estrutura e a forma de operar o programa. Nenhum m´todo e/ou modelo a e estat´ ıstico em particular ´ discutido em detalhes seja em seus fundamentos ou alternativas para e an´lises. Os m´todos estat´ a e ısticos s˜o usados ao longo do texto simplesmente para ilustrar a aspectos do uso da linguagem. Na maior parte do texto assume-se apenas familiaridade com conceitos e m´todos b´sicos e a de estat´ ıstica. Alguns t´picos especializados s˜o usados em algumas Sess˜es e, n˜o sendo de o a o a interesse de leitor, podem ser deixados de lado sem preju´ ao acompanhamento das demais ızo partes do texto. N˜o ser´ assumido nenhum conhecimento pr´vio do R. O curso foi preparado e a a e ministrado em ambiente LINUX por´m n˜o faz uso de nenhum recurso espec´ e a ıfico deste sistema operacional. O material pode ser acompanhado utilizando o R instalado em outros sistemas operacionais, tal como Windows® ou Macintosh. O texto come¸a com uma Se¸ao que tem como objetivo ”experimentar o R”, o que permite c c˜ ter uma id´ia de seus recursos e a forma de trabalhar com este programa. Sugere-se reproduzir e e estudar os comandos indicados bem como inspecionar e interpretar os resultados produzidos por tais comandos, o que vai permitir uma familiaridade com aspectos b´sicos do uso do proa grama. Espera-se que ao final desta Se¸˜o o leitor se sinta a vontade para iniciar o programa ca e experimentar o seu uso em outros contextos de an´lises. Ao longo do material mais detalhes a o uso do programa R ser˜o apresentados, na maior parte das vezes motivados por exemplos de a an´lise de dados. a Para utilizar o R siga os seguintes passos: 1. inicie o R em seu computador; 2. voce ver´ uma janela de comandos com o s´ a ımbolo >; que ´ chamado de prompt do R, e indicando que o programa est´ pronto para receber comandos; a 3. a seguir digite (ou ”recorte e cole”) os comandos mostrados ao longo deste material ou seus pr´prios comandos. o No restante deste texto vamos seguir as seguintes conven¸oes. c˜
ˆ

comandos do R s˜o mostrados em fontes do tipo slanted verbatim como esta, e prea cedidas pelo s´ ımbolo >,

Estas notas est˜o dispon´ a ıveis em formato html em http://www.leg.ufpr.br/~paulojus/embrapa/ Rembrapa e tamb´m em arquivo no formato PDF. e

1

1

2

ˆ ˆ

sa´ ıdas do R s˜o sempre exibidas em fontes do tipo verbatim como esta, a linhas iniciadas pelo s´ ımbolo # s˜o coment´rios e s˜o ignoradas pelo R. a a a

3

INTRODUCAO AO R ¸˜

1

Uma primeira sess˜o com o R a

Esta ´ uma primeira sess˜o com o R visando dar aos participantes uma id´ia geral da e a e aparˆncia e forma de opera¸ao do programa. Os comandos abaixo motivam explica¸oes sobre e c˜ c˜ caracter´ ısticas b´sicas de linguagem e ser˜o reproduzidos, comentados e discutidos com os a a participantes durante o curso. Vamos come¸ar gerando dois vetores x e y de coordenadas geradas a partir de n´meros c u pseudo-aleat´rios e depois inspecionar os valores gerados. o > x <- rnorm(5) > x [1] -1.1584296 2.0265046 > print(x) [1] -1.1584296 2.0265046 > print(x, dig = 3) [1] -1.158 2.027 -0.994 > y <- rnorm(x) > y [1] 1.2299913 -0.9408620 > args(rnorm) function (n, mean = 0, sd NULL

-0.9943093 -0.9943093 1.295 0.950

1.2948114 1.2948114

0.9499178 0.9499178

0.9974967 -0.7250306 = 1)

0.4638293

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´m 5 elementos. Note que se voce tentar reproduzir este exemplo deve obter valores e simulados diferentes dos mostrados aqui. Ao digitar o nome do objeto x os elementos deste objetos s˜o exibidos. O comando print(x) a tamb´m exibe os elementos do objeto por´m ´ mais flex´ e e e ıvel pois oferece op¸˜es extras de co visualiza¸˜o. O comando print(x, dig=3) exibe este particular objeto x com no m´ ca ınimo 3 d´ ıgitos significativos. Para controlar o n´mero de d´ u ıgitos globalmente, isto ´, para impress˜o e a de qualquer objeto, por exemplo com 4 d´ ıgitos, usamos options(digits=4). Neste simples exemplo introduzimos v´rias id´ias e conceitos: objeto, atribui¸˜o de valores, a e ca vetores, impress˜o de objetos, fun¸˜o, argumentos de fun¸˜es, ”defaults”, gera¸˜o de n´meros a ca co ca u aleat´rios e controle de semente. o Agora vamos colocar num gr´fico os pontos gerados usando o comando a > plot(x, y) Note que a janela gr´fica se abrir´ automaticamente e exibir´ o gr´fico. H´ muitas op¸oes a a a a a c˜ de controle e configura¸˜o da janela gr´fica que s˜o especidicadas usando-se a fun¸ao par(). ca a a c˜ Algumas destas op¸oes ser˜o vistas ao longo deste material. c˜ a A fun¸ao plot() oferece atrav´s de seus argumentos v´rias op¸˜es para visualiza¸˜o dos c˜ e a co ca gr´ficos. As argumentos e b´sicos s˜o mostrados a seguir. a a a > 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

˜ 1 UMA PRIMEIRA SESSAO COM O R

4

q

1.0

q

0.5

q

y −0.5 0.0

q

−1.0

q

−1.0

−0.5

0.0

0.5 x

1.0

1.5

2.0

Para ilustra¸ao, no exemplo a seguir mostramos o uso do argumento type. Para facilitar esta c˜ ilustra¸˜o vamos primeiro ordenar os valores de x e y na sequˆncia crescente dos valores de x. ca e > x <- sort(x) > y <- y[order(x)] Nos comandos abaixo iniciamos dividindo a janela gr´fica em 8 partes e reduzindo as margens a do gr´fico. A seguir produzimos diversos gr´ficos com diferentes op¸˜es para o argumento type. a a co Ao final retornamos a configura¸˜o original de apenas um gr´fico na janela gr´fica. ca a a Um pouco mais sobre manipula¸˜o de vetores. Note que os colchetes [] s˜o usados para ca a selecionar elementos e h´ fun¸oes para arredondar valores. a c˜ > x [1] -1.1584296 -0.9943093 0.9499178 > x[1] [1] -1.15843 > x[3] [1] 0.9499178 > x[2:4] [1] -0.9943093 0.9499178 1.2948114 > round(x, dig = 1) [1] -1.2 -1.0 0.9 1.3 2.0 > ceiling(x) [1] -1 0 1 2 3 > floor(x) [1] -2 -1 0 1 2

1.2948114

2.0265046

5

INTRODUCAO AO R ¸˜

> + > > > > > > > > >

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

y −1.0 0.0

y −1.0 0.0

q

q

−1.0 1.0
q

−0.5

0.0

q q

1.0

0.5 x

1.0

1.5

2.0
q

−1.0

−0.5

0.0

0.5 x

1.0
q

1.5

2.0

q

y −1.0 0.0

q

q

y −1.0 0.0

q

q

−1.0 1.0

−0.5

0.0

y −1.0 0.0

−1.0 1.0

−0.5

0.0

y −1.0 0.0

−1.0

−0.5

0.0

0.5 x

1.0

1.5

2.0

y −1.0 0.0

1.0

0.5 x

1.0

1.5

2.0

y −1.0 0.0

1.0

0.5 x

1.0

1.5

2.0

−1.0

−0.5

0.0

0.5 x

1.0

1.5

2.0

−1.0

−0.5

0.0

0.5 x

1.0

1.5

2.0

−1.0

−0.5

0.0

0.5 x

1.0

1.5

2.0

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

Os objetos existentes na area de trabalho pode ser listados usando a fun¸ao ls() e objetos ´ c˜ podem ser removidos com a fun¸ao rm(). Nos comandos a seguir estamos verificando os objetos c˜ existentes na area de trabalho e removendo objetos que julgamos n˜o mais necess´rios. ´ a a > ls() [1] "x" "y" > rm(x, y) A seguir vamos criar um vetor que chamaremos de x com uma sequˆncia de n´meros de 1 e u a 20. Depois criamos um vetor w de pesos com os desvios padr˜es de cada observa¸˜o. Na o ca sequˆncia montamos um data-frame de 3 colunas com vari´veis que chamamos de x, y e w. e a Inspecionando o conte´do do objeto criado digitando o seu nome. A terminamos apagando u objetos que n˜o s˜o mais necess´rios. a a a > x <- 1:20 > x [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

000000 5 5 3.118034 6 6 5.7695068 3.061553 3.1914 Max 7. w = w) > dummy x y w 1 1 1.1 + sqrt(x)/2 > w [1] 1.870829 15 15 13.1121 8.121320 [19] 3.1 ‘ ’ 1 . a > fm <.1512 Median 0.5108889 1.data.658312 12 12 12.179449 3.0209883 2.˜ 1 UMA PRIMEIRA SESSAO COM O R 6 > w <.8646610 1.061553 18 18 23.2013277 3.5954538 3.000000 17 17 12.500000 [10] 2.732051 2. uma vez que temos valores dos pesos.000000 3.5134167 1.’ 0.6783 -1.6280840 2.936492 16 16 16.118034 2.236068 > dummy <.9173 0. y = x + rnorm(x) * w.224745 7 7 4.9127871 2.707107 3 3 3.1372141 2.581139 2. data = dummy) > summary(fm) Call: lm(formula = y ~ x.05 ‘.1014 1.658312 2.9698978 2. w) Nos comandos a seguir estamos ajustando uma regress˜o linear simples de y em x e examia nando os resultados.0991717 2.121320 19 19 17.5102130 3.322876 8 8 8. data = dummy) Residuals: Min 1Q -5.01 ‘*’ 0.322876 2.414214 9 9 10. Na sequˆncia.802776 14 14 13.581139 11 11 14.0336 3Q 1.5394195 2.8633465 2.500000 10 10 8.936492 3.870829 2.lm(y ~ x.224745 2.000000 2.179449 20 20 12. Error t value Pr(>|t|) (Intercept) 0.0518 Coefficients: Estimate Std.941 x 0. podemos fazer uma e regress˜o ponderada e comparar os resultados.6649292 3.802776 2.866025 2.186 1.001 ‘**’ 0.76e-07 *** --Signif.866025 4 4 2.500000 2 2 0.frame(x = x. codes: 0 ‘***’ 0.3395924 2.0745573 2.500000 1.236068 > rm(x.3423 0.076 0.707107 1.414214 2.732051 13 13 8.5623611 2.8874653 2.

07449 0.7883.001 ‘**’ 0. a linha da regress˜o a c˜ a sem pondera¸ao e a linha de regress˜o ponderada.02346 3Q 0.53011 -0. data = dummy.GlobalEnv" [5] "package:grDevices" [9] "Autoloads" > attach(dummy) > search() [1] ". y) lines(lrf. codes: 0 ‘***’ 0.8487. c˜ a > > > > > lrf <.936 x 0. weight = 1/w^2) > summary(fm1) Call: lm(formula = y ~ x.56315 Max 2.02 on 1 and 18 DF.763e-07 > fm1 <. Adjusted R-squared: 0.lm(y ~ x. > search() [1] ".93386 0.28e-09 Gr´ficos de res´ a ıduos s˜o produzidos com plot().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˜o local n˜o-param´trica. data = dummy.28e-09 *** --Signif. Adjusted R-squared: 0.007 on 18 degrees of freedom Multiple R-squared: 0.1 ‘ ’ 1 Residual standard error: 1.22021 Coefficients: Estimate Std. lty = 3) abline(coef(fm)) abline(coef(fm1).2)) dividiu a janela gr´fica em 4 partes para a acomodar os 4 gr´ficos. Como a fun¸ao produz 4 gr´ficos dividia c˜ a remos a tela gr´fica.80255 -0.8403 F-statistic: 101 on 1 and 18 DF. Error t value Pr(>|t|) (Intercept) -0.7 INTRODUCAO AO R ¸˜ Residual standard error: 2. a Note que o comando acima par(mfrow=c(2. Para restaurar a configura¸ao original usamos a c˜ > par(mfrow = c(1.01 ‘*’ 0. p-value: 8.049 8.09293 10.89 on 18 degrees of freedom Multiple R-squared: 0. p-value: 1. weights = 1/w^2) Residuals: Min 1Q Median -1.7765 F-statistic: 67.05 ‘. 1)) Tornando vis´ ıveis as colunas do data-frame.91136 -0.082 0. y) plot(x. e visualizando o resultado. Depois adia a e cionamos a linha de regress˜o verdadeira (intercepto 0 e inclina¸ao 1).lowess(x.’ 0. lty = 2) .

"verdadeira"). "ponderada". ylab = "Residuals". 1)) > rm(fm. xlab = "Fitted values". 1. lwd = c(1. + main = "Residuals vs Fitted") > qqnorm(resid(fm).15 Leverage 20 q 0.10 0.5 1. resid(fm). > par(mfrow = c(1. lrf. curtose e a outliers (n˜o muito util aqui). 2)) > plot(fm) Residuals vs Fitted 18 q Normal Q−Q Standardized residuals −2 −1 0 1 2 3 18 q 11 q 5 q 11 Residuals 0 q q q q qqq q q q q qq q q q q q q q 20 qq q qqq q qqq qq q q q −5 20 q 5 Scale−Location Standardized residuals 0. 1). a ´ > par(mfrow = c(1. dummy) .5 q 11 q q q q q q q q q q q q q q q 10 15 Fitted values Standardized residuals −2 −1 0 1 2 3 18 q 20 q −2 Residuals vs Leverage q 18 q −1 0 1 Theoretical Quantiles 2 1 0. "loess". main = "Residuals Rankit Plot") E ao final retornamos ao gr´fico padr˜o e ”limpamos”novamente o workspace. 2)) Ao final destas an´lises removemos o objeto dummy do caminho de procura.0 1. 2.5 5 10 15 Fitted values > abline(0.00 0. 2)) > plot(fitted(fm). 20. + lty = c(1. 1. a > detach() Agora vamos fazer um gr´fico diagn´stico padr˜o para checar ajuste e pressupostos: o gr´fico a o a a de res´ ıduos por valores preditos e gr´fico de escores normais para checar assimetria. ou seja. c("linear simples".˜ 1 UMA PRIMEIRA SESSAO COM O R 8 > par(mfrow = c(2. 3.05 0. lwd = 2) > legend(1. 1.5 q q q q q q q q q q q q q q q q q 17 q Cook's distance 0.0 0. fm1. apaa a gando objetos.

9 INTRODUCAO AO R ¸˜ q 20 15 linear simples ponderada loess verdadeira q q q q q q q q y 10 q q q q 5 q q q q q q 0 q 5 10 x 15 20 Residuals vs Fitted q Residuals Rankit Plot q 6 q 6 q 4 q q q q q q q q q q Sample Quantiles −2 0 2 4 Residuals 0 2 q q q q q qq q q q q qqq q q q q q qq q −2 −4 −6 5 10 Fitted values 15 −6 q −4 q q q −2 −1 0 1 Theoretical Quantiles 2 Agora vamos inspecionar dados do experimento cl´ssico de Michaelson e Morley para medir a a velocidade da luz.tab de dados no formato texto. caso contr´rio deve ser precedido do caminho para a ´ a o diret´rio adequado. o .show() e note que no comando abaixo assume-se o que o arquivo est´ na area de trabalho do R. Clique para ver o arquivo morley. Se quiser voce pode ainda fazer o download deste arquivo para o seu micro. Pode-se visualizar um arquivo externo dentro do pr´prio R utilizando file.

˜ 1 UMA PRIMEIRA SESSAO COM O R 10 > file.tab") > mm Expt Run Speed 001 1 1 850 002 1 2 740 003 1 3 900 004 1 4 1070 005 1 5 930 006 1 6 850 007 1 7 950 008 1 8 980 009 1 9 980 010 1 10 880 011 1 11 1000 012 1 12 980 013 1 13 930 014 1 14 650 015 1 15 760 016 1 16 810 017 1 17 1000 018 1 18 1000 019 1 19 960 020 1 20 960 021 2 1 960 022 2 2 940 023 2 3 960 024 2 4 940 025 2 5 880 026 2 6 800 027 2 7 850 028 2 8 880 029 2 9 900 030 2 10 840 031 2 11 830 032 2 12 790 033 2 13 810 034 2 14 880 035 2 15 880 036 2 16 830 037 2 17 800 038 2 18 790 039 2 19 760 040 2 20 800 041 3 1 880 042 3 2 880 043 3 3 880 .show("morley.read.ufpr.tab") Lendo dados como um ”data-frame”e inspecionando seu conte´do. H´ 5 experimentos (colu a una Expt) e cada um com 20 “rodadas”(coluna Run) e sl ´ o valor medido da velocidade da luz e numa escala apropriada > mm <.br/~paulojus/dados/morley.table("http://www.leg.

11 INTRODUCAO AO R ¸˜ 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 080 081 082 083 084 085 086 087 088 089 090 091 092 093 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 4 5 5 5 5 5 5 5 5 5 5 5 5 5 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 20 1 2 3 4 5 6 7 8 9 10 11 12 13 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 780 890 840 780 810 760 810 790 810 820 850 870 870 810 .

> mm$Expt <. data = mm) > summary(fm) .factor(mm$Expt) > mm$Run <.˜ 1 UMA PRIMEIRA SESSAO COM O R 12 094 095 096 097 098 099 100 5 5 5 5 5 5 5 14 15 16 17 18 19 20 740 810 940 950 800 810 870 Devemos definir Expt e Run como fatores tornar o data-frame vis´ na posi¸˜o 2 do caminho ıvel ca de procura. Speed. 4 5 Depois analisamos como um experimento em blocos ao acaso com Run e Expt como fatores e inspecionamos os resultados.aov(Speed ~ Run + Expt. xlab = "Experiment No. main = "Speed of Light Data". > fm <.factor(mm$Run) > attach(mm) Podemos fazer um gr´fico para comparar visualmente os 5 experimentos a > plot(Expt.") Speed of Light Data 1000 q q 800 900 q 700 q q 1 2 3 Experiment No.

5 Expt4 -88.000000e+00 -7.13 INTRODUCAO AO R ¸˜ Run Expt Residuals --Signif.800000e+01 Run19 Run20 Expt2 Expt3 Expt4 Expt5 -5.0 -64. por exemplo ajustando um sub-modelo sem o fator “runs” e comparar os dois modelos lineares via uma an´lise de variˆncia. .000000e+01 -3.Df 1 95 2 76 Speed ~ Expt Speed ~ Run + Expt RSS Df Sum of Sq F Pr(>F) 523510 410166 19 113344 1.5 4.000000e+00 -1.’ 0.000000e+00 -3.5 -77.400000e+01 -8.000000e+02 -4.Run) > anova(fm0.754382e-13 Run13 Run14 Run15 Run16 Run17 Run18 -3.400000e+01 -6. codes: 0 ‘***’ 0.3632 Df Sum Sq Mean Sq F value Pr(>F) 19 113344 5965.800000e+01 4.800000e+01 6.400000e+01 -5.040000e+02 Run7 Run8 Run9 Run10 Run11 Run12 -1. ca e e > fm0$coef (Intercept) Expt2 Expt3 909. Por c˜ default a parametriza¸˜o ´ feita tomando o primeiro grupo como referˆncia.363209 4 94514 23628.750000e+01 Podemos redefinir o modelo.850000e+01 -7.0 -64.0 -88. Expt.5 Expt5 -77. fm) Analysis of Variance Table Model 1: Model 2: Res.1 ‘ ’ 1 > names(fm) [1] "coefficients" "residuals" "effects" "rank" "fitted.300000e+01 -6. a a > fm0 <.0 > mds <. .000000e+01 -1.600000e+01 -9.600000e+01 -6.5 1.05 ‘.000000e+01 -4.mds[1] 2 3 4 5 -53.5 E este comportamento ´ controlado por options().update(fm.5 831. mean) > mds 1 2 3 4 5 909.000000e+01 -6.1053 0.200000e+01 -2.1053 0.0 856.0 -53. contrastes de Helmert s˜o e a definidos como se segue.tapply(Speed.600000e+01 -1.01 ‘*’ 0. .9 ´ E importante saber interpretar os coeficientes segunda a parametriza¸ao utilizada.003071 ** 76 410166 5396.0 820.001 ‘**’ 0.residual" "contrasts" "xlevels" [11] "call" "terms" "model" > fm$coef (Intercept) Run2 Run3 Run4 Run5 Run6 9. Por exemplo.values" [6] "assign" "qr" "df.0 845.506000e+02 -5.5 > mds[-1] .3781 0. ~ .

helmert".˜ 1 UMA PRIMEIRA SESSAO COM O R 14 > options()$contrast unordered "contr.mds[1] .225 > mds .9 -20.poly")) > fm0 <.500 Expt2 -12.6 Expt1 56.375 > (4 * mds[5] .4 Expt4 -31.375 Expt4 -5.mds[2] .4 > (mds[2] .4 1 56.5 > (3 * mds[4] .5 > (2 * mds[3] .treatment(5) 1 2 3 4 5 2 0 1 0 0 0 3 0 0 1 0 0 4 0 0 0 1 0 5 0 0 0 0 1 > contr. ~ .400 > mean(Speed) [1] 852. Para entender melhor os resultados acima analise as e sa´ ıdas dos comandos abaixo.6 Expt3 -7.poly" > options(contrasts = c("contr.6 2 3. "contr.mds[4])/20 5 -5.mean(Speed) H´ algumas op¸˜es de contrastes implementadas no R e al´m disto o usu´rio pode implea co e a mentar contrastes de sua preferˆncia.update(fm.225 Enquanto que contrastes de cada tratamento contra a m´dia geral s˜o obtidos da forma: e a > options(contrasts = c("contr.6 3 4 5 -7.sum". "contr.mds[1] .mds[1])/2 2 -26.4 -31. .9 Expt1 -26.500 Expt3 -12.treatment" ordered "contr.Run) > fm0$coef (Intercept) 852.9 Expt2 3. . .poly")) > fm0 <.mds[2])/6 3 -12. ~ .update(fm.Run) > fm0$coef (Intercept) 852. > contr.mds[3] .mds[2] .mds[3])/12 4 -12. .helmert(5) .mds[1] .

162278e-01 -0.1195229 Se ainda n˜o estivar claro experimente para cada uma destas examinar a matrix do modelo a com os comandos abaixo (sa´ ıdas n˜o s˜o mostradas aqui). O objeto f ´ uma matrix quadrada com linhas e colunas indexadas por x e y e respectivamente com os valores da fun¸ao cos(y)/(1 + x2 ).7171372 [4. len = 50) > y <.1] [.poly")) model.poly")) model. fa ´ a “parte c˜ e assim´trica” e t() ´ transposi¸ao.] -3.2672612 6. "contr. y idem.324555e-01 -0.1] [.287978e-17 -0. pi.sum". f) . a c˜ No pr´ximo exemplo x ´ um vetor de 50 valores igualmente espa¸ados no intervalo [-pi o e c pi].L . Ao final e restauramos os parˆmetros gr´ficos iniciais.2] [. "contr.matrix(Speed ~ Expt) options(contrasts = c("contr. y.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. > detach() > rm(fm. y) cos(y)/(1 + x^2)) Agora gravamos parˆmetros gr´ficos e definindo a regi˜o gr´fica como quadrada e fazemos um a a a a mapa de contorno de f.matrix(Speed ~ Expt) options(contrasts = c("contr. Depois adicionamos mais linhas para melhor vizualiza¸ao.readonly = TRUE) > par(pty = "s".162278e-01 0. e e c˜ a a > oldpar <.poly")) model.] 3.sum(5) [.helmert".5345225 -3. mfrow = c(1.324555e-01 0.2] [.x > f <.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.treatment".324555e-01 -0. a a > > > > > > options(contrasts = c("contr.1195229 [2.2672612 -6.3] [.seq(-pi.C ^4 [1.324555e-01 0.4780914 [3.poly(5) .matrix(Speed ~ Expt) Ao final desanexamos o objeto e limpamos novamente o workspace.5345225 2.15 INTRODUCAO AO R ¸˜ [. fm0) Vamos agora ver alguns gr´ficos gerados pelas fun¸oes contour() e image().] 6. function(x.] -6. "contr.outer(x. c˜ > x <. 2)) > contour(x.] -3.164914e-16 0.162278e-01 -0. y.3] [.4780914 [5.162278e-01 0.par(no.Q .5345225 3.

6 −0. f) image(x. nlevels = 15.4 − −0 . 9 −2 −2 −0.2 3 −0.6 0. y.6 4 −0.8 0. −0 5 .8 −0.2 0 −0.4 −0.4 0.3 0.6 0.˜ 1 UMA PRIMEIRA SESSAO COM O R 16 > > > > contour(x.4 0.readonly = TRUE) par(pty = "s".8 3 −0 .1 0. nlevels = 15) par(oldpar) 3 −0.1 0.0.2 −0. y.8 −0. 9 −0.6 −3 −3 −2 −1 0 1 2 3 −3 −0.3 −0 −0 .par(no.4 0 0 0 0.1 −0 −0. 2)) image(x.1 0. add = TRUE) fa <.5 0 −1 −1 0.9 0.3 −3 −2 −1 0 1 2 3 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 E apagando objetos novamente antes de prosseguir.t(f))/2 contour(x. fa.2 0.5 0.5 0. fa) par(oldpar) −0 .3 − −0.7 −0. f.7 −0. 7 0.4 −0 .5 Fazendo um gr´fico de imagem a > > > > > oldpar <.2 −0. mfrow = c(1.1 2 2 1 1 0 0.(f .2 0.4 0.2 0.1 0.2 −0.0. y.5 .2 0 −0.6 −0.3 0 −0.2 −0.1 0. y.4 −0.3 0.4 −0.5 . .

fa) Para encerrar esta sess˜o vejamos mais algumas funcionalidades do R. O R pode fazer opera¸ao a c˜ com complexos. u > th <.0 −0.0 −1.rnorm(100) + rnorm(100) * (0+1i) w <.0 Re(z) 0.5 Im(z) 0. y.exp((0+1i) * th) Plotando complexos significa parte imagin´ria versus real Isto deve ser um c´ a ırculo: Suponha que desejamos amostrar pontos dentro do c´ ırculo de raio unit´rio. uma forma simples de fazer a isto ´ tomar n´meros complexos com parte real e imagin´ria padr˜o. len = 100) > z <.17 INTRODUCAO AO R ¸˜ > objects() [1] "f" "fa" "mds" "mm" "oldpar" "x" "y" > rm(x. mas a distribui¸ao n˜o ´ a c˜ a e uniforme.0 0. os pontos devem estar melhor e ca distribu´ ıdos sobre o c´ ırculo . pi. w) −1. note que 1i denota o n´mero complexo i. E depois mapeamos e u a a qualquer externo ao c´ ırculo no seu rec´ ıproco: > > > > par(pty = "s") plot(z.5 0.ifelse(Mod(w) > 1.0 −0.seq(-pi.0 Desta forma todos os pontos est˜o dentro do c´ a ırculo unit´rio.5 1. f. Um segundo m´todo usa a distribui¸˜o uniforme.5 1. type = "l") w <. 1/w.

5 1. ylim = c(-1. 1).5 y 0. xlab = "x". xlim = c(-1. w. . . ylim = c(-1.0 −0. ylab = "y") lines(z) 1.sqrt(runif(100)) * exp(2 * pi * runif(100) * (0+1i)) plot(w. .0 −0.0 0. e sa´ ımos do R. xlim = c(-1.˜ 1 UMA PRIMEIRA SESSAO COM O R 18 > + > > > + > plot(w.0 + + + + ++ + + + + + + + + + + + + + 1. xlab = "x".0 −1. 1).0 −1. > rm(th.5 0. .0 −0.0 0.5 .5 0.0 + + + + + ++ + + −1. pch = "+".5 1. q() −0.0 + + + ++ + + + + + + + ++ + + + + + + + + + + ++ ++ ++ ++ ++ + + + ++ + ++ + + + + + + + ++ + + ++ + + + + + + + + ++ + + + + + ++ + + + + + ++ + ++ + + + ++ + + + + + + + + + + ++ + + ++ + + + + + + ++ + +++ + + + + + + + + + + + + + ++ + + + + + + + + + ++ + + + + + ++ ++ + + + ++ + + + + + + + + + + + + −1. ylab = "y") lines(z) w <.0 x 0. 1). z) .0 x 0.5 y 0. 1). pch = "+".5 Apagamos novamente os objetos .

pdf ca ca ıvel .19 INTRODUCAO AO R ¸˜ 2 Estat´ ıstica computacional e o sistema R Nesta se¸˜o iremos seguir a apresenta¸˜o dispon´ no arquivo estcompR.

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

Para utilizar este pacote basta instal´-lo e carregar com o comando require(Rcmdr) e o menu se a abrir´ automaticamente. alguns iniciantes ou usu´rios espor´dicos poder˜o ainda preferir algum tipo de a a a ”menu”. Alguns usu´rios e a a acostumados com outros programas notar˜o de in´ a falta de ”menus”. Maiores informa¸oes sobre este pacote podem ser encontradas na p´gina do Rcmdr. e ıvel Entretanto. a e Cart˜o de Referˆncia em formato PDF preparado por Tom Short. Na medida que utia ıcio lizam o programa. a e e Cart˜o de Referˆncia em formato PDF preparado por Jonathan Baron. a e 3. ´ necess´rio conhecer e digitar comandos.Pacote “R commander” — “menus” para o R Para operar o R. a Aten¸ao: Note que o Rcmdr n˜o provˆ acesso a toda funcionalidade do R mas simplesmente c a e a alguns procedimentos estat´ ısticos mais usuais.5 Rcmdr .21 INTRODUCAO AO R ¸˜ ˆ ˆ ˆ Cart˜o de Referˆncia em formato HTML e traduzido para portuguˆs. na forma usual. c˜ a . os usu´rios (ou boa parte deles) tendem a preferir o mecanismo de comandos a pois ´ mais flex´ e com mais recursos. O pacote Rcmdr foi desenvolvido por John Fox visando atender a esta demanda.

Por exemplo: e o e > 1+2+3 [1] 6 > 2+3*4 [1] 14 > 3/2+1 [1] 2. O R tamb´m disponia e biliza fun¸oes usuais como as que s˜o encontradas em uma calculadora: c˜ a > sqrt(2) [1] 1. No ultimo vimos que a opera¸ao de potˆncia ´ indicada co ´ c˜ e e por **..´ 4 ARITMETICA E OBJETOS 22 4 4. Note que alternativamente pode-se usar o s´ ımbolo ^.8408964 .1 Aritm´tica e Objetos e Opera¸oes aritm´ticas c˜ e # somando estes n´meros . O s´ ımbolo [1] pode parecer estranho e ser´ explicado mais adiante.65359e-06 # seno de (Pi radianos) ´ zero e Note que o ˆngulo acima ´ interpretado como sendo em radianos.. Tente isto: > sin(pi) [1] 1.5 > 4*3**3 [1] 108 # pot^ncias s~o indicadas por e a ** ou ^ Nos exemplos acima mostramos uma opera¸ao simples de soma.224606e-16 Aqui est´ uma lista resumida de algumas fun¸oes aritm´ticas no R: a c˜ e sqrt() abs() sin() cos() tan() asin() acos() atan() sinh() cosh() tanh() asinh() acosh() atanh() exp() log() log10() log2() gamma() factorial choose() combn() raiz quadrada valor absoluto (positivo) fun¸oes trigonom´tricas c˜ e fun¸oes trigonom´tricas inversas c˜ e fun¸oes hiperb´licas c˜ o fun¸oes hiperb´licas inversas c˜ o exponencial e logar´ ıtmo natural logar´ ıtmo base-10 e base-2 fun¸ao Gamma de Euler c˜ fatorial (n!) n! n´mero de combina¸˜es ( x!(n−x)! ) u co todas conjuntos gerados pela combina¸oes de certo n´mero de elementos c˜ u Estas express˜es podem ser agrupadas e combinadas em express˜es mais complexas: o o > sqrt(sin(45 * pi/180)) [1] 0.14159) [1] 2. por exemplo 4*3^3 produziria o mesmo resultado mostrado acima. Note no segundo e terceiro c˜ comandos a prioridade entre opera¸˜es. u # um pouquinho mais complexo Vocˆ pode usar o R para avaliar algumas express˜es aritm´ticas simples.414214 > sin(3. O valor Pi est´ dispon´ a e a ıvel como uma constante.

1)/0 [1] -Inf NaN Inf 4. a > c(-1.224606e-16 <. Existem ainda alguns outro valores especiais usados pelo R: a ˆ NA Not Available. dados. ˆ ˆ Vejamos no exemplo abaixo alguns resultados que geram estes valores especiais. etc s˜o are ` a c˜ a mazenados na mem´ria ativa do computador na forma de objetos.sqrt(2) > x [1] 1.10 > x [1] 10 O d´ ıgito 1 entre colchetes indica que o conte´do exibido inicia-se com o primeiro elemento do u objeto x. u NaN Not a Number. As linhas a seguir produzem o mesmo resultado.3 Objetos O R ´ uma linguagem orientada a objetos: vari´veis. a e a u Inf e -Inf mais ou menos infinito. o programa exibe o valor do objeto: > x <. que armazena o valor desta constante e matem´tica.sin(pi) > x [1] > x > x [1] > x > x [1] 1. pode-se ainda usar os s´ ımbolos -> ou = (este apenas em vers˜es mais recentes do R). fun¸oes. O s´ o ımbolo _ que podia ser usado em vers˜es mais antigas no o R tornou-se inv´lido para atribuir valores a objetos em vers˜es mais recentes e passou a ser a o permitido nos nomes dos objetos.23 INTRODUCAO AO R ¸˜ 4. Note que deve utilizar mai´sculas.2 Valores faltantes e especiais Vimos nos exemplos anteriores que pi ´ um valor especial. Exemplos: > x <. matrizes. denota dados faltantes. No final desta sess˜o revisitamos o uso destes valores. se um objeto o x tem o valor 10. ao digitarmos o seu nome.224606e-16 # armazena a raiz quadrada de 2 em x # digite o nome do objeto para ver seu conte´do u . Alternativamente ao s´ e ımbolo <.usualmente utilizado para atribuir valores a objetos. 0. Vocˆ pode armazenar um valor em um objeto com certo nome usando o s´ e ımbolo <-.414214 Neste caso lˆ-se: x ”recebe”a raiz quadrada de 2. > x <.224606e-16 = sin(pi) 1. Por exemplo. denota um valor que n˜o ´ represent´vel por um n´mero.sin(pi) 1.

236068 # uma nova vari´vel chamada y a # somando valores de x e y Note que ao atribuir um valor a um objeto o programa n˜o imprime nada na tela. NO a e c˜ terceiro caso o h´ n˜o ´ permitido.x * sqrt(x) x2. a c e o e a mas 99a n˜o ´. u ca e sem atribuir o resultado a um objeto. Isto facilita lidar com um grande n´mero de objetos. . e > y <. e alguns que NAO s˜o v´lidos: a a 99a <. Estes valores podem ser atribu´ ıdos a objetos ou elementos de um objeto e pode-se ainda testar a presen¸a destes valores em objetos ou seus elementos. A seguir est˜o alguns exemplos v´lidos .10 a1 <. Ter nomes a u como a1 at´ a20 pode causar confus˜o . ´ e ´ ainda desej´vel.1^2 + x2. a99 ´ um nome v´lido. o correto seria sqrt(10). isto nomes que n˜o podem ser utilizados para objetos por terem um significado especial na lina guagem. Como pode ser esperado vocˆ pode fazer opera¸oes e c˜ aritm´ticas com os objetos. Digitando o a nome do objeto o programa imprime seu conte´do na tela.1 <. n´meros e pontos. c˜ . ıfen a e c˜ ca O ultio caso ´ um comando sem sentido. e as vez crucial evitar ainda outros nomes que sejam de objetos do sistema E a (em geral fun¸˜es. c No exemplo a seguir definimos um vetor de valores e verificamos que o objeto criado n˜o a cont´m nenhum destes valores especiais.25 x1 <. a c u Um fato importante ´ que o R distingue letras mai´sculas e min´sculas nos nomes dos objetos.sqrt(2) e dizemos que ”x recebe a raiz quadrada de 2”. por exemplo: co u c q s t C D F I T diff exp log mean pi range rank var Nomes reservados: O R. o que ´ obrigat´rio. S˜o eles: a 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 e nega¸˜o. e u u por exemplo dados. e a a a > > > > x <. As fun¸oes do tipo is. DICA: tente atribuir nomes que tenham um significado l´gico.2^2 ˜ .sqrt 10 a-1 <. NaN e Inf. faz com que o programa imprima o resultado na tela. . por ser o mesmo sinal usado em opera¸oes de subtra¸˜o. Por exemplo em x <.*() testam cada valor do vetor individualmente enquanto que ca c˜ any() verifica a presen¸a de algum valor que satisfa¸a a condi¸˜o e all() verifica se todos os c c ca valores satisfazem a condi¸ao. como qualquer outra linguagem. Nomes de vari´veis devem come¸ar com uma letra e podem conter letras. . . Dados e DADOS ser˜o interpretados como nomes de trˆs objetos diferentes a e pela linguagem.sin(x1) xsq <. ou constantes tais como o n´mero π) como. .10 No primeiro caso o nome n˜o come¸a com uma letra. Digitando uma opera¸˜o aritm´tica.x2. possui nomes reservados.´ 4 ARITMETICA E OBJETOS 24 Neste material ser´ dada preferˆncia ao primeiro s´ a e ımbolo. relacionado ao o trabalho e dados em quest˜o. Usu´rios pronunciam o comando a dizendo que o objeto ”recebe” (em inglˆs ”gets”) um certo valor.99 sqrt(x) <.sqrt(5) > y+x [1] 2. No segundo faltou um parentesis na fun¸ao sqrt. .

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

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

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

0 68. each = 4). 80.round(rnorm(10.00 0.00 Criando vetores com elementos repetidos As fun¸oes rep() e seq() do R s˜o uteis para c˜ a ´ criar vetores de dados que seguem um certo padr˜o.50 76. A primeira coluna pode ser obtida com um dos dois comandos mostrados inicialmente.60 1.5 > var(x9) [1] 53. a seguir.25 0.0 62. 1st Qu.5 TIPOS DE OBJETOS 28 > x2 + 1:6 [1] [1] 2 1 5 9 5 8 12 > (1:3) * x2 6 18 > x2/(1:6) [1] 1. 62. sd = 10)) > x9 [1] 62 66 74 71 63 62 80 78 77 62 > sum(x9) [1] 695 > mean(x9) [1] 69. 12) . mean = 70.0 80. rep(12.25 Max.00 > x2^(1:3) [1] 1 9 216 Vetores s˜o uma estrutura de dados sobre a qual podemos aplicar fun¸˜es como por exemplo a co as que fornecem medidas estat´ ısticas.00 62. a Clique aqui para ver um arquivo de dados. 69. > x9 <. each = 12) rep(1:4.50 Mean 3rd Qu. Os demais reproduzem a segunda e terceira coluna do arquivo de dados. 4)) rep(rep(1:3.0 Median 68.00 1. 4) rep(1:4.50 2.83333 > min(x9) [1] 62 > max(x9) [1] 80 > summary(x9) Min.25 > fivenum(x9) [1] 62.5 77. vamos ver os comandos que podem ser usados para criar vetores para cada uma das trˆs colunas e iniciais deste arquivo. > > > > rep(1:4.

"beltrano". 2.29 INTRODUCAO AO R ¸˜ Vetores l´gicos e sele¸˜o de elementos Como dito anteriormente os colchetes [] s˜o o ca a usados para selecionar elementos de um vetor.72) [1] 0 0 1 0 0 0 1 1 1 0 > x10 <. > paste(nomes.LETTERS[11:20] > let10 [1] "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" Uma fun¸ao particularmente util para criar vetores de caracteres ´ paste().numeric(ind. a e co c˜ a > nomes <. H´ tamb´m algumas fun¸˜es para cria¸ao autom´tica. O vetor pode ser ainda convertido para o formato de uma e a vari´vel indicadora (”dummy”).x9 > 72 > ind. a sele¸˜o de elementos ´ mais geral podendo atender a crit´rios definidos pelo ca e e usu´rio.letters[1:5] > let5 [1] "a" "b" "c" "d" "e" > let10 <.72 que indica se cada a o valor de x9 ´ ou n˜o maior que 72. sexto.72] > x10 [1] 74 80 78 77 TRUE TRUE TRUE FALSE Vetores de caracteres Vetores de caracteres tamb´m s˜o criados por c() com elementos e a entre aspas. No exemplo abaixo vemos como selecionar os 3 primeiros elementos do vetor x9 criado anteriormente e depois os elementos em posi¸˜o par no ca vetor (segundo. sep = "") . Examine os c˜ ´ e seguintes comandos.x9[ind. 2) [1] "fulano 2" > paste("fulano".72 [1] FALSE FALSE TRUE FALSE FALSE FALSE > as. "cicrano") > nomes [1] "fulano" "beltrano" "cicrano" > let5 <.72 <. sep = "") [1] "fulano2" > paste(letters[1:8]. 1:3) [1] "fulano 1" "beltrano 2" "cicrano 3" > paste("fulano". quarto. oitavo e d´cimo) e > x9[1:3] [1] 62 66 74 > x9[2 * (1:5)] [1] 66 71 62 78 62 Entretanto.c("fulano". 2. a > ind. A seguir mostramos que podemos criar um vetor l´gico ind.

O primeiro simplesmente guarda os seus elementos enquanto a o segundo possui atributos que nesta caso incluem os n´ ıveis do fator. Portanto revisitando o exemplo visto anteriormente temos que uma forma mais adequada de usar o vetor como vari´vel indicadora de tratamentos ´ defini-lo como um a e fator.5 TIPOS DE OBJETOS 30 [1] "a2" "b2" "c2" "d2" "e2" "f2" "g2" "h2" Vejamos ainda mais um exemplo. ao criar um vetor a de indicadores de “tratamentos” em uma an´lise de experimentos devemos declarar este vetor a como um “fator”. 1:3. > estados <. sep = ""). "SC". sep = ""). c(4. Note que neste caso.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" . c(4. diferentemente do anterior. Considere criar um vetor com elementos: T1 T1 T1 T1 T2 T2 T2 T2 T3 T3 T3 > rep(paste("T". s˜o registrados os “n´ a ıveis” (levels) do fator.c("PR". 3)) [1] "T1" "T1" "T1" "T1" "T2" "T2" "T2" "T2" "T3" "T3" "T3" Fatores Comentamos anteriormente que os vetores podem ser num´ricos ou de caracteres. Por exemplo. 1:3. 4. 4. "RS") > estados [1] "PR" "SC" "RS" > class(estados) [1] "character" > attributes(estados) NULL > estados <. 3))) [1] T1 T1 T1 T1 T2 T2 T2 T2 T3 T3 T3 Levels: T1 T2 T3 ´ E importante notar a diferen¸a entre um vetor de caracteres e um vetor que seja um fator que c s˜o objetos de classes diferentes. > factor(rep(paste("T". e Entretanto h´ mais um tipo importante de objeto: os fatores. Nos comandos abaixo esta distin¸ao fica mais clara onde um vetor ´ criado inicialmente como num´rico e depois convertido c˜ e e para fator.

+ "RJ".c("Sul". "PR". "RS". "Sul".sesul > levels(regiao) [1] "PR" "SC" "RS" "MG" "SP" "RJ" "ES" > levels(regiao) <.estados[-3.31 INTRODUCAO AO R ¸˜ Um fato relevante a respeito da manipula¸ao de fator ´ que uma sele¸˜o de parte dele que c˜ e ca exclua um certo valor n˜o exclui este valor dos atributos do vetor como no caso abaixo a menos a que a op¸˜o drop seja usada. > est <. "SC". + "Sudeste") > regiao [1] Sul Sul Sul Sul Sul Sudeste Sul Sudeste Sudeste Sul [11] Sudeste Sudeste Levels: Sul Sudeste . "PR". "PR".seldrop [1] PR SC Levels: PR SC Da mesma forma pode-se criar um vetor e definir para eles n´ ıveis. + "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 Reagrupando n´ ıveis de fatores Pode-se reagrupar n´ ıveis de um fator usando-se levels. "SP". "Sul".factor(est. levels = c("PR". "ES". "Sudeste". Note no exemplo abaixo o que a acontece com o valor "MG" em cada caso. mesmos que estes n´ ıveis n˜o estejam entre os elementos atualmente existentes no vetor. "SC".c("SC". "SP". ca > estados. drop = TRUE] > estados. > regiao <.estados[-3] > estados. No exemplo a seguir come¸amos definindo um novo fator como c´pia do original. listando os c o n´ ıveis originais dos fatores e depois o modificando de forma a agrupar os estados por regi˜es o respeitando a ordem dois n´ ıveis originais. "RS". "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 <. "Sudeste".sel [1] PR SC Levels: PR RS SC > estados. "RJ". "SP".sel <. "MG". "Sudeste". "RS".seldrop <.

. m = 70.round(rnorm(7.5 TIPOS DE OBJETOS 32 > table(regiao) regiao Sul Sudeste 7 5 Fatores Ordenados Um tipo especial de fator ´ dado pelos fatores ordenados que s˜o fatores e a para os quais preserva-se a ordena¸ao natural dos n´ c˜ ıveis. No pr´ximo exemplo vemos um vetor o inicialmente definido como de caracteres e a diferen¸a entre defini-lo como n˜o-ordenado ou c a ordenado. "medio". "medio". "alto". + "medio".. o resto e a parte inteira co de uma divis˜o. ord = T. "baixo". 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. "alto")) [1] medio baixo medio alto baixo baixo alto medio alto medio Levels: baixo < medio < alto > ordered(grau. levels = c("baixo". "medio") > factor(grau) [1] medio baixo medio alto baixo baixo alto medio alto medio Levels: alto baixo medio > factor(grau. As opera¸˜es %% e %% fornecem. "alto". ordenar os co elementos ((sort()) e a posi¸˜o de cada elemento no vetor ordenado e encontrar o ”rank”dos ca elementos (rank()). Note ainda ´ pode-se usar duas fun¸˜es diferentes a e co para definir fatores ordenados: factor(. "medio". A ordena¸˜o segue a ordem alfab´tica a menos que uma ordena¸˜o diferente seja ca e ca definida pelo usu´rio no argumento levels. "alto". > grau <. ord=T) ou ordered(). respectivamente.c("medio". sd = 10)) > vec [1] 54 60 63 75 72 76 73 > rev(vec) [1] 73 76 72 75 63 60 54 > sort(vec) [1] 54 60 63 72 73 75 76 > order(vec) [1] 1 2 3 5 7 4 6 > vec[order(vec)] .. "baixo". "alto")) [1] medio baixo medio alto baixo baixo alto medio alto medio Levels: baixo < medio < alto Mais algumas opera¸oes com vetores Considere o vetor vec obtido como se segue. "baixo". a > vec <. levels = c("baixo". As c˜ fun¸˜es abaixo mostram como inverter a ordem dos elementos do vetor (rev()).

br/Rtutorial/vecarit.br/Rtutorial/subscrip.br/Rtutorial/charfacs. Opcionalmente matrizes podem ter nomes associados as linhas e colunas (”rownames”e ”colnames”).ufpr.2 Matrizes Matrizes s˜o montadas a partir da reorganiza¸˜o de elementos de um vetor em linhas e colunas.max(vec) [1] 6 > which.br/Rtutorial/logicals. > vec [1] 54 60 63 75 72 76 73 > vec[-5] [1] 54 60 63 75 76 73 > vec[-(2:4)] [1] 54 72 76 73 Para mais detalhes sobre vetores vocˆ pode consultar ainda as seguinte p´ginas: e a ˆ ˆ ˆ ˆ ˆ Vetores: http://www. Cada um destes ` componentes da matrix ´ um vetor de nomes.min(vec) [1] 1 Outra opera¸ao ´ a remo¸˜o de elementos de vetores atrav´s de ´ c˜ e ca e ındices negativos.html Aritm´tica de vetores: http://www. ncol = 3) > m1 .matrix(1:12.html o ´ Indices http://www. Os comandos a seguir ilustram todas estas e funcionalidades.ufpr.br/Rtutorial/vectors.ufpr.leg.leg.leg.] sendo que antes da v´ a ca e ırgula indica-se a(s) linha(s) e depois a(s) coluna(s) a serem selecionadas.leg. A sele¸˜o de elementos ou submatrizes ´ feita usando [.leg.html Vetores L´gicos: http://www.html e Caracteres e fatores: http://www. a ca Por “default” a matrix ´ preenchida por colunas e o argumento opcional byrow=T inverte este e padr˜o.html 5.33 INTRODUCAO AO R ¸˜ [1] 54 60 63 72 > rank(vec) [1] 1 2 3 6 4 7 > vec%%5 [1] 4 0 3 0 2 1 > vec%/%5 [1] 10 12 12 15 73 75 76 5 3 14 15 14 A fun¸˜o which retorna a posi¸˜o do(s) elemento(s) que obedece a certo crit´rio.ufpr. > m1 <.ufpr. ca ca e > which(vec > 70) [1] 4 5 6 7 > which.

] 7 8 9 [4. 2] [1] 5 > m1[2.] 1 5 9 [2.] 4 8 12 > matrix(1:12.] 3 7 11 [4. c("C1". "L4"). 2:3] [. "C2". ncol = 3.1] [. 2] [1] 6 > m1[.2] [1.] 4 5 6 [3. ] C1 C2 C3 L1 1 5 9 L3 3 7 11 > m1[c(1.list(c("L1".2] [.] 2 6 10 [3. "C3")) > dimnames(m1) [[1]] [1] "L1" "L2" "L3" "L4" [[2]] [1] "C1" "C2" "C3" > m1[c("L1". "L3".5 TIPOS DE OBJETOS 34 [.] 1 2 3 [2.] 6 10 > dimnames(m1) NULL > dimnames(m1) <. byrow = T) [. ] .3] [1.1] [. "L3").1] [. "L2".] 10 11 12 > length(m1) [1] 12 > dim(m1) [1] 4 3 > nrow(m1) [1] 4 > ncol(m1) [1] 3 > m1[1. ] [1] 3 7 11 > m1[1:2. 2] [1] 5 6 7 8 > m1[3.3] [1. 3).] 5 9 [2.2] [.

] [4. 2.] [2.] [5.] [5. No caso de matrizes estas opera¸˜o produz o mesmo resultado que outras ca fun¸˜es conforme mostramos a seguir. sum) L1 L2 L3 L4 15 18 21 24 > rowSums(m1) L1 L2 L3 L4 15 18 21 24 > margin. margin = 2) C1 C2 C3 10 26 42 > apply(m1. Desta forma ´ comum surgir a necessidade de obter os totais marginais.35 INTRODUCAO AO R ¸˜ C1 C2 C3 L1 1 5 9 L3 3 7 11 > m2 <.] [2.cbind(1:5.] [. 1.] [3. sum) C1 C2 C3 10 26 42 > colSums(m1) C1 C2 C3 10 26 42 . 6) > m3 [1.table().table(m1.table(m1. 6:10) > m2 [1. isto ´ a soma a e e dos elementos das linhas e/ou colunas das matrizes.2] 1 6 2 7 3 8 4 9 5 10 > m3 <.1] [.cbind(1:5.1] [. margin = 1) L1 L2 L3 L4 15 18 21 24 > apply(m1. co > margin.] [.] [3. o que pode ser diretamente obtido com margin.2] 1 6 2 6 3 6 4 6 5 6 Matrizes s˜o muitas vezes utilizadas para armazenar frequˆncias de cruzamentos entre vara e i´veis.] [4.

2] [.1] [.3] [1.] 40 160 360 > m5 .] 1 3 5 [2.] 10 10 10 A multiplica¸ao de matrizes ´ feita usando o operador %*%. Note que as opera¸oes abaixo s˜o todas c˜ a realizadas elemento a elemento.3] [1.2] [. A fun¸ao t() faz transposi¸˜o c˜ e c˜ ca e a invers˜o ´ obtida com solve(). nc = 3) > m5 <.1] [.5 TIPOS DE OBJETOS 36 Opera¸˜es com matrizes Opera¸˜es com matrizes s˜o feitas diretamente assim como no co co a caso de vetores.] 9 27 45 [2.] 2 4 6 > m5 [.] 110 250 [3.] 10 90 250 [2.] 10 10 10 [2. nc = 3) > m4 [.3] 170 390 610 A fun¸ao solve() na verdade ´ mais geral e fornece a solu¸˜o de um sistema de equa¸˜es c˜ e ca co lineares.] 10 30 50 [2.1] [.matrix(10 * (1:6).3] [1. O pacote MASS fornece ginv() para obten¸ao de inversa a e c˜ generalizada (inversa de Moore-Penrose) > t(m4) %*% m5 [.2] [.3] [1.] 50 110 [2.] 20 40 60 > m4 + m5 [.2] [1.1] [.matrix(1:6.1] [.m4 [.] 170 390 [. Por exemplo.] 18 36 54 > m5/m4 [. A ”lei da reciclagem”permanece v´lida.1] [.2] [.1] [.2] [.] 11 33 55 [2.] 22 44 66 > m4 * m5 [.2] [.3] [1. > m4 <. Existem diversas opera¸oes sobre a c˜ matrizes e vamos apresentar apenas algumas aqui. a solu¸ao do sistema: c˜   x + 3y − z = 10 5x − 2y + z = 15  2x + y − z = 7 .3] [1.

na pr´tica para ajustar regress˜es no R o usu´rio n˜o precisa fazer opera¸˜es como a a o a a co indicada pois j´ existem fun¸˜es no R (neste caso lm()) que efetuam o ajuste.] 2.6. 23. 5. ca Como exemplo vamos considerar as vari´veis preditora e resposta com valores fornecidos na a Tabela 5.1] [1.4) > solve(t(X) %*% X) %*% t(X) %*% y [. y)) [. Deve ser dada preferˆncia a esta e fun¸˜o sempre que poss´ ca ıvel pois ´ mais precisa e r´pida do que o correspondente produto e a matricial com transposi¸˜o do objeto do primeiro argumento.cbind(1. 7) > solve(mat.matrix(c(1. 15.c(13.Y) retorna X Y . 1:10) > y <. a a 1 2 3 4 13.8. 3. nc = 3) > vec <. 1.1 23.4 Nos comandos abaixo mostramos como entrar com os dados e como obter os resultados de duas formas: (i) usando opera¸˜es de matrizes de forma ”ineficiente”e usando uma forma co computacionalmente mais adequada de obter o mesmo resultado.78 Notas: 1.] 8.c(10.5 6 7 8 9 10 22. a Tabela 1: Valores da vari´vel preditora e resposta para uma regress˜o linear simples.3 39. 15. a co Para mais detalhes sobre matrizes consulte a p´gina: a ˆ Matrizes .307692 3.2. (1) onde X ´ a matrix com os valores da vari´vel X acrescida de uma coluna de 1’s e y s˜o os e a a valores da vari´vel resposta. 35.4.9.6 15.3 5 18.3.37 INTRODUCAO AO R ¸˜ pode ser obtida com: > mat <. -1).06 [2.538462 Uma outra fun¸ao muito util para c´lculos matriciais ´ crossprod() para produtos cruzados: c˜ ´ a e crossprod(X) retorna X X crossprod(X.] 8. 18. > X <.9 31. c˜ a a 2. como por exemplo usando a decomposi¸ao QR.615385 3.3. 31.2 e considere obter os coeficientes da regress˜o linear dados por: a ˆ β = (X X)−1 X y .4 16. mas isto n˜o ser´ discutido neste ponto. 17.5. existem formas ainda mais computacionalmente eficientes de obter o resultado acima no R. 1. 39. crossprod(X.78 > solve(crossprod(X). 22. -1. -2. vec) [1] 3.1] [1.1. 16.06 [2.8 17. 2.2 35.] 2.

1 [.] Examine agora os resultados dos seguintes comandos para selecionar e operar elementos do ”array”.1] [.] 6 9 .] 18 21 > ar1[2.4] 13 16 19 22 14 17 20 23 15 18 21 24 [1.5 TIPOS DE OBJETOS 38 5. 1] [1] 2 5 8 11 > sum(ar1[. .] 4 7 [2.4] [1.] 3 6 9 12 .3 Arrays O conceito de array generaliza a id´ia de matrix.3] [. .2] [. e a > ar1 <.1] [. 1]) [1] 78 > sum(ar1[1:2.] 5 8 [3. em um array os elementos podem ser a o organizados em um n´mero arbitr´rio de dimens˜es. Defina um array com o comando a e c˜ seguir e inspecione o objeto certificando-se que vocˆ entendeu como arrays s˜o criados. . .1] [. u a o No R um array ´ definido utilizando a fun¸ao array().2] [.3] [. .] 2 5 8 11 [3. > ar1[.2] [1.] [2.1] [. .2] [1. .] [3. ] . 1]) [1] 48 Podemos atribuir nomes as dimens˜es de um array.] 1 4 7 10 [2. 1 [. 4.] 16 19 [2. 2 [. 2 [. ` o > dimnames(ar1) .] 17 20 [3. dim = c(3.array(1:24. Enquanto em uma matrix os elementos e s˜o organizados em duas dimens˜es (linhas e colunas). 2:3. 2)) > ar1 .

. Age = Child. Age = Adult. e + 1:4. paste("col". sep = ""). . . Age = Adult. Survived = Yes Sex Class Male Female 1st 57 140 2nd 14 80 3rd 75 76 Crew 192 20 Para obter maiores informa¸˜es sobre estes dados digite: co help(Titanic) Agora vamos responder as seguintes perguntas. "M´dio". Para “carregar” e a ıdo visualizar os dados digite: > data(Titanic) > Titanic . c("Masculino". Survived = Yes Sex Class Male Female 1st 5 1 2nd 11 13 3rd 13 14 Crew 0 0 . mostrando os comandos do R utilizados ` sobre o array de dados. Survived = No Sex Class Male Female 1st 0 0 2nd 0 0 3rd 35 17 Crew 0 0 . c˜ Veja agora um exemplo de dados j´ inclu´ no R no formato de array. .39 INTRODUCAO AO R ¸˜ NULL > dimnames(ar1) <. "Feminino")) Inspecione o “help” da fun¸ao array (digite help(array)). Age = Child. "Alto").list(c("Baixo". Survived = No Sex Class Male Female 1st 118 4 2nd 154 13 3rd 387 89 Crew 670 3 . . rode e inspecione os exemplos c˜ contidos na documenta¸ao.

quais as propor¸˜es de sobreviventes entre homens e mulheres? co Vamos fazer por partes obtendo primeiro o n´mero de homens e mulheres. 2]. . margin.19149 Note-se ainda que assim como em matrizes. 4. sum) No 1490 Yes 711 4. quantas pessoas sobreviveram e quantas morreram? > apply(Titanic. . quantas crian¸as sobreviveram? c > sum(Titanic[. . . fornecendo uma maneira a alternativa a alguns dos comandos mostrados acima. sum) Male Female 367 344 > 100 * apply(Titanic[. sum) Male Female 1731 470 > apply(Titanic[. 2]. quantas pessoas havia no total? > sum(Titanic) [1] 2201 2. . 2]) [1] 57 5. > apply(Titanic.table() poderia ser utilizada para obter os totais marginais para cada dimens˜o do array de dados.5 TIPOS DE OBJETOS 40 1. sum)/apply(Titanic. ]) [1] 885 3. depois dentre u estes os que sobreviveram e depois obter as percentagens pedidas. . margin = 1) Class 1st 2nd 3rd Crew 325 285 706 885 .20162 73. 2. 2. 2. 1. quantas pessoas havia na tripula¸ao (crew)? c˜ > sum(Titanic[4. ` > margin. .table(Titanic. sum) Male Female 21. 2.

68. 75. 75..7879838 0. O ”data-frame”´ uma estrutura semelhante a uma matriz por´m com cada coluna e ` e sendo tratada separadamente.data. Y = c(51.e. > margin. margin = 4) Survived No Yes 1490 711 Esta fun¸ao admite ainda ´ c˜ ındices m´ltiplos que permitem outros resumos da tabela de dados. 77. margin = c(2. a c > d1 <. 61. 4)). margin = 3) Age Child Adult 109 2092 > margin. margin = 2) Sex Male Female 1731 470 > margin. 54.table(Titanic.table(margin.7319149 5. + 80.table(Titanic.2120162 Female 0. margin = 1) Survived Sex No Yes Male 0. margin = c(2. u Por exemplo mostramos a seguir como obter o total de sobreviventes e n˜o sobreviventes.frame(X = 1:10. 67.41 INTRODUCAO AO R ¸˜ > margin. Desta forma podemos ter colunas de valores num´ricos e colunas e de caracteres no mesmo objeto.table(Titanic. Note entretanto que dentro de uma mesma coluna todos elementos ainda ser˜o for¸ados a serem do mesmo tipo.table(Titanic. a separados por sexo e depois as porcentagens de sobreviventes para cada sexo.4 Data-frames Vetores.table(Titanic. 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 .2680851 0. ou num´rico c e ou caracter. 4)) Survived Sex No Yes Male 1364 367 Female 126 344 > prop. matrizes e arrays for¸am todos os elementos a serem do mesmo ”tipo”i.

93 13. d2$lev.204 8.06 17.expand.71 15.26 > d3 <. Max. 10.947391 3 12 13.487425 1 2 8.848606 3 14 14.grid(1:3.gl(3. sd = 2). 13.490 12.82 16.11 16.604849 2 11 13.259447 3 15 10.577 9. Max. Median Mean 3rd Qu. 8.106596 2 8 13.06 17.505 8. summary) d2$lev: 1 Min.637 10.data.931573 3 13 13.34 13. 16 + rnorm(5.5 TIPOS DE OBJETOS 42 > 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.95 14. 4:5) > d3 Var1 Var2 1 1 4 2 2 4 3 3 4 4 1 5 5 2 5 6 3 5 .817709 2 10 17.frame(Y = c(10 + rnorm(5. sd = 2).73 13. 1st Qu.505333 1 6 17. 1st Qu.203972 1 4 12. Median Mean 3rd Qu. d1$Y) > d2 <.60 --------------------------------------------------------------d2$lev: 3 Min. 5) > d2 Y lev 1 10.410 --------------------------------------------------------------d2$lev: 2 Min. 1st Qu.85 13.734985 3 > by(d2$Y.576970 1 3 8.410250 1 5 8. Max. + 14 + rnorm(5. sd = 2))) > d2$lev <.061292 2 7 16.705161 2 9 15. Median Mean 3rd Qu.

2] [.] 1 4 7 [2.3] [1.grid() pode ser muito util gerando autimaticamente c˜ ´ combina¸˜es de valores.] 3 6 9 > lis2 <.grid(1:3. + ncol = 3)) > lis1 $A [1] 1 2 3 4 5 6 7 8 9 10 $B [1] "THIS IS A MESSAGE" $C [.list(lis2) [1] TRUE > class(lis2) [1] "lm" > summary(lis2) X 3. ´ > lis1 <. B = "THIS IS A MESSAGE". data = d1) > lis2 Call: lm(formula = Y ~ X.] 2 5 8 [3.1] [.067 > is.442 .43 INTRODUCAO AO R ¸˜ Na cria¸ao de data-frame expand. data = d1) Coefficients: (Intercept) 50. co > expand.list(A = 1:10.5 Listas Listas s˜o estruturas gen´ricas e flex´ a e ıveis que permitem armazenar diversos formatos em um unico objeto. 1:2) 1 2 3 4 5 6 Var1 Var2 1 1 2 1 3 1 1 2 2 2 3 2 Para mais detalhes sobre data-frame consulte a p´gina: a ˆ Data-frames 5. C = matrix(1:9.lm(Y ~ X.

5090909 -2. codes: 0 ‘***’ 0.5 TIPOS DE OBJETOS 44 Call: lm(formula = Y ~ X.3076 Max 4.59364 Estimated effects may be unbalanced "fitted.05 ‘.86 --Signif.0484848 -2.05 ‘.’ 0.001 ‘**’ 0.9364.01 Pr(>|t|) 6.29 --Signif.3171 10.4909091 > lis3 <.579e-06 *** Residuals 8 66.8363636 .residual" "xlevels" [11] "terms" "model" > lis2$pred NULL > lis2$res 1 2 3 4 5 6 -2.001 ‘**’ 0.9515 -2.6060606 -1.values" "call" 7 2.93739 30. data = d1) Residuals: Min 1Q Median -2.6060606 3. data = d2) > lis3 Call: aov(formula = Y ~ lev.2788 Coefficients: Estimate Std.9674 25.58e-06 *** ‘*’ 0. of Freedom 2 12 Residual standard error: 1.01 ‘*’ 0.aov(Y ~ lev. p-value: 4.88 on 8 degrees of freedom Multiple R-squared: 0.9285 F-statistic: 117.5045 -0.1636364 0. codes: 0 ‘***’ 0.1 ‘ ’ 1 Residual standard error: 2.88 4.9515152 0.65 117. Error t value (Intercept) 50.579e-06 > anova(lis2) Analysis of Variance Table Response: Y Df Sum Sq Mean Sq F value Pr(>F) X 1 977.35 8.09e-09 *** 4.45 X 3.0667 1.47628 Deg. Adjusted R-squared: 0.’ 0.7212121 4.1 ‘ ’ 1 > names(lis2) [1] "coefficients" "residuals" "effects" "rank" [6] "assign" "qr" "df.65 977. data = d2) Terms: lev Residuals Sum of Squares 103.2212 3Q 2.2787879 8 9 10 -2.4424 0.9 on 1 and 8 DF.

] 2 5 [3.001 ‘**’ 0.0001359 *** Residuals 12 30.1] [.] 1 4 [2.default Entretanto isto n˜o ´ dispon´ desta forma para todas as fun¸oes como por exemplo em a e ıvel c˜ min.1] [.1 ‘ ’ 1 Uma lista ´ portanto uma cole¸ao de objetos.476 2.list(nomes = c("Pedro". J´ o colchete duplo ([[ ]]) retorna o objeto e a que est´ na posi¸ao indicada da lista.] 3 6 > lis1[[2]] [. u c˜ ca e lm glm plot plot.6 Fun¸˜es co O conte´do das fun¸oes podem ser vistos digitando o nome da fun¸˜o (sem os parˆnteses). o colchete simples ([ ]) retorna uma parte da lista. mat = matrix(1:6. ou e seja. Examine o exemplo a seguir.2] [1. + nc = 2)) > lis1 $nomes [1] "Pedro" "Joao" "Maria" $mat [.] 1 4 [2.’ 0. codes: 0 ‘***’ 0.2] [1.540 --Signif.01 ‘*’ 0.] 2 5 [3.] 3 6 "Maria" 5. o .463 0. Para listas h´ duas op¸oes para se selecionar e c˜ a c˜ elementos: colchetes [ ] ou colchetes duplos [[ ]]. "Joao".969 20.1] [. "Maria"). retorna um objeto que ainda ´ uma lista. Ou seja.937 51. rnorm e lines Nestes casos as fun¸˜es n˜o s˜o escritas em linguagem R (em geral co a a est˜o escritas em C) e para visualizar o conte´do das fun¸˜es vocˆ tem que examinar os arquivos a u co e do c´digo fonte do R.] 1 4 [2.2] [1.] 2 5 [3. Entretanto os resultados retornados por cada um destes ´ diferente.05 ‘.] 3 6 > lis1[1] $nomes [1] "Pedro" "Joao" > lis1[2] $mat [. max. a c˜ > lis1 <.45 INTRODUCAO AO R ¸˜ > summary(lis3) Df Sum Sq Mean Sq F value Pr(>F) lev 2 103.

. ar1 ´ um array.4 . Entretanto s˜o pouco pr´ticas para determinar qual o tipo de um objeto e co a a retornam apenas um valor l´gico TRUE ou FALSE.4 9.$ : chr [1:3] "Baixo" "M´dio" "Alto" e . d1 ´ um data. Mostrar comandos que podem ser usados para criar os objetos e/ou executar as instru¸˜es co a seguir.4 8.frame': 10 obs."RS".. estado ´ um fator om trˆs n´ e e e e ıveis. 1:2] 1 2 3 4 5 6 7 8 9 10 .4 3.4 10.4 6.*() mencionadas no in´ dasta sess˜o podem ser usadas para obter c˜ ıcio a informa¸˜es sobre a natureza de um objeto. 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.. "dimnames")=List of 3 .$ : chr [1:4] "col1" "col2" "col3" "col4" . a > str(x1) num 10 > str(estados) Factor w/ 3 levels "PR".frame e e com duas vari´veis sendo uma delas de valores inteiros e a outra de valores num´ricos e lis1 ´ a e e uma lista de dois elementos sendo o primeiro um vetor de caracteres e o segundo uma matrix de seis elementos e de dimens˜o 3 × 2.5 TIPOS DE OBJETOS 46 5.4 7.. o que pode sem muito util quando se escreve co ´ fun¸˜es em R. o Uma fun¸ao mais rica em detalhes ´ str() retorna informa¸oes sobre a estrutura do objeto. .8 Exerc´ ıcios 1."SC": 1 3 2 > str(ar1) int [1:3.. c˜ e c˜ Nos exemplos a seguir vemos que a fun¸˜o informa sobre objecots que criamos anteriormente: ca x1 ´ um vetor num´rico.4 5. (a) o vetor [1] 4 8 2 (b) selecionar o primeiro e terceiro elemento do vetor acima (c) [1] 10 11 12 13 14 15 16 17 18 19 20 (d) o vetor com a seq¨ˆncia de valores ue [1] -3 -2 -1 0 1 2 3 (e) o vetor com a seq¨ˆncia de valores ue [1] 2. 1:2] 1 2 3 4 5 6 5.$ : chr [1:2] "Masculino" "Feminino" > str(d1) 'data.attr(*.4 4. 1:4.7 Que tipo de objeto eu tenho? As fun¸oes do tipo is.

Mostre comando(s) para construir uma matriz 10 × 10 tal que as entradas s˜o iguais a a i ∗ j.47 INTRODUCAO AO R ¸˜ (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¨ˆncia repetida ue [1] 1 1 1 2 2 2 3 3 3 4 4 4 (i) o vetor de seq¨ˆncia repetida ue [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¨ˆncia de valores ue [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 [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 (m) o vetor alfanum´rico e [1] "Parana" "Sao Paulo" "Minas Gerais" (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 [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 Bl [11] Bloco_2 Bloco_3 Levels: Bloco_1 Bloco_2 Bloco_3 2. Use estas e outras fun¸oes para ue c˜ calcular a soma dos 100 primeiros termos das s´ries: e ˆ ˆ ˆ (a) 1 + 1/2 + 1/3 + 1/4 + . . x2 e exp(x). com x variando e de 0 a 50. . sendo i a linha e j a coluna. . A express˜o z<-rep(x. . . A fun¸ao sum(x) retorna a soma dos elementos do vetor x. 4. .10) c˜ a faz o vetor z igual a uma seq¨ˆncia de 10 vetores x. Construa um data-frame com uma tabela com trˆs colunas: x. (c) 1/(1+1/1!)2 + 1/(1+1/2!)2 + 1/(1+1/3!)2 + . (b) 1 + 1/22 + 1/42 + 1/62 + 1/82 + . 3. .

1/4 + 1/5 . Considere a tabela de freq¨ˆncias a seguir.1/2 + 1/3 . . Fumante Idade Masculino Feminino Menor que 20 50 30 20 a 40 39 28 Maior que 40 37 36 (a) qual o n´mero total de pessoas? u (b) quantos s˜o os fumantes e os n˜o fumantes? a a (c) quantos s˜o homens? a (d) quantas mulheres s˜o n˜o fumantes? a a (e) quais as propor¸oes de fumantes entre homens e mulheres? c˜ N˜o Fumante a Masculino Feminino 55 41 31 30 25 15 . 5. Carregue o conjunto de dados com o comando data(HairEyeColor) e responda as seguintes perguntas fornecendo tamb´m o comando do R para obter a e resposta: (a) Qual a propor¸˜o de homens e mulheres na amostra? ca (b) Quantos s˜o os homens de cabelos pretos? a (c) Quantas mulheres tem cabelos loiros? (d) Qual a propor¸ao de homens e mulheres entre as pessoas ruivas? c˜ (e) Quantas pessoas tem olhos verdes? 6. . Entre com os dados usando o tipo de objeto ue adequado e mostre os comandos para responder as perguntas abaixo.5 TIPOS DE OBJETOS 48 ˆ (d) 1 .1/6 + .

Agora vamos resolver com apenas um comando: > sum(sqrt(log(10^(0:6)))) [1] 16. Vejamos alguns exemplos c˜ a calculando as seguintes somas: (a) 102 + 112 + . mas ´ sempre util o ´ e ´ entender os comandos passo a passo! (b) log(1) + log(10) + log(100) + .1 . + 202 Para obter a resposta devemos ˆ ˆ ˆ criar uma sequˆncia de n´meros de 10 a 20 e u 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´ precisamos do ultimo comando para obter a resposta. onde log ´ o logar´ e ıtmo neperiano.49 INTRODUCAO AO R ¸˜ 6 6. Vejamos os comandos para o primeiro exemplo.1 Miscelˆnia de funcionalidades do R a O R como calculadora Podemos fazer algumas opera¸oes matem´ticas simples utilizando o R. . 50. . + log(1000000).2 Gr´ficos de fun¸oes a c˜ Para ilustrar como podemos fazer gr´ficos de fun¸oes vamos considerar cada uma das fun¸oes a c˜ c˜ a seguir cujos gr´ficos s˜o mostrados nas Figuras 6.seq(0.2 e 6.(1/x1) * sin(x1) > plot(x1. y1. l = 101) > y1 <. > x1 <. . type = "l") .2.4365 6. . a a 1 (a) f (x) = 1 − x sin(x) para 0 ≤ x ≤ 50 (b) f (x) = √1 50π 1 exp[− 50 (x − 100)2 ] para 85 ≤ x ≤ 115 A id´ia b´sica ´ criar um vetor com valores das abscissas (valores de x) e calcular o valor da e a e fun¸˜o (valores de f (x)) para cada elemento da fun¸˜o e depois fazer o gr´fico unindo os pares ca ca a de pontos.

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

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

9) [1] 0. de uma vari´vel a a b cont´ ınua.100)^2) + } > integrate(fx. 85. a ´ ` c˜ Vejamos mais um exemplo. 100.ˆ 6 MISCELANIA DE FUNCIONALIDADES DO R 52 x^2 0 −4 5 10 15 −2 0 x 2 4 Figura 3: Gr´fico onde a area indicada corresponde a integral definida na equa¸ao Equation 2. 100. 81) e portanto f (x) = 9 2π exp{− 162 (x − 100) }. 100. Sabemos que para distribui¸oes cont´ c˜ ınuas de probabilidades a integral est´ associada a probabilidade em um intervalo.4e-15 > pnorm(105. ent˜o P (a < X < b) = a f (x)dx.6629523 with absolute error < 7. ´ possivel obter c˜ e e alguns resultados simb´licos.a. em particular para express˜es de derivadas que podem ser inforo o madas para algor´ ıtimos de otimiza¸˜o num´rica. A probabilidade P (85 < X < 105) pode ser calculada das trˆs formas diferentes que ir˜o retornar os memos resultados conforma e a mostrado a seguir.6629523 with absolute error < 7. Seja f (x) uma f. 105) 0.function(x) { + (1/(9 * sqrt(2 * pi))) * exp(-(1/162) * (x .pnorm(85. > fx <. com distribui¸ao a c˜ 1 1 2 √ N (100. A forma b´sica de utiliza¸ao consiste em: (i) ca e a c˜ . 85. seja X v. 9) . 9).p.6629523 6.4 Matem´tica simb´lica no R a o Embora o R seja um programa predominantemente para opera¸oes num´ricas. 105) 0.4e-15 > integrate(function(x) dnorm(x. Por exemplo.d.

14.53 INTRODUCAO AO R ¸˜ defina a express˜o desejada dentro de quote(). list(x = 1. (ii) use D() para obter a express˜o da derivada a a desejada informando a express˜o e o termo em rela¸˜o ao qual deseja-se derivar a express˜o. . . onde n ´ o n´mero de elementos e u 1 1 do vetor x e λ = 10.sourceforge. Dica: o fatorial de um n´mero pode ser obtido utilizando a fun¸ao prod. z = 3)) [1] -1. z = 3)) [1] 0. . (iii) a ca a use eval() caso queira obter o valor num´rico de uma determinada express˜o.quote(sin(x^2 + log(y + z))) > f sin(x^2 + log(y + z)) > df. a 6. a c˜ Γ(a + 1) = a!. "y") > df. > f <.723432 Existem programas computacionais especializados em matem´tica simb´lica dentre os quais a o destacam-se os projetos axiom. para x = 10 2 3 20 1. + (10π)2 (c) E = log(x + 1) + log( x+2 ) + log( x+3 ) + . "x") > df.com/ a ıvel Todos estes programas est˜o dispon´ a ıveis para v´rias plataformas/sistemas operacionais.dy <.D(f. e H´ ainda uma outra forma usando a fun¸ao Gama e lembrando que para a inteiro. Alguns ainda oferecem interfaces gr´ficas. A documenta¸ao e a c˜ help(D) fornece mais detalhes. 11). 14. list(x = 1.5 Exerc´ ıcios (a) Seja x = (12.D(f.net a ıvel o programa yacas est´ dispon´ em http://yacas.axiom-developer. 10. . Calcule E = −nλ + ( n xi ) log(λ) − n log(xi !). y = 2. Por u c˜ exemplo o valor de 5! ´ obtido com o comando prod(1:5). + log( x+20 ). maxima e yacas. 11. Calcule o valor das express˜es abaixo o 2.dx cos(x^2 + log(y + z)) * (2 * x) > df. 15. Obtenha o gr´fico das seguintes fun¸oes: a c˜ .org a ıvel o programa maxima est´ dispon´ em http://maxima.dx. Portanto podemos obter o valor de 5! com o comando gamma(6). Vejamos um exemplo. o e a Para o YACAS e PYTON-SYMPY h´ os pacotes do R Ryacas e rSymPy que permitem a acessar suas funcionalidades diretamente de dentro de uma sess˜o.5073913 > eval(df.dx <. 11. ˆ ˆ ˆ ˆ o programa axiom est´ dispon´ em http://www. y = 2.googlecode.dy cos(x^2 + log(y + z)) * (1/(y + z)) > eval(f. (b) E = (π)2 + (2π)2 + (3π)2 + .net a ıvel o programa pyton-sympy est´ dispon´ em http://rsympy. a Tamb´m est˜o inclu´ e a ıdos nas distribui¸˜es de sistemas LINUX podendo ser instalados a parco tir de vers˜es pr´-compiladas.sourceforge.

. c 6. caso contr´rio a 54 3.5 5. Escreva a sequˆncia de comandos para obter um gr´fico x versus y.5 3.0 3.0 2.5 φ + 0. Escreva uma sequˆncia de comandos no R para calcular a soma dos 80 primeiros termos e das s´ries: e (a) 1 + 1/32 + 1/52 + 1/72 + 1/92 + .5 2.ˆ 6 MISCELANIA DE FUNCIONALIDADES DO R (a) f (x) = x12 (1 − x)8 para 0 < x < 1 (b) Para φ = 4.0 2. Mostre os comandos para obter as seguintes sequˆncias de n´meros e u (a) 1 11 21 31 41 51 61 71 81 91 (b) 1 1 2 2 2 2 2 3 3 3 (c) 1.5 1. .2 3.5 1.0 2. 1] e y = sin(x) ∗ exp(−x). . a co (a) I1 = (b) I2 = 0.6 0. (b) 1 − 1/22 + 1/32 − 1/42 + 1/52 − 1/62 + . Considerando as fun¸˜es acima calcule as integrais a seguir e indique a area correspondente co ´ nos gr´ficos das fun¸˜es.0 3.5 2. se h < φ 0 .5 3.5 3.5 f (x)dx ρ(h)dh 4. .0 3.5 2. onde x ´ um vetor e a e com 100 valores igualmente espa¸ados no intervalo [−1.5 1. ρ(h) = h h 1 − 1.5( φ )3 . .

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

> texto <.1. coloca o R ca ca e e em modo prompt onde o usu´rio deve digitar cada dado seguido da tecla <ENTER>. of 2 variables: $ trat : Factor w/ 4 levels "a". para ler uma linha a ser digitada na tela do Rsiga o comando abixo e digite o texto indicado."d": 1 1 2 2 3 3 4 4 $ resposta: int 10 12 15 20 12 5 8 10 #d <. header = TRUE) str(d) 'data. Veja o seguinte resultado: y <. d$'trat'. isto ´. O segunte exemplo foi postado por Henrique Dallazuanna na lista R-STAT e ilusta este uso. c c Usando textConnection() Esta fun¸ao generaliza a anterior permitindo que se entre com c˜ mais de um campo por linha. Por exemplo.table(textConnection("trat resposta a 10 a 12 b 15 b 20 c 12 c 5 d 8 d 10"). aceitando inclusive ca e a endere¸os de URL’s (endere¸os da web) o que iremos mencionar me mais detalhes mais adiante."c". gravando o resultado em um data-frame().cbind(d. Para a encerrar a entrada de dados basta digitar <ENTER> duas vezes consecutivas. d <. Experimente definir e rodar o fun¸˜o a seguir. ave(d$'resposta'. co a ca . FUN = mean))) Uso da fun¸˜o readLines() Este fun¸˜o ´ particularmente util para ler entradas na forma ca ca e ´ de texto (strings).frame': 8 obs.read.2 Entrada via teclado Usando a fun¸˜o scan() Esta fun¸˜o lˆ dados diretamento do console. Esta e a e fun¸˜o pode tamb´m ser usada para ler dados de um arquivo ou conex˜o.7 ENTRADA DE DADOS NO R 56 7. media = with(d.readLines(n = 1) > texto Um poss´ ıvel uso ´ dentro que fun¸oes que solicitem que o usu´rio responda e/ou entre com e c˜ a informa¸˜es na medida que s˜o solicitadas.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 ´ mais ´gil que o anterior e ´ conveniente para digitar vetores longos."b". Ao terminar pressione a tecla ENTER e o texto ser´ armazanado a no objeto texto.

\n") a + return(invisible()) + } > rL. > y[y >= 30] <. suponha que o correto seja 25 no lugar de 35.2 Lendo dados de um arquivo texto Se os dados j´ est˜o dispon´ a a ıveis em formato eletrˆnico. voce pode importar os dados para o R sem a necessidade de digit´-los novamente. se seus dados est˜o dispon´ a ıveis em uma planilha eletrˆnica como EXCEL ou similar.frame()) abre uma planilha para digita¸˜o de dados que s˜o armazanaca a dos como data-frames.function() { + cat("digite o nome do time de futebo de sua preferencia (em letras min´sculas)\n u + time <.. o . Corrigindo e/ou alterando dados Suponha que tenhamos digitado algum dado errado que desejamos corrigir. Por exemplo. Pressionando a este bot˜o a planilha ser´ fechada e os dados ser˜o gravados no objeto indicado (no exemplo a a a acima no objeto a8). Se voce precisar abrir novamente planilha com os dados. Para corrigir basta selecionar a posi¸ao do dado atribuindo o valor correto c˜ > y[3] <.57 INTRODUCAO AO R ¸˜ > rL.readLines(n = 1) + if (time == "cruzeiro") + cat("BOA ESCOLHA!!!\n") + else cat("Ihh.3 Usando a fun¸˜o edit() ca O comando edit(data. Data-frames s˜o o an´logo no R a uma planilha.1. por exemplo quando h´ dados de mais de uma vari´vel para ´ a a serem digitados..frame()) ser´ aberta uma planilha na qual os dados devem ser digitados. 7. Por a e exemplo. para fazer corre¸oes e/ou inserir c˜ mais dados use o comando fix(). a A forma mais f´cil de fazer isto ´ usar dados em formato texto (arquivo do tipo ASCII). Esta forma de entrada de dados ´ adequada quando voce tem dados que n˜o podem ser e a armazenados em um unico vetor. Por exemplo. pode o ser utilizada para ler texto de um arquivo.ex() Nesse exemplo readLines() foi utilizada para efetuar via teclado mas a fun¸ao permite c˜ ainda entrada de dados por conex˜es com outros dispositivos de input. Quando terminar de entrar com a os dados note que no canto superior direito da planilha existe um bot˜o <QUIT>.ex <.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. No exemplo acima voce digitaria fix(a8). isto ´.edit(data.30 > y [1] 11 24 25 29 30 30 7. Consulte a documenta¸˜o da fun¸˜o para maiores ca ca detalhes e exemplos. t´ mal de escolha. a a ` Portanto digitando a8 <. j´ foram digitados em outro o e a programa.

read. os campos agora n˜o s˜o mais separados por tabula¸ao e sim por a a c˜ :.table() per´m com diferentes op¸oes default.txt". Portanto para importar corretamente este arquivo usamos ent˜o os argumentos sep e dec: a ex03 <. Clique no link para visualizar o arquivo. a o mesmo ocorre para read. Agora copie o arquivo para sua area de ´ trabalho (working directory do R). head=T. Para importar este arquivo usamos: ex01 <. dec=".delim() e read. Para que o R considere isto corretamente temos que inform´-lo disto com o a argumento head=T. Alm disto os caracteres decimais est˜o separados por v´ a ırgula.fwf() ´ conveniente para ler fixed width formats e read.7 ENTRADA DE DADOS NO R 58 voce pode na planilha escolher a op¸ao <SALVAR COMO> e gravar os dados em um arquivo c˜ em formato texto. No R usa-se scan() mencionada anteriormente. Exemplo 1: Como primeiro exemplo considere importar para o R os dados deste arquivo texto. co a e c˜ Em geral (mas n˜o sempre) dados em formato csv usado no Brasil s˜o lidos diretamente a a com read.read. Clique no link para visualizar o arquivo.table("gam01.table("exemplo02.table. Clique no link para visualizar o arquivo. Note que este arquivo difere do anterior em um aspecto: os nomes das vari´veis est˜o na a a primeira linha. Note que este arquivo difere do primeiro em outros aspectos: al´m dos nomes das vari´veis e a estarem na primeira linha. ˆ ˆ ˆ .fortran() ´ semelhante a anterior por´m usando o estilo Fortran de especifica¸˜o e ` e ca das colunas scan() ´ uma fun¸˜o internamente utilizadas por outras mas que tamb´m pode se usada e ca e diretamente pelo usu´rio.table() seja provavelmente a fun¸˜o mais utilizada existem outras que poca dem ser uteis e determinadas situa¸oes. ´ c˜ ˆ read. sendo que o R usa ponto pois ´ um programa escrito em l´ e ıngua inglesa.csv2(). sep=":". head=T) ex02 Exemplo 3: Como primeiro exemplo considere importar para o R os dados deste arquivo texto.read.csv2().read. read. Agora copie o arquivo para sua area de ´ trabalho (working directory do R). Estas fun¸˜es s˜o praticamente iguais a read.txt") ex01 Exemplo 2: Como primeiro exemplo considere importar para o R os dados deste arquivo texto.csv".table("dadosfic.") ex03 Para maiores informa¸oes consulte a documenta¸ao desta fun¸˜o com ?read. ou ent˜o a fun¸˜o mais flex´ a ca ıvel read.csv(). Agora copie o arquivo para sua area de ´ trabalho (working directory do R).delim2(). c˜ c˜ ca Embora read.table() para ler os dados de um arquivo texto e armazenar no formato de uma dataframe. Portanto para importar este arquivo usamos: ex02 <.

REC do Epi-Info read. SAS. o ca que transfere os dados para a ´rea de transferˆncia.br/~paulojus/dados/gam01. sem a necessidade de copiar primeiro os dados para algum local no computador do usu´rio.”) 7. > require(foreign) A seguir listamos (mas n˜o todas!) algumas destas fun¸oes a c˜ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ read. Stata.table() a e co e outras podem usades apra ler os dados diretamente da area de transferˆncia passando-se a ´ e op¸ao "clipboard" ao primeiro argumento. Systat e Octave.leg. p´gina web. Por exemplo os dados do Exemplo 1 poderiam ser lidos diretamente com o comando a seguir. planilha. header=TRUE. S-PLUS. Muitas e e o fun¸˜es que permitem a importa¸˜o de dados de outros programas s˜o implementadas no pacote co ca a foreign. Isto em geral ıvel a ´ mais eficiente e requer menos mem´ria do que converter para formato texto. Tipicamente isto ´ feito com o mecanismo de recorta-e-cola. Minitab. marca-se e e os dados desejados em algum aplicativo (editor.3 Lendo dados atrav´s da ´rea de transferˆncia e a e Um mecanismos comum para copiar dados de um programa psara o outro ´ usando a ´rea de e a transferˆncia.: a > read.4 Importando dados de outros programas ´ E poss´ ler dados diretamente de outros formatos que n˜o seja texto (ASCII).dta() para dados do STATA read.S() para arquivos do S-PLUS restore. Al´m disto ´ comum surgir a necessidade de importar dados de planilhas eletrˆnicas.dbf() para arquivos DBASE read. SPSS. os seguintes dados: c˜ ID 23 12 23 Grupo A B A Gasto 25.ufpr. Fun¸˜es como scan(). ou seja-se.mtp() para arquivos ”Minitab Portable Worksheet” read.data() para ”dumps”do S-PLUS read.59 INTRODUCAO AO R ¸˜ Exemplo 4: As fun¸˜es permitem ler ainda dados diretamente dispon´ co ıveis na web.4 12.8 Ano 11 09 07 podem ser marcados e copiados para area de transferˆncia e lidos diretamente com: eval=F ´ e read.txt") 7.epiinfo() para arquivos . read.octave() para dados do OCTAVE (um clone do MATLAB) Para dados do SAS h´ ao menos duas alternativas: a .spss() para dados do SPSS read.3 19. etc).systat() read. usa-se o mecanismo a de COPIAR (op¸˜o no menu do programa que muitas vezes corresponde o teclar CTRL-C). H´ fun¸oes para e o a c˜ importar dados diretamente de EpiInfo.table("http://www.table(”clipboard”. dec=”. Por exemplo.

Ao carregar os dados ´ criado um e objeto mtcars no seu ”workspace”.90 2.xport() para ler do formato TRANSPORT do SAS e read. A segunda lista os conjuntos de dados de um pacote espec´ ıfico (no exemplo do pacote nlme.4 3. e Para mais detalhes consulte a documenta¸ao de cada fun¸˜o e/ou o manual R Data Imc˜ ca port/Export.2 5. > data() > data(package = "nlme") .ssd ou .6 5.6 y 6.0 6 160 110 3.320 18.08 3.1 6. 7. J´ o conjunto topo est´ no pacote MASS que n˜o ´ automaticamente carregado ao iniciar a a a e o R e portanto deve ser carregado com require() para depois podermos acessar os dados.61 1 1 4 1 Hornet 4 Drive 21.85 2. A fun¸ao data() pode ainda ser usada para listar os conjutos de dados dispon´ c˜ ıveis.xport() para ler os dados no R.2 z 870 793 755 690 800 800 O conjunto mtcars est´ no pacote datasets que ´ carregado automaticamente quando inicia e amos o R.1 6.5 Carregando dados j´ dispon´ a ıveis no R Para carregar conjuntos de dados que s˜o j´ disponibilizados com o R use o comando data(). se o SAS estiver dispon´ no seu sistema e depois usa ıvel internamente read.7 1.90 2.4 6 258 110 3.15 3.sas7bdat) no formato TRANSPORT.3 1. – O pacote Hmisc disponibiliza sas. > data(mtcars) > head(mtcars) mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.46 0 1 4 4 Mazda RX4 Wag 21.22 1 0 3 1 > find("topo") character(0) > require(MASS) > data(topo) > head(topo) 1 2 3 4 5 6 x 0.2 6.76 3. a a Por exemplo.1 6 225 105 2.215 19. A primeira chamada a seguir lista os conjuntos de dados dos pacotes carregados. abaixo mostramos como carregar o conjunto mtcars que est´ no pacote datasets a e depois como localizar e carregar o conjunto de dados topo.620 16.02 0 1 4 4 Datsun 710 22.875 17.2 6.44 1 0 3 1 Hornet Sportabout 18.get() que tamb´m requer o SAS no sistema.ssd() pode escrever dados permanentes do SAS (.7 8 360 175 3.02 0 0 3 2 Valiant 18.440 17. portanto os dados est˜o prontamente dispon´ a ıveis.8 4 108 93 3.7 ENTRADA DE DADOS NO R 60 – O pacote foreign disponibiliza read.460 20.0 6 160 110 3.4 2.

a dentre outros.61 INTRODUCAO AO R ¸˜ 7. MySQL.csv2(pipe("xls2csv planilha.table(). PostgreSQL. Nestes caso. Microsoft Access.xls do MSExcel. > > > > > require(RODBC) xlscon <. O R possuiu ferramentas implementadas em pacotes para acesso a estes sistemas gerenciadores.xls")) ˆ O pacote gdata possui a fun¸˜o read. No momento que este material est´ sendo escrito esta pacote est´ implementado a a apenas para o sistema operacional Windows.csv(pipe("xls2csv planilha.read. ca a ıvel a Suponha que voce possua um arquivo de uma planilha MS-Excel j´ no seu diret´rio (pasta) a o de trabalho do R chamado planilha. pode ser necess´rio ou conveniente ler os dados diretamente destes formato. dentre outros. embora seja poss´ exportar a partir destes aplicativos ıvel os dados para o formato texto para depois serem lidos no R.xls")) > dados <. c˜ ˆ O pacote xlsReadWrite implementa tal funcionalidade para arquivos do tipo . a . Um outro pacote capaz de ler dados diretamente de planilhas ´ o RODBC. Estruturas de dados mais complexas s˜o tipicamente armazenadas em acronymDBMS’s a (database management system) ou acronymRDBMS’s (ralational database management system).6 Acesso a planilhas e bancos de dados relacionais ´ E comum que dados estajam armazenados em planilhas eletrˆnicas tais como MS-Excel ou o OpenOffice Spreadsheet. Para mais detalhes consulte o manual R Data Import/Export e a documenta¸ao dos pacotes c˜ que implemental tal funcionalidade. sendo esta ultima recomendada para dados com v´rgula como caractere ´ ı separados de decimais. ROracle. Vamos colocar a aqui algumas op¸oes para importar dados do MS-Excel para o R. DBI. RPostgreSQL. RSQLite. pode-se usar a fun¸˜o xls2cvs combinada com read. RMySQL.csv() o ca ou read. Para importar os dados desta parte da planilha pode-se usar os comandos a seguir. Aguns exemplos s˜o Oracle. No ambie ente windows a fun¸˜o odbcConnectExcel() est´ dispon´ para estabelecer a conex˜o. O Perl ´ tipicamente instalado em sistemas Linux/Unix e tamb´m e e livremente dispon´ para outros sistemas operacionais. possivelmente com read.xls.xls() que encapsula op¸oes mencionadas anteriorca c˜ mente.read. que que esta planilha tenha os dados na aba Planilha1. ıvel > dados <.sqlFetch(xlscon. Microsoft SQL server.csv2().odbcConnectExcel("planilha. "Planilha1") odbcClose(xlsConnect) head(dados1) ˆ ˆ Em sistemas onde a linguagem Perl est´ dispon´ e a estrutura de planilha ´ simples a ıvel e sem macros ou f´rmulas. RNetCDF. Alguns deles dispon´ ıveis por ocasi˜o da reda¸˜o deste texto a ca s˜o: RODBC.xls") dados1 <.

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

66 28 0 solteiro 1o Grau 6.63 INTRODUCAO AO R ¸˜ Funcion´rio a 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 Tabela 2: Dados de Bussab & Morettin Est.75 33 7 casado 2o Grau 2 19.13 30 5 solteiro 2o Grau 9.71 40 6 casado 2o Grau 2 15.74 37 5 casado 1o Grau 3 8.85 46 7 casado 2o Grau 0 14.12 33 6 solteiro 1o Grau 8.22 31 5 casado 2o Grau 1 16.00 26 3 casado 1o Grau 1 4.26 43 7 solteiro Superior 18.59 34 2 solteiro 1o Grau 12.69 29 8 casado 2o Grau 5 14.39 43 4 casado 2o Grau 1 7. Civil Instru¸ao No Filhos Sal´rio Ano Mˆs c˜ a e solteiro 1o Grau 4.60 35 0 solteiro 1o Grau 13.56 32 10 casado 1o Grau 2 5.95 44 2 casado 2o Grau 0 9.26 40 7 casado 1o Grau 0 6.53 25 8 solteiro 2o Grau 10.00 41 0 casado Superior 0 12.79 26 1 casado 2o Grau 2 13.35 38 8 casado 2o Grau 1 9.44 23 6 casado 2o Grau 2 8.61 36 4 casado Superior 3 17.23 32 5 casado 2o Grau 2 13.99 35 10 solteiro Superior 16.06 30 9 solteiro 2o Grau 11.59 34 10 solteiro 2o Grau 7.40 48 11 casado Superior 3 23.73 20 10 solteiro 1o Grau 6.46 27 11 solteiro 2o Grau 8.25 36 5 solteiro 2o Grau 5.80 39 7 solteiro Superior 10.86 41 0 solteiro 1o Grau 7.30 42 2 Regi˜o a 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 .76 37 4 casado 2o Grau 1 11.77 31 7 casado 1o Grau 2 9.

26 43 7 2 1 3 NA 18.56 32 10 2 2 1 2 5.00 41 0 3 2 3 0 12.46 27 11 2 1 2 NA 8.59 34 2 2 1 1 NA 12.86 41 0 1 1 1 NA 7.59 34 10 2 1 2 NA 7.99 35 10 2 1 3 NA 16.85 46 7 3 2 2 0 14.60 35 0 3 1 1 NA 13.39 43 4 2 2 2 1 7.80 39 7 3 1 3 NA 10.95 44 2 3 2 2 0 9.76 37 4 1 2 2 1 11.23 32 5 1 2 2 2 13.53 25 8 1 1 2 NA 10.66 28 0 1 1 1 NA 6.40 48 11 2 2 3 3 23.13 30 5 1 1 2 NA 9.25 36 5 2 1 2 NA 5.´ 8 ANALISE DESCRITIVA 64 Tabela 3: Dados digitados usando c´digos para vari´veis o a civil instrucao filhos salario ano mes regiao 1 1 NA 4.12 33 6 1 1 1 NA 8.06 30 9 3 1 2 NA 11.79 26 1 3 2 2 2 13.35 38 8 3 2 2 1 9.44 23 6 3 2 2 2 8.26 40 7 3 2 1 0 6.00 26 3 1 2 1 1 4.73 20 10 3 1 1 NA 6.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 .61 36 4 1 2 3 3 17.75 33 7 2 2 2 2 19.69 29 8 1 2 2 5 14.77 31 7 2 2 1 2 9.71 40 6 1 2 2 2 15.22 31 5 3 2 2 1 16.74 37 5 3 2 1 3 8.

+ levels = 1:2) > milsa$instrucao <. > head(milsa) funcionario civil instrucao filhos salario ano mes regiao 1 1 1 1 NA 4. A seguir redefinimos a vari´vel civil com os r´tulos (labels) solteiro a o e casado associados aos n´veis (levels) 1 e 2.33333 [25] 32. 1.83333 41.41667 41.83333 [9] 34. 3)) > head(milsa) funcionario civil instrucao filhos salario ano mes regiao 1 1 solteiro 1oGrau NA 4.75000 40.transform(milsa.91667 42.41667 35.16667 + mes/12) 40. 1. "Superior").50000 28.73 20 10 3 5 5 1 1 NA 6.33333 38.56 32 10 capital 3 3 casado 1oGrau 2 5.25 36 5 capital 4 4 solteiro 2oGrau NA 5. "interior".58333 48.08333 36. lev = 1:3. Para gerar a vari´vel idade em anos fazemos: a > milsa <.00000 46.16667 34. label = c("1oGrau". lev = c(2. "outro"). label = c("solteiro".factor(milsa$regiao.26 40 7 outro 6 6 casado 1oGrau 0 6.26 40 7 3 6 6 2 1 0 6.58333 25. + "2oGrau".58333 33. Inicialmente inspecionamos as primeiras linhas a do conjunto de dados. "casado").25 36 5 2 4 4 1 2 NA 5. levels = 1:2). label = c("solteiro".58333 37.33333 Uma outra forma de se obter o mesmo resultado seria: .00000 44.58333 29. lev = c(2.65 INTRODUCAO AO R ¸˜ nossas vari´veis conforme os comandos a seguir. Na vari´vel regiao codie a a ficamos assim: 2=capital.factor(milsa$instrucao. + 3))) Vamos ainda definir uma nova vari´vel unica idade a partir das vari´veis ano e mes que a ´ a foram digitadas.41667 30.41667 20. 1=interior.83333 36.66667 [33] 43.50000 27.00000 30. 3=outro.transform(milsa.00 26 3 interior 2 2 casado 1oGrau 1 4. ord = T). + "casado"). instrucao = factor(instrucao. label = c("1oGrau".25000 32. regiao = factor(regiao.66 28 0 1 > milsa$civil <. civil = factor(civil.66667 26.66 28 0 interior Em vers˜es mais recentes do R foi introduzida a fun¸˜o transform() que pode ser usada o ca alternativamente aos comandos mostrados acima para modificar ou gerar novas vari´veis. Por a exemplo.41667 43.00 26 3 1 2 2 2 1 1 4. lev = 1:3.56 32 10 2 3 3 2 1 2 5. + label = c("capital". os comandos acima poderiam ser substitu´ ıdos por: > milsa <. "interior".83333 23. idade = ano > milsa$idade [1] 26.66667 37.factor(milsa$civil.50000 33.16667 35.73 20 10 outro 5 5 solteiro 1oGrau NA 6. Para vari´vel instru¸ao usamos o argumento ı a c adicional ordered = TRUE para indicar que ´ uma vari´vel ordinal.58333 39.91667 [17] 31. label = c("capital". Ao final inspecionamos as primeiras linhas do conjunto de dados digitando usando head(). "Superior"). + "outro"). ord = T) > milsa$regiao <.00000 31. + "2oGrau".

Inspecione os comandos mostrados a seguir a e os resultados por eleas produzidos. para cada uma das vari´veis individualmente: a a ˆ classificar a vari´vel quanto a seu tipo: qualitativa (nominal ou ordinal) ou quantitativa a (discreta ou cont´ ınua) obter tabela.milsa$ano + milsa$mes/12 Agora que os dados est˜o prontos podemos come¸ar a an´lise descritiva. gr´ficos e medidas com o R. usamos names() para ver os e nomes das vari´veis.data. e dim() para ver o n´mero de linhas (36 indiv´ a u ıduos) e colunas (9 vari´veis). a > 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 . e Vamos primeiro listar os dados e checar se estao na forma de um fator. 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. 8.´ 8 ANALISE DESCRITIVA 66 > milsa$idade <. A seguir mostramos a c a como fazer an´lises descritivas uni e bi-variadas. Inicialmente verificamos que o objeto milsa ´ um data-frame. obter resultados para a as demais.1 An´lise Univariada a A an´lise univariada consiste basicamente em. (ii) um gr´fico de e a setores. c˜ > attach(milsa) NOTA: este comando deve ser digitado para que os comandos mostrados a seguir tenham efeito. que ´ adequada para e vari´veis deste tipo. Desta forma a a e podemos obter: (i) uma tabela de frequˆncias (absolutas e/ou relativas).2. Para isto vamos a selecionar uma vari´vel de cada tipo para que o leitor possa. A seguir vamos mostrar como obter tabelas.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ˆncia vamos fazer diversas an´lises com estes dados usaremos o command e a attach() para anexar o objeto ao caminho de procura para simplificar a digita¸ao. i. por analogia. Vari´vel Qualitativa Nominal A vari´vel civil ´ uma qualitativa nominal. a > is.e. o valor que ocorre com maior frequˆncia. gr´fico e/ou medidas que resumam a vari´vel a a ˆ A partir destes resultados pode-se montar um resumo geral dos dados. (iii) a ”moda”.

mo <.factor(civil) [1] TRUE A seguir obtemos frequˆncias absolutas e relativas (note duas formas fiferentes de obter as e frequˆncias relativas.max(civil. a > 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 > is.4444444 0.tb civil solteiro casado 16 20 > 100 * table(civil)/length(civil) civil solteiro casado 44.cube") Finalmente encontramos a moda para esta vari´vel cujo valor optamos por armazenar no a objeto civil. Se este for o caso use o comando mostrado a seguir ANTES de fazer o gr´fico. > civil.factor(instrucao) 1oGrau 2oGrau 2oGrau 2oGrau 1oGrau 1oGrau 2oGrau 2oGrau 1oGrau 2oGrau 1oGrau Superior 1oGrau 2oGrau Superior 2oGrau . a > X11(colortype = "pseudo.5555556 O gr´fico de setores ´ adequado para representar esta vari´vel conforme mostrado na a e a Figura 8. > pie(table(civil)) NOTA: Em computadores antigos e de baixa resolu¸ao gr´fica (como por exemplo em c˜ a alguns computadores da Sala A do LABEST/UFPR) o gr´fico pode n˜o aparecer de forma a a adequada devido limita¸ao de mem´ria da placa de v´ c˜ o ıdeo. Note ainda que optamos por armazenar as frequˆncias absolutas em um e e objeto que chamamos de civil.table(civil) > civil.tb <.44444 55.tb)] > civil.table(civil.1.67 INTRODUCAO AO R ¸˜ > is.tb.mo.tb) civil solteiro casado 0.tb)[which.mo [1] "casado" Vari´vel Qualitativa Ordinal Para exemplificar como obter an´lises para uma vari´vel a a a qualitativa ordinal vamos selecionar a vari´vel instrucao.55556 > prop. > civil.names(civil.2.

e a a > instrucao. Note que o comando median() n˜o funciona a com vari´veis n˜o num´ricas e por isto usamos o comando seguinte.1666667 O gr´fico de setores n˜o ´ adequado para este tipo de vari´vel por n˜o expressar a ordem a a e a a dos poss´ ıveis valores.table(instrucao) > instrucao. a a [1] TRUE As tabelas de frequˆncias s˜o obtidas de forma semelhante ` mostrada anteriormente.tb instrucao 1oGrau 12 2oGrau Superior 18 6 > prop.tb) Para uma vari´vel ordinal.1.2.5000000 0. a a e . al´m da moda podemos tamb´m calcular outras medidas.tb) instrucao 1oGrau 2oGrau Superior 0.tb <.´ 8 ANALISE DESCRITIVA 68 solteiro casado Figura 4: Gr´fico de setores para vari´vel civil. Usamos ent˜o um gr´fico de barras conforma mostrado na Figura 8.3333333 0.table(instrucao. a a > barplot(instrucao. tais a e e como a mediana conforme exemplificado a seguir.

numeric(instrucao)) [1] 2 > levels(milsa$instrucao)[median(as. e a .max(instrucao.mo <.tb)[which.69 INTRODUCAO AO R ¸˜ 0 5 10 15 1oGrau 2oGrau Superior Figura 5: Gr´fico de barras para vari´vel instrucao. a e a > filhos [1] NA 1 2 NA NA 0 NA NA 1 NA [26] 2 NA 0 5 2 NA 1 3 NA 2 > is. a a > instrucao.factor(filhos) [1] FALSE > is.numeric(milsa$instrucao))] [1] "2oGrau" Vari´vel quantitativa discreta Vamos agora usar a vari´vel filhos (n´mero de filhos) a a u para ilustrar algumas an´lises que podem ser feitas com uma quantitativa discreta. Note que a esta deve ser uma vari´vel num´rica.names(instrucao.tb)] > instrucao.mo [1] "2oGrau" > median(as.numeric(filhos) [1] TRUE 2 NA NA 3 3 0 NA 1 2 NA NA 1 NA NA 0 2 Frequˆncias absolutas e relativas s˜o obtidas como anteriormente. e n˜o um fator.

1.tbr <.tb) 0 0 1 2 filhos.2.table(filhos. a e a Outra possibilidade seria fazer gr´ficos de frequˆncias relativas e de prequˆncias acumuladas a e e conforme mostrado na Figura 8.fac <.tb) > filhos.cumsum(filhos.prop.1 o obtido com os comandos a seguir.table(filhos) > filhos.05 O gr´fico adequado para frequˆncias absolutas de uma vari´vel discreta ´ mostrado na a e a e Figura 8.20 0. > plot(filhos.fac plot(filhos.tbr filhos 0 1 2 3 5 0.tbr) filhos.fac.25 0.2.35 0.tb filhos 0 1 2 3 5 4 5 7 3 1 > filhos.tb 3 4 5 6 7 1 2 filhos 3 5 Figura 6: Gr´fico de frequˆncias absolutas para vari´vel filhos. > > > > plot(filhos.15 0.tbr) filhos. type = "S") .´ 8 ANALISE DESCRITIVA 70 > filhos.tb <.

rm=T ´ necess´rio porque n˜o h´ informa¸ao sobre e e a a a c˜ n´mero de filhos para alguns indiv´ u ıduos.mean(filhos.me [1] 1.me [1] 1.10 0.65 > filhos. O argumento trim=0.rm = T) Passando agora para medidas de dispers˜o vejamos como obter m´ximo e m´ a a ınimo da´ a ı amplitude.6 0.20 0. Depois obtemos os quartis e da´ a a c˜ ı a amplitude interquart´ ılica.5625 > filhos.rm = T) [1] 0 5 . mediana.me > filhos.tb)[which.4 filhos. A seguir mostramos como obter algumas medidas de posi¸ao: moda.rm = T) <.1. Note que o argumento na. m´ ınimo e m´ximo.mean(filhos.tb)] <.mo [1] "2" > filhos. a > filhos.names(filhos.mo > filhos. na.md [1] 2 > filhos.max(filhos. Ao final mostramos como obter os quartis. na.2 1 0.tbr 0. na.me > filhos.qt <. na. coeficiente de varia¸ao. Sendo a vari´vel num´rica h´ uma maior diversidade de medidas estat´ a e a ısticas que podem ser calculadas. variˆncia e desvio padr˜o. > range(filhos. na. trim = 0.quantile(filhos.fac 0.8 1.rm = T) <.30 filhos.0 2 3 Index 4 5 Figura 7: Gr´fico de frequˆncias relativas (esquerda) e frequˆncias acumuladas para vari´vel a e e a filhos.md > filhos.median(filhos.00 0 1 2 filhos 3 5 0.1 indica uma m´dia aparada e onde foram retirados 10% dos menores e 10% dos maiores dados.rm = T) <.71 INTRODUCAO AO R ¸˜ 0. m´dia e c˜ e m´dia aparada.

39 7. 5.53 10. na.25 5. 1st Qu.95 9. Nos comandos mostrados a seguir verificamos inicialmente os valores m´ximo a e m´ ınimo dos dados.40 23.sd(filhos.79 [25] 13.qt[2] > filhos.12 8.00 NA's 16. e u usamos cut() para agrupar os dados em classes e finalmente obtemos as frequˆncias absolotas e e relativas.76 11.00 > fivenum(filhos) [1] 0 1 2 2 5 Mean 3rd Qu.00 1.60 13. > summary(filhos) Min.44 8.46 [13] 8.00 Max.filhos.74 8.ai <.cv <.00 2.22 16. 1.dp/filhos. Ina a a specione os resultados dos comandos abaixo. na.23 13.268028 > filhos. notamos que h´ comandos para se obter v´rias medidas de uma s´ vez.00 12.me > filhos. > range(salario) [1] 4.´ 8 ANALISE DESCRITIVA 72 > filhos.85 14.77 9.06 11.A [1] 5 > var(filhos.73 6.ai 75% 1 Finalmente.numeric(salario) [1] TRUE Para se fazer uma tabela de frequˆncias de uma cont´ e ınua ´ preciso primeiro agrupar os e dados em classes.71 15.qt <.rm = T) > filhos.diff(range(filhos.86 7. Median 0.56 5.59 7.66 6.75 19.30 > is.35 9. na.61 17. na.26 6.00 Vari´vel quantitativa Cont´ a ınua Para concluir os exemplos para an´lise univariada vamos a considerar a vari´vel quantitativa cont´ a ınua salario.filhos.rm = T) > filhos.15379 > filhos.0 23.rm = T)) > filhos.3 .quantile(filhos.59 12.A <.13 9.100 * filhos.factor(salario) [1] FALSE > is.qt[4] .69 14.cv [1] 81.80 10.26 18.99 16.dp [1] 1. a > salario [1] 4.00 4.dp <.607895 > filhos. depois usamos o crit´rio de Sturges para definir o n´mero de classes.rm = T) [1] 1.65 2. Come¸amos mostrando os valores da c vari´vel e verificando o seu tipo no R.

1.17.default) function (x. dig.22222222 0. E sempre a e a bom lembrar que h´ v´rias outras op¸oes fornecidas pelos argumentos das fun¸˜es. Por exemplo.5.1. e a prob=TRUE faz com que o gr´fico exiba as frequˆncias relaticas.tb <..21.8] (17..05555556 (20.6. o que ´ o comportamento padr˜o de hist().2. .6] 0. seq(3. u Al´m destas h´ ainda v´rias outras op¸oes implementadas pelos argumentos da fun¸˜o conforme e a a c˜ ca descrito em help(hist). .16666667 0. caixas ”acinturadas”(notched boxplot) entre outras.21] (9.23.5.12.1] (12.) NULL > args(cut.. > 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 . ordered_result = FALSE.36.36] (6.lowest = FALSE. right = TRUE.6. breaks. um nome de crit´rio (default=”Sturges”).02777778 Na sequˆncia vamos mostrar dois poss´ e ıveis gr´ficos para vari´veis cont´ a a ınuas: histograma e box-plot conforme Figura 8.Sturges(salario) [1] 7 > args(cut) function (x. n´mero de classes ou mesmo uma fun¸ao a e u c˜ para definir as classes.11111111 0.5] 0. ou ainda nclass pode receber um escalar definindo o n´mero de classes.8. Por default a fun¸ao calcula a e c˜ automaticamente o n´mero de classes e os valores limites de cada classe e isto pode ser alterado u com o argumento breaks que pode receber um vetor definindo os limites das classes definidos pelo usu´rio.14.table(salario. l = 8))) > prop. main = "") > boxplot(salario) Uma outra representa¸ao gr´fica para vari´veis num´ricas ´ o diagrama ramo-e-folhas que c˜ a a e e pode ser obtido conforme mostrado a seguir.9] (14.27777778 0. Da mesma forma argumentos permitem varia¸oes em boxplot tais c˜ como caixas com tamanho proporcional aos tamanhos dos grupos.5.9.tb) (3.9. > hist(salario. a a c˜ co em hist() acrescentando labels=TRUE as frequˆncias s˜o mostradas em coma de cada barra.73 INTRODUCAO AO R ¸˜ > nclass.table(cut(salario.) NULL > salario.. Neste comando fazemos main= para evitar que a fun¸ao coloque c˜ ´ automaticamente o t´ ıtulo no gr´fico.13888889 0. labels = NULL. include. 23.lab = 3.20.

587458 > salario. na. > salario.12222 > range(salario.04477 > salario.rm = T) > salario.cv [1] 41.0 23.165 > salario.dp [1] 4.A [1] 19.rm = T) > salario.qt <.median(salario.qt[4] .ai 75% 6. na. na.salario.me > salario.dp/salario.quantile(salario.ai <. na.salario. a Finalmente medidas s obtidas da mesma forma que para vari´veis discretas.rm = T) > salario.A <. na.100 * salario.qt[2] > salario.rm = T) [1] 21.cv <. na.3 > salario.dp <.mean(salario.me [1] 11.24587 > salario.me <.sd(salario.rm = T) [1] 4.rm = T)) > salario.3 > var(salario. Veja alguns a exemplos a seguir.5075 5 10 15 20 .diff(range(salario.md [1] 10.rm = T) > salario. na.md <.´ 8 ANALISE DESCRITIVA 74 8 Frequency 4 6 2 0 5 10 15 salario 20 Figura 8: Histograma (esquerda) e boxplot (direita) para a vari´vel salario.

160 11. Vamos considerar trˆs a e possibilidades: ˆ ˆ ˆ qualitativa vs qualitativa qualitativa vs quantitativa quantitativa vs qualitativa Salienta-se ainda que: ˆ as an´lise mostradas a seguir n˜o esgotam as possibilidades de an´lises envolvendo duas a a a vari´veis e devem ser vistas apenas como uma sugest˜o inicial a a rela¸oes entre duas vari´veis devem ser examinadas com cautela pois podem ser masc˜ a caradas por uma ou mais vari´veis adicionais n˜o considerada na an´lise.2. Median Mean 3rd Qu. .75 INTRODUCAO AO R ¸˜ > summary(salario) Min. Iniciamente obtemos com table() a tabela de frequˆncias absolutas.552 10. An´lises com vari´veis de confundimento n˜o a a a a ser˜o discutidas neste ponto.515 10.gi. a ˆ Qualitativa vs Qualitativa Vamos considerar as vari´veis civil (estado civil) e instrucao a (grau de instru¸˜o). O tipo de resumo vai depender dos tipos das vari´veis envolvidas. tabelas e/ou medidas estat´ co a ıstica.000 7. 4. A e a forma mais adequada de apresenta¸ao vai depender dos objetivos da an´lise e da interpreta¸˜o c˜ a ca desejada para os dados.165 14.300 8.2 An´lise Bivariada a Na an´lise bivariada procuramos identificar relacc˜es entre duas vari´veis.270 23. Estas s˜o a a a a chamadas vari´veis de confundimento.gi. instrucao) > civ.table() e tais frequˆncias podem e a e ser globais. A tabela envolvendo duas vari´veis ´ chamada tabela de cruzamento ou ca a e tabela de contingˆncia e pode ser apresentada de v´rias formas.000 7. 1st Qu.gi. por linha (margin=1) ou por coluna (margin=2). conforme discutido a seguir.tb) instrucao civil 1oGrau 2oGrau Superior Sum solteiro 7 6 3 16 casado 5 12 3 20 Sum 12 18 6 36 Tabelas de frequˆncias relativas s˜o obtidas com prop.120 14. 23. > civ.tb <.tb instrucao civil 1oGrau 2oGrau Superior solteiro 7 6 3 casado 5 12 3 > addmargins(civ.300 Max.060 > fivenum(salario) [1] 4.table(civil. Assim como na a o a univariada estas rela¸˜es podem ser resumidas por gr´ficos. e A tabela extendida incluindo os totais marginais pode ser obtida com addmargins().

gi.gi.5833333 0.19444444 0.tb) instrucao civil 1oGrau 2oGrau Superior solteiro 0.table(civ. ei onde oi e ei s˜o.tb.5000000 casado 0.table() permite o obten¸ao a c˜ de gr´ficos com frequˆncias relativas.4375 0.1500 > prop.tb) Number of cases in table: 36 Number of factors: 2 Test for independence of all factors: Chisq = 1. margin = 2) instrucao civil 1oGrau 2oGrau Superior solteiro 0.cases" "statistic" "parameter" "approx.tb)).tb.table(civ.gi. C1 = .gi.tb. legend = T) Medidas de associa¸ao entre duas vari´veis qualitativas incluem o Chi-quadrado dado por: c˜ a k χ2 = i=1 (oi − ei )2 .1875 casado 0.gi.3843 Chi-squared approximation may be incorrect > names(summary(civ.4166667 0.table(civ. u Os comandos a seguir mostram como obter todas estas medidas. p-value = 0. Outras medidas derivadas desta s˜o o o coeficiente de contingˆncia a a e C e o coeficiente de contingˆncia modificado C1 dados por: e C= χ2 C . O uso de prop.gi. a e > > > > barplot(civ. > summary(civ.08333333 casado 0.table(civ.3750 0. beside = T.2500 0. df = 2.gi. legend = T) barplot(civ.tb)) [1] "n.13888889 0.2.vars" "n. 2+n χ [(t − 1)/t]2 onde n ´ o n´mero de observa¸oes e t ´ o m´ e u c˜ e ınimo entre o n´mero de linas e colunas da tabela.33333333 0.6666667 0.tb.16666667 0. respectivamente.3333333 0.tb).value" [7] "call" .08333333 > prop.9125.5000000 Na Figura 8.ok" "p.´ 8 ANALISE DESCRITIVA 76 > prop.gi.6000 0. legend = T) barplot(t(civ.2 mostramos quatro diferentes gr´ficos de barras que podem ser usados para a representar o cruzamento das vari´veis. legend = T) barplot(t(prop. frequˆncias observadas e esperadas nas k posi¸oes da tabela a e c˜ de cruzamento das vari´veis.gi. beside = T. A transposi¸˜o da tabela com t() permite alterar a a ca vari´vel que define os grupos no eixo horizontal. margin = 1) instrucao civil 1oGrau 2oGrau Superior solteiro 0.

10 0.05 2 0.15 0.25 solteiro casado Figura 9: Quatro tipos de gr´ficos de barras ilustrando o resultado do cruzamento das vari´veis a a civil e instrucao.20 0.30 1oGrau 2oGrau Superior 8 6 4 1oGrau 2oGrau Superior 0.77 INTRODUCAO AO R ¸˜ 15 casado solteiro 15 20 Superior 2oGrau 1oGrau 10 5 0 1oGrau 12 2oGrau Superior 0 5 10 solteiro casado 10 solteiro casado 0.00 0 0. .

0000 7. e a e a o Por exemplo vamos criar uma nova vari´vel para agrupar 2 Grau e Superior usando ifelse() a e depois podemos refazer as an´lises do cruzamento com esta nova vari´vel a a > instrucao1 <.sum(civ.9125 > n <.summary(civ. incluve a o menor (m´ ınimo) seja inclu´ na primeira classe.0600 23. No exemplo a seguir vamos agrupar a vari´vel sal´rio em 4 classes definidas pelos a a quartis usando cut().5525 10. > quantile(salario) 0% 25% 50% 75% 100% 4.tb)) > C1 <.lowest=TRUE para garantir que todos os dados. label = c("1oGrau". "2o+Superior"). instrucao1)) Number of cases in table: 36 Number of factors: 2 Test for independence of all factors: Chisq = 1.min(dim(civ. p-value = 0. Para se obter uma tabela de frequˆncias ´ necess´rio agrupar a vari´vel quantitativa em e e a a classes. 2) > instrucao1 <. df = 1.4062.factor(instrucao1. ord = T) > table(instrucao1) instrucao1 1oGrau 2o+Superior 12 24 > table(civil.sqrt(chisq/(chisq + n)) > C [1] 0.tb) > n [1] 36 > C <.tb)$stat > chisq [1] 1.ifelse(instrucao == "1oGrau".gi. 1. + lev = 1:2.gi. instrucao1) instrucao1 civil 1oGrau 2o+Superior solteiro 7 9 casado 5 15 > summary(table(civil. Ap´s agrupar esta vari´vel obtemos a(s) ıdo o a tabela(s) de cruzamento como mostrado no caso anterior.2245999 > t <.1650 14.´ 8 ANALISE DESCRITIVA 78 > chisq <. Note que as classes s˜o definidas por intervalos abertos a esquerda e a ` ent˜o usamos o argumento include.3000 .8983995 Muitas vezes ´ necess´rio reagrupar categorias porque algumas frequˆncias s˜o muito baixas.C/((t .gi.2357 Qualitativa vs Quantitativa Para exemplificar este caso vamos considerar as vari´veis a instrucao e salario.1)/t)^2 > C1 [1] 0.

sal.6666667 No gr´fico vamos considerar que neste exemplo a instru¸˜o deve ser a vari´vel explicativa a ca a e portanto colocada no eixo-X e o sal´rio ´ a vari´vel resposta e portanto no eixo-Y.475000 > tapply(salario. quantile(salario).3333333 0.5300 13.3] 1oGrau 0.4000 $Superior 0% 25% 50% 75% 100% 10.1.715144 4.5833333 0.836667 11.cut(salario.502438 > tapply(salario.1111111 0.2] (10. por´m agora infromando este resumo para cada n´ do fator qualitativo. quantile) $`1oGrau` 0% 25% 50% 75% 100% 4.6475 16. com salario instrucao indicando que a ca c˜ vari´vel salario ´ explicada (∼) pela vari´vel instrucao.table(instrucao.sal. o sal´rio (e n˜o o e c˜ a a contr´rio!).0000000 2oGrau 0. consideramos que a instru¸ao deve explicar.4175 19.1666667 0. ainda que parcialmente.7.23. desvio padr˜o e o resumo de cinco n´meros e a u do sal´rio para cada n´ de instru¸˜o. e neste caso a a os gr´ficos seriam como no caso anterior com duas vari´veis qualitativas.1] (14.0075 7.2777778 Superior 0.3775 23.tb. instrucao. A seguir e ıvel mostramos alguns exemplos de como obter a m´dia. Isto a e a ´. a a Para as medidas o usual ´ obter um resumo da quantitativa como mostrado na an´lise e a univariada. Note que a a a ıvel c˜ o fun¸˜o abaixo usamos a nota¸ao de formula do R.0000000 0. mean) 1oGrau 2oGrau Superior 7.10.55] (7. margin = 1) salario.3] 1oGrau 7 3 2 0 2oGrau 2 6 5 5 Superior 0 0 2 4 > prop. a ıvel ca > tapply(salario.1250 9.cl <.55.3333333 0.sal. include.10. instrucao.lowest = T) > ins.1] (14.3000 .cl instrucao [4.7400 18.0000 6.1625 13.2. sd) 1oGrau 2oGrau Superior 2.956464 3.2. Vamos ent˜o obter um boxplot dos sal´rios para cada n´ de instru¸ao.tb salario.14.9100 14.7300 8.2] (10.1.7.tb <.23.14.79 INTRODUCAO AO R ¸˜ > salario. instrucao.8500 $`2oGrau` 0% 25% 50% 75% 100% 5.0000000 0.cl) > ins.cl instrucao [4.55] (7.8375 10.528333 16.55.2777778 0.table(ins.2500000 0. salario. a e a > boxplot(salario ~ instrucao) Poder´ ıamos ainda fazer gr´ficos com a vari´vel salario agrupada em classes.

23.cut(idade.5] (40. a ıvel a Quantitativa vs Quantitativa Para ilustrar este caso vamos considerar as vari´veis salario a e idade.55.cl idade. include.´ 8 ANALISE DESCRITIVA 80 5 10 15 20 1oGrau 2oGrau Superior Figura 10: Boxplot da vari´vel salario para cada n´ da vari´vel instrucao.14.cl [4.1] (14.2.1] (14.14.cl) idade.8. quantile(idade).9] 1 3 3 2 (34.2.9] 3 1 2 3 .7] 4 2 2 1 (30.55] (7.48.9. salario.8.5] 1 3 2 3 (40.cl.7.34.1.3] [20.55.7] (30.5.lowest = T) > table(salario. > idade.cl <.48.7.9. Nos comandos abaixo agrupamos as duas vari´veis em classes definidas pelos a respectivos quartis gerando portanto uma tabela de cruzamento 4 × 4.3] 9 9 9 9 > table(idade. Para se obter uma tabela ´ necess´rio agrupar as vari´veis em classes conforma fizemos e a a no caso anterior.cl [20.10.cl [4.1.cl) salario.cut(salario.lowest = T) > table(idade.7.34.55] (7.5.2] (10. quantile(salario).30.40.23.30.9] 9 9 9 9 > salario.10. include.40.9] (34.7.cl) salario.2] (10.cl <.

1] 0.7.4444444 0.9] (12.8] 0.9] (12. len = 4)).3333333 0.2222222 0.cl1.table(table(idade.9] 0. salario) Para quantificar a associa¸˜o entre vari´veis deste tipo usamos um coeficiente de correla¸ao. salario.65.4166667 0.55] (7.3333333 0.3] [20.2222222 (34.8.23.9] 0.lowest = T) > salario. method = "spearman") [1] 0.10.3333333 Caso queiramos definir um n´mero menor de classes podemos fazer como no exemplo a u seguir onde cada vari´vel ´ dividida em 3 classes e gerando um tabela de cruzamento 3 × 3. seq(0.cut(idade.1] 5 5 2 (32.32. + include.8.4166667 (37.lowest = T) > table(idade.1666667 (32.14.30.214456 > cor(idade.7] 0.8] 4 3 5 (37.2222222 0.3333333 (40. quantile(salario.5. len = 4)).table(table(idade.1.37.65] (8.cl [4.1111111 0.cl1) salario.37. ca > cor(idade.48.2222222 0. salario.1.3333333 0.9] 0. + include.3333333 0.2500000 0.cl1 [4.65.8.cl1 idade.7.1111111 (30.40.cl1.81 INTRODUCAO AO R ¸˜ > prop.34.65] (8.cut(salario. Note que se as vari´veis envolvidas puderem ser classificadas como ”explicativa”e ”rea a sposta”devemos colocar a primeira no eixo-X e a segunda no eixo-Y. salario. a e > idade.2500000 0.12.3651397 > cor(idade. quantile(idade.cl1 idade.2222222 0.23.23.1. 1. Neste exemplo ´ razo´vel e a admitir que a idade deve explicar.1111111 0.1] (14.48.cl).55.8.2.cl1 <.3333333 0. > plot(idade.1111111 0.12.3333333 0. mar = 1) salario.9] 3 4 5 > prop. 1. salario.8. mar = 1) salario. salario) [1] 0.9.2] (10. o sal´rio e portanto fazemos o gr´fico a a com idade n eixo-X. salario.cl1 [4.9.4166667 0. ca a c˜ A fun¸˜o cor() do R possui op¸˜o para trˆs coeficientes tendo como default o coeficiente de ca ca e correla¸˜o linear de Pearson.5] 0.32.3] [20. method = "kendall") [1] 0.8. ao menos parcialmente.cl.3] [20.9.48.2895939 .cl1). seq(0.cl1 <.8.4166667 O gr´fico adequado para representar duas vari´veis quantitativas ´ um diagrama de disa a e pers˜o.cl idade.

´ 8 ANALISE DESCRITIVA 82 q 20 q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q salario 15 q q 5 10 q 20 25 30 35 idade 40 45 50 Figura 11: Diagrama de dispers˜o para as vari´veis salario e idade. a a .

casado 8 instrucao. civil.3 An´lises descritvas multivariadas a Em geral as t´cnicas descritivas uni e bivariadas mostradas at´ aqui podem ser extendidas a mais e e dimens˜es.solteiro 8. uma ´ e delas retornando um vetor e outra uma matrix.044000 Al´m de fun¸oes pr´-definidas no R. como mean() utilizada nos comandos anteriores.casado 7.166667 17. > tapply(salario. Portanto ao terminar as an´lises com estes dados devemos desanexar a este conjunto de dados com o detach() > detach(milsa) . interaction(instrucao.83 INTRODUCAO AO R ¸˜ 8. mean) 1oGrau. function(x) sum(x >= 2oGrau. > tapply(salario. 1oGrau 2oGrau 2 10 > tapply(salario.casado 3 1oGrau. instrucao. civil). considere contar em cada c˜ grupo. Esta umtima ´ mostrada de duas maneiras.836667 11.solteiro 2 3 Superior. Al´m disto h´ ferramentas espec´ o e a ıficas para explora¸ao de dados multidimensionais. o n´mero de indiv´ u ıduos que tem sal´rio igual ou superior a 10 unidades. podee c˜ e mos definir uma fun¸ao particular que desejemos.870625 12.825000 17.166667 2oGrau.402857 7.82500 Superior 15. c˜ Neste momento vamos apenas ilustrar como o comando tapply() pode ser extendido.123500 > tapply(salario.casado Superior. solteiro casado 7 11 > tapply(salario. + 10)) 1oGrau. a a e ıvel c˜ Vamos extender este exemplo calculando o sal´rio m´dio tamb´m para cada estado civil e para a e e combina¸˜o dos n´ ca ıveis destes dois fatores. function(x) sum(x >= 10)) interaction(instrucao.783333 > tapply(salario.solteiro 2oGrau.04400 2oGrau 8. Anteriormente nesta sess˜o mostramos como calcular o sal´rio m´dio para cada n´ de instru¸ao. list(instrucao. os comandos a seriam como mostrado a seguir.78333 1oGrau.2.528333 16.solteiro Superior. mean) solteiro casado 1oGrau 8.935000 12. civil). Como exemplo. mean) solteiro casado 9.solteiro Superior. mean) 1oGrau 2oGrau Superior 7. civil).solteiro 2 2oGrau. function(x) sum(x >= 10)) Superior 6 civil.casado 0 Lembre que ao iniciar as an´lises com este conjunto de dados anexamos os dados com o a comando attach(milsa).casado 12.475000 > tapply(salario.935000 15.402857 8.

file("demo/plotmath. agora na tela de comandos apareceram novos comandos para produzir um novo gr´fico e a a mensagem: Hit <Return> to see next plot: ˆ ˆ inspecione os novos comandos e depois pressione novamente a tecla ENTER. package="graphics")) > file. legendas dos eixos. tipos de pontos. Na tela de comandos ser˜o a a a mostrados comandos que ser˜o utilizados para gerar um gr´fico seguidos da mensagem: a a Hit <Return> to see next plot: ˆ inspecione os comandos e depois pressione novamente a tecla ENTER. o a ˆ no “prompt” do programa R digite: > demo(graphics) ˆ Voce vai ver a seguinte mensagem na tela: demo(graphics) ---.file("demo/persp. As demos s˜o e a uties para termos uma id´ia dos recursos dispon´ ´ e ıveis no programa e para ver os comandos que devem ser utilizados.´ 8 ANALISE DESCRITIVA 84 8. a a Prossiga inspecionando os gr´ficos e comandos e pressionando ENTER at´ terminar a a e ”demo”.show(system.R". Por exemplo.3 Uma demonstra¸˜o de recursos gr´ficos do R ca a O R vem com algumas demonstra¸oes (demos) de seus recursos “embutidas” no programa. package="graphics")) ˆ . etc). para ver o c´digo fonte (comandos) de uma demo voce pode utilizar comandos como se o seguem (e de forma an´loga para outras "demos": a > file.~~~~~~~~ Type <Return> to start : ˆ ˆ pressione a tecla ENTER a “demo” vai ser iniciada e uma tela gr´fica ir´ se abrir. Note que os comandos v˜o aparecer a a na janela de comandos e os gr´ficos ser˜o automaticamente produzidos na janela gr´fica. Agora voce pode visualizar na janela gr´fica o gr´fico produzido pelos comandos mostrados a a anteriormente.R".R".show(system. linhas.show(system. vamos rodar a demo de recursos gr´ficos.file("demo/graphics. c˜ 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ˆnteses. cores de fundo. A a a a cada passo voce vai ter que teclar ENTER para ver o pr´ximo gr´fico. por exemplo. Experimente outras demos como demo(persp) e demo(image). cores dos pontos. Inspecione o gr´fico cuidadosamente verificando os recursos utilizados a (t´ ıtulo. Um novo gr´fico surgir´ ilustrando outros recursos do programa. package="graphics")) > file.

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

Para co listar as demos dispon´ ıveis digite na linha de comando: > demo() Para rodar uma delas basta colocar o nome da escolhida entre os parˆnteses. Inspecione o gr´fico cuidadosamente verificando os recursos utilizados a (t´ ıtulo. por exemplo.~~~~~~~~ Type <Return> to start : ˆ pressione a tecla ENTER a “demo” vai ser iniciada e uma tela gr´fica ir´ se abrir. Um novo gr´fico surgir´ ilustrando outros recursos do programa. As demos s˜o e a uties para termos uma id´ia dos recursos dispon´ ´ e ıveis no programa e para ver os comandos que devem ser utilizados. o a ˆ no “prompt” do programa R digite: > demo(graphics) ˆ Voce vai ver a seguinte mensagem na tela: demo(graphics) ---. . A a a a cada passo voce vai ter que teclar ENTER para ver o pr´ximo gr´fico. Experimente outras demos como demo(persp) e demo(image). Por exemplo. Agora voce pode visualizar na janela gr´fica o gr´fico produzido pelos comandos mostrados a a anteriormente. cores de fundo. cores dos pontos. agora na tela de comandos apareceram novos comandos para produzir um novo gr´fico e a a mensagem: Hit <Return> to see next plot: ˆ ˆ inspecione os novos comandos e depois pressione novamente a tecla ENTER.´ 9 GRAFICOS NO R 86 9 9. etc).1 Gr´ficos no R a Exemplos dos recursos gr´ficos a O R vem com algumas demonstra¸˜es (demos) de seus recursos “embutidas” no programa. linhas. legendas dos eixos. vamos rodar a demo de recursos gr´ficos. Na tela de comandos ser˜o a a a mostrados comandos que ser˜o utilizados para gerar um gr´fico seguidos da mensagem: a a Hit <Return> to see next plot: ˆ ˆ inspecione os comandos e depois pressione novamente a tecla ENTER. Note que os comandos v˜o aparecer a a na janela de comandos e os gr´ficos ser˜o automaticamente produzidos na janela gr´fica. tipos de pontos. a a Prossiga inspecionando os gr´ficos e comandos e pressionando ENTER at´ terminar a a e ”demo”.

ps ou . entre outros atributos do arquivo gr´fico.show(system. package="graphics")) > file.R".87 INTRODUCAO AO R ¸˜ ˆ para ver o c´digo fonte (comandos) de uma demo voce pode utilizar comandos como se o seguem (e de forma an´loga para outras "demos": a > file.off() Caso deseje-se o arquivo em outro formato gr´fico a fun¸˜o adequada deve ser chamada. Por a ca exemplo.jpg (or . e o a Modificando gr´ficos a Gr´ficos no R s˜o tipicamente constru´ a a ıdos com op¸oes padr˜o definidas pelo programa. o que pode ser feito por legend() e ca a a NOTA: Se algo j´ feito deve ser mudado ent˜o ´ necess´rio repetir os comandos anteriores a a e a um a um at´ chegar no que se deseja modificar. tamanho.R".pdf em formato pdf.file("demo/graphics. package="graphics")) > file.show(system.file("demo/plotmath. mas c˜ a podem ser modificados ou ter elementos adicionados conforme desejado pelo usu´rio. ou seja. Cada uma des fun¸oa possuem argumentos adicionais que permitem conc˜ ´ trolar tamanho.pdf") > hist(rnorm(200)) > dev. e permite dividir a janela gr´fica de forma ianda mais flex´ a ıvel. jpeg() para formatos . O c´digo a seguir ıda a o mostra como gerar um um histograma de 200 amostras de uma distribui¸˜o normal padr˜o em ca a um arquivo chamado figura1.file("demo/persp.show(system.R".2)) divide a janela gr´fica em um frame que perite c˜ a acomodar dois gr´ficos em uma linha e par(mfrow=c(3. Por exemplo par(mfrow=c(1.eps).off() ´ compuls´rio devendo ser usado para que o arquivo gr´fico seja ”fechado”. subdivis˜es. resolu¸˜o. margens. e elementos s˜o adicionados ao gr´fico para cada chamada de c˜ a a fun¸˜o espec´ ca ıfica. a A melhor forma para entender como modificar gr´ficos ´ pensar que cada elemento pode a e ser controlado por uma fun¸ao. Um exemplo t´ ıpico ´ a adi¸˜o de legenda a um gr´fico j´ feito. entre diversas outras o op¸oes. a a postscript() (para gr´ficos em formato .2 Algumas configura¸˜es de gr´ficos no R co a Gr´ficos m´ ltiplos na janela gr´fica a u a O principal recurso para controlar o aspecto de gr´ficos no R ´ dado pela fun¸ao de configura¸ao a e c˜ c˜ par(). Gr´ficos em arquivos a Por default gr´ficos s˜o mostrados em uma janela na tela do computador. png(). Para produzir gr´ficos em arquivos ıda a a a basta redirecionar o dispositivo de sa´ para o formato gr´fico desejado. a tela ´ o a a e dispositivo de sa´ (output device) padr˜o para gr´ficos. Alguns dos dispositivos a gr´ficos s˜o exclusivos de certos sistemas operacionais como poe exemplo wmf() para o sistema a a operacional WINDOWS.jpeg) que s˜o muito usados em p´ginas web. entre outros. que permite configurar formato. O comando layout() tmab.4)) permite acomodar 12 gr´ficos em a a uma mesma janela arranjados em trˆs linhas e quatro colunas. > pdf("figura1. a a . Este comportamento difere de alguns outros e programas que permitem modificar um gr´fico j´ desenhado. de forma semelhante ao que se faria ao desenhar em um papel. package="graphics")) Galeria de gr´ficos do R a ˆ R Graph Gallery ´ uma p´gina com diversos exemplos de gr´ficos no R e os comandos e a a para produzi-los 9. E importante notar que o ca a comando dev.

5. at = seq(0. a a para modificar os eixos iniciamos removendo os eixos do gr´fico inicial com axes=FALSE e depois a os adicionamos com axis() na posi¸˜o desejada.3 Alguns exemplos Gr´fico com dois eixos y distintos Considere fazer um gr´fico de duas vari´veis de a a a grandezas distintas. Para isto na chamada de hist() passamos um valor vazio para o argumento main o que causa a remo¸ao do t´ c˜ ıtulo do gr´fico. by = 10). a Vamos considerar o conjunto de dados airquality j´ dispon´ no R que possui medidas de a ıvel Ozˆnio. axes = F.´ 9 GRAFICOS NO R 88 > x <.5 10 20 30 40 −2 −1 0 x 1 2 3 −1.rnorm(200) > hist(x) > hist(x.5 2. Os texto dos eixos s˜o definidos por xlab e ylab. velocidade do vento e temperatura em Nova York de Maio a Setembro o ca de 1973. No gr´fico a a da esquerda est´ o histograma dos dados de uma amostra de tamanho 200 produzido com a op¸oes padr˜o (default) da fun¸ao hist() a partir dos seguintes comandos. c˜ a Vejamos na Figura reffig:eixos um exemplo frequentemente citado por usu´rios.5. Y 1 e Y 2 contra uma mesma vari´vel X. pos = -2.5 Figura 12: Histograma gerado com op¸oes padr˜o (esquerda) e modificadas (direita). xlab = "dados". radia¸˜o solar.5 dados 1. sendo que no primeiro argumento da fun¸˜o ca ca as op¸˜es 1 e 2 correspondem aos eixos das abcissas e ordenadas. co 9. main = "". Gostar´ c˜ a c˜ ıamos de fazer um gr´fico destes colocando eixos distintos para Y 1 e Y 2. 50. 3. o texto dos eixos foi modificado e a posi¸˜o dos eixos ca foi alterada fazendo com que as barras do histograma sejam desenhadas junto aos eixos. ylab = "frequ^ncias absolutas") e > axis(1. para ver se as flutua¸oes s˜o comuns com a varia¸ao nos valores de X. at = seq(-2. No gr´fico da c˜ a c˜ a direita nota-se que o t´ ıtulo foi removido. . respectivamente.5 0.5). Isto pode ser util. Finalmente. por exema ´ plo. pos = 0) > axis(2. um a esquerda e outro a direita a ` do gr´fico.5) Histogram of x 40 30 frequências absolutas Frequency 20 10 0 0 −2.5 −0. by = 0.

3 56 5 5 6 28 NA 14.000 Max. 4. col.: 63.50 Median :205. + "2003". : 7.25 3rd Qu.axis = 2.5 62 5 4 5 NA NA 14. :20. : 1.R Wind Temp Month Day 1 41 190 7. :9. paste(Month.00 Min.:23.13 Mean :185.0 Max.6 74 5 3 4 18 313 11.00 Max.00 NA's : 37.700 Median :79.000 Median :16.0 Month Day dates Min. as informa¸oes sobre as datas de coleta est˜o nas duas ultimas colunas.00 Median : 31.9 66 5 6 Nesses dados. Day.000 3rd Qu.9 Mean : 9. :5.:6.00 NA's : 7.0 Min. side = 4.0 Median : 9.: 8.0 72 5 2 3 12 149 12.4 67 5 1 2 36 118 8. ann = F. Vamos c˜ a ´ inicialmente criar uma nova vari´vel com a representa¸ao da data.700 Max.0 Last :30Sep2003 Median :7.0 Nos comandos a seguir criamos o gr´fico da Figura 13 com as evolu¸oes das medidas de a c˜ temperatura e n´ ıveis de ozˆnio no per´ o ıodo.000 1st Qu. axes = F. col = 2)) axis(4.8 3rd Qu. 4.00 1st Qu.0 First :8Jan60 1st Qu.0 Max. 4)) with(airquality. col = 2) .400 1st Qu.:72.R Wind Temp Min. frame = T.88 3rd Qu.:115. :56.as. :168. plot(Temp ~ dates.00 Max.date(with(airquality.993 Mean :15. col = 2) mtext("Ozone". :97.700 Min.:85. :334.8 3rd Qu.500 3rd Qu.: 7. type = "l")) par(new = T) with(airquality. plot(Ozone ~ dates.00 1st Qu.000 Min. : 1. type = "l". line = 3. a c˜ > require(date) > airquality$dates <.8 1st Qu.00 Mean : 42.0 Mean :6. :31. : 1.: 18.:258. > > > > + > > par(mar = c(4.958 Mean :77.:11. colocando a escala de cada uma delas em um dos eixos verticais.89 INTRODUCAO AO R ¸˜ > data(airquality) > head(airquality) Ozone Solar.:8. sep = "/"))) > summary(airquality) Ozone Solar.

o 60 .´ 9 GRAFICOS NO R 90 90 Temp 70 80 100 25May2003 14Jul2003 dates 2Sep2003 0 50 150 Ozone Figura 13: Ilustra¸ao de gr´fico com duas escalas para o eixo-y: evolu¸˜o dos valores de temc˜ a ca peratura e ozˆnio.

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

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

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

19444444 0.1500 > margin.table(t1. Acima os gr´ficos mostram retˆngulos cojas areas s˜o proporcionais `s frequˆncias e a a a ´ a a e abaixo um poss´ gr´fico de barras. beside = T.table(t1f. legend = T) barplot(t1f.08333333 > prop.6000 0.1500 > prop. mar = 1) Estado Civil solteiro casado 16 20 > margin.16666667 0.table(t1. A Figura 10. mar = 2) N´vel de Instru¸~o ı ca 1oGrau 2oGrau Superior 12 18 6 Da mesma forma os gr´ficos obtidos s˜o os mesmos.4375 0.2 mostra dois tipos de a a gr´ficos. legend = T) J´ para trˆs os mais vari´veis os resultados s˜o bem diferentes em particular para as frequˆna e a a e cias marginais. beside = T.2500 0.1875 casado 0. margin = 1) N´vel de Instru¸~o ı ca Estado Civil 1oGrau 2oGrau Superior solteiro 0. .13888889 0.08333333 > prop.33333333 0.table(t1) N´vel de Instru¸~o ı ca Estado Civil 1oGrau 2oGrau Superior solteiro 0. mar = 2) N´vel de Instru¸~o ı ca 1oGrau 2oGrau Superior 12 18 6 > margin. main = "") plot(t1f.3750 0.table(t1f) N´vel de Instru¸~o ı ca Estado Civil 1oGrau 2oGrau Superior solteiro 0.table(t1f. margin = 1) N´vel de Instru¸~o ı ca Estado Civil 1oGrau 2oGrau Superior solteiro 0.08333333 casado 0.16666667 0. uma vez que ftable() vai sempre retornar uma matriz e portanto s´ possuir´ o a margens 1 e 2. mar = 1) Estado Civil solteiro casado 16 20 > margin.´ ˆ 10 ANALISE DESCRITIVA DE TABELAS DE CONTINGENCIA 94 > prop.table(t1f.19444444 0.3750 0.13888889 0.table(t1.33333333 0. ıvel a > > > > plot(t1.6000 0.2500 0.08333333 casado 0.4375 0.1875 casado 0. main = "") barplot(t1.

co .95 INTRODUCAO AO R ¸˜ 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¸˜es gr´ficas de tabelas de contingˆncia de duas vari´veis obtidas pelas co a e a fun¸˜es table() e ftable().

08333333 0.table(t2. regiao = outro instrucao 1oGrau 2oGrau Superior capital 0. regiao = capital instrucao civil 1oGrau 2oGrau Superior solteiro 0.1250 0.2000 0.05555556 0. regiao = interior instrucao civil 1oGrau 2oGrau Superior solteiro 0.0500 .0625 0.0625 0.05555556 0. regiao = capital instrucao civil 1oGrau 2oGrau Superior solteiro 0.table(t2f) regiao civil instrucao solteiro 1oGrau 2oGrau Superior casado 1oGrau 2oGrau Superior .02777778 0.08333333 0.0500 .11111111 0.0625 casado 0.02777778 casado 0.11111111 0. .02777778 casado 0.02777778 0.02777778 casado 0.3000 0.02777778 0. regiao = interior instrucao civil 1oGrau 2oGrau Superior solteiro 0.1000 0.1250 0. . .02777778 0.0625 casado 0.02777778 0.02777778 0.05555556 0.02777778 0.11111111 0.05555556 0.05555556 0.´ ˆ 10 ANALISE DESCRITIVA DE TABELAS DE CONTINGENCIA 96 > prop. margin = 1) civil .02777778 .02777778 .02777778 0. .02777778 > prop.16666667 0.02777778 > prop.05555556 0.05555556 0.11111111 0.02777778 interior 0.16666667 0.02777778 0. .table(t2) .05555556 0.05555556 0.05555556 0. .0500 0. regiao = outro instrucao civil 1oGrau 2oGrau Superior solteiro 0.02777778 outro 0.

15384615 0.1666667 0. regiao = capital 0.23076923 0.1000 regiao civil instrucao solteiro 1oGrau 2oGrau Superior casado 1oGrau 2oGrau Superior . .08333333 0.08333333 .table(t2.6666667 0.4000000 0.36363636 0.table(t2f. margin = 3) instrucao civil 1oGrau 2oGrau Superior solteiro 0.09090909 0.1666667 0.18181818 0.97 INTRODUCAO AO R ¸˜ solteiro 0.5000000 0.3333333 0.1875 0.2857143 0. .3333333 0.table(t2.09090909 casado 0.table(t2. regiao = outro instrucao civil 1oGrau 2oGrau Superior solteiro 0.50000000 0.1000 0.2857143 0. mar = 1) civil solteiro 16 instrucao 1oGrau 12 casado 20 > margin.3333333 > prop.4285714 0.30769231 0. margin = 1) > prop.table(t2.2000000 0.09090909 .4000000 0.18181818 0.15384615 0. .08333333 0.3333333 outro 0.3333333 0.table() a partir de um objeto resultante de ıvel table() mas n˜o para um objeto resultante de parftable()! a > margin.1666667 0.0500 capital 0.0625 0. regiao = interior instrucao civil 1oGrau 2oGrau Superior solteiro 0.07692308 casado 0. mar = 3) regiao capital interior 11 12 outro 13 .16666667 0.08333333 casado 0.3333333 interior 0. mar = 2) 2oGrau Superior 18 6 > margin.2500 casado 0.3333333 0.07692308 ´ E poss´ obter totais marginais com margin.

J´ barplot() ir´ funcionar apenas para e a a ftable.´ ˆ 10 ANALISE DESCRITIVA DE TABELAS DE CONTINGENCIA 98 solteiro capital interior outro capital casado interior outro 1oGrau instrucao 2oGrau Superior civil Figura 15: Representa¸˜es gr´ficas de tabelas de contingˆncia de trˆs vari´veis obtidas pelas co a e e a fun¸˜es table() (esquerda) e ftable() (direita). main = "") > barplot(t2f. co Para gr´ficos nem todos os resultados s˜o mais poss´ a a ıveis. mas o resultado pode n˜o ser satisfat´rio pois as barras ir˜o mostrar as combina¸oes a o a c˜ de duas vari´veis. beside = T) 0 1 2 3 4 5 6 . plot() vai funcionar para a classe table mas o resultado ´ inapropriado para ftable. a > plot(t2.

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

f1(seq(1.2.5 2. Inf) 0.1e-05 > integrate(f1. 0).1. 0. p´gina 139.2. 5) polygon(x = c(1.8. c(0. a ca cuja representa¸ao gr´fica ´ mostrada na Figura 17.2. l = 20)). e e Para sombrear a ´rea usa-se o argumento density. 0. Esta ´ ` c˜ fun¸˜o adiciona a um gr´fico um pol´ ca a ıgono que ´ definido pelas coordenadas de seus v´rtices. X com a e . em centenas de quilos.´ 11 CONCEITOS BASICOS SOBRE DISTRIBUICOES DE PROBABILIDADE ¸˜ 100 0.a. p[c]))) E para obter as probabilidades pedidas usamos integrate(). Finalmente. l = 20). f1(seq(0.0 1.8. 0. a c˜ c˜ > > + > + > plot(f1. density = 10) polygon(x = c(0.8). 0. c(expression(p[b].0 1 2 x 3 4 5 Figura 16: Gr´fico da fun¸˜o de probabilidade do Exemplo 1.5). Para destacar a c˜ a ca as areas que correspondem as probabilidades pedidas vamos usar a fun¸ao polygon(). O comando plot() desenha o gr´fico da fun¸˜o. col = "gray") text(c(1.2).2. y = c(0.2e-15 EXEMPLO 2 (Bussab & Morettin. ´ uma v. l = 20))). Os comandos do R a seguir mostram como c˜ a e fazer o gr´fico de fun¸ao. seq(1. > integrate(f1. l = 20)).1353353 with absolute error < 2.5 f1 (x) 1.2.8) 0. 0. 1.0 0 0. 0.4684235 with absolute error < 5. exerc´ 10) a ıcio A demanda di´ria de arroz em um supermercado. 0. 5. seq(0. 0. para escrever um texto no a gr´fico usamos a fun¸ao text() com as coordenadas de posi¸ao do texto. y = c(0. 5.

c e ca 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.0 + return(fx) + } (3) .0 + fx[x >= 0 & x < 1] <.  2  3 x .0 1. f. se x < 0 ou x ≥ 3 (a) Calcular a probabilidade de que sejam vendidos mais que 150 kg. (c) Qual a quantidade que deve ser deixada a disposi¸˜o para que n˜o falte o produto em ` ca a 95% dos dias? Novamente come¸amos definindo um objeto do R que cont´m a fun¸˜o dada em 3.0 0 1 2 x 3 4 5 Figura 17: Probabilidades pedidas nos itens (b) e (c) do Exemplo 1.0 pc pb 0. se 1 ≤ x < 3 f (x) =  3 0 .(-x[x >= 1 & x <= 3]/3) + 1 + fx[x > 3] <. (b) Calcular a venda esperada em 30 dias. se 0 ≤ x < 1 − x + 1 .d. > f2 <.2 * x[x >= 0 & x < 1]/3 + fx[x >= 1 & x <= 3] <.101 INTRODUCAO AO R ¸˜ 0.function(x) { + fx <.5 2.p.numeric(length(x)) + fx[x < 0] <.5 f1 (x) 1.

1 0. Na quest˜o (a) pede-se a probabilidade de que ` o a sejam vendidos mais que 150 kg (1. a ca Agora vamos responder as quest˜es levantadas. 1.1e-15 > plot(f2.5 centenas de quilos). 3) 1 with absolute error < 1. Para calcular e a esperan¸a E[X] = xf (x)dx definimos uma nova fun¸ao e resolvemos a integral. c˜ e a > integrate(f2.1e-15 0.5.0 −1 0. e . A probabilidade corresponde ` area sob a fun¸ao no intervalo pedido ou seja P [X > 1.4 0. 0.6 0 1 x 2 3 4 Figura 18: Gr´fico da fun¸˜o densidade de probabilidade do Exemplo 2.3 0.´ 11 CONCEITOS BASICOS SOBRE DISTRIBUICOES DE PROBABILIDADE ¸˜ 102 A seguir verificamos que a integral da fun¸ao ´ 1 e fazemos o seu gr´fico mostrado na Figura 18. portanto a probabilidade P [X > 1. 5]. 4) 1 with absolute error < 1.5 0. 5] = a´ c˜ ∞ f (x)dx e esta integral pode ser resolvida numericamente com o comando: 1. Inf) 0. -1.3749999 with absolute error < 3. A fun¸˜o c c˜ ca integrate retorna uma lista onde um dos elementos ($value) ´ o valor da integral.5 > integrate(f2.5e-05 A venda esperada em trinta dias ´ 30 vezes o valor esperado de venda em um dia.2 f2 (x) 0.

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

a ca (d) qual a renda m´dia nesta localidade? e 0.5 f2 (x) 0. e (b) calcule os quartis da distribui¸ao.2 . e indique o resultado no gr´fico da distribui¸˜o.m.5 0.´ 11 CONCEITOS BASICOS SOBRE DISTRIBUICOES DE PROBABILIDADE ¸˜ 104 0.p.4 0.3 0.0 0.2 0.0 −1 0 1 x 2 3 4 Figura 19: Gr´ficos indicando as solu¸oes dos itens (a) e (c) do Exemplo 2.5 u..6 0.d.6 0.1 0.3 0.95 k −1 0 1 x 2 3 4 0. a c˜ (a) mostre que f (x) ´ uma f.4 f2 (x) 0.1 0. c˜ (c) calcule a probabilidade de encontrar uma pessoa com renda acima de 4.

Vamos ver com mais detalhes algumas distribui¸oes de probabilidades. por exemplo para calcular probabilidades usamos: pnorm() para norca mal.04209380 O primeiro valor acima corresponde ao valor da densidade da normal f (x) = √ 1 2πσ 2 exp{− 1 (x − µ)2 } 2 2σ com parˆmetros (µ = 0. pbinom() para binomial. c˜ c˜ a > dnorm(-1) [1] 0. σ 2 = 1) no ponto −1.975. Para co co cada distribui¸˜o h´ 4 opera¸oes b´sicas indicadas pelas letras: ca a c˜ a d calcula a densidade de probabilidade f (x) no ponto p calcula a fun¸˜o de probabilidade acumulada F (x) no ponto ca q calcula o quantil correspondente a uma dada probabilidade r retira uma amostra da distribui¸ao c˜ Para usar os fun¸oes deve-se combinar uma das letras acima com uma abreviatura do c˜ nome da distribui¸˜o. pexp() para exponencial. e que podem ser modificados.69356297 1.975) calcula c˜ o valor de a tal que P (X ≤ a) = 0.959964 > rnorm(10) [1] -0. c˜ 12.2419707 A fun¸ao pnorm(-1) calcula a probabilidade P (X ≤ −1).1586553 > qnorm(0.29195553 0. Portanto.42215846 1. ppois() para Poisson e assim por diante.1 Distribui¸˜o Normal ca A funcionalidade para distribui¸ao normal ´ implementada por argumentos que combinam as c˜ e letras acima com o termo norm.13627033 -0.17800256 0. c˜ a Por default as fun¸oes assumem a distribui¸ao normal padr˜o N (µ = 0. o comando rnorm(10) gera uma amostra de 10 elementos da normal padr˜o.51874979 -0. Note que os valores que voce obt´m rodando este comando a e podem ser diferentes dos mostrados acima. Vamos ver alguns exemplos com a distribui¸ao normal padr˜o.2419707 > pnorm(-1) [1] 0. As fun¸oes acima possuem argumentos adicionais.26869448 1.15342636 [7] 0.975) [1] 1. para os quais valores padr˜o (default) c˜ a foram assumidos. Finalmente. σ 2 = 1).02997933 -0. Usamos args() para ver os argumentos de uma fun¸ao e help() para visualizar a documenta¸˜o detalhada: c˜ ca .105 INTRODUCAO AO R ¸˜ 12 Distribui¸˜es de Probabilidade co O programa R inclui funcionalidade para opera¸˜es com distribui¸˜es de probabilidades. o mesmo valor seria obtido substituindo a x por −1 na express˜o da normal padr˜o: a a > (1/sqrt(2 * pi)) * exp((-1/2) * (-1)^2) [1] 0. O comando qnorm(0.

> qnorm(0. e a c˜ Note nestes exemplos que os argumentos podem ser passados de diferentes formas. s = 8) [1] 115.6797 Para informa¸˜es mais detalhadas pode-se usar help(). P [X > 95] Calcule estas probabilidades de forma usual. 100. mean = 100.pnorm(95. com distribui¸ao N (100. 10) [1] 0.6826895 > 1 . 10) . a a Note tamb´m que as 4 fun¸oes relacionadas ` distribui¸ao normal s˜o documentadas conjuntae c˜ a c˜ a mente. help(dnorm) e help(pnorm) ir˜o exibir a mesma a documenta¸˜o.pnorm(90. sd = 8) [1] 115.975. portanto help(rnorm). Calcular as probabilidades: c˜ 1. 100. ca C´lculos de probabilidades usuais. P [X < 95] 2. a c˜ c˜ e Note que ao final da documenta¸ao s˜o apresentados exemplos que podem ser rodados pelo c˜ a usu´rio e que auxiliam na compreens˜o da funcionalidade. Seja X uma v. 8) [1] 115. Os comandos do R para obter as probabilidades pedidas s˜o: a > pnorm(95.975.a. 100. 10.6914625 . 100. help(qnorm).975. 100. m = 100. Depois compare com os resultados fornecidos pelo R. para os quais utiliz´vamos tabelas estat´ a a ısticas podem ser facilmente obtidos como no exemplo a seguir. lower = F) [1] 0. O comando co > help(rnorm) ir´ exibir em uma janela a documenta¸ao da fun¸ao que pode tamb´m ser chamada com ?rnorm.3085375 > pnorm(110.6797 > qnorm(0. usando a tabela da normal. 100. 10) [1] 0. 10) [1] 0.6797 > qnorm(0. P [90 < X < 110] 3.12 DISTRIBUICOES DE PROBABILIDADE ¸˜ 106 > args(rnorm) function (n. mean = 0. 100). sd = 1) NULL As fun¸oes relacionadas a distribui¸ao normal possuem os argumentos mean e sd para definir c˜ ` c˜ m´dia e desvio padr˜o da distribui¸ao que podem ser modificados como nos exemplos a seguir.6914625 > pnorm(95.

Vamos a co fazer gr´ficos de fun¸˜es de densidade e de probabilidade acumulada.73% da massa de e o e probabilidade da distribui¸˜o normal. 100.4 0. Para fazer estes gr´ficos tomamos uma sequˆncia de valores de x entre 70 e 130 a e e para cada um deles calculamos o valor das fun¸˜es f (x) e F (x). a > > > > > x <. 8) plot(x. 100. 130) Comandos usuais do R podem ser usados para modificar a aparˆncia dos gr´ficos. A Figura 20 mostra gr´ficos a a da densidade (esquerda) e probabilidade acumulada (direita) da normal padr˜o. os mesmos gr´ficos poderiam ser produzidos com os comandos a a seguir. a segunda usando ´ o argumento lower que implementa um algor´ ıtmo de c´lculo de probabilidades mais est´vel a a numericamente.0 −2 −1 0 x 1 2 3 Figura 20: Fun¸˜es de densidade e probabilidade da distribui¸˜o normal padr˜o.dnorm(x. faixa que concentra 99. 3) > plot(pnorm.2 0. type = "l") Fx <. 100. 8) plot(x. fx. Por exemplo. len = 100) fx <. 100. ca > plot(dnorm. Para fazer o gr´fico consideramos valores de X entre -3 e 3 que a correspondem a +/. alternativamente. e a podemos incluir t´ ıtulos e mudar texto dos eixos conforme mostrado na gr´fico da esquerda da a . F (x)) no outro.4 0. A seguir vamos ver comandos para fazer gr´ficos de distribui¸˜es de probabilidade.6 dnorm (x) 0. 3) A Figura 21 mostra gr´ficos da densidade (esquerda) e probabilidade acumulada (direita) a da N (100. 64).trˆs desvios padr˜es da m´dia. 70.0 −3 −2 −1 0 x 1 2 3 0.0 −3 0. Estude cuidadosamente a co os comandos abaixo e verifique os gr´ficos por eles produzidos.8 1. > plot(function(x) dnorm(x. 8).1 0.107 INTRODUCAO AO R ¸˜ 0.pnorm(x. type = "l") Note que. -3.3 0. f (x)) em um gr´fico e (x.seq(70. 130) > plot(function(x) pnorm(x. Depois unimos os pontos co (x. produzidos a com os comandos a seguir. 70. 130. 8).2 pnorm (x) 0. co ca a Note que a ultima probabilidade foi calculada de duas formas diferentes. -3. Fx.

2 Distribui¸˜o Binomial ca C´lculos para a distribui¸ao binomial s˜o implementados combinando as letras b´sicas vistas a c˜ a a acima com o termo binom.4 fx 0. add = T.8 1.02 Fx 0. 8). xlab = "valores de X". a ` > > > > > > plot(dnorm. 0.05. ylab = "f(x)") plot(function(x) dnorm(x.01 0.0 70 0. > args(dbinom) function (x. Vamos ver os comandos ca do R para: 1. Vamos primeiro investigar argumentos e documenta¸ao com args() c˜ e dbinom().04 0. 140.00 70 80 90 100 x 110 120 130 0.2 0. 140. ylab = "densidade de probabilidade") title("Distribuic~o Normal\nX ~ N(100.03 0. 90. -3. com distribui¸˜o Binomial com n = 10 e p = 0. 8). add = T. Figura 22 e nos dois primeiros comandos abaixo. "N(100. c("N(100. size.64)". 64). col = 2) plot(function(x) dnorm(x. 60. fill = 1:3) 12.6 0. col = 3) legend(110. 3. 64)") a plot(function(x) dnorm(x. idem para a fun¸ao de probabilidade c˜ 3. 100. fazer o gr´fico das fun¸˜o de densidade a ca 2. log = FALSE) NULL > help(dbinom) Seja X uma v.05 108 0.12 DISTRIBUICOES DE PROBABILIDADE ¸˜ 0. Os demais comandos mostram como colocar diferentes densidades em um mesmo gr´fico como ilustrado a direita da mesma Figura. "N(90. prob. 15). 100. calcular P [X = 7] .64)".35.0 80 90 100 x 110 120 130 Figura 21: Fun¸˜es de densidade de probabilidade (esquerda) e fun¸˜o de distribui¸ao acumuco ca c˜ lada (direita) da N (100.a. 60.225)"). 140. 60.

a 4.3 −3 −2 −1 0 1 valores de X 2 3 0.35) plot(x. 0. type = "s") As probabilidades pedidas s˜o obtidas com os comandos a seguir.9951787 > 1 .04 N(100. lower = F) [1] 0.109 Distribuicão Normal X ~ N(100. 10.03 0. 0.004821265 > pbinom(6.02120302 > pbinom(7.02 0. calcular P [3 < X ≤ 6] = P [4 ≤ X < 7] Note que sendo uma distribui¸˜o discreta de probabilidades os gr´ficos s˜o diferentes dos ca a a obtidos para distribui¸ao normal e os c´lculos de probabilidades devem considerar as probac˜ a bilidades nos pontos. 0. 10. 10.225) 60 80 100 x 120 140 Figura 22: Gr´fico com texto nos eixos e t´ a ıtulo (esquerda) e v´rias distribui¸˜es em um mesmo a co gr´fico (direita). 0.35) plot(x. 10.35) [1] 0. Fx. 10.05 0.004821265 > pbinom(7.2 0. a > dbinom(7.35) .1 0. calcular P [X < 8] = P [X ≤ 7] 5.35. fx.01 f(x) 0. 10. 0.dbinom(x.0 0. 10. 0.00 0. > > > > > x <.pbinom(x.35) .9951787 > sum(dbinom(0:7.64) N(100. 64) INTRODUCAO AO R ¸˜ 0. 0.4 densidade de probabilidade 0. 10. 0. 0. type = "h") Fx <.0:10 fx <. 10.pbinom(3.35) [1] 0. calcular P [X ≥ 8] = P [X > 7] 6.64) N(90. Os gr´ficos das fun¸˜es de densidade e probabilidade s˜o mostrados na a co a Figura 23.pbinom(7.35)) [1] 0.35) [1] 0.

sorteamos 5 valores da U (0.12 DISTRIBUICOES DE PROBABILIDADE ¸˜ 110 0. 20) usamos: a > runif(5.75 Portanto.8 1. d ou c˜ ı c˜ r como mencionado anteriormente.2830474 0.35)) [1] 0. e > args(runif) function (n.4601487 > sum(dbinom(4:6. o default ´ uma distribui¸ao uniforme no intervalo [0.4601487 12.4 fx 0. [1] 0.35). 1] e os argumentos opcionais e c˜ s˜o min e max.780455 8.3 12.05 0.6 0. 1) e calculamos a probabilidade acumulada at´ 0.25 0.562443 12. min = 0.3. 0. 10.2 0.20 0. para simular 5 valores de X ∼ U (5. max = 1) NULL > runif(5) [1] 0.613429 .1 Distribui¸˜o Uniforme ca Uniforme Cont´ ınua Para a distribui¸ao uniforme cont´nua usa-se as fun¸oes *unif() onde * deve ser p.00 0 2 4 x 6 8 10 0.6287813 0.10 Fx 0.75) [1] 0. q.5581059 0.0 0 0.0 2 4 x 6 8 10 Figura 23: Fun¸oes de probabilidade (esquerda) e distribui¸ao acumulada (direita) da c˜ c˜ B(10.7501488 > punif(0. Por exemplo. 0. max = 20) [1] 10.15 0.509917 10. Nos comandos a seguir inspecionamos os argumentos. min = 5.6971152 0.107253 8.75.

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

(2001) No¸oes de Probabilidade e Estat´ a c˜ ıstica. pergunta-se: ˆ ˆ ˆ ˆ ˆ ˆ P (X ≥ 14) P (8 < X ≤ 10) P (X < 2 ou X ≥ 11) P (X ≥ 11 ou X > 13) P (X > 3 e X < 6) P (X ≤ 13 | X ≥ 11) 3.12 DISTRIBUICOES DE PROBABILIDADE ¸˜ 112 12. & Lima. co ˆ ˆ ˆ 5. S˜o Paulo. pag 193) Para X ∼ N (90. 100) a sobreponha ao gr´fico anterior a densidade de uma vari´vel Y ∼ N (90. M. γ = 0.C.95 4. 392p. a Os exerc´ ıcios abaixo com indica¸ao de p´gina foram retirados de: c˜ a Magalh˜es. 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) = γ.5 Exerc´ ıcios Nos exerc´ ıcios abaixo iremos tamb´m usar o R como uma calculadora estat´ e ıstica para resolver alguns exemplos/exerc´ ıcios de probabilidade tipicamente apresentados em um curso de estat´ ıstica b´sica. 80) e outra a a Z ∼ N (85. c a c˜ c˜ 2. estude o comportamento da vari´vel n´mero de indiv´duos com a caracter´stica e fa¸a um gr´fico a u ı ı c a de sua fun¸˜o de distribui¸ao. 3 ed. pag 67) Uma moeda viciada tem probabilidade de cara igual a 0.4. (Ex 5.3. (Ex 8. Para quatro lan¸amentos independentes dessa moeda. Para o nascie mento de 5 indiv´ ıduos e considerando os nascimentos como eventos independentes. 100) densidades de distribui¸˜es χ2 com 1. 100). estude o comportamento da vari´vel n´mero de c a u caras e fa¸a um gr´fico de sua fun¸ao de distribui¸ao.4. A probabilidade de indiv´ ıduos nascerem com certa caracter´ ıstica ´ de 0.P.N. 2 e 5 graus de liberdade. A. ca c˜ . IME-USP. Fa¸a os seguintes gr´ficos: c a ˆ da fun¸ao de densidade de uma vari´vel com distribui¸ao de Poisson com parˆmetro c˜ a c˜ a λ=5 da densidade de uma vari´vel X ∼ N (90. (Ex 1. a 1. pag 77) Sendo X uma vari´vel seguindo o modelo Binomial com parˆmetro n = 15 a a e p = 0.

4 5 0.1 os dados observados concordam com o modelo te´rico? o fa¸a um gr´fico mostrando as frequˆncias te´ricas (esperadas) e observadas.3 0. Sendo X uma vari´vel seguindo o modelo Normal com m´dia µ = 130 e variˆncia σ 2 = 64. Os dados de 26 pacientes s˜o os seguintes: a Paciente Incidˆncia e Paciente Incidˆncia e 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ˆncia de cˆncer em parentes pr´ximos pode ser e a o modelada pela seguinte fun¸˜o discreta de probabilidades: ca Incidˆncia 0 e pi 0.1 ˆ ˆ 1 0.6. para cada paciente e a com este diagn´stico o n´mero de casos de cˆncer em parentes pr´ximos (pais. a e a pergunta-se: (a) P (X ≥ 120) (b) P (135 < X ≤ 145) (c) P (X < 120 ou X ≥ 150) 7. filhos e sobrinhos).1 5 0. comporta-se como abaixo: Simule a resistˆncia de 5000 vigas a partir de valores gerados de uma uniforme [0.1 2 3 4 0. irm˜os.1 0. Verifique c˜ a o a e isto gerando dois vetores x e y com distribui¸ao uniforme [0.2 INTRODUCAO AO R ¸˜ 6. Verifique o histograma. A distribui¸ao da soma de duas vari´veis aleat´rias uniformes n˜o ´ uniforme. pag 65) Num estudo sobre a incidˆncia de cˆncer foi registrado. (Ex 3.3 0. y e z. (extra´ de Magalh˜es e Lima. o u a o a tios.113 Resistˆncia 2 e 3 4 pi 0. 9. e (Dica: Use o comando ifelse() do R). c a e o 8. . 2001) A resistˆncia (em toneladas) de vigas de concreto ıdo a e produzidas por uma empresa.1]. Obtenha o histograma para x.1 0. Descreva os comandos que utilizou. 1] com 3000 valores cada c˜ e fazendo z = x + y.2 6 0.

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

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

seq(0.c(400. 2000. rate = 1/500) plot(x. type = "l") ax <. ay. rate=1/500. 0) polygon(ax. x[x > 400]. l = 200) fx <. 2000).dexp(x.c(0.0005 fx 0. a > > > > > > x <. fx. type = "l") ax <. dexp(c(400. 2000). ay. l = 200) fx <. dens = 10) > > > > > > x <. rate = 1/500) plot(x. c˜ A Figura 25 mostra o gr´fico desta distribui¸˜o com indica¸ao da area correspondente ` a ca c˜ ´ a probabilidade pedida. +∞) mas para fazer o c˜ e gr´fico consideramos apenas o intervalo (0. 2000).dexp(x. x[x > 400]. 2000. 0) polygon(ax.seq(0.0020 0. 400. x[x > 400]. fx.c(400.0015 500 1000 x 1500 2000 Figura 25: Fun¸˜o de densidade da Exp(500) com a ´rea correspondente a P [X ≥ 400]. 2000. 1/500). 2000) ay <. 2000. 2000) ay <.13 COMPLEMENTOS SOBRE DISTRIBUICOES DE PROBABILIDADE ¸˜ 116 0.449329 with absolute error < 5e-06 Note ainda que poder´ ıamos obter o mesmo resultado simplesmente usando a fun¸˜o pexp() ca com o comando pexp(400. lower=F). x[x > 400]. onde o argumento corresponde a 1/λ na equa¸ao da exponencial. 400.0010 0. ca a ` . 1/500).c(0. dexp(c(400. dens = 10) 0.0000 0 0. Note que a fun¸ao ´ positiva no intervalo (0.

lambda = 500) { + ex <. lambda = 500. Depois a retornamos a semente ao seu estado original a a pr´xima amostra tem portanto os mesmos o elementos da primeira. exp.46774980 0.seed)| .30640096 > rnorm(5) [1] 0.x)^2) * (1/lambda) * exp(-x/lambda) + return(vx) + } > integrate(v. Cada vez que o comando rnorm() ´ chamado diferentes elementos e e da amostra s˜o produzidos. porque a semente do gerador ´ automaticamente modificada pela a e fun¸˜o.function(x.x = ex) 250000 with absolute error < 6.4464515 -2. Novamente para ilustrar o uso do R vamos “esquecer” que conhecemos estes resultados e vamos obtˆ-los numericamente.exp <.exp.Random.7488927 0. 0.117 INTRODUCAO AO R ¸˜ 13.seed(214) > rnorm(5) [1] -0. Inf) 500 with absolute error < 0. exp.04088223 1.02522505 0.seed() pode ser usada para controlar o comportamento do gerador de n´meros aleat´rios.((x .4257775 0.00088 > ex <. 0. u o Esta fun¸ao define o valor inicial da semente que ´ mudado a cada gera¸ao subsequente de c˜ e c˜ n´meros aleat´rios.4 Gerador de n´ meros aleat´rios u o A gera¸˜o da amostra depende de um gerador de n´meros aleat´rios que ´ controlado por uma ca u o e semente (seed em inglˆs).exp.x) { + vx <.integrate(e.exp <.seed)| e c˜ u o |help(set.02522505 0.04088223 1.3 Esperan¸a e Variˆncia c a ∞ Sabemos que para a distribui¸ao exponencial a esperan¸a E[X] = 0 xf (x)dx = λ e a variˆncia c˜ c a ∞ 2 2 V ar[X] = 0 (x − E[X]) f (x)dx = λ pois podem ser obtidos analiticamente.46774980 0. Inf. Mas caso necess´rio ca a a a set. Em geral o usu´rio n˜o precisa se preocupar com este mecanismo.2051418 1.00335193 2. Portanto para gerar duas amostras idˆnticas basta usar set. Inf)$value > ex [1] 500 > v.function(x. > set.exp.00335193 2.9 13.exp.30640096 Nos comandos acima mostramos que depois da primeira amostra ser retirada a semente ´ e mudada e por isto os elementos da segunda amostra s˜o diferentes dos da primeira.seed(214) > rnorm(5) [1] -0.x * (1/lambda) * exp(-x/lambda) + return(ex) + } > integrate(e. 0.seed() conu o e forme ilustrado abaixo. Para saber mais sobre gera¸ao de n´meros aleat´rios no R veja |help(. Para isto vamos definir fun¸˜es para a esperan¸a e variˆncia e e co c a fazer a integra¸ao num´rica.9818137 > set. c˜ e > e.

100.seq(0. Vejamos como fica a aproxima¸ao no caso da distribui¸ao binomial.6240852 . Isto ´ especialmente importante no caso de usarmos calculadoras e e/ou tabelas para calcular probabilidades.4464515 997. Quando usamos um computador esta aproxima¸˜o ca ´ menos importante. c˜ c˜ Na pr´tica.5] > pbinom(5.e.5 Argumentos vetoriais e lei da reciclagem As fun¸˜es de probabilidades aceitam tamb´m vetores em seus argumentos conforme ilustrado co e nos exemplo abaixo. 10. np(1 − p)). i. 1/2) e portanto com a aproxima¸ao X ≈ N (5. a c˜ c˜ > > > > > > xb <. De toda forma vamos ilustrar aqui este resultado.553964 35. px. p) ≈ N (np.5. p).0:10 px <. mean = c(0. sqrt(2. ˆ P [X < 6] Neste caso P [XB < 6] = P [XB ≤ 5] ≈ P [XN ≤ 5. 5)) [1] 13.7488927 100.95)) [1] -1. 5. 0. visto que ´ f´cil calcular as probabilidades exatas com o aux´ do come e a ılio putador. 2. > qnorm(c(0. a 13. Isto significa que podemos usar a distribui¸ao normal para calcular c˜ probabilidades aproximadas em casos em que seria “trabalhoso” calcular as probabilidades exatas pela binomial ou Poisson. mean = c(10.5) plot(xb. 5).872238 28. len = 100) fx <.6 Aproxima¸˜o pela Normal ca Nos livros texto de estat´ ıstica podemos ver que as distribui¸oes binomial e Poisson podem ser c˜ aproximadas pela normal. 10.dnorm(xn.644854 1.5) [1] 0.dbinom(xb.6230469 > pnorm(5. A Figura 26 mostra o c˜ gr´fico da distribui¸ao binomial e da aproxima¸ao pela normal. lembrando que e ao usar a aproxima¸ao pela normal devemos usar a corre¸ao de continuidade e/ou somando e c˜ c˜ subtraindo 0. 20. A aproxima¸˜o neste caso ´ de que ca e X ∼ B(n. 40). em geral a aproxima¸ao ´ considerada aceit´vel quando np ≥ 5 e n(1 − p) ≥ 5 a c˜ e a e sendo tanto melhor quanto maior for o valor de n. sd = c(2. 30.05.644854 > rnorm(4.5).4257775 10.5 ao valor pedido. fx) Vamos tamb´m calcular as seguintes probabilidades exatas e aproximadas. Seja X ∼ B(10.584654 Note que no ultimo exemplo a lei da reciclagem foi utilizada no vetor de desvios padr˜o. sqrt(2. 1000)) [1] 0. 5.5)) [1] 0. Seja X ∼ B(n. os ´ a desvios padr˜o utilizados foram (2. 0.7948582 > rnorm(4. 10.963627 6. 10. 5. 2. type = "h") xn <.13 COMPLEMENTOS SOBRE DISTRIBUICOES DE PROBABILIDADE ¸˜ 118 13. 0.5)) lines(xn.

5.5.9430769 ˆ P [X ≥ 2] Neste caso P [XB ≥ 2] = 1 − P [XB ≤ 1] ≈ P [XN ≤ 1.5] > pbinom(6.00 0 0. 10.5)) [1] 0.5] . 10. 5.pbinom(2. sqrt(2. 1/2) e a aproxima¸˜o pela N (5.15 0.10 0.8286091 ˆ P [X > 2] Neste caso P [XB > 2] = 1 − P [XB ≤ 2] ≈ 1 − P [XN ≤ 2. 0. 0.5] > 1 .25 2 4 xb 6 8 10 Figura 26: Fun¸˜o de probabilidade da B(10.5) [1] 0.20 0.5).5) [1] 0.9453125 > 1 .828125 > pnorm(6.119 INTRODUCAO AO R ¸˜ px 0.5)) [1] 0. ca ca ˆ P [X ≤ 6] Neste caso P [XB ≤ 6] ≈ P [XN ≤ 6.05 0. 5. 2. sqrt(2.pnorm(2.

6218719 13.5)) [1] 0. 5. 5.5.pbinom(1.5.5.5) [1] 0.8151808 ˆ P [1 ≤ X ≤ 5] Neste caso P [1 ≤ XB ≤ 5] = P [XB ≤ 5] − P [XB ≤ 0] ≈ P [XN ≤ 5. 0.5)) .5) .pnorm(0.6220703 > pnorm(5. 198. pag. 0.5] − P [XN ≤ 3. 5.5 ≤ XN ≤ 7. sqrt(2.7 Exerc´ ıcios 1.5) [1] 0.5 < X < 6] ˆ P [X < 8] .1144677 ˆ P [3 < X ≤ 8] Neste caso P [3 < XB ≤ 8] = P [XB ≤ 8] − P [XB ≤ 3] ≈ P [XN ≤ 8.5] > pbinom(8.5.5)) .pnorm(3.pnorm(1.pbinom(3. 0.5] − P [XN ≤ 0.5. 10.5)) [1] 0. ex. 5.9892578 > 1 . sqrt(2. 0.pnorm(6. sqrt(2. 5.5) [1] 0. 5.9865717 ˆ P [X = 7] Neste caso P [XB = 7] ≈ P [6. sqrt(2.8173828 > pnorm(8.1171875 > pnorm(7. (c) Obter as probabilidades: ˆ P [X > 2] ˆ P [1. Dica: para resolver vocˆ vai precisar da defini¸˜o da fun¸˜o Gama: e ca ca ∞ Γ(a) = 0 xa−1 e−x dx (b) Obter E[X] para λ = 5. sqrt(2. 10.5.5] > dbinom(7. sqrt(2.5) [1] 0. (Bussab & Morettin. sqrt(2. 10.5)) [1] 0. 10. Obter o resultado analitica e computacionalmente.5) . 10.5)) .5] > pbinom(5. 0. 0.13 COMPLEMENTOS SOBRE DISTRIBUICOES DE PROBABILIDADE ¸˜ 120 > 1 .pbinom(0. 10. 51) A fun¸˜o de densidade de probabilidade de distribui¸ao Weibull ´ dada por: ca c˜ e f (x) = λ xλ−1 e−x 0 λ para x ≥ 0 para x < 0 (a) Obter E[X] para λ = 2.5.5)) [1] 0. 5.

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

03 0 20 40 60 N = 70 Bandwidth = 3.035 10 20 30 precip 40 50 60 70 Figura 27: Histograma para os dados precip e a densidade estimada usando a fun¸˜o density.020 0.default(x = precip) 0. ca density. c˜ .848 80 Figura 28: Dados precip e a densidade estimada usando a fun¸ao density.01 Density 0.025 0.005 0.02 0.015 0.14 EXPLORANDO DISTRIBUICOES DE PROBABILIDADE EMP´ ¸˜ IRICAS 122 0.000 0 0.010 Density 0.030 0.00 0.

03 0.02 0. Podemos notar que o grau de suaviza¸ao aumenta a medida de aumentamos os c˜ valores deste argumento e as densidades estimadas podem ser bastante diferentes! > > > > > plot(density(precip. ponto. bw = 1. Vamos examinar os argumentos da fun¸ao.) NULL Os dois argumentos chave s˜o portanto bw e kernel que controlam a distˆncia na qual se a a procuram vizinhos e o peso a ser dado a cada vizinho. lty = 2) lines(density(precip. ao que chamamos de n´cleo e ca u (kernel). bw = 5). "bw=5". a u a > (kernels <. bw = 1).123 INTRODUCAO AO R ¸˜ bw=1 bw=5 bw=10 0.. main = "") rug(precip) lines(density(precip. main = "kernels com bw = 1") > for (i in 2:length(kernels)) lines(density(0.01 Density 0. Podem ser dados pesos aos dados vizinhos de acordo com sua proximidade ao ponto a ser estimado.eval(formals(density. lty = 1:3) O outro argumento importante ´ tipo de fun¸˜o de pesos.default)$kernel)) > plot(density(0. c˜ > args(density) function (x. bw = 10).00 0.. Para ilustrar isto vamos experimentar a fun¸˜o com diferentes valores para o argumento bw. xlab = "". . Os resultados est˜o ca a na Figura 29. kern = kernels[i]). .045. bw = 1). O R implementa v´rios n´cleos diferentes cujos formatos s˜o mostrados na Figura 30. c("bw=1". 0. lty = 3) legend(5.04 10 20 30 40 50 N = 70 Bandwidth = 1 60 70 Figura 29: Densidade estimada usando a fun¸˜o density com diferentes valores para o arguca mento bw. "bw=10"). respectivamente.

ker = "epa"). lty = 2) lines(density(precip. + cex = 0. inspecionando os resultados anteriores podemos concluir que a largura de banda (bandwidth – bw) ´ o que mais influencia a estima¸ao de densidade. lty = 3. "rectangular". "biweight". legend = kernels. col = rep(1:3.4 "epanechnikov" "rectangular" "optcosine" "triangular" "biweight" kernels com bw = 1 gaussian epanechnikov rectangular triangular biweight cosine optcosine 0.035. main = "") rug(precip) lines(density(precip. col = 3) lines(density(precip.8. 0. lty = 2. lty = rep(1:2. "triangular". 0. a esta altura voce deve estar se perguntando: mas como saber qual a largura de banda adequada? A princ´ podemos tentar diferentes valores no argumento bw e inspecionar ıpio . 3).0 −3 0.14 EXPLORANDO DISTRIBUICOES DE PROBABILIDADE EMP´ ¸˜ IRICAS 124 [1] "gaussian" [6] "cosine" 0. col = 2) lines(density(precip.4. isto ´. col = seq(kernels). ker = "biw"). ´ o argumento mais e c˜ e e importante. Note que as densidades estimadas utilizando os diferentes n´cleos s˜o bastante u a similares! > > > > > > > > + + plot(density(precip). "cosine"). ker = "tri").3 −2 −1 0 1 2 3 Figura 30: Diferentes n´cleos implementados pela fun¸˜o density. col = 3) legend(0.2 0. u e a a Bem. legend = c("gaussian". each = 2)) Portanto.int = 1) Utilizando diferentes n´cleos no conjunto de dados precip obtemos os resultados mostrados u na Figura 31. u ca + col = i) > legend(1. ker = "rec"). lty = 1. ker = "cos"). y. col = 2) lines(density(precip.5. "epanechnikov". O tipo de n´cleo (kernel) ´ de importˆncia secund´ria.1 Density 0.

125 INTRODUCAO AO R ¸˜ gaussian epanechnikov rectangular triangular biweight cosine 0. Estes m´todos podem ser especificados no c˜ a e mesmo argumento bw. No comando usado no in´ desta sess˜o onde n˜o especificamos e e ıcio a a o argumento bw foi utilizado o valor “default” que ´ o m´todo "nrd0" que implementa a regra e e pr´tica de Silverman. col = 3) lines(density(precip. passando agora para este argumento caracteres que identificam o valor. col = 4) lines(density(precip. e a ca Na Figura 33 ilustramos resultados obtidos com os diferentes m´todos. e > > > > > > > > > + data(precip) plot(density(precip. bw = "sj") > plot(precip.848 80 Figura 31: Densidade estimada usando a fun¸˜o density com diferentes valores para o arguca mento kernel. bw = "bcv"). col = 5) lines(density(precip. "nrd". bw = "SJ-ste"). Se quisermos mudar isto para o m´todo de Sheather & Jones podemos a e fazer como nos comandos abaixo que produzem o resultado mostrado na Figura 32. bw = "nrd").035. lty = 1) .dSJ) > rug(precip) Os detalhes sobre os diferentes m´todos implementados est˜o na documenta¸˜o de bw. "bcv".density(precip. Felizmente para n´s v´rios autores e e o a se debru¸aram sobre este problema e descobriram m´todos autom´ticos de sele¸ao que que c e a c˜ comportam bem na maioria das situa¸oes pr´ticas.00 0. os resultados.03 0 20 40 60 N = 70 Bandwidth = 3. bw = "ucv"). n = 1000)) rug(precip) lines(density(precip. bw = "SJ-dpi"). O problema ´ que esta escolha ´ subjetiva. "ucv". 0. col = 6) legend(55.nrd(). ao inv´s de um valor num´rico.01 Density 0.dSJ <. col = 2) lines(density(precip.02 0. > precip. "SJ-dpi"). "SJ-ste". col = 1:6. legend = c("nrd0".

932 80 Figura 32: Densidade estimada para os dados precip usando a fun¸˜o density com crit´rio ca e de Sheather & Jones para sele¸˜o da largura de banda.015 0.14 EXPLORANDO DISTRIBUICOES DE PROBABILIDADE EMP´ ¸˜ IRICAS density.00 0.000 0.default(x = precip.848 80 Figura 33: Diferentes m´todos para largura de banda implementados pela fun¸˜o density.020 0.005 0. bw = "sj") 0.025 0. ca density.03 0 20 40 60 N = 70 Bandwidth = 3.01 Density 0.010 Density 0.035 126 0.02 0. n = 1000) nrd0 nrd ucv bcv SJ−ste SJ−dpi 0. e ca .030 0 20 40 60 N = 70 Bandwidth = 3.default(x = precip.

a c˜ ca . 3. Carregar o conjunto de dados faithful e obter estima¸ao de densidade para as vari´veis c˜ a tempo de erup¸~o e dura¸~o da erup¸ao. ca ca c~ 2. Rodar e estudar os exemplos da sess˜o examples da documenta¸ao da fun¸˜o density.2 Exerc´ ıcios 1. Carregar o conjunto airquality e densidades estimadas para as 4 vari´veis medidas neste a conjunto de dados.127 INTRODUCAO AO R ¸˜ 14.

8 5.745 > t.3.6.9. 6. 5. 4.8.v . 3. para uma amostra de tamanho n ´ dado por: e x − tt ¯ S2 . 4.5 6. 5.2) Sabemos que o intervalo de confian¸a para m´dia de uma distribui¸˜o normal com variˆncia c e ca a desconhecida. + 5. Vinte pacientes foram sorteados e tiveram seu tempo de rea¸ao anotado.c(2.5.9 4.9.4.8.8 5.1.v <.length(tempo) > n [1] 20 > t. e 15.var(tempo) > t.6 5.4 3.8 5.9 3.5 3.8.5. 4.mean(tempo) > t.3 4.3. 5. escrevendo uma fun¸˜o ca 3.2 Entramos com os dados com o comando > tempo <.m [1] 4. 4.4. usando uma fun¸˜o j´ existente no R ca a 15.4 5. 5. 5.1.1 4.6 4.7. 6. e a > n <.5 4. 3. e ca Vamos agora obter a resposta das trˆs formas diferentes mencionadas acima. a m´dia e a variˆncia amostral.5.7 4.m <.7. x + tt ¯ n S2 n onde tt ´ o quantil de ordem 1 − α/2 da distribui¸˜o t de Student. Os dados c c˜ foram os seguintes (em minutos): 2. com n − 1 graus de liberdade. fazendo as contas passo a passo.6.0 3. 4.15 INTERVALOS DE CONFIANCA – I ¸ 128 15 Intervalos de confian¸a – I c Nesta sess˜o vamos verificar como utilizar o R para obter intervalos de confian¸a para parˆmeta c a ros de distribui¸oes de probabilidade.9 6. 3.9. c˜ Para fins did´ticos mostrando os recursos do R vamos mostrar trˆs poss´ a e ıveis solu¸˜es: co 1.7 5. 3. 4.1 Fazendo as contas passo a passo Nos comandos a seguir calculamos o tamanho da amostra.1 M´dia de uma distribui¸˜o normal com variˆncia desconhecida e ca a Considere o seguinte problema: Exemplo O tempo de rea¸ao de um novo medicamento pode ser considerado como tendo distribui¸ao c˜ c˜ Normal e deseja-se fazer inferˆncia sobre a m´dia que ´ desconhecida obtendo um intervalo de e e e confian¸a. utilizando o R como uma calculadora 2.3 4. 4.

conf)/2).test ca Mostramos as solu¸˜es acima para ilustrar a flexibilidade e o uso do programa.975).m(tempo) [1] 4.ic <.qt(c((1 .v/length(tempo)) > t.1. Neste caso a fun¸˜o t.var(x) + quantis <.211157 > ic.m <.129 INTRODUCAO AO R ¸˜ [1] 0.9920789 A seguir montamos o intervalo utilizando os quantis da distribui¸ao t.t.m(tempo.3048.ic [1] 4.278843 5. conf = 0.(1 .006e-14 alternative hypothesis: true mean is not equal to 0 95 percent confidence interval: 4.length(x) + media <.382186 Escrever uma fun¸˜o ´ particularmente util quando um procedimento vai ser utilizados ca e ´ v´rias vezes. a 15. c > t. > ic.1) * sqrt(t. p-value = 1.745 .99) [1] 4.211157 sample estimates: mean of x 4.2 Escrevendo uma fun¸˜o ca Podemos generalizar a solu¸ao acima agrupando os comandos em uma fun¸˜o. Entretanto co n˜o precisamos fazer isto na maioria das vezes porque o R j´ vem com v´rias fun¸oes para a a a c˜ procedimentos estat´ ısticos j´ escritas.1) + ic <.278843 5.m + qt(c(0.function(x.conf)/2. df = 19. df = n . df = n .95) { + n <. 0.mean(x) + variancia <.test pode ser utilizada como a ca vemos no resultado do comando a sequir que coincide com os obtidos anteriormente.test(tempo) One Sample t-test data: tempo t = 21. Nos comandos c˜ ca primeiro definimos a fun¸˜o e a seguir utilizamos a fun¸ao criada definindo intervalos a 95% e ca c˜ 99%.211157 15. 1 .278843 5. para obter um IC a 95% c˜ de confian¸a.3 Usando a fun¸˜o t.1.025. conf = 0.107814 5.media + quantis * sqrt(variancia/n) + return(ic) + } > ic. > t.

que ´ uma das formas do verme da esquitosomose. Obter IC’s a a o ca 90% e 99%. a e Um experimento consistiu em aplicar o medicamento em 200 pacientes. Para isso.8 11.4 10.3 10. sorteamos dias amostras de 6 pe¸as de cada e ` a c m´quina. 2.3 10.0 8.8 9. e obtivemos as seguintes resistˆncias: a e M´quina A a M´quina B a 145 127 136 143 128 132 142 138 141 142 137 132 Obtenha intervalos de confian¸a para a raz˜o das variˆncias e para a diferen¸a das m´dias c a a c e dos dois grupos.15 INTERVALOS DE CONFIANCA – I ¸ 130 15.8 9. Encontre ambos intervalos. Montar o intervalo de confian¸a para a c propor¸ao de curados.7 9.0 11.7 10. 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.6 9.9 9. Os dados abaixo s˜o uma amostra aleat´ria da distribui¸˜o Bernoulli(p). e observar que 160 deles foram curados.7 8.5 10.9 10.5 10. Queremos verificar se duas m´quinas produzem pe¸as com a mesma homogeneidade a c quanto a resistˆncia a tens˜o. c˜ Note que h´ duas express˜es poss´ a o ıveis para este IC: o “otimista”e o “conservativo”.4 10. e 1. atrav´s de uso de um certo medicamento em c˜ e doentes contaminados com cerc´ria. escolhidos ao acaso. Encontre intervalos de confian¸a de 95% para a m´dia de uma distribui¸˜o Normal com c e ca variˆncia 1 dada a amostra abaixo a 9.0 4. .2 9. Pretende-se estimar a propor¸ao p de cura.2 Exerc´ ıcios Em cada um dos exerc´ ıcios abaixo tente obter os intervalos das trˆs formas mostradas acima.8 9.

131

INTRODUCAO AO R ¸˜

16

Fun¸oes de verossimilhan¸a c˜ c

A fun¸ao de verossimilhan¸a ´ central na inferˆncia estat´ c˜ c e e ıstica. Nesta sess˜o vamos ver a como tra¸ar gr´ficos de fun¸oes de verossimilhan¸a de um parˆmetro utilizando o programa R. c a c˜ c a Tamb´m veremos como tra¸ar a fun¸ao deviance, obtida a partir da fun¸˜o de verossimilhan¸a e c c˜ ca c e conveniente em certos casos para representa¸oes gr´ficas, c´lculos e inferˆncias. c˜ a a e

16.1

Defini¸oes e nota¸˜es c˜ co

Seja L(θ; y) a fun¸˜o de verossimilhan¸a. A nota¸˜o indica que o argumento da fun¸˜o ´ θ que ca c ca ca e pode ser um escalar ou um vetor de parˆmetros. Nesta sess˜o consideraremos que ´ um escalar. a a e O termo y denota valores realizados de uma vari´vel aleat´ria Y , isto ´ os valores obtidos em a o e uma amostra. O valor que maximiza L(θ; y) ´ chamado do estimador de m´xima verossimilhan¸a e denoe a c ˆ A fun¸˜o de verossimilhan¸a relativa ou normatizada R(θ; y) ´ dada pela raz˜o tado por θ. ca c e a entre a fun¸˜o de verossimilhan¸a e o valor maximizado desta fun¸ao, portanto R(θ; y) = ca c c˜ ˆ L(θ; y)/L(θ; y), assumindo valores no intervalo [0, 1]. Esta fun¸˜o ´ util para comparar todos ca e ´ dos modelos dados pelos diferentes valores de θ com o modelo mais plaus´ (veross´ ıvel ıvel) para a amostra obtida. O valor que maximiza a fun¸ao de verossimilhan¸a ´ tamb´m o que maximiza a a fun¸˜o c˜ c e e ca obtida pelo logar´ ıtimo da fun¸ao de verossimilhan¸a, chamada fun¸ao de log-verossimilhan¸a, c˜ c c˜ c uma vez que a fun¸ao logar´ c˜ ıtimo ´ uma fun¸ao monotˆnica. Denotamos a fun¸ao de loge c˜ o c˜ verossimilhan¸a por l(θ; y) sendo l(θ; y) = log(L(θ; y)). A fun¸˜o de log-verossimilhan¸a ´ c ca c e mais adequada para c´lculos computacionais e permite que modelos possam ser comparados a aditivamente, ao inv´s de multiplicativamente. e ˆ Aplicando-se o logar´ ıtimo a fun¸ao padronizada obtemos log{R(θ; y)} = l(θ; y) − l(θ; y), que ` c˜ tem portanto um valor sempre n˜o-positivo. Desta forma esta fun¸ao pode ser multiplicada por a c˜ um n´mero negativo arbitr´rio, e sendo este n´mero -2 obtemos a chamada fun¸˜o deviance, u a u ca ˆ y) , onde lembramos que θ ´ o estimador de m´xima verossimilhan¸a ˆe D(θ; y) = −2 l(θ; y) − l(θ; a c de θ. Esta fun¸˜o tem portanto o seu m´ ca ınimo em zero e quanto maior o seu valor, maior a diferen¸a de plausibilidade entre o modelo considerado e o modelo mais plaus´ para os dados c ıvel obtidos na amostra. Esta fun¸ao combina as vantagens da verossimilhan¸a relativa e da logc˜ c verossimilhan¸a sendo portanto conveniente para c´lculos computacionais e inferˆncia. c a e

16.2

Exemplo 1: Distribui¸˜o normal com variˆncia conhecida ca a

Seja o vetor (12, 15, 9, 10, 17, 12, 11, 18, 15, 13) uma amostra aleat´ria de uma distribui¸ao o c˜ normal de m´dia µ e variˆncia conhecida e igual a 4. O objetivo ´ fazer um gr´fico da fun¸ao e a e a c˜ de log-verossimilhan¸a. c Solu¸˜o: ca Vejamos primeiro os passos da solu¸˜o anal´ ca ıtica: 1. Temos que X1 , . . . , Xn onde, neste exemplo n = 10, ´ uma a.a. de X ∼ N (µ, 4), e 2. a densidade para cada observa¸ao ´ dada por f (xi ) = c˜ e 3. a verossimilhan¸a ´ dada por L(µ) = c e
10 1 1 √ 2 2π

exp{− 1 (xi − µ)2 }, 8

f (µ; xi ),

16 FUNCOES DE VEROSSIMILHANCA ¸˜ ¸

132

4. e a log-verossimilhan¸a ´ dada por c e
10

l(µ) =
1

log(f (xi ))
10 10

1 = −5 log(8π) − ( 8

x2 − 2µ i
1 1

xi + 10µ2 ),

(4)

5. que ´ uma fun¸˜o de µ e portanto devemos fazer um gr´fico de l(µ) versus µ tomando e ca a v´rios valores de µ e calculando os valores de l(µ). a Vamos ver agora uma primeira poss´ forma de fazer a fun¸ao de verossimilhan¸a no R. ıvel c˜ c 1. Primeiro entramos com os dados que armazenamos no vetor x > x <- c(12, 15, 9, 10, 17, 12, 11, 18, 15, 13) 2. e calculamos as quantidades > sx2 <- sum(x^2) > sx <- sum(x) 3. agora tomamos uma sequˆncia de valores para µ. Sabemos que o estimador de m´xima e a verossimilhan¸a neste caso ´ µ = 13.2 (este valor pode ser obtido com o comando mean(x)) c eˆ e portanto vamos definir tomar valores ao redor deste ponto. > mu.vals <- seq(11, 15, l = 100) 4. e a seguir calculamos os valores de l(µ) de acordo com a equa¸ao acima c˜ > lmu <- -5 * log(8 * pi) - (sx2 - 2 * mu.vals * sx + 10 * (mu.vals^2))/8 5. e finalmente fazemos o gr´fico visto na Figura 34 a > plot(mu.vals, lmu, type = "l", xlab = expression(mu), ylab = expression(l(mu))) Entretanto podemos obter a fun¸˜o de verossimilhan¸a no R de outras forma mais geral e ca c menos trabalhosa. Sabemos que a fun¸ao dnorm() calcula a densidade f (x) da distribui¸˜o c˜ ca normal e podemos usar este fato para evitar a digita¸ao da express˜o acima. c˜ a
ˆ

10 1

x2 e i

10 1

xi

Primeiro vamos criar uma fun¸ao que calcula o valor da log-verossimilhan¸a para um certo c˜ c valor do parˆmetro e para um certo conjunto de dados, a > logvero <- function(mu, dados) { + sum(dnorm(dados, mean = mu, sd = 2, log = TRUE)) + }

ˆ

a seguir criamos uma sequˆncia adequada de valores de µ e calculamos l(µ) para cada um e dos valores

133

INTRODUCAO AO R ¸˜

−32 11

−31

−30

l(µ) −29

−28

−27

−26

12

13 µ

14

15

Figura 34: Fun¸ao de verossimilhan¸a para o parˆmetro µ da distribui¸ao normal com variˆncia c˜ c a c˜ a σ 2 = 4 com os dados do Exemplo 1. > mu.vals <- seq(11, 15.5, l = 100) > mu.vals[1:10]

[1] 11.00000 11.04545 11.09091 11.13636 11.18182 11.22727 11.27273 11.31818 11.363 [10] 11.40909 > lmu <- sapply(mu.vals, logvero, dados = x) > lmu[1:10]

[1] -32.12086 -31.87344 -31.63119 -31.39410 -31.16218 -30.93542 -30.71383 -30.4974 [9] -30.28615 -30.08005 Note na sintaxe acima que a fun¸˜o sapply aplica a fun¸ao logvero anteriormente ca c˜ definida em cada elemento do vetor mu.vals.
ˆ

Finalmente fazemos o gr´fico. a > plot(mu.vals, lmu, type = "l", xlab = expression(mu), ylab = expression(l(mu)))

Para encerrar este exemplo vamos apresentar uma solu¸ao ainda mais gen´rica que consiste c˜ e em criar uma fun¸ao que vamos chamar de vero.norm.v4 para c´lculo da verossimilhan¸a de c˜ a c 2 distribui¸oes normais com σ =4. Esta fun¸˜o engloba os comandos acima e pode ser utilizada c˜ ca para obter o gr´fico da log-verossimilhan¸a para o parˆmetro µ para qualquer amostra obtida a c a desta distribui¸ao. c˜

16 FUNCOES DE VEROSSIMILHANCA ¸˜ ¸

134

> vero.normal.v4 <- function(mu, dados) { + logvero <- function(mu, dados) sum(dnorm(dados, mean = mu, sd = 2, + log = TRUE)) + sapply(mu, logvero, dados = dados) + } > curve(vero.normal.v4(x, dados = x), 11, 15, xlab = expression(mu), + ylab = expression(l(mu)))

16.3

Exemplo 2: Distribui¸˜o Poisson ca

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

135

INTRODUCAO AO R ¸˜

−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¸ao de verossimilhan¸a (esquerda) e deviance (direita) para o parˆmetro λ da c˜ c a distribui¸ao Poisson. c˜ > curve(dev.pois(x, dados = y), 0.5, 5, xlab = expression(lambda), + ylab = expression(l(lambda))) O estimador de m´xima verossimilhan¸a ´ o valor que maximiza a fun¸˜o de verossimilhan¸a a c e ca c que ´ o mesmo que minimiza a fun¸ao deviance. Neste caso sabemos que o estimador tem e c˜ express˜o anal´ a ıtica fechada λ = x e portanto pode ser obtido diretamente. ¯ > lambda.est <- mean(y) > lambda.est [1] 1.8 Caso o estimador n˜o tenha express˜o fechada pode-se usar maximiza¸ao (ou minimiza¸˜o) a a c˜ ca num´rica. Para ilustrar isto vamos encontrar a estimativa do parˆmetro da Poisson e verificar e a que o valor obtido coincide com o valor dado pela express˜o fechada do estimador. Usamos o a fun¸˜o optimise() para encontrar o ponto de m´ ca ınimo da fun¸ao deviance. c˜ > optimise(dev.pois, int = c(0, 10), dados = y) $minimum [1] 1.800004 $objective [1] 1.075264e-10 A fun¸˜o optimise() ´ adequada para minimiza¸˜es envolvendo um unico parˆmetro. Para ca e co ´ a dois ou mais parˆmetros deve-se usar a fun¸ao optim() ou nlminb(). a c˜ Finalmente os comandos abaixo s˜o usados para obter graficamente o intervalo de confian¸a a c (a 95%) baseado na fun¸ao deviance. c˜ > curve(dev.pois(x, dados = y), 0.8, 3.5, xlab = expression(lambda), + ylab = expression(l(lambda))) > L.95 <- qchisq(0.95, df = 1) > abline(h = L.95)

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

9. σ) e para cada um dos pares. 15. σ).8. sd = sqrt(var(x) * (length(x) . 15.expand.1. 20.4. log = TRUE)) 3.7.8.1)/length(x))) > pars. que ´ uma fun¸ao de µ e σ e portanto devemos fazer um gr´fico tridimensional de l(µ. 13. 9. Vamos tamb´m calcular e as estimativas de m´xima verossimilhan¸a. ficando a primeira como exerc´ para o leitor. 13. > logveroN <.8.vals <. + 12. ıcio 1.1. σ) e calculamos l(µ.8. 11. 12. 2. σ.5) > pars. + 13.5. 15. a verossimilhan¸a ´ dada por L(µ. e a log-verossimilhan¸a ´ dada por c e 10 10 1 f (µ. 18. 10. 12.4. 12. > par.1. a seguir criamos uma sequˆncia adequada de pares de valores de (µ.9. 12.c(12. (5) 5. σ) e calculando os valores correspondentes a de l(µ. 12.1.3.6. 9.c(mu = mean(x). 13.5.2.5. 12.1. + 13.3. xi ). mean = pars[1]. sd = seq(1. σ) = 1 log(f (xi )) 1 ( 2σ 2 10 10 = −5 log(2πσ 2 ) − x2 − 2µ i 1 1 xi + 10µ2 ). Neste exemplo vamos fazer apenas c˜ a ca da segunda forma. 11.vals) . 11. Primeiro entramos com os dados que armazenamos no vetor x.6. a densidade para cada observa¸ao ´ dada por f (xi ) = c˜ e 3.3.248954 2. 15.7. 8. 11.MV mu 12. 11.9.function(pars. 12.3.4. ou ent˜o usando a fun¸˜o dnorm(). nesta ordem) e para um certo a e a conjunto de dados. 15.885714 sd 2. l = 100).vals) [1] 10000 2 > head(par. 11.5.137 1 √ σ 2π INTRODUCAO AO R ¸˜ 1 exp{− 2σ2 (xi − µ)2 }. 17.2. a c > x <. 10. a seguir vamos criar uma fun¸ao que calcula o valor da log-verossimilhan¸a para um certo c˜ c par de valores dos parˆmetros (m´dia e desvio padr˜o. 15.2.grid(mu = seq(5. Assim como no Exemplo 1 poder´ ıamos calcular a verossimilhan¸a fazendo as contas ”passo a c passo”da fun¸ao acima. 14.MV <. + sd = pars[2].2. l(µ.7. + l = 100)) > dim(par. 14.9. σ) = c e 4. dados) sum(dnorm(dados.8. σ) e c˜ a versus µ e σ tomando v´rios valores de pares (µ.

486 5. -75.5) Notas: . matrix(logL.903 5.3.apply(par.303030 1 -1126.vals. ou ainda como um mapa de cores correspondentes aos valores gerado por image().856 Note na sintaxe acima que a fun¸ao apply aplica a fun¸˜o logveroN a cada par de c˜ ca valores em cada linha de par.vals$logL <. sigma)).2 12.454545 1 5. logveroN.2 12.873 5. 4. ncol = length(unique(s xlab = expression(mu). pars. by = 5)).MV[2]. > + + > + + > > + + > with(par. como um mapa de curvas ıcie c˜ de isovalores obtido com image().606061 1 5. dados = x) > head(par.MV[1].00000 sd 12.84848 10000 20.MV[1]. Ao final o objeto |par. theta = 30.16 FUNCOES DE VEROSSIMILHANCA ¸˜ ¸ 138 1 2 3 4 5 6 mu sd 5.vals.vals| cont´m na terceira e coluna os valores da log-verossimilhan¸a correspondentes as valores dos parˆmetros dados c a na primeira e segunda colunas. by = 5). length = 9)))) points(pars. ylab = expression(sigma). 1. ylab = expression(sigma).454545 1 -1087. matrix(logL.064 5.MV[2]. unique(sd).151515 1 5.000000 1 5.303030 1 5. 12)) points(pars.757576 1 > tail(par. ylim = c(0.39394 9997 19. pch = 4.vals. zlab = expression(l(mu. col = gray(seq(0. unique(sd). pch = 4.058 5. cex = 1.69697 9999 19.757576 1 -1009.000000 1 -1208.2 12.vals.151515 1 -1167. cex = 1.vals) mu 9995 19. O gr´fico 3-D da fun¸˜o pode ser visualizado de trˆs formas alternativas como mostrado na a ca e Figura 37: como uma superf´ 3D gerada pela fun¸ao persp().2 12. unique(sd).54545 9998 19. pars.24242 9996 19. phi = 30)) with(par. levels = seq(-120. matrix(logL. ncol = length(unique xlab = expression(mu). -75. ylab = expression(sigma).vals.2 > par. persp(unique(mu).2 12.5) with(par. ncol = length(unique(s xlab = expression(mu). image(unique(mu). 1.606061 1 -1048.vals) 1 2 3 4 5 6 mu sd logL 5. breaks = seq(-120. contour(unique(mu).

5 1. a ca c 758696977788999 Obtenha o gr´fico da fun¸˜o de log-verossimilhan¸a. a ca c .2688015) Exerc´ ıcios 54622453301765365372 Obtenha o gr´fico da fun¸˜o de log-verossimilhan¸a. ca a sigm l(mu.MV pois podem ser obtidos analiticamente. sem repeti-los e matrix() para os valores da fun¸ao. c˜ na fun¸ao perp() as argumentos theta e phi s˜o utilizados para rotacionar o gr´fico a c˜ a a fim de se obter uma melhor visualiza¸ao. em especial do o a n´mero e variabilidade dos dados.fitdistr(x.2489544 ( 0.3801427) ( 0. u as fun¸˜es gr´ficas utilizadas requirem: dois vetores de tamanhos n1 e n2 com os valores co a dos argumentos da fun¸ao e os valores da fun¸˜o em uma matrix de dimens˜o n1 ×n2 . a) 6 8 10 12 µ 14 16 18 20 a obten¸˜o da fun¸˜o foi necess´rio especificar faixas de valores para µ e σ. c > require(MASS) > MV <. ˆ ˆ ˆ ˆ 16. c˜ o valor das estimativas de m´xima verossimilhan¸a s˜o indicados por x nos dois ultia c a ´ mos gr´ficos. A defini¸ao ca ca a c˜ desta faixa foi feita ap´s v´rias tentativas pois depende do problema. Por c˜ ca a isto usamos unique() para extrair os valores dos argumentos. Seja a amostra abaixo obtida de uma distribui¸˜o Poisson de parˆmetro λ. Neste caso eles foram encontrados facilmente como mostrado acima no a objeto pars. De forma mais geral. Seja a amostra abaixo obtida de uma distribui¸˜o Binomial de parˆmetro p e com n = 10.139 12 INTRODUCAO AO R ¸˜ 12 −120 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¸ao de verossimilhan¸a para os parˆmetros µ e σ da distribui¸˜o normal com os c˜ c a ca dados do Exemplo 1.8857143 2. "normal") > MV mean sd 12. a fun¸˜o ca fitdistr() do pacote MASS poide ser usada para encontrar estimativas de m´xima a verossimilhan¸a. ca a 2.

5 9. 8.1 6.1 12.9 10.4 12. a ca c .9 10.9 10.4 Obtenha o gr´fico da fun¸˜o de log-verossimilhan¸a.4 16.8 11.16 FUNCOES DE VEROSSIMILHANCA ¸˜ ¸ χ2 140 3. Seja a amostra abaixo obtida de uma distribui¸ao c˜ de parˆmetro a ν.

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

function(p.vals.0 Figura 38: Fun¸˜o de verossimilhan¸a para o parˆmetro p da distribui¸˜o Bernoulli. to = 1) l(p) −70 −60 −50 −40 −30 −20 −10 0 0.seq(0. 0. prob = p. type = "l".01. e a c O gr´fico da fun¸ao ´ obtido com os valores fixados dos parˆmetros no eixo-x e o respectivos a c˜ e a valores da fun¸˜o no eixo-y e unindo-se os pontos assim obtidos. Evitamos os valores nos a extremos do espa¸o param´trico (p = 0 ou p = 1) pois nestes casos a verossimilha¸a ´ zero e c e c e portanto a log-verossimilhan¸a retornada por dbinom() ´ -Inf.99.sapply(p. ylab = "l(p)") Note que os trˆs comandos acima podem ser substitu´ e ıdos por um unico que produz o mesmo ´ resultado: > curve(vero. dados = y). xlab = "p". logvero. log = TRUE)) + } Para obter o gr´fico da fun¸˜o de verossimilhan¸a de um conjunto de dados cria-se uma sea ca c quˆncia de valores para o parˆmetro p e calcula-se o respectivo valor da (log)verossimilhan¸a.binom.binom <.17 INTERVALOS DE CONFIANCA E FUNCAO DE VEROSSIMILHANCA ¸ ¸˜ ¸ 142 > vero. dados. from = 0.8 1. size = n.72 0.4 p 0. vero. ca c a ca (b) Dos resultados para distribui¸ao Bernoulli sabemos que o estimador de m´xima verossimilhan¸a c˜ a c ´ dado por e n yi p = i=1 ˆ n .0 0. c e > p. l = 99) > logvero <. n = length(dados).6 0.binom(x. dados = y) > plot(p. x = sum(dados)) { + return(dbinom(x.vals <. No R isto pode ser feito com ca os comandos abaixo que produzem o gr´fico mostrado na Figura 38.2 0.vals.

5439957 0. ylab = "D(p)") inf sup 0.est .est. + len = 0. 0.binom(p.143 INTRODUCAO AO R ¸˜ e que a informa¸ao esperada coincide com a informa¸ao observada e sendo iguais a: c˜ c˜ n I(ˆ) = p p(1 − p) ˆ ˆ . p. n = length(dados).est. dados.binom(p. p.est <.function(p. c ca . Lembrando a c˜ que a deviance ´ definida pela express˜o e a D(p) = 2{(ˆ) − l(p)}. dados = y).1) > text(p.35.vero.binom() para calcular a deviance.2 * (vero.est <.est)) > io [1] 124.est.0079 > ie [1] 124. x = x) + dev <. pos = 1.p.p. min(logvero). 0.est.025. n = n.95.p [1] 0. vero.est * (1 .p. dados = y).975)) * sqrt(1/ie) > ic1. x = sum(dados)) { + p.p <. xlab = "p". min(logvero).vero.8960043 (d) Vamos agora obter e mostrar em um gr´fico o intervalo baseado na fun¸ao deviance. p + zα/2 I(ˆ) ˆ p ˆ p e para obter o intervalo no R usamos os comandos a seguir. > ic1.binom(x.5283461 0. e > p.length(y)/(p. Depois tra¸amos a linha de ıvel c c corte com abline() e os pontos de corte que definem o intervalo s˜o as ra´ de uma fun¸ao a ızes c˜ definida como a diferen¸a entre a fun¸˜o deviance e o valor do ponto de corte. Nos comandos a seguir primeiro ıvel a encontramos o ponto de corte para o n´ de confian¸a de 95%. cex = 0.p.est + qnorm(c(0.binom(p. Para indicar o estimador de MV o gr´fico poder´ a ıamos usar arrows() w para obter os valores num´ricos para a amostra dada utilizamos os comandos a seguir.est.x/n + vero.8686757 A fun¸ao deviance D(p) tem distribui¸ao assint´tica χ2 e o intervalo de confian¸a ´ dado c˜ c˜ o c e n−1 pelos pontos de intersec¸˜o entre a fun¸˜o deviance e o valor de quantil da distribui¸˜o χ2 para ca ca ca o n´ de significˆncia desejado como ilustrado na Figura 39. Com o comando curve() podec˜ mos obter o gr´fico de fun¸ao deviance. x = x)) + dev + } > curve(dev.binom <.mean(y) > arrows(p.est. n = n.est <.ie <. a c˜ > dev. p definimos umaa fun¸ao dev.3) > io <.8. 0. offset = 0.0079 (c) O intervalo de confian¸a baseado na normalidade assint´tica do estimador de m´xima verossimc o a ilhan¸a ´ dado por: c e p − zα/2 I(ˆ) .

7 0.function(dados. n = length(dados). L.8 0.function(x) dev.binom(x.3) inf sup 0. + tipo = c("assintotico". len = 0. dig = 3).5283461 0.est))$root.fc.95 <.95. 0.L.est.6 p 0. ca a ca Agora que j´ vimos as duas formas de obter o IC passo a passo vamos usar os comandos a acima para criar uma fun¸ao geral para encontrar IC para qualquer conjunto de dados e com c˜ op¸oes para os dois m´todos. 0.95 ICdev <. 1))$root) ICdev inf sup 0.nivel .5283461 0. pos = 1. dados = y) .17 INTERVALOS DE CONFIANCA E FUNCAO DE VEROSSIMILHANCA ¸ ¸˜ ¸ 144 > > > > + > L. "deviance")) { + tipo <.95) lim.arg(tipo) + alfa <.9 Figura 39: Fun¸˜o deviance para o parˆmetro p da distribui¸˜o Bernoulli.match.1 .95.8686757 > arrows(ICdev.fc. round(ICdev. c(p.95. ICdev.qchisq(0. sup = uniroot(lim. df = 1) abline(h = L.869 0.binom <.1) > text(ICdev. offset = 0.4 0. p.c(inf = uniroot(lim. c˜ e > ic.5 0. nivel = 0.8.528 0. x = sum(dados). cex = 0.8686757 D(p) 0 2 4 6 8 10 12 14 0.fc <. c(0.

> cobertura.. a 2.conta + 1 + } + return(conta/nsim) + } .8686757 (e) O c´lculo do intervalo de cobertura consiste em: a 1. Para isto vamos escrever uma fun¸˜o implementando estes passos e que utiliza internamente ca ic.) + if (p > ic[1] & p < ic[2]) + conta <. c 3.sup 0. ...sup 0.inf lim..binom <.fc.c("lim.p. n = n. 1. primeiro com a aproxima¸ao assint´tica e depois pela c˜ c˜ o deviance.sqrt((p.ic.binom(dados = y) lim.rbinom(1.binom() definida acima.x/n if (tipo == "assintotico") { se. . c(p.function(n.ifelse(identical(p.est))/n) ic <.ifelse(identical(p.sup") ic E agora vamos utilizar a fun¸ao. 0).inf"..8960043 > ic.(alfa/2))) * se. obter o intervalo de confian¸a. . p. n = n.est. x = ysim..145 INTRODUCAO AO R ¸˜ + + + + + + + + + + + + + + + + + } p.p.5283461 0. prob = p) + ic <.est <. size = n.) .5439957 0. uniroot(lim.binom(y. x = x)$root) sup <..function(y. 1).fc..est <. sup) } names(ic) <. 1). 1 . df = 1) inf <.0 + for (i in 1:nsim) { + ysim <. .est). c˜ co a Espera-se que a propor¸ao obtida seja o mais pr´ximo poss´ do n´ de confian¸a definido c˜ o ıvel ıvel c para o intervalo.est } if (tipo == "deviance") { lim. repetir (1) a (3) e verificar a propor¸ao de simula¸˜es onde o valor est´ no intervalo. c(0. Note que os intervalos s˜o diferentes! a > ic.p.est + qnorm(c(alfa/2. uniroot(lim.est. p.fc <.binom(n = n.) { + conta <.) dev. "lim.inf lim.qchisq(nivel.p. x = x)$root) ic <.est. simular dados com o valor especificado do parˆmetro.binom(dados = y. 0. verificar se o valor est´ dentro do intervalo a 4. tipo = "dev") lim.est * (1 . nsim.c(inf.

Calcule intervalos de confian¸a de 90% para cada uma das amostras geradas e finalmente. Em 10 dias sucessivos. 2. Houve alguma mudan¸a na c probabilidade de cobertura? Note que se − n i log F (xi . θ) com θ = 1 e obtenha ca o intervalo de confian¸a de 90% para θ. Seja X1 . Discuta os resultados. al´m disso acredita-se que o n´mero de trens atrasados em c˜ e u cada dia seja independente do valor de todos os outros dias.seed(3214) > cobertura. · · · . 1) ent˜o −2 a n i log F (xi . o que pode ser explicado pelo tamanho da amostra. a informa¸ao observada e a informa¸ao a c c˜ c˜ de Fisher (c) um intervalo de confian¸a de 95% para o n´mero m´dio de trens atrasados por dia c u e ˆ baseando-se na normalidade assint´tica de θ o . θ) ∼ χ2 . c obtenha a propor¸˜o dos intervalos que cobrem o verdadeiro valor de θ. tipo = "dev") [1] 0. θ) ∼ Γ(n. p = 0.897 > set. ca e c˜ > set.2 Exerc´ ıcios 1. O IC assint´tico tende a se aproximar o do n´ nominal de confian¸a na medida que aumenta o tamanho da amostra. 2n 3. nsim = 1000. Xn uma amostra aleat´ria da distribui¸˜o U (0.binom(n = length(y). o ıvel c (e) repita o item (d) para amostras de tamanho n = 100. ıvel c 17.binom(n = length(y). o n´mero de trens atrasados foi registrado em: u 5 0 3 2 1 2 1 1 2 1 Obtenha: (a) o gr´fico da fun¸ao de verossimilhan¸a para θ com base nestes dados a c˜ c (b) o estimador de m´xima verossimilhan¸a de θ. Espera-se ca que este valor seja pr´ximo do n´ de confian¸a fixado de 90%. p = 0.8. n = 50 e n = 200.seed(3214) > cobertura. (d) verifique se a probabilidade de cobertura do intervalo ´ consistente com o valor e declarado de 90%. Para isto gere 1000 amostras de tamanho n = 10. X2 . Encontre uma quano ca tidade pivotal e: (a) construa um intervalo de confian¸a de 90% para θ c (b) construa um intervalo de confian¸a de 90% para log θ c (c) gere uma amostra de tamanho n = 10 da distribui¸˜o U (0. nsim = 1000) [1] 0.96 Note que a cobertura do m´todo baseado na deviance ´ muito mais pr´xima do n´ de e e o ıvel 95%. θ).17 INTERVALOS DE CONFIANCA E FUNCAO DE VEROSSIMILHANCA ¸ ¸˜ ¸ 146 E agora vamos utilizar esta fun¸˜o para cada um dos m´todos de obten¸ao dos intervalos. Acredita-se que o n´mero de trens atrasados para uma certa esta¸˜o de trem por dia segue u ca uma distribui¸ao Poisson(θ). Verifique se o intervalo cobre o verdadeiro c valor de θ.8. Refa¸a o ´ c ıtem (e) do exemplo acima com n = 10.

6 9. onde φ ´ a probabilidade de que n˜o a c e a hajam trens atrasados num particular dia. Xi . ou seja. 4. da ´rea i ´ normalmente distribu´ com m´dia c˜ a e ıda e θzi . 4. n: (a) simule dados sob esta distribui¸ao assumindo que θ = 1.9 9.7 10.2 9.4 10.3 10.0 8. e que a variˆncia ´ conhecida e igual a co ´ a a e 1.4 10.147 INTRODUCAO AO R ¸˜ (d) compare o intervalo obtido em (c) com um intervalo de confian¸a obtido com base c na distribui¸˜o limite da fun¸ao deviance ca c˜ (e) o estimador de m´xima verossimilhan¸a de φ. 2.8 11.5 10. onde zi ´ quantidade (conhecida) de fertilizante utilizado na area. Assumindo que as e ´ produ¸˜es em diferentes areas s˜o independentes.8 9. 3.8 9.8 9. Encontre intervalos de confian¸a de 95% para a m´dia de uma distribui¸˜o Normal com c e ca variˆncia 1 dada a amostra a 9. · · · .7 9. Xi ∼ N (θzi .7 8. Visuc˜ alize os dados simulados atrav´s de um gr´fico de (z × x) e a ˆ (b) encontre o EMV de θ. 5).3 10. Construa intervalos de confian¸a de 95% c para φ como nos itens (c) e (d). para i = 1.9 10.0 baseando-se: (a) na distribui¸ao assint´tica de µ c˜ o ˆ (b) na distribui¸ao limite da fun¸ao deviance c˜ c˜ 5. e z = (1. θ ˆe (c) mostre que θ ´ um estimador n˜o viciado para θ (lembre-se que os valores de zi s˜o a a constantes) (d) obtenha um intervalo de aproximadamente 95% de confian¸a para θ baseado na c ˆ distribui¸ao assint´tica de θ c˜ o .0 11.5. 1).5 10. Acredita-se que a produ¸ao de trigo.

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

rep(L. 2). .5 32.vals.vals <.95. lty = c(1. lty = 3) legend(31. "n=50").vals. c˜ o (1) . rep(L. c˜ e ¯ 4.1. rep(0.95/50) arrows(IC50. lwd = c(1.0 Figura 40: Fun¸˜o deviance para N(θ.0 θ 32. . xn a.95.56174 32. de uma distribui¸˜o exponencial de parˆmetro θ com fun¸˜o de densidade ca a ca f (x) = θ exp{−θx}.a. 2). c("n=10". length = 0.32 + c(-1. 2). n = 50.vals. 1). A fun¸˜o de log-verossimilhan¸a ´ dada por l(θ) = n log(θ) − θn¯. e neste caso a deviance tem distribui¸ao assint´tica χ2 . 2. dev50. . 1. df = 1). xbar = 32) lines(thetaN. 1) * sqrt(L. lwd = 2) abline(h = qchisq(0. a fun¸ao deviance ´ D(θ) = 2n log(θ/θ) + x(θ − θ) . rep(0.1. 2). 1) para uma amostra de tamanho 20 e m´dia 32. 2).95.2 IC para o parˆmetro da distribui¸˜o exponencial a ca Seja x1 . cex = 0. IC50. length = 0. X ˆ ˆ 3. lty = 2) dev50. 2. o estimador de m´xima verossimilhan¸a ´ θ = a c e ˆ n i=1 n Xi = 1 ¯. ca c e x 2. "n=20".0 5 D(θ) 10 15 31.dev. ca e > > > > > > > + arrows(IC20.norm.7) 18. lwd = 2) IC50 <.149 INTRODUCAO AO R ¸˜ [1] 31.43826 20 0 31. Vimos que: 1.5 33. . IC20.v1(thetaN.

n˜o determinamos a distribui¸ao exata da dea c˜ 2 viance e usamos a distribui¸˜o assint´tica χ(1) na qual se baseia a linha de corte tracejada ca o mostrada no gr´fico para definir o IC do parˆmetro ao n´ de 95% de confian¸a. n = 20. A seguir vamos ilustrar a obten¸˜o destes intervalos no R.dev. Vamos considerar que temos uma ca amostra onde n = 20 e x = 10 para a qual a fun¸ao deviance ´ mostrada na Figura 42 e obtida ¯ c˜ e de forma an´loga ao exemplo anterior.seq(0. 5. diferentemente do anterior.vals. n.vals <. e e a pela aproxima¸ao quadr´tica da verossimilhan¸a por s´rie de Taylor que neste caso c˜ a c e fornece uma express˜o da deviance aproximada dada por D(θ) ≈ n a ˆ θ−θ ˆ θ 2 . l = 101) dev. xbar) { 2 * n * (log((1/xbar)/theta) + xbar * (theta .0 Figura 41: Fun¸˜es deviance para o parˆmetro θ da N(θ. e os limites do intervalo n˜o podem ser obtidos analiticamente.exp <. xbar = 10) plot(thetaE.0 31. xlab = expression(theta).04.exp(thetaE. a a ıvel c . O estimador de m´xima verossimilhan¸a pode ser obtido a a c ˆ = 1/¯ = 1/10 = 0.2.vals.vals <.vals. devendo ser obtidos por: a ˆ ˆ m´todos num´ricos ou gr´ficos.18 INTERVALOS DE CONFIANCA BASEADOS NA DEVIANCE ¸ 150 D(θ) 2 4 6 8 10 n=10 n=20 n=50 0 31.0 θ 32.(1/xbar))) } thetaE.1.function(theta. 1) para amostras de m´dia 32 e co a e tamanhos de amostra n = 10. analiticamente neste exemplo θ x > + + > > > + dev. ylab = expression(D(theta))) Neste exemplo.5 33. dev. 0. 20 e 50. ty = "l".5 32. ou.

ylab = expression(D(theta))) L.L. xlab = expression(theta).qchisq(0.95 ´ 3.1 Solu¸˜o num´rica/gr´fica simplificada ca e a Iremos aqui considerar uma solu¸˜o simples baseada no gr´fico da fun¸ao deviance para enca a c˜ contrar os limites do IC que consiste no seguinte: Para fazermos o gr´fico da deviance criamos a uma sequˆncia de valores do parˆmetro θ. c˜ 18.fc.84.abs(dev. ty = "l".function(x) dev.est))$root.vals . df = 1) abline(h = L. lty = 3) dif <.exp(x. diferentemente do exemplo anterior.95 <.05 0.fc <. e o > + > > > > > > plot(thetaE. n = 20. c(0. uniroot(lim. para 95% o valor de χ2 c 1.95 ICdev <. Vamos ent˜o localizar os valores de θ para os quais D(θ) ´ o mais pr´ximo poss´ do a e o ıvel ponto de corte.151 INTRODUCAO AO R ¸˜ 0 2 4 D(θ) 6 8 10 12 0.vals. theta. .1/10 lim. xbar = 10) . dev.95.vals.10 θ 0. Isto ´ feito com o c´digo abaixo e o resultado exibido na Figura 43.15 0. Como.L.95) theta.c(uniroot(lim.fc. Por exemplo.0. A cada um destes valores corresponde um valor de e a D(θ).2.20 Figura 42: Fun¸˜o deviance da Exp(θ) para uma amostra de tamanho 20 e m´dia 10.est <. ca e Para encontrar os limites do IC precisamos dos valores no eixo dos parˆmetros nos pontos a onde a linha de corte toca a fun¸ao deviance o que corresponde a resolver a equa¸˜o D(θ) = c˜ ca ˆ + x(θ − θ) = c∗ onde c∗ ´ quantil da distribui¸ao da χ2 com 1 grau de liberdade ˆ 2n log(θ/θ) ¯ e c˜ e correspondente ao n´ ıvel de confian¸a desejado.95. esta equa¸˜o n˜o tem solu¸ao anal´ ca a c˜ ıtica vamos examinar a seguir duas poss´ ıveis solu¸oes para encontrar os limites do intervalo.

18 INTERVALOS DE CONFIANCA BASEADOS NA DEVIANCE ¸ 152 + c(theta. ICdev.8. . pos = 1. cex = 0. len = 0. rep(L. 1))$root) > arrows(ICdev. θ(1 + c∗ /n) .est. round(ICdev. c˜ ıvel a 18. rep(0. A Figura 44 obtida com os comandos mostra o gr´fico desta fun¸ao deviance aproximada. dig = 3).15 0.20 Figura 43: Obten¸ao gr´fica do IC para o parˆmetro θ da Exp(θ) para uma amostra de c˜ a a tamanho 20 e m´dia 10. A a c˜ Figura tamb´m mostra os IC’s obtido com esta fun¸˜o.95. e Note que neste c´digo procuramos primeiro o limite inferior entre os valores menores que o a estimativa do parˆmetro (1/10) e depois o limite superior entre os valores maiores que esta a estimativa.05 0.2.10 θ 0. 0. 2). Para isto usamos a fun¸ao uniroot() que fornece ra´ c˜ ızes unidimensionais de uma fun¸˜o que definimos como a diferen¸a entre a fun¸ao devian¸e e o valor de corte definido pela ca c c˜ c distribui¸ao χ2 para o n´ de significˆncia desejado. offset = 0.062 0. Para a aproxima¸˜o quadr´tica os e ca ca a limites dos intervalos s˜o facilmente determinados analiticamente e neste caso dados por: a ˆ θ(1 − ˆ c∗ /n) .1) > text(ICdev. 2).3) 0 2 4 D(θ) 6 8 10 12 0.15 0.2 Aproxima¸˜o quadr´tica da verossimilhan¸a ca a c Nesta abordagem aproximamos a fun¸˜o deviance por uma fun¸ao quadr´tica obtida pela exca c˜ a pans˜o por s´rie de Taylor ao redor do estimador de m´xima verossimilhan¸a: a e a c D(θ) ≈ n ˆ θ−θ ˆ θ 2 .

vals.devap. ty = "l".(1/10) * (1 + c(-1.exp <.153 INTRODUCAO AO R ¸˜ > devap. rep(L. n = 20.95. round(ICdev.(1/xbar)))^2 + } > devap.1) > text(ICdevap.14382613 > arrows(ICdevap. xlab = expression(theta).10 θ 0. dig = 3).95. a Vamos agora colocar os resultados pelos dois m´todos em um mesmo gr´fico (Figura 45) para e a . lty = 3) > ICdevap <. ICdevap.3 Comparando as duas estrat´gias e Examinando os limites dos intervalos encontrados anteriormente podemos ver que s˜o diferentes. rep(0.vals. + ylab = expression(D(theta))) > L. n.exp(thetaE. cex = 0. devap.14382613 20 0 5 D(θ) 10 15 0.vals. e 18.95.20 Figura 44: Fun¸ao deviance obtida pela aproxima¸˜o quadr´tica para Exp(θ) e uma amostra c˜ ca a de tamanho 20 e m´dia 10. 2).8.05617387 0.function(theta.15 0. 1) * sqrt(L. xbar = 10) > plot(thetaE.95 <.15 0. 0. 2).3) [1] 0.05 0.95/20)) > ICdevap [1] 0. df = 1) > abline(h = L.vals <. pos = 1. len = 0.qchisq(0.062 0. offset = 0. xbar) { + n * (xbar * (theta .05617387 0.

n = 10. n = 10.15 0.vals <.vals <.vals. ICdevap.20 Figura 45: Compara¸ao dos IC’s de confian¸a obtidos pela solu¸ao gr´fica/num´rica (linha c˜ c c˜ a e s´lida) e pela aproxima¸ao quadr´tica (linha tracejada) para o parˆmetro θ da Exp(θ) para o c˜ a a uma amostra de tamanho 20 e m´dia 10. rep(L. dev. ty = "l". "aproximac~o quadr´tica").1) arrows(ICdevap.vals. lty = c(1. rep(0.1) legend(0. 2). devap.vals. A Figura 46 mostra as fun¸oes para trˆs tamanhos de amostra. lty = 2) abline(h = L. lty = 2. xbar = 10) lines(thetaE. len = 0. 30 c˜ a c˜ e e 100 que s˜o obtidas com os comandos abaixo onde vemos que a aproxima¸ao fica cada vez a c˜ melhor com o aumento do tamanho da amostra. xbar = 10) plot(thetaE. rep(L. xlab = expression(theta). cex = 0. > > > + > > thetaE. dev10.95. > + > > > > > + plot(thetaE. 2).vals. rep(0.exp(thetaE.10 θ 0. lty = 3) arrows(ICdev. xlab = expression(theta).vals.07. 2). lty = 2) .vals.vals <. ylab = expression(D(theta))) devap10. ty = "l".seq(0.vals.vals. 12. l = 101) dev10. e Vamos agora examinar o efeito do tamanho da amostra na fun¸ao deviance e sua aproxic˜ ma¸ao quadr´tica.95. 2). ICdev.vals. a a 2). len = 0.04.devap. c("deviance".2.8) 12 deviance aproximacão quadrática 0 2 4 D(θ) 6 8 10 0. n = 10.dev. 0.exp(thetaE.95.vals. ylab = expression(D(theta))) lines(thetaE.18 INTERVALOS DE CONFIANCA BASEADOS NA DEVIANCE ¸ 154 comparar os resultados.05 0. devap10.

λ Discuta as diferen¸as entre os resultados obtidos nas duas parametriza¸oes.0. lty = 3) 15 D(θ) 3 D(θ) 10 5 0 0 0. devap100. df = 1). lty = 3) dev30.95.vals. lty = 2) abline(h = qchisq(0. n = 30. n = 30.vals.8. dev100. c˜ c a (c) Obtenha os IC’s a 90% de confian¸a.dev. c 2.6. 22. xbar = 10) lines(thetaE.devap. n = 100. ylab = expression(D(theta))) devap30. ty = "l".vals.vals.vals <.1 a. 17. xlab = expression(theta). xbar = 10) lines(thetaE.exp(thetaE.vals.0.2.dev.95.vals.exp(thetaE. n = 100. 30 (centro) e 100 (direita).vals.95. xbar = 10) plot(thetaE. df = 1). 12. lty = 3) dev100.2. Seja 14.20 0 0. tribui¸ao normal de m´dia 20 e variˆncia σ 2 .4 Exerc´ ıcios de uma dis- 1.vals <.20 0. 22. lty = 2) abline(h = qchisq(0. 15.a. devap30.vals.15 0. 11. e 18. 28. c˜ c a (b) Obtenha a fun¸ao deviance para σ e fa¸a o seu gr´fico.vals.vals.5.10 θ 0.10 θ 0.exp(thetaE. c c˜ . dev30. c˜ e a (a) Obtenha a fun¸ao deviance para σ 2 e fa¸a o seu gr´fico.05 10 1 20 2 D(θ) 30 40 4 50 5 60 6 0. xbar = 10) plot(thetaE.15 0. 30.exp(thetaE. ty = "l".2. ylab = expression(D(theta))) devap100. df = 1).15 0. 19.vals <.vals.devap.vals <. 25.vals.20 Figura 46: Fun¸˜es deviance e deviance aproximada para o parˆmetro θ da Exp(θ) em amostras co a de m´dia 10 e tamanhos n = 10 (esquerda). Repita as an´lises mostradas no exemplo acima da distribui¸˜o exponencial mas agora a ca utilizando a seguinte parametriza¸ao para a fun¸ao de densidade: c˜ c˜ 1 f (x) = exp (−x/λ) x ≥ 0.155 INTRODUCAO AO R ¸˜ > > > + > > > > > + > > > abline(h = qchisq(0.10 θ 0.05 0. xlab = expression(theta).1. 13.05 0.1.9.

5. 1010. 5000. Por exemplo o resultado visto na sess˜o 28: se a 2 2 Y1 . fazemos os c´lculos e produzimos um gr´fico como mostrado na 47 com os comandos a a a seguir. . ca e a ¯ 2. 10. Vejamos como podemos ilustrar este resultado usando simula¸˜o. Isto se aplica a diversos resultados co a vistos em um curso de Inferˆncia Estat´ e ıstica. fazer um gr´fico dos valores das estimativas contra o tamanho de amostra. . . . calcular a estat´ ıstica para cada amostra. indicando neste a gr´fico o valor verdadeiro do parˆmetro. definir o estimador X = n xi i=1 n . escolher uma distribui¸ao e seus parˆmetros. σ /n). 20. c˜ a 2. Resultados como estes podem ser ilustrados a ¯ computacionalmente como visto na Sess˜o 28. 10. σ ) ent˜o y ∼ N(µ. by = 5).mean(amostra) } plot(ns. 5. 4) estim[i] <. definir uma sequˆncia crescente de valores de tamanho de amostras.numeric(length(ns)) for (i in 1:length(ns)) { amostra <. a a 19. .2 Momentos das distribui¸oes amostrais de estimadores c˜ Para inferˆncia estat´ e ıstica ´ necess´rio conhecer a distribui¸ao amostral dos estimadores. tomar a distribui¸˜o Normal de m´dia 10 e variˆncia 4. Yn ∼ N(µ. seq(1010. . a . .1 Ilustrando propriedades de estimadores Consistˆncia e Um estimador ´ consistente quando seu valor se aproxima do verdadeiro valor do parˆmetro a e a ` medida que aumenta-se o tamanho da amostra. .1 M´dia da distribui¸˜o normal e ca Seguindo os passos acima vamos: 1. 3. 1000. seq(5.rnorm(ns[i]. a Al´m disto este procedimento permite investigar distribui¸oes amostrais que s˜o complicadas e c˜ a ou n˜o podem ser obtidas analiticamente. Em e a c˜ alguns casos estas distribui¸˜es s˜o derivadas analiticamente. 15. > > > + + + > > ns <.1. by = 10)) estim <. 3. 5000. obter uma amostra de cada tamanho. 6. escolhemos os tamanhos de amostra n = 2. Y2 . . 1000. e 4.c(2. . estim) abline(h = 10) 19. .19 ILUSTRANDO PROPRIEDADES DE ESTIMADORES 156 19 19. definir o estimador. 4. A id´ia b´sica ´ a seguite: ca e a e 1. 1020.

mean(Tvals) > ET [1] 3. no caso escolhemos n = 20. nc = 1000) > Tvals <. Vamos ver agora comandos do R. usar as amostras para obter as estimativas E[T ] e Var[T ].0 10. σ 2 ) e seja ca 2 um parˆmetro de interesse θ = µ/σ . e Vamos ver um exemplo: considere Y uma v. 64). onde cada coluna ´ uma amostra. c˜ u 4.327251 Nestes comandos primeiro obtemos 1000 amostras de tamanho 20 que armazenamos em uma matriz de dimens˜o 20×1000. vamos usar N = 1000.157 INTRODUCAO AO R ¸˜ 11. Para obter por simula¸˜o a esperan¸a e variˆncia do a ca c a ¯ /S 2 onde Y ´ a m´dia e S 2 a variˆncia de uma amostra seguimos os passos: ¯ e estimador T = Y e a 1. A seguir usamos a fun¸ao apply a e c˜ . 2.0 q q q q q q q qq q q q q qq q q qq q q q qq q q q q q q q q q q q q q q q q q q q qq q q q q qq q q q q q q qq q qq q q q qq q q q q q qq qq q qq qqq q q qq q qqqq q q q qq qq qq q qqq q q q q qq q qqqq qqq qq q q qq q q q q qq q qqqqqqqqq q qq qq qqqqq qqq q qqqq q qq qq q qqq qq qq q q qq q q q q q q q qq q q q q qqqq q q q q q q qq q qq qq q q qqqqqq q qqqq q qqqqq qq qq qqqq q qq qqq qq q q qqq qqq q q q q qq q q qq q q q q q qq q q q qq q q q q q q qq q q qq q q qqq q qqq q q q q q qq q q q q q q q q qqq qqqq q q q q q q q q q qqq qqq qqqq q q q q q q qqq qqq qq q qq qq qq q q q qq qqqq qq q q q q q qq qq qqqqq q qq q qqq qq q qq qq qqqq q qq qq q q q qq q q qq qq q q qq q q qqq qq q q q q q qqqq q q q qqq qqqq qqqq q q qq q q q q q q q qq q qq qq q q qq q q qq q q q q q q q q q q qq qq q q q q q q qq q q qq qqqq q qq q q q q q q q q q qq q q q q q q qq qqqq q q q q q qq q q q q q q qq q q q q q q q q q q q q q q q q qq q q qq q q q 9.5 estim 10. 3. mean = 180. sd = 8).0 q 0 1000 2000 ns 3000 4000 5000 Figura 47: M´dias de amostras de diferentes tamanhos. c˜ a 2.apply(amostras. no caso vamos escolher uma N (180.var(Tvals) > VarT [1] 1. escolher uma distribui¸ao e seus parˆmetros. calcular a estat´ ıstica de interesse para cada amostra.a. > amostras <. ˆ ˆ 5. function(x) { + mean(x)/var(x) + }) > ET <.5 9. obter por simula¸ao um n´mero N de amostras. definir um tamanho de amostra. com distribui¸˜o normal N (µ.209218 > VarT <.matrix(rnorm(20 * 1000.

Para obter as masmas c˜ a a amostras ter´ ıamos que usar a mesma semente para gera¸ao de n´meros aleat´rios. Estime por simula¸ao a esperan¸a e variˆncia do estimador λ = X de uma distribui¸ao de c˜ c a c˜ Poisson de parˆmetro λ para um tamanho de amostra n = 30.4 Variˆncia m´ a ınima Fica como exerc´ ıcio.5 Exerc´ ıcios ˆ ¯ 1. Crie um exemplo para comparar a variˆncia de dois estimadores. Repita o procedimento c˜ ˆ para v´rios tamanho de amostra e fa¸a um gr´fico mostrando o comportamento de E[T ] a c a ˆ ] em fun¸˜o de n. onde X[1] e X[n] s˜o os valores m´ c˜ a ınimo e m´ximo da a amostra.33. No exemplo dos momentos das distribui¸oes de estimadores visto em (19. Se voce rodar os comandos acima dever´ obter resultados um pouco diferentes (mas n˜o a a muito!) pois nossas amostras da distribui¸ao normal n˜o s˜o as mesmas.21 e Var[T ] ≈ 1. 19. 2. Sugest˜o: compare a a n 2 ¯ ¯ 2 /(n − 1) e σ 2 = n (X1 − X)2 /n do parˆmetro de a ˆ os estimadores S = i=1 (X1 − X) i=1 variˆncia σ 2 de uma distribui¸ao normal. Compare com os valores a ˆˆ ˆ ˆ obtidos analiticamente. ca 4. σ ). respectivamente. . Ilustre a consistˆncia do estimador λ = 1/X de uma distribui¸˜o exponencial f (x) = e ca λ exp{−λx}. No ˆ ˆ caso anterior foi obtido E[T ] ≈ 3. Crie um exemplo para ilustrar a n˜o tendenciosidade de estimadores. Mostre em um gr´fico como os valores de E[λ] e Var[λ] variam a em fun¸˜o de n. 19. c˜ u o 19.3 N˜o-tendenciosidade a Fica como exerc´ ıcio. a c˜ 5.2) ilustramos a c˜ obten¸ao dos momentos para um tamanho fixo de amostra n = 20.19 ILUSTRANDO PROPRIEDADES DE ESTIMADORES 158 para calcular a quantidade desejada que definimos com function(x) {mean(x)/var(x)}. e Var[T ca ˆ ¯ 3. Por exemplo compare a ¯ por simula¸ao as variˆncias dos estimadores T1 = X e T2 = (X[1] + X[n] )/2 do parˆmetro c˜ a a 2 µ de uma distribui¸ao N(µ.

Eles devem ser resolvidos usando como referˆncia qualquer texto de Estat´ e ıstica B´sica. a Procure resolver primeiramente sem o uso de programa estat´ ıstico. e e ` a c a obtivemos as seguintes resistˆncias: e M´quina A a M´quina B a 145 127 136 143 128 132 142 138 141 137 142 132 O que se pode concluir fazendo um teste de hip´tese adequado? o Solu¸˜o: ca Da teoria de testes de hip´tese sabemos que. que neste caso vamos definir como sendo 5%. . sorteamos dias amostras de 6 pe¸as de cada m´quina. Devemos tamb´m fixar o n´ de e ıvel significˆncia do teste. usando uma fun¸˜o j´ existente no R ca a 20.159 INTRODUCAO AO R ¸˜ 20 Testes de hip´tese o Os exerc´ ıcios abaixo s˜o referentes ao conte´do de Testes de Hip´teses conforme visto na disa u o ciplina de Estat´ ıstica Geral II. c o a Assim como fizemos com intervalos de confian¸a. Para isso. escrevendo uma fun¸˜o ca 3. A id´ia ´ relembrar como s˜o feitos alguns testes de hip´tese b´sicos e corriqueiros em e e a o a estat´ ıstica. a Para efetuar as an´lises no R vamos primeiro entrar com os dados nos objetos que vamos a chamar de ma e mb e calcular os tamanhos das amostras que v˜o ser armazenados nos objetos a na e nb. fazendo as contas passo a passo. c˜ a Os comandos e c´lculos s˜o bastante parecidos com os vistos em intervalos de confian¸a e isto a a c nem poderia ser diferente visto que intervalos de confian¸a e testes de hip´tese s˜o relacionados. aqui sempre que poss´ e para fins did´tic ıvel a cos mostrando os recursos do R vamos mostrar trˆs poss´ e ıveis solu¸˜es: co 1. Nesta sess˜o vamos verificar como utilizar o R para fazer teste de hip´teses sobre parˆmetros a o a de distribui¸oes para as quais os resultados s˜o bem conhecidos. o teste para o c˜ a hip´tese: o 2 2 2 2 H0 : σA = σB versus Ha : σA = σB que ´ equivalente a e ` H0 : 2 σA σ2 = 1 versus Ha : A = 1 2 2 σB σB ´ feito calculando-se a estat´ e ı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. utilizando o R como uma calculadora 2.1 Compara¸˜o de variˆncias de uma distribui¸˜o normal ca a ca Queremos verificar se duas m´quinas produzem pe¸as com a mesma homogeneidade quanto a c a resistˆncia a tens˜o. assumindo a distribui¸ao normal.

na .082056 > pval <.1.1. 128.´ 20 TESTES DE HIPOTESE 160 > ma <> na <> na [1] 6 > mb <> nb <> nb [1] 6 c(145. 141. nb .ma.9331458 No c´lculo do P-valor acima multiplicamos o valor encontrado por 2 porque estamos realizando a um teste bilateral.var(mb) > mb. lower = F) > pval [1] 0.test(). Portanto devemos pedir os argumentos da e e c˜ fun¸˜o ”default”. ca .96667 > fcalc <. Vamos verificar os a argumentos da fun¸ao. Como temos o computador a disposi¸ao n˜o precisamos c˜ a de da tabela da distribui¸ao F e podemos calcular o p-valor diretamente. 137) length(ma) c(143. . c˜ > ma.1.2 * pf(fcalc. 142. Por exemplo.test() ıda a e ´ um m´todo com mais de uma fun¸ao associada.v > fcalc [1] 1. 20.. 132.1. 127. Este tipo de resultado indica que var.test) function (x.1 Fazendo as contas passo a passo Vamos calcular a estat´ ıstica de teste.var(ma) > ma.v [1] 36.v <. 20.. 132) length(mb) 20.1.2 Escrevendo uma fun¸˜o ca Esta fica por sua conta! Escreva a sua pr´pria fun¸˜o para testar hip´teses sobre variˆncias de duas distribui¸oes noro ca o a c˜ mais.v/mb. 136.) NULL Note que esta sa´ n˜o ´ muito informativa. para testar variˆncias neste exemplo utilizamos var. 138.v [1] 40 > mb.v <.3 Usando uma fun¸˜o do R ca O R j´ tem implementadas fun¸˜es para a maioria dos procedimentos estat´ a co ısticos “usuais”. 142. c˜ > args(var.

161 INTRODUCAO AO R ¸˜ > args(getS3method("var. y. de meia em meia hora. Pode-se aceitar. Uma esta¸ao de televis˜o afirma que 60% dos televisores estavam ligados no seu programa c˜ a especial de ultima segunda feira. mb) F test to compare two variances data: ma and mb F = 1.) NULL Neste argumentos vemos que a fun¸ao recebe dois vetores de de dados (x e y). a afirma¸ao a ıvel c˜ do fabricante. ratio = 1.. para isso. voce pararia ou n˜o a produ¸ao para verificar e ¯ a c˜ se o mostrador est´ na posi¸˜o correta? a ca 2.95. 1.9331 alternative hypothesis: true ratio of variances is not equal to 1 95 percent confidence interval: 0. Para ıvel c e ´ a aplicar esta fun¸˜o nos nossos dados basta digitar: ca > var. Finalmente o e ca e n´ de confian¸a ´ 95% ao menos que o ultimo argumento seja modificado pelo usu´rio. com variˆncia igual a 4.0821. usar uma amostra de 200 fam´ ılias obtendo 104 respostas afirmativas. "less". 25. que por “default” c˜ a hip´tese nula ´ que o quociente das variˆncias ´ 1 e que a alternativa pode ser bilateral ou o e a e unilateral. ´ ca e decide. 3.test(ma. Desejamos. a e 20. Como "two. "default")) function (x. obtendo: 27. Note que nos exerc´ ıcios abaixo nem sempre voce poder´ usar fun¸oes de teste do R porque a c˜ em alguns casos os dados brutos n˜o est˜o dispon´ a a ıveis. num df = 5. 21.. Um laborat´rio realiza 6 an´lises desse o a ´ ındice. 26. Nestes casos voce dever´ fazer os c´lculos a a usando o R como calculadora. Uma m´quina autom´tica de encher pacotes de caf´ enche-os segundo uma distribui¸ao a a e c˜ 2 normal.sided". 24. se µ = 500g ou n˜o. Qual a conclus˜o ao n´ de 5% de significˆncia? a ıvel a .7327847 sample estimates: ratio of variances 1. 22. ıda o c A decis˜o baseia-se em verificar se o P-valor ´ menor que o definido inicialmente.2 Exerc´ ıcios Os exerc´ ıcios a seguir foram retirados do livro de Bussab & Morettin (2003).082056 e note que a sa´ inclui os resultados do teste de hip´tese bem como o intervalo de confian¸a. "greater"). denom df = 5. colher uma amostra de 16 pacotes e verificar se a produ¸˜o est´ sob controle.1514131 7. p-value = 0.sided" ´ a primeira op¸˜o o “default” ´ o teste bilateral. O valor de µ pode ser fixado num mostrador e a situado numa posi¸˜o um pouco inacess´ ca ıvel dessa m´quina. conf.level = 0. . Uma companhia de cigarros anuncia que o ´ ındice m´dio de nicotina dos cigarros que fabe rica apresenta-se abaixo de 23mg por cigarro. Se uma dessas ca a e a amostras apresentasse uma m´dia x = 492g. com m´dia µ e variˆncia 400g .test". alternative = c("two. isto ´. Uma rede competidora deseja contestar essa afirma¸˜o. ao n´ de 10%. Sabe-se que o ´ ındice de nicotina se distribui normalmente. A m´quina foi regulada a a para µ = 500g. 86mg 2 .

2 anos 3. por oper´rio. Introduziu-se uma modifica¸˜o para diminuir esse tempo. sorteou-se uma amostra de 16 oper´rios. Num estudo comparativo do tempo m´dio de adapta¸ao. O tempo m´dio. ap´s certo per´ o ıodo. de 50 e c˜ o homens e 50 mulheres de um grande complexo industrial.7 anos Desvios Padr˜es 0.9 anos o Pode-se dizer que existe diferen¸a significativa entre o tempo de adapta¸˜o de homens e c ca mulheres? A sua conclus˜o seria diferente se as amostras tivessem sido de 5 homens e 5 mulheres? a . o o desvio padr˜o ca e a foi 12 minutos. O tempo m´dio da amostra foi de 85 minutos.8 anos 0.´ 20 TESTES DE HIPOTESE 162 4. produziu os seguintes resultados: Estat´ ısticas Homens Mulheres M´dias e 3. a ca e. tem sido 100 minutos. medindo-se o tempo de a execu¸˜o de cada um. uma amostra aleat´ria. Estes resultados trazem evidˆncias estat´ e ısticas da melhora desejada? 5. com um e a desvio padr˜o de 15 minutos. para executar uma tarefa.

211157 . a m´dia e a variˆncia amostral.6.ic <.8 5. x + t1−α/2 ¯ n n Vamos agora obter a resposta de duas formas diferentes.9920789 Com isto podemos montar o intervalo utilizando os quantis da distribui¸˜o t.9 3. o a 21.9. 4.3.8.8.975).var(tempo) > t. 5.v [1] 0. e a > n <.m <.5 3.5 6.m + qt(c(0. 4.7 5.9 4.3 4. 5.4 3. 5.c(2. utilizando o R como uma calculadora 2.7.1. 21.v/length(tempo)) > t. 3.9. 4. 4. 3. ca > t.1 Fazendo as contas passo a passo Nos comandos a seguir calculamos o tamanho da amostra.4 5.ic [1] 4. 6.8 5. fazendo as contas passo a passo.2) Sabemos que o intervalo de confian¸a para m´dia de uma distribui¸˜o normal com m´dia dec e ca e sconhecida ´ dado por: e S2 S2 x − tα/2 ¯ .v <.4. Vinte pacientes foram sorteados e tiveram seu tempo de rea¸ao c c˜ anotado.7 4.4.0 3. para fins did´ticos.5.2 Neste primeiro exemplo.8.1 M´dia de uma distribui¸˜o normal com variˆncia desconhecida e ca a Considere resolver o seguinte problema: Exemplo 1 O tempo de rea¸ao de um novo medicamento pode ser considerado como tendo c˜ distribui¸ao Normal e deseja-se fazer inferˆncia sobre a m´dia que ´ desconhecida obtendo c˜ e e e um intervalo de confian¸a.5.745 > t. usando uma fun¸˜o j´ existente no R. df = n .5.1) * sqrt(t.5 4.m [1] 4.6 4.7.6.9.163 INTRODUCAO AO R ¸˜ 21 Intervalos de confian¸a e testes de hip´tese c o Nesta sess˜o vamos verificar como utilizar o R para obter intervalos de confian¸a e testar a c hip´teses sobre parˆmetros de interesse. 6.9 6.025.8 5.3 4. ca a Entramos com os dados com o comando > tempo <. + 5.t.mean(tempo) > t. 0.length(tempo) > n [1] 20 > t. 4. 4.1. Os dados foram os seguintes (em minutos): 2. 5.278843 5. 4.3. 3. vamos mostrar duas poss´ a ıveis solu¸oes: c˜ 1.1 4. 5.6 5. 3.

para obter um IC a 99 > t.test(tempo) One Sample t-test data: tempo t = 21. Uma poss´ forma de fazer isto ´ utilizando o teste χ .2 Teste χ2 de independˆncia e Quando estudamos a rela¸ao entre duas vari´veis qualitativas em geral fazemos uma tabela com c˜ a o resultado do cruzamento desta vari´veis.1.278843 5.3048. p-value = 1. o intervalo de confian¸a a 95e c˜ e c testa a igualdade de m´dia a zero (p-value = 1.´ 21 INTERVALOS DE CONFIANCA E TESTES DE HIPOTESE ¸ 164 21. Entretanto n˜o c˜ a precisamos fazer isto na maioria das vezes porque o R j´ vem com v´rias fun¸oes j´ dispon´ a a c˜ a ıveis para procedimentos estat´ ısticos usuais. df = 19. df = 19. o a Por exemplo.179408 Inf sample estimates: mean of x 4.99) One Sample t-test data: tempo t = 7.835.test ca Mostramos a solu¸ao acima para ilustrar a flexibilidade e o uso do programa.test(tempo.006e-14 alternative hypothesis: true mean is not equal to 0 95 percent confidence interval: 4. ou similar.test() pode ser utilizada como vemos no resultado ca do comando a sequir que coincide com os obtidos anteriormente. em um teste bilateral. O passo seguinte ´ testar se existe evidˆncia que a associa¸˜o ´ e e e ca e 2 significativa. mu = 3. alt = "greater". Em geral existe interesse em verificar se as vari´veis a a 2 est˜o associadas e para isto calcula-se uma medida de associa¸˜o tal como o χ . Para carregar e visualizar os dados use os comando abaixo. ıvel e Exemplo Para ilustrar o teste vamos utilizar o conjunto de dados HairEyeColor que j´ vem a dispon´ com o R.745 21.14e-07 alternative hypothesis: true mean is greater than 3 99 percent confidence interval: 4.2 Usando a fun¸˜o t.745 O resultado da fun¸ao mostra a estimativa obtida da m´dia (19). > t.level = 0.00642487153941e-14). conf. e Os valores definidos no IC e teste de hip´tese acima s˜o defaults que podem ser modificados. p-value = 1.211157 sample estimates: mean of x 4. ıvel > data(HairEyeColor) > HairEyeColor . Para este exemplo espec´ ıfico a fun¸˜o t. coeficiente de a ca contingˆncia C.

165 INTRODUCAO AO R ¸˜ . Sex = Female Eye Hair Brown Blue Hazel Green Black 36 9 5 2 Brown 66 34 29 14 Red 16 7 7 7 Blond 4 64 5 8 Para saber mais sobre estes dados veja help(HairEyeColor) Note que estes dados j´ vem “rea sumidos” na forma de uma tabela de frequˆncias tri-dimensional. ao inv´s do resultado assint´tico usado no teste tradicional.447e-06 O p − value sugere que a associa¸˜o ´ significativa. com cada uma das dimens˜es e o correspondendo a um dos atributos . 1]) Pearson's Chi-squared test data: HairEyeColor[. Nos comandos abaixo primeiro isolamos ıvel a apenas a tabela com os indiv´ ıduos do sexo masculino e depois aplicamos o teste sobre esta tabela. df = 9. c˜ e o . Uma outra (e usualmente melhor) possibilidade ´ ent˜o usar o p − value calculado por e a simula¸ao. Portanto as hip´teses s˜o: o a H0 : n˜o existe associa¸ao a c˜ Ha : existe associa¸ao c˜ Vamos adotar α = 5% como n´ de significˆncia. .cor dos cabelos.2803. 2] Eye Hair Brown Blue Hazel Green Black 36 9 5 2 Brown 66 34 29 14 Red 16 7 7 7 Blond 4 64 5 8 > chisq. Sex = Male Eye Hair Brown Blue Hazel Green Black 32 11 10 3 Brown 53 50 25 15 Red 10 10 7 7 Blond 3 30 5 8 . a a H´ duas possibilidades de contornar este problema: a primeira ´ agrupar categorias na a e tabela. olhos e sexo. 1] X-squared = 41. p-value = 4. Para ilustrar aqui o teste χ2 vamos verificar se existe associa¸˜o entre 2 atributos: cor dos ca olhos e cabelos entre os indiv´ ıduos do sexo feminino. Entretanto este resultado deve ser visto com ca e cautela pois a mensagem de alerta (Warning message) emitida pelo programa chama aten¸ao c˜ ao fato de que h´ v´rias caselas com baixa frequˆncia na tabela e portanto as condi¸oes para a a a e c˜ validade do teste n˜o s˜o perfeitamente satisfeitas. . . . > HairEyeColor[.test(HairEyeColor[. .

p-value = 0. i (oi −ei )2 ei 21. sim = T) Pearson's Chi-squared test with simulated p-value (based on 2000 replicates) data: HairEyeColor[. o o e e ıvel ıvel a Portanto as hip´teses s˜o: o a H0 : segue a distribui¸ao esperada c˜ Ha : n˜o segue a distribui¸ao esperada a c˜ O n´ de significˆncia foi definido como α = 5% e a estat´ ıvel a ıstica de teste χ2 = c tem distribui¸ao χ2 . p-value = 0.4833 Portanto a conclus˜o ´ que n˜o rejeita-se H0 ao n´ de 5%.0004998 Note que agora a mensagem de alerta n˜o ´ mais emitida e que a significˆncia foi confirmada a e a (p-valor < 0. p = e) Chi-squared test for given probabilities data: o X-squared = 2. ou seja. B. C e D) na popula¸˜o seguindo a rela¸˜o 9:3:3:1. a hip´tese gen´tica ´ a e a ıvel o e e plaus´ ıvel.test) para mais detalhes sobre a implementa¸ao c˜ deste teste no R.05). 1)/16 > chisq.2803. df = NA.4 Teste para o coeficiente de correla¸˜o linear de Pearson ca Quando temos duas vari´veis quantitativas podemos utilizar o coeficiente de correla¸ao linear a c˜ de Pearson para medir a associa¸ao entre as vari´veis.test(HairEyeColor[. .4557. c˜ a a Lembre-se de inspecionar help(chisq. 1] X-squared = 41. 50. se verdadeira deve produzir indiv´ o e ıduos com 4 fen´tio pos (A.c(190. 3. Os comandos para efetuar este teste no R s˜o: c˜ (3) a > o <. desde que a rela¸˜o entre elas seja linear.3 Teste χ2 para aderˆncia ` uma certa distribui¸˜o e a ca Exemplo Uma certa hip´tese gen´tica. Note que se voce rodar este exemplo poder´ obter um p − value um pouco a diferente porque as simula¸oes n˜o necessariamente ser˜o as mesmas. df = 3. 3. 22) > e <. 21.´ 21 INTERVALOS DE CONFIANCA E TESTES DE HIPOTESE ¸ 166 > chisq. 1]. c˜ a ca . Para verificar se a hip´tese gen´tica ca ca o e ´ plaus´ foi coletada uma amostra de indiv´ e ıvel ıduos na popula¸˜o e obteve-se o seguinte n´mero ca u de indiv´ ıduos para cada fen´tipo: o A B C Fen´tipo o N indiv´ ıduos 190 50 63 o D 20 Teste a hip´tese de que a hip´tese gen´tica ´ plaus´ com n´ de significˆncia de 5%.test(o.c(9. . 63.

0 1.5 Compara¸˜o de duas m´dias ca e Quando temos uma vari´vel qualitativa com dois n´ a ıveis e outra quantitativa o interesse em geral est´ em comparar as m´dias da quantitativa para cada grupo da qualitativa.6 8.7 2. H´ diferentes tipos de teste T: para amostras independentes com a variˆncias iguais ou desiguais.2 2.7440872 sample estimates: cor -0.9338264 -0.1 3. Foram coletadas 2 amostras referentes a 2 m´todos de produ¸ao e c˜ e deseja-se comparar as m´dias dos m´todos fazendo-se um teste t bilateral. Os comandos para efetuar o teste e os a resultados s˜o mostrados a seguir.3 6. a Exemplo Os dados a seguir correspondem a teores de um elemento indicador da qualidade de um certo produto vegetal.8676594 > with(mtcars.9 2.3 5.559.5 e As hip´teses s˜o: o a H0 : µ1 = µ2 Ha : µ1 = µ2 . ou para amostras pareadas.867659376517228 difere c˜ significativamente de zero.8676594 Portanto o p-valor acima mostra que a correla¸ao encontrada de -0. cor.2 3. df = 30. ca a As hip´teses s˜o: o a H0 : n˜o existe associa¸˜o (ρ = 0) a ca Ha : existe associa¸ao (ρ = 0) c˜ Vamos ainda fixar o nivel de significˆncia em 5%. ou seja existe evidˆncia de associa¸ao (negativa) entre estas duas e c˜ vari´veis. a ca e ca 21. a > data(mtcars) > with(mtcars.test(wt.2 3. Para isto vamos usar as vari´veis wt (peso) e mpg (milhas por gal˜o) a a do conjunto de dados mtcars para testar se existe associa¸˜o entre estas duas vari´veis.5 5. a a M´todo 1 0.294e-10 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: -0. a OBS: Note que uma an´lise mais cuidadosa deveria incluir o exame do gr´fico entre estas a a duas vari´veis para ver se o coeficiente de correla¸˜o linear ´ adequado para medir a associa¸˜o. mpg)) Pearson's product-moment correlation data: wt and mpg t = -9. mpg)) [1] -0.7 1. Para isto a e podemos utilizar o testeT . p-value = 1. cor(wt. ao n´ de 1% de e e ıvel significˆncia e considerando-se as variˆncias iguais.167 INTRODUCAO AO R ¸˜ Exemplo Para ilustrar o teste para o coeficiente linear de Pearson vamos estudar a rela¸˜o entre ca o peso e rendimento de carros.6 4.4 3.3 1.5 9.5 3.3 e M´todo 2 5.1 2.

6. a > m1 <.5) > t.1. df = 18.1.eq = TRUE.96 Os resultados mostram que n˜o h´ evidˆncias para rejeitar a hip´tese de igualdade entre as a a e o m´dias ao n´ de 1%. 2. e ıvel 21. c˜ Use a fun¸ao cor.2.99) Two Sample t-test data: m1 and m2 t = -0. 2.´ 21 INTERVALOS DE CONFIANCA E TESTES DE HIPOTESE ¸ 168 Vamos ainda fixar o nivel de significˆncia em 5%.3) > m2 <. 1. p-value = 0.test() para testar a correla¸˜o entre o comprimento de s´palas e c˜ ca e p´talas. 3.test() e t. Dica: Use as fun¸˜es var. 8.6 Exerc´ ıcios 1.5. foram medidos 6 exemplares de cada sexo e obtivemos os seguintes comprimentos: Machos Fˆmeas e 145 127 136 143 128 132 142 138 141 142 137 132 Obtenha intervalos de confian¸a para a raz˜o das variˆncias e para a diferen¸a das m´dias c a a c e dos dois grupos. var. Revisite os dados milsa visto na aula de estat´ ıstica descritiva e selecione pares de vari´veis a adequadas para efetuar: (a) um teste χ2 (b) um teste para o coeficiente de correla¸ao c˜ (c) um teste t 2.324208 2. 1. 2. m2.test(m1.7.3.c(5. e .4. Carregue o conjunto de dados iris usando o comando data(iris).3.664208 sample estimates: mean of x mean of y 3. Veja a descri¸ao dos dados em help(iris). Abaixo os comandos para efetuar o teste a bilateral com variˆncias iguais.test() co 3.2. 3.3172.9. 3.7.5. 5.3. 1.63 3. conf = 0. 5. Queremos verificar se machos e fˆmeas de uma mesma esp´cie possuem o mesmo come e primento (em mm) Para isso.5. 9. 3.7547 alternative hypothesis: true difference in means is not equal to 0 99 percent confidence interval: -3. 6. 3. 2.6.c(0. 4.2.

942e-06 > shapiro. p-value = 5... df = 4. Considere o seguinte exemplo da apostila do curso. Vamos ver como isto poder ser feito com a a a o programa R. 30: 44 31: Read 30 items > tr <. resp = y) > str(tr) ' data. $ resp: num 2370 1687 2592 2283 2910 . of 2 variables: $ trat: Factor w/ 5 levels "1". A a menssagem ´ clara mas podemos ainda fazer testes para verificar o desvio dos pressupostos.scan() 1: 2370 2: 1687 3: 2592 .."4".frame(trat = factor(rep(1:5.test(tr..frame': 30 obs. Tabela 4: N´mero de reclama¸˜es em diferentes sistemas de atendimento u co Trat Repeti¸˜es co 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. > y <.169 INTRODUCAO AO R ¸˜ 22 Transforma¸˜o de dados ca Tranforma¸ao de dados ´ uma das poss´ c˜ e ıveis formas de contarnar o problema de dados que n˜o obedecem os pressupostos da an´lise de variˆncia.data."2". A seguir vamos fazer ajustar o modelo e inspecionar os res´ ıduos. data = tr) > plot(tr.av <."3". tr$trat) Bartlett test of homogeneity of variances data: tr$resp and tr$trat Bartlett's K-squared = 29..av$res) .test(tr$resp.aov(resp ~ trat.586. each = 6))..av) O gr´fico de res´ a ıduos vs valores preditos mostra claramente uma heterogeneidade de variˆncias e o QQ − plot mostra um comportamento dos dados que se afasta muito da normal.: 1 1 1 1 1 1 2 2 2 2 ... > tr. e > bartlett.

8961. onde log ´ o logar´ e ıtmo neperiano. que consiste em c˜ transformar os dados de acordo com a express˜o a y = yλ − 1 . Nos comandos a seguir come¸amos c˜ c carregando o pacote MASS e depois obtemos o gr´fico da verossimilhan¸a perfilhada. p-value = 0.0 0 500 1000 1500 Fitted values 2000 2500 trat : 5 4 3 2 Factor Level Combinations 1 Figura 48: Gr´ficos de diagn´stico para dados originais a o Shapiro-Wilk normality test data: tr.5 q8 q 6q q q Standardized residuals −2 −1 0 1 q8 q q q q q q q q q q q q q q q q q q q q q q q q q q q q q qq q qq q q qq q q q q q q q −3 2q 0. Devemos escolher o valor que maximiza esta fun¸ao. a A fun¸ao boxcox() do pacote MASS calcula a verossimilhan¸a perfilhada do parˆmetro c˜ c a λ.0 1. λ onde λ ´ um parˆmeto a ser estimado dos dados.av$res W = 0.22 TRANSFORMACAO DE DADOS ¸˜ Residuals vs Fitted 500 6q q8 q q q q qq qq qq q q q q q q q q q q q q 170 Normal Q−Q 6q 2 q q q qq q q qq qqq qq qqqqqq q q q q qq q q 8q −3 2q Standardized residuals −2 −1 0 1 q2 −500 0 Residuals 0 500 1000 1500 2000 Fitted values Scale−Location 2500 −2 −1 1 Constant 0 Leverage: TheoreticalFactor Levels Quantiles Residuals vs 6q 2 2q 2 Standardized residuals 0. Como a c . Uma vez obtido o valor de λ encontramos os valores dos dados transformados conforme a equa¸ao acima e utilizamos estes dados transformados para c˜ efetuar as an´lises. a Para tentar contornar o problema vamos usar a transforma¸ao Box-Cox.5 1.006742 Nos resultados acima vemos que a homogeneidade de variˆncias foi rejeitada. Se λ = 0 a equa¸˜o acima se reduz a e a ca y = log(y).

0 λ 0.aov(respt ~ trat. lam = seq(-1.(tr$resp^(0. data = tr. a a NOTA: No gr´fico da verossimilhan¸a perfilhada notamos que ´ mostrado um intervalo de a c e confian¸a para λ e que o valor 0 est´ contido neste intervalo.0 −0. A an´lise deve prosseguir usando ent˜o os dados transformados. > tr$respt <.aov(log(resp) ~ trat. a a a > require(MASS) > boxcox(resp ~ trat. Desta a ca e forma o pr´ximo passo ´ obter os dados transformados e depois fazer as an´lise utilizando estes o e a novos dados.1) . Isto indica que podemos utilizar c a a transforma¸˜o logar´ ca ıtimica dos dados e os resultados ser˜o bom pr´ximos dos obtidos com a a o transforma¸ao pr´viamente adotada.1)/0.5 0.171 INTRODUCAO AO R ¸˜ −200 95% −200 −2 −1 0 λ 1 2 −230 log−Likelihood −220 −210 95% −280 log−Likelihood −260 −240 −220 −1. data = tr.5 1. data = tr) > plot(tr.0 Figura 49: Perfis de verossimilhan¸a para o parˆmetro λ da transforma¸˜o Box-Cox c a ca estamos interessados no m´ximo fazermos um novo gr´fico com um zoom na regi˜o de interesse. plotit = T) > boxcox(resp ~ trat. c˜ e > tr.avl <.1 > tr. 1/10)) ˆ O gr´fico mostra que o valor que maximiza a fun¸˜o ´ aproximadamente λ = 0.avt <.avl) .avt) Note que os res´ ıduos tem um comportamento bem melhor do que o observado para os dados originais. data = tr) > plot(tr.1. 1.

22 TRANSFORMACAO DE DADOS ¸˜

172

Residuals vs Fitted
1.5
q 25

Normal Q−Q
3
25 q

1.0

18 q
q q

Standardized residuals 0 1 2

18 q
q q qq qqq q q qqqq q qqq qq q qq

Residuals 0.0 0.5

q q q q q q q q q q

q

q q q

q

q q q q

q q

−0.5

q

−1.0

q q q 30

q

−1

q

q

q q 30

q q

6

7

Scale−Location
q 25

8 9 10 Fitted values

11

12

−2

Constant Leverage: Theoretical Quantiles Residuals vs Factor Levels
q 25

−1

0

1

2

1.5

Standardized residuals −1 0 1 2

q 30

18 q
q q q q q q q q q q q q q

3

Standardized residuals 0.5 1.0

18 q
q q q q q q q q q q q q q q q q q q q q q q q q

q

q

q q q q q

q

q q

q q

q

q q q

q

0.0

−2

q 30

6

7

8 9 10 Fitted values

11

12

trat :

5

4 3 2 Factor Level Combinations

1

Figura 50: Gr´ficos de diagn´stico para dados transformados a o

173

INTRODUCAO AO R ¸˜

Residuals vs Fitted
1.0
q 25

Normal Q−Q
3
25 q

18 q
q q q q q q q q q q q q q q q q q q q q q q q q q

Standardized residuals 0 1 2

0.5

18 q
q q qq qq qq q q qqqq q qqq qqq q q q q q q

Residuals 0.0

−0.5

q q q 30

−2 4.5 5.0 5.5 6.0 6.5 Fitted values 7.0 7.5

−1
q 30

−2

Scale−Location
q 25

Constant Leverage: Theoretical Quantiles Residuals vs Factor Levels
q 25

−1

0

1

2

1.5

q 30

Standardized residuals −1 0 1 2

Standardized residuals 0.5 1.0

18 q
q q q q q q q q q q

3

18 q
q q q q q q q q q q q q q q q q q q q q q q q q q q q

q

q q

q q q q

q q

q

q q q q

q q

−2

q 30

0.0

4.5

5.0

5.5 6.0 6.5 Fitted values

7.0

7.5

trat :

5

4 3 2 Factor Level Combinations

1

Figura 51: Gr´ficos de diagn´stico para dados com transforma¸ao logar´ a o c˜ ıtmica

´ 23 FORMULAS E ESPECIFICACAO DE MODELOS ¸˜

174

23

F´rmulas e especifica¸˜o de modelos o ca

Objetos do R podem ser separados entre objetos de dados (vetores, matrizes, arrays, dataframes e listas) e outros tipos de objetos. As f´rmulas constituem um tipo especial de objeto o no Rque representam simbolicamente rela¸ao entre vari´veis e/ou objetos de dados. F´rmulas c˜ a o podem s˜o em geral usadas em fun¸oes gr´ficas e fun¸oes que analisam dados a partir de algum a c˜ a c˜ modelo definido pela f´rmula. o Nesta se¸ao vamos fazer uma breve introdu¸˜o ao uso de f´rmulas atrav´s de alguns exemplos c˜ ca o e de an´lises de dados. Para isto iremos utilizar o conjunto de dados mtcars dispon´ com o R. a ıvel Este conjunto cont´m caracter´ e ısticas t´cnicas de diversos modelos da autom´vel. Para carregar e o os dados e e listar os nomes das vari´veis utilize os comandos a seguir. Lembre-se ainda que a help(mtcars) ir´ fornecer mais detalhes sobre estes dados. a > data(mtcars) > names(mtcars) [1] "mpg" "cyl" [11] "carb"

"disp" "hp"

"drat" "wt"

"qsec" "vs"

"am"

"gear"

23.1

F´rmulas em gr´ficos o a

Algumas (mas n˜o todas!) fun¸oes gr´ficas do R aceitam uma f´rmula como argumento. a c˜ a o Em geral tais fun¸oes exibem gr´ficos para explorar a rela¸ao entre vari´veis. O R possui dois c˜ a c˜ a tipos de sistemas gr´ficos: (i) gr´ficos base (base graphics) e (ii) gr´ficos lattice. Os exemplos a a a mostrados aqui se referem apenas ao primeiro sistema. Gr´ficos l´ttice s˜o disponibilizados a a a pelo pacote lattice. no qual as f´rmulas s˜o ainda mais importante e largamente utilizadas. o a A Figura 52 mostra dois tipos de gr´ficos que s˜o definidos a partir de f´rmulas. No primeiro a a o a vari´vel de rendimento (mpg: milhas por gal˜o) ´ relacionada com uma vari´vel categ´rica a a e a o (cyl : n´mero de cilindros). No segundo caso o rendimento ´ relacionado com o peso do ve´ u e ıculo. A f´rmula do tipo y ∼ x pode ser lida como: a vari´vel y ´ explicada por x. o a e > with(mtcars, boxplot(mpg ~ cyl)) > with(mtcars, plot(mpg ~ cyl)) > with(mtcars, plot(mpg ~ wt)) A Figura 23.1 mostra agora um exemplo onde o gr´fico de rendimento explicado pelo peso ´ a e feito para cada n´mero de cilindros separadamente. Neste caso a formula usa o s´ u ımbolo | para
q q q q

30

30

q q

30

q

qq

q q

25

25

q q q q q q q q q q q q q q q q q q q q

25

q q q q q q q q q q q q q q qq q q q q q q q q

mpg

20

20

mpg
q

15

15

15

20

10

10

4

6

8

4

5

6 cyl

7

8

10

q

q q

2

3 wt

4

5

Figura 52: Exemplos de gr´ficos definidos atrav´s de f´rmulas. a e o

175

INTRODUCAO AO R ¸˜

Given : as.factor(cyl)

8

6

4

2
q q

3

4

5

2

3

4

5

30

q q q

25

q q q q q q qq q q

mpg

20

q q q

q

q q q q

q q q q q q q

10

15

qq

2

3

4

5

wt

Figura 53: Gr´fico obtido atrav´s de f´rmula com termo condicional. a e o

indicar condicionamento e ´ do tipo y ∼ x|A podendo ser lida como a rela¸˜o entre y e x para e ca cada n´ da vari´vel A. ıvel a > coplot(mpg ~ wt | as.factor(cyl), data = mtcars, panel = panel.smooth, + rows = 1)

23.2

F´rmulas em fun¸oes o c˜

Assim como no caso de gr´ficos, algums fun¸oes de an´lise de dados tamb´m aceitam f´rmulas a c˜ a e o em seus argumentos. Considere o exemplo do texte-t para compara¸ao de duas amostras na c˜ compara¸ao do rendimento de ve´ c˜ ıculos com cambio autom´tico e manual. No exemplo a seguir a mostramos o uso da fun¸ao de duas formas que produzem resultados idˆnticos, uma sem usar c˜ e f´rmula e outra usando f´rmula. o o > with(mtcars, t.test(mpg[am == 0], mpg[am == 1], var.eq = T)) Two Sample t-test data: mpg[am == 0] and mpg[am == 1] t = -4.1061, df = 30, p-value = 0.000285 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -10.84837 -3.64151 sample estimates: mean of x mean of y 17.14737 24.39231

´ 23 FORMULAS E ESPECIFICACAO DE MODELOS ¸˜

176

> with(mtcars, t.test(mpg ~ am, var.eq = T)) Two Sample t-test data: mpg by am t = -4.1061, df = 30, p-value = 0.000285 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -10.84837 -3.64151 sample estimates: mean in group 0 mean in group 1 17.14737 24.39231 Portanto em mpg ∼ am pode-se ler: rendimento (mpg) explicado por tipo de cˆmbio (am). a De forma similar a fun¸ao para compara¸ao de variˆncias tamb´m pode utilizar f´rmulas. c˜ c˜ a e o > with(mtcars, bartlett.test(mpg ~ am)) Bartlett test of homogeneity of variances data: mpg by am Bartlett's K-squared = 3.2259, df = 1, p-value = 0.07248

23.3

O objeto da classe formula

A f´rmula ´ um objeto do R e possui a classe formula. Desta forma, fun¸˜es que tenham o e co m´todos para esta classe tratam o objeto adequadamente. Por exemplo, no caso de t.test e recebendo uma formula como argumento o m´todo formula para t.test ´ dispon´ e e ıvel, como indica a documenta¸ao da fun¸ao. c˜ c˜ ## S3 method for class 'formula': t.test(formula, data, subset, na.action, ...) A seguir refor¸amos estas id´ias e vemos alguns comandos aplicados a manipula¸˜o de c e ` ca f´rmulas. As fun¸˜es all.vars() e terms() s˜o particularmente uteis para manipula¸ao de o co a ´ c˜ f´rmulas o objetos dentro de fun¸˜es. o co > class(mpg ~ wt) [1] "formula" > form1 <- mpg ~ wt > class(form1) [1] "formula" > all.vars(form1) [1] "mpg" "wt" > terms(form1) mpg ~ wt attr(,"variables") list(mpg, wt) attr(,"factors") wt mpg 0

"term. A linearidade ´ dada pela fun¸ao lm(). data = mtcars) Coefficients: (Intercept) 37."intercept") [1] 1 attr(. O modelo linear ´ dado por: e Y = β0 + β1 X + . A Figura 54 mostra os dados e a linha s´lida mostra a equa¸˜o do modelo o ca ajustado. Um aspecto particularmente importante da linguagem S.177 INTRODUCAO AO R ¸˜ wt 1 attr(."order") [1] 1 attr(.lm(mpg ~ wt."response") [1] 1 attr(. a e c˜ Portanto a mesma f´rmula pode ser usada para outros tipos de ajuste como o mostrado na o linha tracejada do gr´fico resultantes de regress˜o local polinomial obtida por loess()).4 Especifica¸˜o de modelos com uma covari´vel ca a Entre os diversos usos de f´rmulas. ´ que adota-se uma abordagem unificada para mode elagem. Vari´veis respostas e covari´veis c˜ a a (vari´veis explanat´rias) s˜o sempre especificadas de mesma forma b´sica. por simplicidade. a a Considere. ajustar um modelo que explique o rendimento (Y:mpg) pelo peso do ve´ ıculo (X:wt). atrav´s de um modelo linear lm().". o que inclui a sintaxe para especifica¸ao de modelos. o portanto no programa R. e pode ser ajustado no R usando lm() (lm : linear model ). a a . data = mtcars) > reg1 Call: lm(formula = mpg ~ wt. Na sintaxe da chamada fun¸ao c˜ mpg ∼ wt lˆ-se: mpg ´ modelado por wt. o mais importante deles ´ sem d´vida o fato que f´rmulas o e u o s˜o utimizadas na declara¸ao de modelos estat´ a c˜ ısticos. o que implica e e e no modelo acima.344 Note que a f´rmula apenas especifica a rela¸˜o entre as vari´veis resposta e explanat´rias e o ca a o n˜o implica que o modelo seja necessariamente linear. considerar que h´ apenas uma vari´vel a a resposta que poder´ ser explicada por uma ou mais covari´veis. na forma a o a a resposta ∼ covariavel.285 wt -5. para o conjunto de dados mtcars. onde: ˆ ˆ ˆ a esquerda indica-se a(s) vari´vel(eis) resposta ` a o s´ ımbolo ∼ significa ´ modelada por e a direita indica-se a(s) covari´vel(eis) ` a No restante deste texto vamos. > reg1 <.Environment") <environment: R_GlobalEnv> 23. ou seja.labels") [1] "wt" attr(.

1. a ca a ıda > > > > > > > > > > + with(mtcars. lty = c(1:3. c("lm()". band = 1)).frame(wt = wts)). "loess()". lwd = c(1. lty = 2) lines(with(mtcars. No exemplo utilizamos este recurso para produzir o gr´fico com a ”curva”do modelo a ajustado para uma sequˆncia de valores da covari´vel.gam(mpg ~ s(wt). baseando-se no modelo a a ajustado. "ksmooth()". max(wt). seq(min(wt). predict(reg3. plot(mpg ~ wt)) abline(reg1) reg2 <. onde o termo s() indica que a o vari´vel resposta deve ser descrita por uma fun¸˜o suave da covari´vel inclu´ neste termo. lty = 3) require(mgcv) reg3 <. data.loess(mpg ~ wt. 2)) Nos exemplos acima ´ interessante notar o uso de predict() que ´ utilizada para predizer o e e valor da resposta para um conjunto arbitr´rio de valores da covari´vel.with(mtcars. predict(reg2. data = mtcars) lines(wts.frame(wt = wts)). 1). ksmooth(wt. data = mtcars) wts <. data. 1. Outras fun¸˜es extendem a nota¸ao de fun¸˜es como ´ o caso do ajuste por modelos co c˜ co e aditivos generalizados gam() mostrado na linha s´lida grossa. lwd = 2) legend("topright". como por exemplo o c˜ a caso da regress˜o por n´cleo (kernel ) dada por ksmooth() cujo o ajuste ´ mostrado na linha a u e pontilhada. len = 201)) lines(wts. Entretanto predict() tamb´m poderia ser usada e a reta c e e . Para a fun¸ao lm() utilizamos apenas e a c˜ abline() devido ao fato que esta fun¸˜o retorna a equa¸˜o de uma reta que ´ interpretada ca ca e a tra¸ada por um m´todo abline. "gam()"). mpg. Nem todas as fun¸oes que relacionam vari´veis aceitam formulas.´ 23 FORMULAS E ESPECIFICACAO DE MODELOS ¸˜ 178 q q 30 qq lm() loess() ksmooth() gam() q q 25 q q q q q q q q q mpg 20 q q q q q q q q q q qq q q 15 q 10 q q 2 3 wt 4 5 Figura 54: Diferentes modelos ajustados para descrever a rela¸˜o entre duas vari´veis quantica a tativas.

179

INTRODUCAO AO R ¸˜

q q

q q

30

q

30

q

q

q

q

q

25

q q q

25

q

q q q q q

mpg

20

q q q q q

q q q q q q q q q

20

q q q q

mpg

q q q q q q q q q q q q q q qq q

15

q

15

q

q q

10

50

100

150

200 hp

250

300

10

qq

qq

4.0

4.5

5.0 log(hp)

5.5

Figura 55: Ilustra¸ao do uso de operadores aritm´ticos e fun¸oes polinomiais na especifica¸ao c˜ e c˜ c˜ de f´rmulas. o tra¸ada com o comando a seguir. Esta forma ´ mais flex´ c e ıvel para tra¸ar fun¸˜es (modelos) c co ajustados que sejam mais complexos que uma equa¸˜o de uma reta. ca > lines(wts, predict(reg1, data.frame(wt = wts)))

23.5

Extens˜es de modelos com uma covari´vel o a

As formulas admitem operadores aritm´ticos em seus termos. Por exemplo considere a rela¸˜o e ca entre o rendimento (mgp) e a potˆncia (hp). A linha s´lida no gr´fico da esquerda da Figura 23.5 e o a sugere que o modelo linear n˜o descreve bem a rela¸˜o entre estas vari´veis, enquanto no a ca a gr´fico da direita sugere a rela¸ao ´ melhor descrita por um modelo linear entre o rendimento a c˜ e e o logar´ ıtmo de potˆncia. Na chamada das fun¸˜es utilizamos a opera¸˜o aritm´tica log() e co ca e diretamente na f´rmula, sem a necessidade de transformar os dados originais. o > > > > with(mtcars, plot(mpg ~ hp)) abline(lm(mpg ~ hp, data = mtcars)) with(mtcars, plot(mpg ~ log(hp))) abline(lm(mpg ~ log(hp), data = mtcars))

Uma outra possibilidade para os dados originais ´ o ajuste de um modelo dado por uma e fun¸˜o polinomial, conforme mostrado na linha tracejada no gr´fico da esquerda da Figura 23.5 ca a e que ´ ajustado com os comandos a seguir. Neste ajuste ´ importante notar que a vari´vel e e a quadr´tica deve ser especificada com I(hp^2) e o uso de I() ´ obrigat´rio para garantir que a e o os valores de hp sejam de fato elevados ao quadrado. O uso de hp^2 possui um significado diferente que veremos na pr´xima sess˜o. o a > polA <- lm(mpg ~ hp + I(hp^2), data = mtcars) > hps <- seq(50, 350, len = 200) > lines(hps, predict(polA, data.frame(hp = hps)), lty = 2)

´ 23 FORMULAS E ESPECIFICACAO DE MODELOS ¸˜

180

Uma outra forma de especificar regress˜es polinomiais ´ com o uso de poly(), onde o grau do o e desejado do polinˆmio ´ um argumento desta fun¸˜o conforme ilustrado nos comandos a seguir. o e ca No exemplo ´ importante notar que a interpreta¸ao dos parˆmetros ´ diferente devido ao fato e c˜ a e de que polinˆmios ortogonais s˜o utilizados. Entretanto os valores preditos e as estat´ o a ısticas de ajuste s˜o iguais. O ajuste por polinˆmios ortogonais ´ numericamente mais est´vel e portanto a o e a deve ser preferido quando poss´ ıvel. Quando se usa as op¸˜es default a fun¸ao poly() vai co c˜ sempre contruir polinˆmios ortogonais. Caso queira-se usar potˆncias usuais deve-se adicionar o e a chamada desta fun¸˜es o argumento raw=T. ` co > polA Call: lm(formula = mpg ~ hp + I(hp^2), data = mtcars) Coefficients: (Intercept) hp I(hp^2) 40.4091172 -0.2133083 0.0004208 > polB <- lm(mpg ~ poly(hp, 2), data = mtcars) > polB Call: lm(formula = mpg ~ poly(hp, 2), data = mtcars) Coefficients: (Intercept) poly(hp, 2)1 poly(hp, 2)2 20.09 -26.05 13.15 > hps <- seq(50, 350, by = 50) > predict(polA, data.frame(hp = hps)) 1 2 3 4 5 6 7 30.79574 23.28645 17.88123 14.58009 13.38303 14.29005 17.30114 > predict(polB, data.frame(hp = hps)) 1 2 3 4 5 6 7 30.79574 23.28645 17.88123 14.58009 13.38303 14.29005 17.30114 Vamos considerar agora um outro exemplo de ajuste de modelo linear, 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. Os comandos a seguir mostram os quatro ajustes indicados na Figura 56. O primeiro (linha fina s´lida) ´ uma regress˜o linear, o segundo (linha o e a fina tracejada) ´ uma regress˜o linear com intercepto igual a zero, isto ´, a reta passa pela e a e origem. O terceiro (linha s´lida grossa) ´ uma regress˜o quadr´tica e o quarto (linha s´lida o e a a o grossa) ´ uma regress˜o quadr´tica passando pela origem. Neste exemplo fica ent˜o ilustrado e a a a que a adi¸ao do termo + 0 na f´rmula faz com que o intercepto do modelo seja nulo e apenas c˜ o o parˆmetro referente ao coeficiente angular da reta seja estimado. a > > > > > > > > data(women) wm1 <- lm(weight ~ height, data = women) wm2 <- lm(weight ~ height + 0, data = women) wm3 <- lm(weight ~ height + I(height^2), data = women) wm4 <- lm(weight ~ height + I(height^2) + 0, data = women) with(women, plot(weight ~ height)) hgs <- seq(58, 72, l = 200) lines(hgs, predict(wm1, data.frame(height = hgs)))

181

INTRODUCAO AO R ¸˜

linear linear s/ intercepto quadrático quadrático s/ intercepto
q q

q q q

weight 140

150

160

q q q q q q

130

120

q q q q

58

60

62

64 66 height

68

70

72

Figura 56: Ajustes de modelos de primeiro e segundo grau, com e sem estima¸˜o do intercepto. ca > > > > + + lines(hgs, predict(wm2, data.frame(height = hgs)), lty = 2) lines(hgs, predict(wm3, data.frame(height = hgs)), lwd = 2) lines(hgs, predict(wm4, data.frame(height = hgs)), lty = 2, lwd = 2) legend("topleft", c("linear", "linear s/ intercepto", "quadr´tico", a "quadr´tico s/ intercepto"), lty = c(1, 2, 1, 2), lwd = c(1, a 1, 2, 2), cex = 0.85)

23.6

Especifica¸˜es mais gerais de modelos co

Nos exemplos anteriores a vari´vel resposta era explicada por apenas uma vari´vel explanat´ria. a a o Isto pode ser expandido considerando-se a presen¸a de duas ou mais vari´veis explicativas. A c a Tabela 23.6 resume as principais opera¸˜es poss´ co ıveis para definir modelos com uma ou duas vari´veis e que podem ser extendidas para o caso de mais vari´veis. a a Esta nota¸˜o ´ uma implementa¸˜o das id´ias propostas por Wilkinson e Rogers para esca e ca e pecifica¸˜o de modelos estat´ ca ısticos. (G. N. Wilkinson. C. E. Rogers. Symbolic Description of Factorial Models for Analysis of Variance. Applied Statistics, Vol. 22, No. 3, 392-399. 1973). Para ilustrar algumas destas op¸˜es vamos considerar novamente o conjunto de dados co mtcars ajustando modelos para o rendimento (mpg) explicado pelo peso (wt) e potˆncia (hp) e do ve´ ıculo. Nos comandos a seguir mostramos os coeficientes estimados a partir de cinco formas de especifica¸ao de modelos. c˜ > coef(lm(mpg ~ I(wt + hp), data = mtcars)) (Intercept) I(wt + hp) 30.2877307 -0.0680239

´ 23 FORMULAS E ESPECIFICACAO DE MODELOS ¸˜

182

Tabela 5: Sintaxe para especifica¸˜o de termos dos modelos ca Termos Especifica¸ao c˜ A + B Efeitos principais A e B A : B Termo de intera¸˜o entre A e B ca A * B Efeitos principais e intera¸ao, corresponde a A + B + A : B c˜ B %in% A B dentro (aninhado) de A A/B Efeito principal e aninhado, corresponde a A + B%in%A A-B tudo de A exceto o que est´ em B a A^k Todos os termos de A e intera¸ao de ordem k c˜ A + 0 exclui o intercepto de modelo I() operador de identidade aritm´tica, ver explica¸ao no texto e c˜

> coef(lm(mpg ~ wt + hp, data = mtcars)) (Intercept) wt hp 37.22727012 -3.87783074 -0.03177295 > coef(lm(mpg ~ I(wt * hp), data = mtcars)) (Intercept) I(wt * hp) 27.74564216 -0.01487156 > coef(lm(mpg ~ wt * hp, data = mtcars)) (Intercept) wt hp 49.80842343 -8.21662430 -0.12010209 (Intercept) wt hp 49.80842343 -8.21662430 -0.12010209 (Intercept) I((wt + hp)^2) 24.4985252043 -0.0001625815 Os resultados sugerem que as f´rmulas definem modelos diferentes, exceto pelos termos wt * o hp e (wt * hp)^2 onde o mesmo modelo ´ especificado de duas formas alternativas. Os modelos e ajustados para explicar o rendimento mpg denotado por Y s˜o: a
ˆ

wt:hp 0.02784815 wt:hp 0.02784815

> coef(lm(mpg ~ (wt + hp)^2, data = mtcars))

> coef(lm(mpg ~ I((wt + hp)^2), data = mtcars))

1. Y = β0 + β1 X1 + , um modelo com apenas uma covari´vel onde X1 ´ a covari´vel a e a unica com valores dados pela soma dos valores de wt e hp de cada ve´ ´ ıculo; 2. Y = β0 + β1 X1 + β2 X2 + , um modelo com duas covari´veis onde X1 ´ a covari´vel a e a wt e X2 ´ a covari´vel hp. e a 3. Y = β0 + β1 X1 + , um modelo com apenas uma covari´vel onde X1 ´ a covari´vel a e a unica com valores dados pelo produto dos valores de wt e hp de cada ve´ ´ ıculo; 4. e 5. Y = β0 + β1 X1 + β2 X2 + β3 X3 + , um modelo com duas covari´veis mais o termo a de intera¸ao entre elas, onde X1 ´ a covari´vel wt, X2 ´ a covari´vel hp e X3 ´ a intera¸ao c˜ e a e a e c˜ dada pelo produto X3 = X1 × X2 . 6. Y = β0 + β1 X1 + , um modelo com apenas uma covari´vel onde X1 ´ a covari´vel a e a unica com valores dados pelo quadrado da soma dos valores de wt e hp de cada ve´ ´ ıculo;

ˆ

ˆ

ˆ

ˆ

183

INTRODUCAO AO R ¸˜

Tabela 6: Outros exemplos de sintaxe para especifica¸ao de modelos. c˜ Descri¸ao c˜ todos efeitos principais e intera¸ao dupla apenas c˜ entre B e C A+B*(C+D) A+B+C+D+B:C+B:D todos efeitos principais e intera¸oes duplas c˜ de B com C e B com D A*B*C A+B+C+A:B+A:C+B:C+A:B:C todos efeitos principais e intera¸oes poss´ c˜ ıveis (A+B+C)^3 A+B+C+A:B+A:C+B:C+A:B:C trˆs covari´veis e intera¸oes de ordem 2 e 3 e a c˜ (igual ao anterior) (A+B+C)^2 A+B+C+A:B+A:C+B:C trˆs covari´veis e intera¸oes de ordem 2 e a c˜ (A+B+C)^3 - A:B:C (A+B+C)^2 trˆs covari´veis e intera¸oes de ordem 2 e a c˜ (A+B+C)^2 - A:C A+B+C+A:B+B:C trˆs covari´veis e intera¸oes de ordem 2, e a c˜ exceto por A : C A+I(A^2)+I(A^3) poly(A,3) regress˜o polinomial c´bica em A (*) a u A+I(A^2)+I(A^3) poly(A,3,raw=TRUE) regress˜o polinomial c´bica em A a u A+I(A^2)+B poly(A,2)+B termos lineares em A e B e quadr´tico em A (*) a A+I(A^2)+B poly(A,2,raw=TRUE)+B termos lineares em A e B e quadr´tico em A a y ~ . A+B+... inclui como covari´veis todas as vari´veis no a a objeto de dados, exceto a resposta y ~ . - A B+... inclui como covari´veis todas as vari´veis no a a objeto de dados, exceto a resposta e a vari´vel A a Declara¸˜o ca A+B*C Modelo equivalente A+B+C+B:C

Chama-se aten¸˜o ao fato que a nota¸˜o de ”potˆncia” em (wt+hp)^2 n˜o indica uma ca ca e a opera¸˜o aritm´tica mas sim a inclus˜o de todos os efeitos principais e intera¸˜es at´ as de ca e a co e ordem indicada pela potˆncia. Para incluir a opera¸˜o aritm´tica de potˆncia ´ necess´rio e ca e e e a utilizar I() no termo a ser exponenciado. De forma geral, a mensagem ´ de que os operadores soma (+), produto (*), divis˜o (/) e a e potˆncia (^) tˆm nas f´rmulas o papel de definir numa nota¸˜o simb´lica quais e como os e e o ca o termos devem ser inclu´ ıdos no modelo. Em f´rmulas, tais operadores s´ indicam opera¸oes o o c˜ aritm´ticas com os termos envolvidos quando utilizados dentro de I(). A fun¸ao I() garante e c˜ que a express˜o nela contida seja avaliada como uma fun¸ao aritm´tica, tal e qual est´ escrita a c˜ e a (”as is”). Na tabela 23.6 s˜o ilustradas mais algumas especifica¸oes de modelos. No caso marcado com a c˜ (*) os modelos s˜o equivalentes por´m os coeficientes resultantes s˜o diferentes como comentado a e a sobre polinˆmios ortogonais na Sess˜o 23.5. o a

23.7

Atualizando e modificando f´rmulas o

Uma vez que um objeto contenha uma f´rmula, ´ poss´ obter uma nova f´rmula que seja o e ıvel o uma modifica¸ao da original utilizando update.formula(). c˜ > form1 <- y ~ x1 + x2 + x3 > form1 y ~ x1 + x2 + x3 > form2 <- update.formula(form1, . ~ . - x2) > form2 y ~ x1 + x3

x2 entende-se: a nova ca f´rmula dever´ possuir tudo que estava do lado esquerdo. em . a Este mecanismos ´ util para evitar que f´rmulas precisem ser totalmente redigitadas a cada e´ o redefini¸˜o do modelo. O mecanismo tamb´m reduz a chance de erros nas especifica¸˜es uma vez que garante e co a igualdade daquilo que ´ indicado pela nota¸ao de ponto (·). .´ 23 FORMULAS E ESPECIFICACAO DE MODELOS ¸˜ 184 A l´gica da sintaxe ´ que o primeiro argumento recebe uma f´rmula inicial e o segundo indica o e o a modifica¸˜o. e tudo do lado direito. Ou seja. O caracter ponto (·) indica tudo. o que ´ util ao se investigar v´rios modelos que s˜o obtidos uns a partir ca e´ a a de outros. e c˜ . excluindo a o a vari´vel x2. ~ .

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

Optamos aqui por indicar tamb´m neste e co e gr´fico a m´dia de cada tratamento.mds.nrep <.367 19.88378 trat-6 6 406. col = 2. > > > > > > > + require(MASS) boxcox(resp ~ trat. Caso isto n˜o a e a ocorresse uma poss´ alternativa seria usar o procedimento descrito na Sess˜o 24. sep = "-")) Repet Medias Variancias EP trat-1 6 378.5000 987.mds. row.ex01.6667 1916. EP = ex01. Medias = ex01. ıvel a > bartlett.6667 3494.87114 trat-2 6 431. o que ser´ a a c a discutido mais adiante nesta sess˜o.500 12.mds + ex01.var.267 17. mean)) ex01. Neste caso o teste indica variˆncias homogˆneas. tapply(resp. trat. Ainda neste gr´fico acrescentamos as o a m´dias e barras que somam e subtraem os erros padr˜es da m´dia para cada tratamento.1) > > > > > + ´ E importante notar que as barras simplesmente refletem a variˆncia dos dados dentro da a cada tratamento e n˜o s˜o adequadas para detectar diferen¸as entre tratamentos.8333 1513.5) with(ex01.with(ex01. stripchart(resp ~ trat.3333 3117.79571 trat-4 6 293. code = 3.8333 1242. lambda = seq(0. 1:9. como por a a exemplo.names = paste("trat". Al´m dos gr´ficos acima podemos tamb´m verificar o a e a e pressuposto de homogeneidade de variˆncias com o testes de igualdeda de variˆncias. data = ex01) . O gr´fico do meio mostra um e c˜ a boxplot para os dados de cada tratamento. length = 0. O gr´fico de esquerda utiliza a fun¸ao boxcox() do pacote MASS para a c˜ verificar a necessidade de transforma¸ao dos dados o que neste caso n˜o ´ necess´ria visto que c˜ a e a o valor um est´ contido no intervalo definido pelas lines tracejadas.test(resp ~ trat.600 17.mds <.81198 trat-7 6 164. O gr´fico da direita produzido com stripchart() ´ uma a e a e alternativa ao boxplot para amostras de tamanho pequeno. function(x) sqrt(var(x)/length(x)))) data. trat. cex = 1.5) arrows(1:9.with(ex01. angle = 90. met = "jitter". A transforma¸˜o Box-Cox a ca ´ discutida me mais detalhes em uma outra Se¸ao deste material.se.03228 trat-8 6 403. tapply(resp.167 14. data = ex01) plot(ex01) points(ex01.13389 trat-5 6 341.1667 2173.with(ex01.se <. code=3 ca 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.067 13.var <. tapply(resp.3. ex01. o teste de Bartlett. Variancias = ex01. ex01.24 EXPERIMENTOS COM DELINEAMENTO INTEIRAMENTE CASUALIZADOS 186 ex01.767 15. trat.867 22.mds . tapply(resp.se.nrep. o que deve ser analisado com cautela lembrando que cada boxplot ´ produzido com apenas seis observa¸˜es.82900 trat-3 6 346.667 24.frame(Repet = ex01.se. Na chamada desta fun¸˜o optamos ca por alterar valores default de alguns argumentos como por exemplo para method="jitter" que provoca pequeno um deslocamento horizontal aleat´rio dos pontos evitando assim sobreposi¸ao o c˜ de pontos com valores coincidentes ou muito pr´ximos. l = 101). pch = 19)) points(ex01.0000 1903.6667 1091. length)) ex01.with(ex01. pch = "x". Na e o e fun¸˜o arrows() os quatro argumentos iniciais informam coordenadas para as barras. cex = 1.mds. 1:9.48497 Vamos prosseguir com a an´lise explorat´ria com gr´ficos gerados pelos comandos a seguir e a o a mostrados na Figura 24. var)) ex01. trat. pch = 4. vert = T.38846 trat-9 6 415. 3.

02053 Estimated effects may be unbalanced > anova(ex01. Vamos inspecionar este objeto e seus elementos mais detalhadamente ilustrando .3 Deg.mod Call: aov(formula = resp ~ trat. os resultados s˜o oranizados a internamente de forma conveniente para a efetuar a an´lise de variˆncia.1 87201. por se tratar e da an´lise de um experimento.mod <. opa a a tamos por usar aov(). Bartlett test of homogeneity of variances data: resp by trat Bartlett's K-squared = 3.0 0. data = ex01) Terms: trat Residuals Sum of Squares 332918. p-value = 0.0 2.5 1.8853 Uma vez conclu´ a an´lise explorat´ria e verificada a adequacidade de alguns pressuposıda a o tos o passo seguinte ´ ajustar o modelo usando aov() ou lm(). boxplot dos dados (centro) e dados com m´dias e erros padr˜o para cada e a tratamento (direita).445e-13 Residuals 45 87201 1938 Portanto o objeto ex01. tipicamente avaliada pelo quadro de an´lise de variˆncia.0 1.5 λ 2. Embora aov() use lm() internamente.475 5.0 t1 t2 t3 t4 t5 trat t6 t7 t8 t9 t1 t2 t3 t4 t5 t6 t7 t8 t9 Figura 57: Explorando os dados: perfil de verossimilhan¸a do parˆmetro da transforma¸˜o c a ca BoxCox (esquerda).mod) Analysis of Variance Table Response: resp Df Sum Sq Mean Sq F value Pr(>F) trat 8 332918 41615 21. df = 8. a a > ex01.aov(resp ~ trat.6738.mod ´ uma lista que guarda os resultados da an´lise para o modelo e a ajustado. Neste exemplo.5 3. of Freedom 8 45 Residual standard error: 44. data = ex01) > ex01.187 INTRODUCAO AO R ¸˜ q 450 450 −308 x x x x x q q qq q q q q q q q q q q q q q q q q q q q q q 400 400 95% x x x q q q q q q q q q 350 log−Likelihood −312 −310 350 q q resp 300 resp 300 q q q q q q 250 250 q q q 200 200 q q −314 150 150 x q q q q 0.

85 -11.1667 403.83333 -32.48 -189.00000 "rank" "contrasts" "fitted.mod1) tratt1 tratt2 tratt3 tratt4 tratt5 tratt6 tratt7 tratt8 tratt9 378.mod1 <. Note que apenas a ` e interpreta¸˜o dos coeficientes muda e a an´lise de variˆncia permanece a mesma.35 > model.1.69 52.24 EXPERIMENTOS COM DELINEAMENTO INTEIRAMENTE CASUALIZADOS 188 como us´-lo para obter a an´lise dos resultados e extrair elementos para a an´lise de res´ a a a ıduos.mod. mas h´ ainda v´rias a a outras como effects().33333 tratt7 -214.values" "xlevels" tratt5 -36.tables(ex01.8333 406.33333 tratt8 tratt9 25.98 -7.6667 341.8 406. A fun¸ao names() mostra os elementos da lista e adicionalmente existem fun¸˜es que extraem c˜ co elementos do objeto. type = "means") Tables of means Grand mean 353.31 t9 62.residual" "model" tratt4 -85. No caso de n´ ıveis qualitativos como neste exemplo.15 O resultado de coef() vai depender da parametriza¸˜o adotada e definida pelos contrastes. AIC() logLik().6667 > anova(ex01.16667 37.2 403.7 341.0000 164. Duas tipicamente utilizadas s˜o coef() para extrair os coeficientes.7 t8 50.tables(ex01.3333 293.50000 trat trat t1 t2 t3 t4 t5 t6 t7 25.15 77.mod) [1] "coefficients" "residuals" [6] "assign" "qr" [11] "call" "terms" > coef(ex01. a residuals() para extrair res´ ıduos e fitted() para valores ajustados.3 293. para n´ ıveis quantititivos corresponde a ajustar um modelo com intercepto igual a zero.19 -59.tables().66667 52.mod1) .5185 trat trat t1 t2 t3 t4 t5 t6 t7 t8 t9 378.8333 415.8 415.treatment" que ca assinala o valor da m´dia do primeiro tratamento (primeiro n´ do fator) ao primeiro coee ıvel ficiente.0 164.6667 431.5 346.5000 346. entre outras. Os ca valores default e/ou correntes s˜o dados por options()$contrasts.83333 tratt6 27. Para fatores qualitativos a como no caso deste exemplo a parametriza¸˜o default corresponde a "contr.mod) (Intercept) tratt2 tratt3 378. Os demais representam a diferen¸a das m´dias de cada um dos tratamentos a este c e ` tratamento de referˆncia. monta uma matrix do modelo de forma a que cada coeficiente corresponda a m´dia de cada um dos tratamentos.7 431. > names(ex01.00000 > model. data = ex01) > coef(ex01. e Uma outra forma de expecificar o modelo para este exemplo ´ mostrada a seguir com o uso e -1 que. ca a a > ex01. model.mod) Tables of effects "effects" "df.aov(resp ~ trat .

Os resultados da c˜ e e an´lise de variˆncia permanecem inalterado.4] [.sum".2] [.treatment" "contr.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.189 INTRODUCAO AO R ¸˜ Analysis of Variance Table Response: resp Df Sum Sq Mean Sq F value Pr(>F) trat 9 7081587 786843 406.05 < 2. "contr.7] [.6] [.481481 . > options()$contrasts unordered ordered "contr. Os coeficientes obtidos c˜ s˜o diferentes dos obtidos anteriormente sendo o primeiro a m´dia geral e os demais uma a e compara¸ao da m´dia de cada tratamento contra as m´dias dos demais. data = ex01)) (Intercept) trat1 trat2 trat3 trat4 353.351852 50. Nos comandos c˜ a a seguir alteramos a op¸ao para fatores unordered para "contr.3] [. a a > options(contrasts = c("contr. pode-se usar outras c˜ op¸oes de contrastes j´ disponibilizadas pelo R tipicamente usando options().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¸ao a ser utilizada e definida pelos contrastes.5] [. a e no caso de n´ ıveis quantitativos.1] [. por exemplo.2e-16 Residuals 45 87201 1938 A parametriza¸ao para os coeficientes ´ determinada pela matriz do modelo e ´ definida c˜ e e pelo argumento contrasts de options() ou pela fun¸ao contrasts() que mostra ou atribui a c˜ matrix de contrastes a ser utilizada. Fatores s˜o definidos como sendo unordered (por exemplo a n´ ıvies qualitativos como no caso da an´lise vista aqui) ou ordered.poly")) > contrasts(ex01$trat) [.185185 -59.518519 25.sum".148148 77.685185 trat6 52.314815 trat5 -11. o que ´ usado.981481 -7.851852 trat7 trat8 -189.

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

5 Scale−Location q 20 q q 23 Constant Leverage: Residuals vs Factor Levels 2 17 q q 23 q q q q q q q q q q q q q q q q q q −1 0 1 Theoretical Quantiles 2 17 q q Standardized residuals 0.0 q Standardized residuals −1 0 1 q q q q q qq q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q q −2 q q 20 0.0 200 250 300 350 Fitted values 400 trat : t7 t4 t5 t3 t1 t8 t6 Factor Level Combinations t9 t2 Figura 58: Gr´ficos para diagn´stico do ajuste do modelo. sendo eles: (i) teste-t para compara¸˜es duas a duas. O pacote a a multcomp disponibiliza uma extensa lista de procedimentos adicionais de compara¸˜es m´ltico u plas e alguns procedimentos espec´ ıficos podem ainda ser encontrados em outros pacotes do R. e a Os procedimentos discutidos a seguir correspondem a trˆs possiveis abordagens ao problema e de compara¸˜o de mais de duas m´dias.5 1. co A quest˜o do uso de compara¸˜es de tratamentos ´ polˆmica no meio estat´ a co e e ıstico e n˜o vamos a aqui entrar em tal discussˆo. o que justifica o termo as vezes utilizado que descreve tais procedimentos ` como compara¸˜es post-hoc.191 INTRODUCAO AO R ¸˜ Residuals vs Fitted 100 17 q q q 23 q q q q Normal Q−Q 17 q 2 23 q q qq 50 q q q q q q q q q q q q q q q q q q Standardized residuals −1 0 1 q q q q q q q q q qq q q q q q qq qqq qqq qqq qq qq q q q q q q qq q q qq q q qq qqq Residuals 0 q q q q qq qq q q q q q q q −50 q q q q q −100 −2 400 q 20 q 20 200 250 300 350 Fitted values −2 1. ca e co (ii) teste de Tukey e (iii) contrastes e contrastes ortogonais. Neste sess˜o vamos ilustrar trˆs procedimentos deixando a cargo a a e do leitor o julgamento de qual procedimento ´ mais adequado para o problema em quest˜o.1 Comparando tratamentos Uma das formas poss´ ıveis formas de interpretar os resultados no caso de efeito de tratamentos significativos ´ utilizar algum procedimento de compara¸oes de tratamentos ap´s verificar o e c˜ o resultado da anova. O primeiro caso se desdobra em mais op¸oes uma vez que permite que os valores p sejam ou n˜o ajustados. . por c˜ a diferentes m´todos. a o 24. e caso sejam. e Os procedimentos mostrados aqui s˜o implementados em pacotes b´sicos do R.

test() calcula todas as poss´ c˜ ıveis compara¸˜es entre dois grupos. A principal diferen¸a ´ que o n´ c˜ c e ıvel de significˆncia deve ser cora rigido para garantir o nivel de significˆncia conjunto para todas compara¸oes. Mais detalhes podem ser encontrados na documenta¸˜o da fun¸˜o.t. ca ca > with(ex01. . que ´ uma ıvel a e modifica¸˜o ao ajuste de Bonferroni. poco dendo ser vista como uma extens˜o ao teste-t para duas amostras.24 EXPERIMENTOS COM DELINEAMENTO INTEIRAMENTE CASUALIZADOS 192 24.t. retornando o valor-p a para cada compara¸ao.1 Compara¸˜es de pares co A fun¸ao pairwise.method da fun¸ao permite o usu´rio escolher entre diferentes m´todos propostos para c˜ a e ajustar o n´ de significˆncia sendo o default o prodedimento proposto por Holm.adj="bonferroni". O argumento a c˜ p.1.test(resp. pairwise. trat)) Pairwise comparisons using t tests with pooled SD Resíduos Padronizados vs Valores Preditos 2 q q q q q q q q q q q q q Resíduos Padronizados 2 q q 1 resíduos 0 q q q q q q q q q q qq qq q q q q q q −1 q −2 200 250 300 350 valores ajustados 400 −2 q −1 q 0 q q q q q q q q q q 1 Histograma dos resíduos padronizados 15 Gráfico Normal de Probabilidade dos Resíduos q q qq q q q q qq q q q q q qq qqq qqq qqq qq qq q q q q q q qq q q qq q q qq qqq q q q Frequency 10 5 −50 Residuos 0 50 q q 0 −2 −1 0 respad 1 2 −2 −1 0 1 Theoretical Quantiles 2 Figura 59: Gr´ficos de res´ a ıduos.adjust. que tamb´m ´ dispon´ utilizando atrav´s do argumento ca e e ıvel e p.

193 INTRODUCAO AO R ¸˜ data: resp and trat t2 0.6203900 0.000000 64.0000000 0.833333 251.052367 -78.28097 350.5e-09 1.0e-10 2.0000000 0.00000 1.052367 168. ordered = TRUE) > ex01.0000000 0.0018566 0.03768 1.000000 110.28097 260.833333 4.4e-05 0.44763 167.2. c e > ex01. A sa´ co u e ca ıda em formato texto do teste de Tukey ´ mostrada a seguir e plot(ex01.00019 0.166667 lwr 46.0401018 0.00000 t7 1.00000 2.0000004 0.614299 upr 212.94763 297.44763 264.719034 184.28097 119.00000 P value adjustment method: holm 24.2479215 .1.500000 267.94763 135.00000 3.28829 3.00000 1.00000 t2 t3 t4 t5 t6 t7 t8 t9 t1 0.11918 t6 8.219034 55.8721075 0.HSD) produz o gr´fico e a mostrado na Figura 24.0000000 0.61430 87.00000 1.552367 -34.2 Teste de Tukey O teste Tukey de compara¸˜es m´ltiplas ´ implementado na fun¸˜o TukeyHSD().00000 1.5e-11 t8 1.65049 1.94763 p adj 0.TukeyHSD(ex01.18109 t4 0.00160 0.78097 220.114299 2.8e-12 1. As sa´ ıdas da fun¸ao mostram intervalos de confian¸a para as c˜ c diferen¸as entre pares de m´dias.333333 48.0005599 0.61430 144.11430 130.33686 0.8e-07 0.78097 192.947633 -20.00000 0.28097 322.0002153 0.45676 0.39692 1.280966 -45.00048 t5 0.166667 214.780966 -18.666667 85.000000 137.HSD Tukey multiple comparisons of means 95% family-wise confidence level factor levels have been ordered Fit: aov(formula = resp ~ trat.94763 195.0000000 0.166667 52.166667 112.719034 156. 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 diff 129.500000 177.666667 241.00203 0.5040619 0.719034 94.61430 334.HSD <.333333 122.500000 36.885701 99.2e-11 1.500000 239.78097 146.65049 1.0000000 0.385701 131.83853 0.11430 204.2e-07 0.03768 6.44763 324.552367 39.0024139 0.0000730 1.mod.2886707 0.02345 1.219034 27.1.385701 29.885701 159.00000 t3 0.0000002 0.00000 0.666667 182.614299 -30.833333 62.

9836416 0.8693183 0.4998060 1.000000 52.94763 107.947633 6.94763 94.385701 -57.114299 -13.780966 -29.61430 0.9993743 Visualiza¸oes mais convenientes dos resultados podem ser obtidas com opera¸oes sobre o c˜ c˜ objeto resultante.666667 25.28097 142.1146645 0. No caso deste experimento balanceado.614299 -70.0000000 0.280966 -66.833333 89.280966 -23.9749062 0.44763 115.9849417 0.61430 84.833333 27.0394343 0.11430 167.333333 85.666667 32.9730043 0.61430 172.833333 2.9999286 0.166667 11.666667 9. isto ´. o mesmo n´mero de e u .447633 -25.3855262 0.61430 110.9342210 0. tal como a usualmente adotada de listar as m´dias em ordem descrescente e e indicar com letras as diferen¸as significativas ou n˜o entre estas m´dias.1671352 0.333333 57.0247945 0.166667 25.44763 92.94763 110.447633 2. Inicialmente vamos obter a DMS (diferen¸a c˜ c m´ ınima significativa).11430 140.114299 -57. Vamos ilustrar c a e aqui uma possivel forma de obter tal visualiza¸ao.114299 -73.947633 -80.3369467 0.24 EXPERIMENTOS COM DELINEAMENTO INTEIRAMENTE CASUALIZADOS 95% family−wise confidence level t4−t7 194 t2−t9 t6−t8 t2−t3 t2−t5 t3−t5 t1−t4 t6−t7 0 100 200 Differences in mean levels of trat 300 Figura 60: Resultados do tete de Tukey. 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 73.833333 -8.44763 152.666667 69.78097 135.28097 98.500000 59.614299 -55.11430 119.947633 156.500000 15.333333 37.166667 27.947633 -55.447633 -45.44763 108.9999849 0.885701 -50.

rep(" ".78097 O passso seguinte ´ ordenar as m´dias deforma decrescente e verificar as diferen¸as significae e c tivas. .1667 d Neste caso o procedimento ´ simples pois para um experimento balanceado e pelo teste de e Tukey tem-se apenas um unico valor de DMS.character(nlevels(ex01$trat)) > while (i <= nlevels(ex01$trat)) { + print(letters[letra]) + ind <.i] <.i + sum(ind) + if (pos.pos. sep = "") + pos <.i + 1 + } [1] "a" [1] "b" [1] "c" [1] "c" [1] "c" [1] "c" [1] "d" [1] "d" [1] "d" > data.1 > letras <. o > ex01.mds.mds.ord <.5000 a t9 415.vec <.paste(letras.sort(ex01.frame(medias = ex01. o intervalo de confian¸a para cada diferen¸a ´ o mesmo e a c˜ c c e DMS ´ portanto comum e dada por metade da amplitude do intervalo.195 INTRODUCAO AO R ¸˜ repeti¸oes em cada tratamento.i + letra <.vec.ord[-(1:i)])) < dms + pos.unname(0.ord[i] . e > dms <.6667 ab t3 346. 2:3])) > dms [1] 82. decreasing = TRUE) > i <.letters[letra] + letras <. O algor´ ´ ıtmo deve ser modificado e generalizado para outras situa¸˜es ou pode-se usar fun¸˜es de pacotes como multcompLatters do pacote co co multcompView.letra <.mds.i > pos) { + letras.ord.pos <.3333 bc t5 341.8333 ab t1 378. length(letras)) + letras.mds.0000 ab t8 403.vec[i:pos.letra + 1 + } + i <.6667 c t7 164.6667 ab t6 406.HSD[[1]][1.(ex01. letras.mds. diferencas = letras) medias diferencas t2 431.8333 bc t4 293.(ex01.5 * diff(ex01.i <. O c´digo abaixo ´ uma (mas certamente n˜o a unica) maneira de indicar as diferen¸as o e a ´ c significativas c´digo de letras usual na literatura.

co a a ca Portanto.1. o c˜ diretamente no ajuste do modelo. associando ao(s) fatores a estrutura de contrastes desejadas.3 Contrastes e contrastes ortogonais Na an´lise de experimentos pode-se ter interesse em estudar determinadas compara¸oes entre a c˜ as m´dias que podem ser especificadas pelo usu´rio na forma de contrastes. t8. co a c˜ Seja o modelo linear escrito na forma matricial Y = Xβ + onde Y ´ a vari´vel resposta. Contrastes ortogonais s˜o particularmente interessantes pois e a permitem desdobrar (particionar) a soma de quadrados de tratamentos um parcelas referentes a cada um dos contrastes. Ao ajustar um modelo as estimativas de contrastes podem ser obtidas de duas formas: ˆ ap´s o ajuste do modelo. Desta forma os coeficientes j´ fornecem estimativas dos contrastes a c´lculos a a adicionais n˜o s˜o necess´rios. No caso de fatores (qualitativos) a matriz X do modelo n˜o a ´ definida unicamente para um mesmo experimento. t7. Uma combina¸˜o a ca linear dos coeficientes da forma p λp βp onde λ = [λ1 . Com nove tratamentos ´ poss´ definir oito contrastes ortogonais com cada um deles sendo e ıvel associado a um dos graus de liberdade dos tratamentos. t9 . X a e a matrix do modelo. Isto permite que cada contraste seja testado diretamente por um teste t (ou o equivalente teste F ). Neste exemplo e vamos considerar o seguinte conjunto de contrastes entre as m´dias dos tratamentos que s˜o e a especificados nas linhas de uma matriz como se segue. Um conjunto de contrastes e ortogonais tem a propriedade de que as soma dos produtos dos coeficientes de qualquer par de contrastes deste conjunto ´ nula. passamos a usar a lm() no ajuste do modelo. se o interesse ´ apenas na an´lise de variˆncia a particular forma adotada ´ irrelevante. a partir de opera¸oes matriciais sobre os coeficientes ajustados. . a escolha deve ser adequada se os coeficientes devem ser interpretados. Tais formas s˜o definidas pela escolha a a de contrastes ou fun¸˜es estim´veis que definir˜o a interpreta¸˜o dos coeficientes β do modelo. Vamos iniciar revendo defini¸oes. e e No que se segue vamos ver como obter estimativas de contrastes de interesse no R. A defini¸ao destes contrastes n˜o ´ c˜ a e unica e deve refletir compara¸oes relevantes para o problema em quest˜o. β o vetor de p parˆmetros (coeficientes) e o vetor de erros. pode ser escrito como p cp βp onde p cp = 0. que s˜o um caso e a a particular das fun¸˜es estim´veis para o modelo. . podendo ser escrita de diversas formas e alternativas que ir˜o produzir a ajustes equivalentes. Como e na an´lise de contrastes os coeficientes passam a ser diretamente interpretados. Para obter o desdobramento ` abordamos a modelagem como um problema de regress˜o m´ltipla onde os contrastes definem a u vari´veis quantitativas a serem inclu´ a ıdas no modelo que ´ ajustado com lm(). e a a e Por outro lado. . . C1: t1.24 EXPERIMENTOS COM DELINEAMENTO INTEIRAMENTE CASUALIZADOS 196 24. a a a ˆ Vamos discutir aqui algums id´ias iniciais sobre como implementar a segunda forma. Um contraste ´ um caso especial de fun¸ao estim´vel em que a soma das e c˜ a constantes ´ nula. assegurando-se que a ´ c˜ 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. onde f´rmulas lineares s˜o usadas para definir as matrizes do modelo usadas no ajuste de modelos o a lineares e lineares generalizados. λp ] ´ um vetor de constantes ´ dita e e uma fun¸˜o estim´vel para o dado modelo se λ pode ser escrita como uma combina¸ao linear ca a c˜ das linhas da X. t2 e t3 versus t4 a t9 C2: t1 versus t2 e t3 C3: t2 versus t3 C4: t4. Uma classe especial de contrastes ´ a de contrastes ortogonais. isto ´. t5 versus t6.

2.] 2 -1 -1 0 0 0 0 0 0 [3.paste("contr".ginv <.197 INTRODUCAO AO R ¸˜ C5: t4 versus t5 C6: t6 e t7 versus t8 e t9 C7: t6 versus t7 C8: t8 versus t9 > c1 <. -1))) > c1 [. -1.29 4.] 0 0 0 0 0 0 0 1 -1 O pr´ximo passo ´ fazer com que a matriz do modelo seja montada pelo R de forma que os o e coeficientes reflitam os contrastes desejados. -1). sep = "") > contrasts(ex01$trat) <.475 5. 5). -1)). -1. 2. 1:8.9] [1.17 Max 85.7] [. 5).] 0 1 -1 0 0 0 0 0 0 [4. -1)). -1. c(rep(0. -1. + c(rep(0. c(1.3] [. 2. -1. 0)). c(1. + 6)). -1. 1.445e-13 Residuals 45 87201 1938 > summary(mod1) Call: lm(formula = resp ~ trat.lm(resp ~ trat. c(2. data = ex01) > anova(mod1) Analysis of Variance Table Response: resp Df Sum Sq Mean Sq F value Pr(>F) trat 8 332918 41615 21.4] [.6] [. data = ex01) Residuals: Min 1Q Median -85. 6)).ginv(c1) > colnames(c1.1] [.ginv) <. 5).] 2 2 2 -1 -1 -1 -1 -1 -1 [2.ginv > mod1 <. c(2.5] [. rep(0. 0. c(1.rbind(c(2.] 0 0 0 1 -1 0 0 0 0 [6.67 . 0. 3). 3). > c1. c(rep(0.] 0 0 0 2 2 -1 -1 -1 -1 [5. rep(0. -1. 1.] 0 0 0 0 0 1 1 -1 -1 [7. -1. -1.c1. -1. -1.67 -33.8] [.] 0 0 0 0 0 1 -1 0 0 [8. c(rep(0. A analise de variˆncia deste modelo ´ a mesma obtida anteriormente.2] [. c(0. 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. a e entretanto os coeficientes s˜o agora dados pela m´dia geral seguida pelas estimativas de cada a e um dos oito contrastes definidos que que podem ser testadas diretamente pelo teste-t usando o comando summary(). + c(rep(0. -1). -1. rep(0. 4)). -1. 1.75 Coefficients: 3Q 33. c(0.

67 62.001638 `Contraste 4` 1 7041 7041 3.2168 0.775 0.paste("Contraste".064503 tratcontr6 -249.5917 0.83 76.frame(model.83 25.000466 `Contraste 2` 1 420 420 0. trocamos os nomes c˜ das colunas.351 0.6334 0. A fun¸˜o anova() sobre o modelo ajustado exibe a soma de quadrados decomposta entre ca os contrastes agora testados pelo teste F que ´ equivalente ao teste-t mostrado acima pois cada e contraste possui um grau de liberdade.33333 241.063029 `Contraste 5` 1 6960 6960 3.anova(mod2) > av2 Analysis of Variance Table Response: resp Df Sum Sq Mean Sq F value Pr(>F) `Contraste 1` 1 27616 27616 14. onde exclu´ a ımos o intercepto (primeira coluna) e. 1:8) > ex01co$resp <.25 3.24 EXPERIMENTOS COM DELINEAMENTO INTEIRAMENTE CASUALIZADOS 198 Estimate Std.264e-08 `Contraste 7` 1 175450 175450 90.001638 tratcontr4 -118.02 -0.50 44. usando model.41 9. -1]) > names(ex01co) <. Adjusted R-squared: 0. Note que a soma delas corresponde a soma de quadrados de tratamentos mostrada no ajuste inicial do modelo o os coeficientes s˜o os mesmos. Error t value Pr(>|t|) (Intercept) 353.16667 `Contraste 6` `Contraste 7` `Contraste 8` -249.16667 -118.data.7555 F-statistic: 21.17 25.643748 Residuals 45 87201 1938 > sum(av2$Sum[1:8]) [1] 332918. data = ex01co) > av2 <.937 1.7924.064503 `Contraste 6` 1 93251 93251 48.1 > coef(mod2) (Intercept) `Contraste 1` `Contraste 2` `Contraste 3` `Contraste 4` `Contraste 5` 353.41 -1.643748 Residual standard error: 44.02 on 45 degrees of freedom Multiple R-squared: 0.466 0.52 5.83 25.99 59.matrix(resp ~ trat.17 25. ex01)[.48 on 8 and 45 DF.41e-12 tratcontr8 -11.83333 -11.83333 .2292 0. A este data-frame adicionamos os dados e ajustamos o modelo de regress˜o com a lm().1217 1.000466 tratcontr2 -20. p-value: 5.33 35.5405 2.ex01$resp > mod2 <.50000 85.445e-13 Nos comandos a seguir visualizamos os mesmos resultados de uma forma alternativa.466 0.83333 -20.2169 0.41 -0.2512 0.66667 -48.906 0.515 2.409e-12 `Contraste 8` 1 420 420 0.. para visualiza¸ao adequadoa dos resultados.014 < 2e-16 tratcontr1 287.26e-08 tratcontr7 241.643682 `Contraste 3` 1 21760 21760 11.643682 tratcontr3 85.matrix() para montar a matrix de covari´veis da forma desejada.895 0.lm(resp ~ .51852 287.25 -1. a > ex01co <.063029 tratcontr5 -48.94 -6.41 3.

001638 trat: C4 1 7041 7041 3.643748 Residuals 45 87201 1938 Nota: A atribui¸ao do atributo contrast ao fator n˜o ter´ efeito sobre a constru¸ao c˜ a a c˜ da matrix do modelo caso o termo de intercepto esteja retirado na defini¸ao do modelo. Pode-se ainda visualizar os contrastes assinalados ao fator trat atrav´s da inversa e generalizada.2292 0.16667 -249.4752 5.1217 1. por c˜ exemplo. split = list(trat = 1:8)) Df Sum Sq Mean Sq F value Pr(>F) trat 8 332918 41615 21.199 INTRODUCAO AO R ¸˜ Os coeficiente retornados equivalem a aplicar os contrastes desejados sobre as m´dias dos ` e tratamentos.409e-12 trat: C8 1 420 420 0. > contrasts(ex01$trat) <.66667 -48. > drop(c1 %*% ex01.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.643682 trat: C3 1 21760 21760 11.2512 0. No exemplo.445e-13 trat: C1 1 27616 27616 14.063029 trat: C5 1 6960 6960 3.16667 -118.aov(resp ~ trat.2168 0.2169 0.83333 Uma forma alternativa talvez mais direta e conveniente de obter a decomposi¸ao da soma c˜ de quadrados de tratamentos entre os contrastes ´ com o uso de aov() e summary() utilizando e o argumento split > mod3 <. data = ex01) > summary(mod3.mds) [1] 287.83333 -20. Para cancelar a atribui¸˜o dos contrastes a um fator e retornar a definida por option() ca basta fazer atribuir a valor NULL.000466 trat: C2 1 420 420 0.5405 2.33333 [8] -11. para comparar m´dias ca e µi (ou efeitos ti ) dos tratamentos com efeitos estimados do contrastes na mesma escala da .064503 trat: C6 1 93251 93251 48. Por exemplo suponha que desejamos obter contrastes de forma n˜o s´ a obter testes de significˆncia mas tamb´m obter a o a e estimativas dos contrastes com interpreta¸˜o desejada.50000 85.1.5917 0. se o modelo acima fosse definido por resp trat .264e-08 trat: C7 1 175450 175450 90.6334 0.NULL Interpretando os contrastes: a interpreta¸ao dos contrastes vai depender dos valores dos c˜ coeficientes definidos na matriz do contrastes (matriz c1 no exemplo).

-0.445e-13 > coef(mod4) (Intercept) 353.ginv mod4 <. -1/6).17 25. c(1.83 25. -0.lm(resp ~ trat.rbind(c(1/3. c(rep(0.17 Max 85.ginv(c1) colnames(c1. 3).] > > > > > [.56 -1.67 -33.5)).7] [.] [2. -1/6. Error t value Pr(>|t|) (Intercept) 353. -1/6. 3).643748 Residual standard error: 44.29 4.01 -0. c(rep(0. -1/6. + 0. -0.7924. 1. 1. 0.2] [. + -0. c(rep(0.25)). 1/3. 1/3. 6)).97 -6. c(0.41 3. 5).8] [.3] [. sep = "") contrasts(ex01$trat) <.] [4. Todos os resultados e testes de significˆncia (estat´ a ıstics de testes e p-valores) permanecem inalterados e apenas os valores dos efeitos estimados s˜o diferentes a > c1 <. 0)). c(rep(0.41 9. rep(0.67 15.001638 tratcontr4 -29.17 25. -1.7555 F-statistic: 21. 5).66667 . + 4)).9] 1/3 1/3 1/3 -1/6 -1/6 -1/6 -1/6 -1/6 -1/6 1 -1/2 -1/2 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 0 1/2 1/2 -1/4 -1/4 -1/4 -1/4 0 0 0 1 -1 0 0 0 0 0 0 0 0 0 1/2 1/2 -1/2 -1/2 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 0 1 -1 c1. -1). rep(0.] [8.25. p-value: 5.25.937 1.52 5.5.4] [.ginv <. c(rep(0. c(0.906 0.71 3.643682 tratcontr3 85.rownames(c1) <.48 on 8 and 45 DF. + 0. Adjusted R-squared: 0.67 Coefficients: Estimate Std.ginv) <.16667 tratcontr6 -124.97 12.351 0.02 on 45 degrees of freedom Multiple R-squared: 0.014 < 2e-16 tratcontr1 47.41e-12 tratcontr8 -11.67 17.] [7.064503 tratcontr6 -124.5] [. -0.063029 tratcontr5 -48. 1:8.c1. c(1. 5).66667 tratcontr5 -48. -0.paste("contr".] [5.466 0.24 EXPERIMENTOS COM DELINEAMENTO INTEIRAMENTE CASUALIZADOS 200 m´dias do tratamentos poder´ e ıamos definir c1 da forma a seguir.895 0. -1/6. 6)).16667 tratcontr4 -29. c(0.97222 tratcontr2 -10.41 -1.25 22. -0.51852 tratcontr1 47.25000 tratcontr3 85. data = ex01) summary(mod4) Call: lm(formula = resp ~ trat.99 59.] [3.5. -1))) > fractions(c1) [1.75 3Q 33. data = ex01) Residuals: Min 1Q Median -85. -0. 0.5. c(0.83 25.1] [. c(1.515 2. rep(0.000466 tratcontr2 -10.466 0.] [6.26e-08 tratcontr7 241. -1/6.41 -0.5.775 0.5.6] [.5.25.5. -1.

66667 15.83333 tratcontr8 -11.409e-12 0.5405 2.83333 25.7750713 -0. Vale notar que estes pacotes devem ser ina c˜ stalados com a op¸ao dependencies=TRUE para garantir plena funcionalidade pois suas fun¸oes c˜ c˜ dependem de diversos outros pacotes.56361 -48.contrasts(c1))) > summary(mod5.2512 0.83333 Definindo contrastes com fun¸˜es do pacote gmodels .text() e TukeyHSD implementadas no conjunto de pacotes b´sicos do R.2292 0.001638 3. Este pacote oferece v´rias co a fun¸˜es auxiliares que facilitam o uso e a apresenta¸ao dos resultados em formatos por vezes co c˜ convenientes.064503 48.264e-08 90.41527 t value 3. com o mesmo n´mero de repeti¸˜es para cada tratamento e u co e no caso de desbalanceamento ajustes s˜o necess´rios na defini¸ao dos contrastes.437479e-01 Experimentos desbalanceados: finalmente vale ressaltar que o exemplo acima tratou de um experimento balanceado.4655994 Pr(>|t|) 4.41527 -11.4752 5.6334 0.9061560 -1. c1) tratcontr1 tratcontr2 tratcontr3 tratcontr4 tratcontr5 tratcontr6 tratcontr7 tratcontr8 Estimate Std.41527 -124.16667 25.aov(resp ~ trat. Error 47.263698e-08 2.97222 12.01027 85. > require(gmodels) > mod5 <. split = list(trat = 1:8)) trat trat: C1 trat: C2 trat: C3 trat: C4 trat: C5 trat: C6 trat: C7 trat: C8 Residuals Df Sum Sq Mean Sq 8 332918 41615 1 27616 27616 1 420 420 1 21760 21760 1 7041 7041 1 6960 6960 1 93251 93251 1 175450 175450 1 420 420 45 87201 1938 F value Pr(>F) 21.2168 0.t. .3510042 -1. Entre estes encontra-se os pacotes multcomp e multcompView que implementam diversos outros procedimentos e gr´ficos para visualiza¸oes dos resultados.436823e-01 1. data = ex01.302888e-02 6.1217 1.660336e-04 6.70763 -10.41527 -29.83333 25.201 INTRODUCAO AO R ¸˜ tratcontr7 241. a Outros procedimentos s˜qo implementados em pacotes contribu´ a ıdos do R.2 Recursos adicionais para compara¸oes m´ ltiplas c˜ u Na sess˜o anterior discutimos a compara¸ao post-hoc de tratmentos utilizando fun¸oes como a c˜ c˜ pairwise. "trat".643748 > fit.8951863 -6.450255e-02 1. No exemplo a seguir vamos repetir a obten¸ao dos resultados para os contrastes c˜ definidos ma matrix c1 conforme definida anteriormente.66667 17.2169 0.643682 11.408674e-12 6.000466 0.638352e-03 6. contrast = list(trat = make.contrast(mod5.5917 0. isto ´.5152781 -0.16667 25.063029 3.4656918 3.97131 241. a a c˜ 24.25000 22.445e-13 14.9369836 9.

s˜o apresentados em forma diferente do visto anteriormente.mod)$trat[. 4]) t2 t3 t4 t5 t6 t7 t8 t9 t1 "a" "bc" "b" "bc" "ac" "d" "ac" "ac" "ac" > multcompBoxplot(resp ~ trat. A indica¸˜o de a ca letras para diferen¸as entre pares de tratamentos mostrada a seguir requer que TukeyHSD seja c invocada sem a ordena¸˜o dos tratamentos e uma representa¸˜o visual ´ dada na Figura 24.3 An´lise para variˆncias n˜o homogˆneas a a a e No caso de variˆncias n˜o homogˆneas em experimentos inteiramente casualizados a fun¸ao a a e c˜ oneway.24 EXPERIMENTOS COM DELINEAMENTO INTEIRAMENTE CASUALIZADOS 202 t2 a ab ab ab ab bc bc c d 150 200 250 300 350 400 450 Figura 61: Visualiza¸ao dos resultados do teste de Tukey com fun¸ao do pacote multicompView c˜ c˜ > install. e t7 t4 t5 t3 t1 t8 t6 t9 . compFn = "TukeyHSD". dep = TRUE) > require(multcomp) > require(multcompView) Para ilustrar o uso desta pacote vamos efetuar novamente o teste de Tukey visto acima por´m agora utilizando c´lculos e gr´ficos gerados por fun¸oes destes pacotes.test(). cujos resultados. decreasing = FALSE) 24.packages("multcompView".2. data = ex01. ca ca e > multcompLetters(TukeyHSD(ex01. e a a c˜ embora iguais.test() pode ser utilizada nas an´lises. Uma outra alternativa ´ a an´lise n˜o a e a a param´trica da Kruskall-Wallis implementada por kruskal.

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

´ 25 ANALISE DE EXPERIMENTOS EM ESQUEMA FATORIAL

204

25.2

An´lise explorat´ria a o

Inicialmente vamos obter um resumo de nosso conjunto de dados usando a fun¸ao summary(). c˜ Note que para os fatores s˜o exibidos o n´mero de dados em cada n´ do fator. J´ para a a u ıvel a vari´vel num´rica s˜o mostrados algumas medidas estat´ a e a ısticas. > summary(ex04) rec r1:8 r2:8 r3:8 esp e1:12 e2:12 resp Min. :18.60 1st Qu.:19.75 Median :23.70 Mean :22.97 3rd Qu.:25.48 Max. :26.70

Vamos explorar um pouco mais os dados calculando as m´dias para cada n´ de cada fator e ıvel e tamb´m para as combina¸oes dos n´ e c˜ ıvies dos fatores. > ex04.mr <- with(ex04, tapply(resp, rec, mean)) > ex04.mr r1 r2 r3 25.4875 22.7250 20.6875 > ex04.me <- with(ex04, tapply(resp, esp, mean)) > ex04.me e1 e2 23.85833 22.07500 > ex04.m <- with(ex04, tapply(resp, list(rec, esp), mean)) > ex04.m e1 e2 r1 25.650 25.325 r2 25.875 19.575 r3 20.050 21.325 As combina¸oes dos n´ c˜ ıveis dos fatores podem ainda ser obtidas com interaction() que produz uma sa´ na forma de um vetor com nomes que combinam os n´ ıda ıveis dos fatores envolvidos.

> with(ex04, tapply(resp, interaction(rec, esp), mean)) r1.e1 r2.e1 r3.e1 r1.e2 r2.e2 r3.e2 25.650 25.875 20.050 25.325 19.575 21.325 Nos comandos mostrados anteriormente a fun¸ao mean() pode ser substitu´ por qualquer c˜ ıda outra fun¸˜o de interesse seja pr´ definida ou definida pelo usu´rio. Nos exemplos a seguir ca e a ilustramos ambas situa¸˜es onde s˜o obtidas as medianas com a fun¸ao pr´-definida mediam co a c˜ e e o n´mero de observa¸oes acima de 22 para cada combina¸ao dos fatores, com uma fun¸ao u c˜ c˜ c˜ definida por n´s. o > with(ex04, tapply(resp, interaction(rec, esp), median)) r1.e1 r2.e1 r3.e1 r1.e2 r2.e2 r3.e2 25.70 26.00 19.30 25.00 19.30 21.35

205

INTRODUCAO AO R ¸˜

26

esp 25 e2 e1 25

26

rec r1 r3 r2

24

médias 22 23

21

20

r1

r2 recipiente

r3

20

21

médias 22 23

24

e1 espécie

e2

Figura 62: Gr´ficos de intera¸˜o entre os fatores. a ca

> with(ex04, tapply(resp, interaction(rec, esp), function(x) sum(x > + 22))) r1.e1 r2.e1 r3.e1 r1.e2 r2.e2 r3.e2 4 4 1 4 0 1 As m´dias para so fatores e suas combina¸oes tamb´m poderiam ser obtidas com o coe c˜ e mando model.tables() o que ser´ mostrado mais adiante. Entretanto neste est´gio de an´lise a a a descritiva, preferimos o mecanismo mais geral de tapply() que permite o c´lculo de outros rea sumos al´m da m´dia. Experimente nos comandos acima substituir mean por var para calcular e e a variˆncia de cada grupo, e por summary para obter um outro resumo dos dados. a Em experimentos fatoriais ´ importante verificar se existe intera¸ao entre os fatores. Iniciale c˜ mente vamos fazer isto graficamente e mais a frente faremos um teste formal para presen¸a de c intera¸˜o. Os comandos a seguir s˜o usados para produzir os gr´ficos exibidos na Figura 25.2. ca a a > with(ex04, interaction.plot(rec, esp, resp, ylab = "m´dias", e + xlab = "recipiente", xpd = F)) > with(ex04, interaction.plot(esp, rec, resp, ylab = "m´dias", e + xlab = "esp´cie", xpd = F)) e Pode-se usar o R para obter outros tipos de gr´ficos de acordo com o interesse de quem est´ a a analisando os dados. Os comandos a seguir ilustram alguns outros tipos de gr´ficos que podemos a produzir. Na figura 25.2 s˜o mostrados gr´ficos semelhantes aos mostrados anteriormente, a a por´m com pontos referentes `s observa¸˜es o que permite visualizar a variabilidade em cada e a co grupo definido pelas combina¸˜es dos n´ co ıveis dos fatores. > + > > > > with(ex04, plot.default(rec, resp, ty = "n", ylab = "Resposta", xlab = "recipiente", )) with(ex04, points(rec[esp == "e1"], resp[esp == "e1"], col = 1)) points(ex04.m[, 1], pch = "x", col = 1, cex = 1.5) with(ex04, points(rec[esp == "e2"], resp[esp == "e2"], col = 2)) points(ex04.m[, 2], pch = "x", col = 2, cex = 1.5)

´ 25 ANALISE DE EXPERIMENTOS EM ESQUEMA FATORIAL

206

q

26

26

x q x q q
q q

q q

25

x q
q

q q

esp e2 e1

q

q

q q x

q q

1.0

1.5

2.0 recipiente

2.5

3.0

20 r1

q x

x q
q q q

20

21

mean of resp 22 23 24

Resposta 22 24

r2 rec

r3

Figura 63: Gr´ficos de pontos examinando a intera¸ao entre os fatores. a c˜

> + > + > > > > > > > +

with(ex04, interaction.plot(rec, esp, resp, xpd = F, lty = 1, col = 1:2)) with(ex04, plot.default(esp, resp, ty = "n", ylab = "Resposta", xlab = "esp´cie")) e with(ex04, points(esp[rec == "r1"], resp[rec == "r1"], col = 1)) points(ex04.m[1, ], pch = "x", col = 1, cex = 1.5) with(ex04, points(esp[rec == "r2"], resp[rec == "r2"], col = 2)) points(ex04.m[2, ], pch = "x", col = 2, cex = 1.5) with(ex04, points(esp[rec == "r3"], resp[rec == "r3"], col = 3)) points(ex04.m[3, ], pch = "x", col = 3, cex = 1.5) with(ex04, interaction.plot(esp, rec, resp, xpd = F, lty = 1, col = 1:3))

Al´m destes gr´ficos produzidos pelo sitema b´sico de gr´ficos do R pode-se usar comandos e a a a fornecidos pelo pacote lattice que implementam um poderoso conjunto alternativo de gr´ficos a mas n˜o ser˜o abordados aqui. a a

25.3

An´lise de variˆncia a a

Seguindo o modelo adequado, o an´lise de variˆncia para este experimento inteiramente casua a alizado em esquema fatorial pode ser obtida com as fun¸˜es aov() (”analysis of variance”) ou co lm() (”linear model”). A primeira usa a segunda internamente visto que o modelo ´ linear, e por´m ajusta os resultados em um formato em geral mais adequado para an´lise de experimene a tos. Nestas fun¸oes os modelos s˜o declarados por ”f´rmulas”. A seguir vemos duas f´rmulas c˜ a o o que especificam o mesmo modelo. > ex04.av <- aov(resp > ex04.av <- aov(resp > summary(ex04.av) Df Sum Sq rec 2 92.861 ~ rec + esp + rec:esp, data = ex04) ~ rec * esp, data = ex04) Mean Sq F value Pr(>F) 46.430 36.195 4.924e-07 ***

207

INTRODUCAO AO R ¸˜

esp 1 19.082 19.082 14.875 0.001155 ** rec:esp 2 63.761 31.880 24.853 6.635e-06 *** Residuals 18 23.090 1.283 --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Isto significa que dentro de uma f´rmula no R, o s´ o ımbolo ":" define o termo de intera¸ao e c˜ "*" indica da inclus˜o dos efeitos principais e intera¸oes. A an´lise acima mostra que neste caso a c˜ a o efeito de intera¸ao ´ significativo, confirmando o que for indicado nos gr´ficos explorat´rios c˜ e a o do efeito de intera¸˜o vistos anteriormente. ca O objeto ex04.av guarda todos os resultados da an´lise e pode ser explorado por diversos a comandos. Por exemplo a fun¸˜o model.tables aplicada a este objeto da classe aov produz ca tabelas dos efeitos (se type="effects") ou das m´dias (se type="effects") definidas pelo e modelo. O resultado mostra a m´dia geral, m´dias de cada n´ dos fatores e das combina¸oes e e ıvel c˜ dos n´ ıveis dos fatores. No resultado est´ inclu´ tamb´m o n´mero de dados que gerou cada a ıdo e u m´dia. e > model.tables(ex04.av, type = "means") Tables of means Grand mean 22.96667 rec rec r1 r2 r3 25.487 22.725 20.688 esp esp e1 e2 23.858 22.075 rec:esp esp rec e1 r1 25.650 r2 25.875 r3 20.050

e2 25.325 19.575 21.325

Mas isto ainda n˜o ´ tudo que se pode extrair da an´lise! O objeto ex04.av possui v´rios a e a a elementos que guardam diversas outras informa¸˜es sobre o ajuste do modelo e que podem ser co exploradas subsequentemente por m´todos de fun¸oes para as classes aov e lm ou por requisi¸˜es e c˜ co definidas pelo usu´rio. A seguir veremos alguns exemplos. a > names(ex04.av) [1] "coefficients" "residuals" [5] "fitted.values" "assign" [9] "contrasts" "xlevels" [13] "model" > class(ex04.av)

"effects" "qr" "call"

"rank" "df.residual" "terms"

´ 25 ANALISE DE EXPERIMENTOS EM ESQUEMA FATORIAL

208

Residuals vs Fitted
3
q 17

Normal Q−Q
3
17 q

2

q 14

q

Standardized residuals 0 1 2

q

Residuals 0 1

q

q14 q

qq qq q q q q q qq

qq q q qq q q q q qq q qq

qq

−1

q

q q q

q q qq

−1

q q q 21

21 q

−2 20

21

22 23 24 Fitted values

25

26

−2

−1 0 1 Theoretical Quantiles

2

Scale−Location
3
q 17

Constant Leverage: Residuals vs Factor Levels
q 17

Standardized residuals 0.5 1.0 1.5

q 14 q q q q q

21 q q

q

Standardized residuals −1 0 1 2

q

14 q

q

q q q qq q q q q q q q

q q q q q q q q q q 21 q q q q q q

q q q q

q

q

0.0

−2 20 21 22 23 24 Fitted values 25 26

rec :

r3 r2 r1 Factor Level Combinations

Figura 64: Gr´ficos de res´ a ıduos produzidos para objetos da classe lm.

[1] "aov" "lm" A chamada class() mostra que o objeto ex04.av pertence `s classes aov e lm. Isto significa a que devem haver m´todos associados a este objeto que tornam a explora¸ao do resultado mais e c˜ f´cil. Na verdade j´ usamos este fato acima quando digitamos o comando summary(ex04.av). a a Existe uma fun¸˜o chamada summary.aov() que foi utilizada j´ que o objeto ´ da classe aov. ca a e Iremos usar mais este mecanismo no pr´ximo passo da an´lise, a an´lise de residuos. o a a

25.4

An´lise de res´ a ıduos

A an´lise de res´ a ıduos ´ util para verificar os pressupostos do modelo. Usando o mecanismos e ´ de classes, o comando plot(ex04.av) aplicado sobre o objeto que cont´m o ajuste do modelo e produz uma figura com quatro gr´ficos b´sicos para an´lise dos res´ a a a ıduos conforme mostrado na Figura 25.4. Os gr´ficos permitem uma an´lise dos res´ a a ıduos que auxilia no julgamento da adequacidade do modelo. Evidentemente n˜o ´ necessario limitar-se aos gr´ficos produzidos automaticamente a e a pelo R – voce pode criar os seus pr´prios gr´ficos. Neste gr´ficos pode-se usar outras vari´veis, o a a a tipos de gr´ficos, mudar texto de eixos e t´ a ıtulos, etc, etc, etc. Os comandos a seguir mostram como obter os gr´ficos boxplot dos res´ a ıduos para os n´ ıveis de cada um dos fatores como mostrado na Figura 25.4.

res respad <.av$df. residuos) title("Res´duos vs Esp´cies") ı e Resíduos vs Recipientes Resíduos vs Espécies q 2 1 0 −1 r1 r2 r3 −1 0 1 2 e1 e2 Figura 65: Gr´ficos de res´ a ıduos para cada um dos fatores.test(residuos) Shapiro-Wilk normality test data: residuos W = 0. Como a a co exemplo vejamos o teste de Shapiro-Wilks para testar a normalidade dos res´ ıduos. main = NULL) ı qqline(residuos) title("Gr´fico Normal de \n Probabilidade dos Res´duos") a ı Al´m da an´lise gr´fica de res´ e a a ıduos h´ alguns testes j´ programados em fun¸˜es. Note que o objeto que cont´m o ajuste foi utilizado para extrair res´ e ıduos. preditos) title("Res´duos vs Preditos") ı s2 <.resid(ex04. ylab = "Res´duos".9293.av) plot(residuos. > shapiro. valores preditos e a estimativa s2 da variˆncia dos res´ a ıduos.4 mostra outros gr´ficos definidos pelo usu´rio: res´ a a ıduos versus valores preditos.09402 .209 INTRODUCAO AO R ¸˜ > > > > > residuos <. p-value = 0.residuos/sqrt(s2) boxplot(respad) title("Res´duos Padronizados") ı qqnorm(residuos.fitted(ex04. e um qqplot dos res´ ıduos do modelo.sum(residuos^2)/ex04. residuos) title("Res´duos vs Recipientes") ı plot(ex04$esp. um boxplot dos res´ ıduos padronizados.av) plot(ex04$rec. A Figura 25. > > > > > > > > > > preditos <.

438e-08 *** esp:rec: e1 2 87. 4)))) Df Sum Sq Mean Sq F value Pr(>F) esp 1 19.776e-07 *** esp:rec: e2 2 69. data = ex04) > summary(ex04.500 34.’ 0.001 ‘**’ 0. Uma forma de obter tal desdobramento no R ´ reajustar o modelo utilizando a nota¸˜o / que e ca indica efeitos aninhados. Desta forma podemos desdobrar os efeitos de esp´cie dentro de cada e recipiente e vice versa conforme mostrado a seguir.5269 3.1288 Residuals 18 23.122 43. codes: 0 ‘***’ 0. + e2 = c(2. split = list(`esp:rec` = list(e1 = c(1.1647 0.155 30.082 14.05 ‘.875 0.430 36.082 19.380 61.’ 0.aov(resp ~ esp/rec.1 ‘ ’ 1 > ex04.509e-06 *** rec:esp: r1 1 0.ave foram e1=c(1. 3).5345 0. no ca caso de ex04. + r3 = 3))) Df Sum Sq Mean Sq F value Pr(>F) rec 2 92. split = list(`rec:esp` = list(r1 = 1.283 --Signif.112e-07 *** rec:esp: r3 1 3.861 46.958 7.01 ‘*’ 0.283 --Signif.614 21.090 3. r2 = 2.ave. Iniciamente vamos extrair usando effects() os efeitos ajustados pelo modelo.6897 rec:esp: r2 1 79.251 2.01 ‘*’ 0.001 ‘**’ 0.924e-07 *** rec:esp 3 82.750 27.avr <. codes: 0 ‘***’ 0.4).5 Desdobrando intera¸˜es co Quando a intera¸ao entre os fatores ´ significativa pode-se adotar como estrat´gia de an´lise c˜ e e a o desdobramento dos graus de liberdade de um fator dentro de cada n´ ıvel do outro fator.561 33.1 ‘ ’ 1 Neste ponto vale uma explica¸˜o mais detalhada sobre como obter os desdobramentos da ca intera¸˜o usando o argumento split. data = ex04) > summary(ex04. a 25.ave <. em particular como definir os elementos da lista que.avr. > ex04.090 1.211 0.05 ‘.380 79.8813 3.211 0.1952 4.aov(resp ~ rec/esp.251 3.001155 ** esp:rec 4 156.´ 25 ANALISE DE EXPERIMENTOS EM ESQUEMA FATORIAL 210 Gráfico Normal de Probabilidade dos Resíduos q Resíduos vs Preditos 26 25 2 q q q q q q q qq q q q Resíduos Padronizados q preditos 22 23 24 2 q q q Resíduos 0 1 1 qq q qq q qq q qq q qqq qq 21 q qq q 0 −1 20 q q q q q q q q −1 q q q −1 0 1 residuos 2 −2 −1 0 1 Theoretical Quantiles 2 Figura 66: Alguns gr´ficos de res´ a ıduos definidos pelo usu´rio.730e-06 *** Residuals 18 23.524 8.622 39.842 27.090 1.3) e e2=c(2. .

8000 -6.8701851 -8.3201851 -8.3547128 0.9997185 0.770185 -3.325 -5.054815 2.482787 -0.600 -0. ca a primeira usando uma implementa¸˜o j´ dispon´ com a fun¸ao TukeyHSD() e uma segunda ca a ıvel c˜ sem fazendo os c´lculos necess´rios passo a passo com opera¸˜es b´sicas do R.ave)[1:6] (Intercept) espe2 espe1:recr2 espe2:recr2 espe1:recr3 espe2:recr3 -112.0003395 r3-r1 -4. 2o : espe2:recr2.3701851 -3.825 -0.av) > ex04.9983324 0.211 INTRODUCAO AO R ¸˜ > effects(ex04. procedimentos que n˜o estejam implementados podem ser c˜ u e a calculados utilizando os recursos usuais do R utilizando os objetos com o ajuste dos modelos. Isto mostra que a posi¸˜o dos efeitos que cont´m a esp´cie1 ca e e (e1) s˜o 1 e 3.919596 -5.0000120 0.779815 -3.5922128 0.0000003 r3-r2 -2.220185 -3. Por exemplo.207787 -1.513229 -4.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 diff 0.9811892 .tk1 Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = resp ~ rec * esp.3172128 0.6 Teste de Tukey para compara¸oes m´ ltiplas c˜ u H´ v´rios testes de compara¸oes m´ltiplas dispon´ a a c˜ u ıveis na literatura.0055472 $esp diff lwr upr p adj e2-e1 -1.TukeyHSD(ex04. Como ilustra¸˜o mostramos a seguir duas formas de obter resultados para o Teste de Tukey.995185 p adj 0. 3o : co c˜ a espe1:recr3 e 4o : espe2:recr3.939804 6.1451851 -2.0951851 upr 2. o pacote multcomp ´ inteiramente dedicado a implementa¸ao de diversos procedimentos de comparae ` c˜ ¸oes m´ltiplas no R.783333 -2.225 -5. Para fun¸ao j´ a a co a c˜ a dispon´ simplesmente digitamos os comandos a seguir e os resultados podem ser mostrados na ıvel forma texto ou gr´fica como na Figura 25.123724 -7.0000068 0. a ca a espe2:recr2. e especie2 (e2) s˜o 2 e 4 o que define os valores nos vetores indicados no a a argumento split.0000204 0.8701851 -8. e muitos deles s˜o ima plementados nos pacotes b´sicos do R e/ou em pacotes contribu´ a ıdos. 25.656854 Os efeitos que temos interesse no desdobramento s˜o os da intera¸˜o.tk1).550 lwr -2. data = ex04) $rec diff lwr upr p adj r2-r1 -2.6 que ´ produzida com o comando plot(ex04.8119067 0.6201851 -6.75476 -0.0004825 0.tk1 <.368257 4. a e > ex04.245287 -3.279815 1. que s˜o: espe1:recr2.529815 -1.325 -6.075 -4.7625 -4. Portanto temos que localizar no vetor de efeitos as posi¸˜es desses efeitos de intera¸ao que s˜o: 1o : espe1:recr2. espe1:recr3 e espe2:recr3. Al´m disto.0375 -3.

7951851 e2−e1 r3−r1 -3. > ex04.8451851 -7.0000120 .2914242 Esta sa´ fornece resultados detalhados de v´rias compara¸˜es poss´ ıda a co ıveis entre os n´ ıveis dos fatores e suas combina¸oes.770185 -3.754815 -2.3201851 -8.550 -5. nem todos os resultados mostrados nos c˜ interessam.0000444 0.454815 4.0000041 0.095185 -3.7298149 -3.6135909 0.5 −1. Como a intera¸˜o foi significativa na an´lise deste experimento a compara¸˜o dos ca a ca n´ ıveis fatores principais n˜o nos interessa.0000143 0. Podemos ent˜o pedir a fun¸˜o que somente mostre a a a ca compara¸ao de m´dias entre as combina¸oes dos n´ c˜ e c˜ ıveis dos fatores e o gr´fico com tais resultados a pode ser obtido com plot(ex04.2951851 -7. 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 e1:r3-e1:r2 diff -0.ave.204815 -2.204815 -1.0000143 0.279815 p adj 0.220185 2.820185 2.0011258 0.750 -8.5451851 -8.325 0.tk2).275 -4.750 -4.275 -5.6201851 -8.820185 -3.9951851 -8.529815 -3.325 0.9811892 0.300 -5. "esp:rec") > ex04.´ 25 ANALISE DE EXPERIMENTOS EM ESQUEMA FATORIAL 95% family−wise confidence level r2−r1 212 95% family−wise confidence level 95% family−wise confidence level r1:e2−r1:e1 −6 −5 −4 −3 −2 −1 Differences in mean levels of rec −2.600 -4.0201851 -1.0011258 0.054815 -1.475 1.729815 -1.075 -5.0951851 2.1451851 -6.000 -6.9983324 0.0000444 0.0004825 0.TukeyHSD(ex04.070185 3.3701851 upr 2. Entretanto.225 -6.8701851 -1. c˜ c˜ u r2:e2-r2:e1 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 -6. neste caso.0000204 0.004815 7.0 −1.550 5.779815 3.2701851 -8.275 -0.454815 -3.8701851 -2.295185 0.9997185 0.8451851 -8.tk2 Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = resp ~ esp/rec.0 Differences in mean levels of esp r3:e2−r2:e2 r3−r2 r3:e2−r2:e1 −5 0 5 Differences in mean levels of rec:esp Figura 67: Visualiza¸ao dos resultados do teste de Tukey de compara¸oes m´ltiplas.300 -4.5 −2.000 1.0000041 0.754815 -3.tk2 <.8201851 -6.5451851 -0.0002705 0.825 lwr -2.2951851 -6.9902110 0.0000068 0.750 -5.

av)^2)/ex04.600 -5.000 5.m1n[lower.225 -5. No objeto m1 armazenamos as m´dias para ` e e esp´cie1 e na sequˆncia s˜o feitos c´lculos para verificar a significˆncia da diferen¸a entre as e e a a a c m´dias dos recipientes para esta esp´cie. fazendo os c´lculos passo a passo.750 -0.m e1 e2 r1 25.825 > m1n <.2701851 3.225 0. que ´ usada junto com o valor da amplitude estudantizada fornecida por qtukey() e para obter o valor da diferen¸a m´nima significativa que no c´digo a seguir armazenamos no c ı o objeto dt.875 19. sep="-") > names(m1d) <.225 5.1] > m1 r1 r2 r3 25. "".tri(m1n)] > m1d r2-r1 r3-r1 r3-r2 0.600 -5.outer(m1.825 r3 -5.paste.ex04.res > dt <.875 20.825 0.600 r2 0. "ns")) ."-") > m1d r1 r2 r3 r1 0. sig = ifelse(abs(m1d) > dt.m onde as linhas se referem aos recipientes e colunas as esp´cies.000 > m1d <.frame(dif = m1d. Anteriormente armazenamos e a e as m´dias para as combina¸oes de todos os n´ e c˜ ıveis dos fatores no objeto ex04. Mais especificamente.050 21. > s2 <.6135909 Mas ainda assim temos resultados que podem n˜o interessar.575 r3 20.av$df.050 > m1d <.0002705 e1:r3-e2:r2 0.9902110 e2:r3-e2:r2 1.sum(resid(ex04.0701851 3.0951851 -2.95.225 -5.650 25.004815 0.295185 0. vamos fazer as compara¸oes dos recipientes para cada uma das c˜ esp´cies.600 -5. e e > # compara¸~o de m´dias de recipientes para esp´cie 1 : ca e e > ex04. Primeiro vamos obter a estimativa da variˆncia dos e a a res´ ıduos.outer(names(m1).275 -1.m[.tri(m1d)] > m1d [1] 0.475 -2.qtukey(0.825 > data. considere a que estamos intessados nas compara¸˜es dos n´ co ıveis de um fator dentro de cada um dos n´ ıveis do outro fator. 3.650 25.043945 Este valor ´ ent˜o usado para comparar as m´dias de interesse.325 > m1 <. 18) * sqrt(s2/4) > dt [1] 2. Neste ponto.7951851 4.213 INTRODUCAO AO R ¸˜ e2:r3-e1:r2 -4.2914242 e2:r3-e1:r3 1.820185 0.020185 0.550 -7.000 -0.m1.names(m1).m1d[lower.325 r2 25.

Esta sequˆncia pode ser usada para definir uma fun¸ao o que evitaria a digita¸ao de e c˜ c˜ todos estes comandos a cada compara¸ao de m´dias desejada. sig = ifelse(abs(m2d) > dt."-") > m2d <.frame(dif = m2d.m2d[lower.m2n[lower. sep="-") > names(m2d) <.m2.outer(names(m2).tri(m2d)] > m2n <. co . "ns")) dif sig r2-r1 -5.´ 25 ANALISE DE EXPERIMENTOS EM ESQUEMA FATORIAL 214 dif sig r2-r1 0. Procedimento an´logo pode ser c˜ e a adotado para fazer outras compara¸˜es de interesse. "*".m[.825 > # compara¸~o de m´dias de recipientes para esp´cie 2 : ca e e > m2 <.tri(m2n)] > data.paste.outer(m2.600 r3-r2 -5.ex04.75 * r3-r1 -4.225 ns r3-r1 -5.2] > m2d <.00 * r3-r2 1.names(m2).75 ns No c´digo mostrado anteriormente fazemos alguma manipula¸˜o dos objetos para formatar o ca a sa´ ıda.

5 Median :40.br/~paulojus/dados/exemplo12. :32.:43..leg..as.13 3rd Qu.00 Mean :24.factor(ex12$maq) > str(ex12) ' data.50 Median :24.txt".0 1st Qu.:27. Note que neste caso temos e 2 vari´veis num´ricas.frame': 15 obs.:21.table() pode ler diretamente o arquivo como mostrado a seguir..read.00 Max. $ cov : int 20 25 24 25 32 22 28 22 30 28 .0 Max. O arquivo com conjunto de dados para e sua area de trabalho de depois importando para o R com read."2".0 Mean :40.215 INTRODUCAO AO R ¸˜ 26 26. :49.ufpr..:36. :15. a resposta (resp) e a covari´vel (cov). :32.. + header = T) > ex12 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 maq cov resp 1 20 36 1 25 41 1 24 39 1 25 42 1 32 49 2 22 40 2 28 48 2 22 39 2 30 45 2 28 44 3 21 35 3 23 37 3 26 42 3 21 34 3 15 32 > ex12$maq <.00 1st Qu.00 resp Min.0 > summary(ex12) . em particular assegurando que a e c˜ vari´vel qualitativa indicadora dos tratamentos seja indicada como sendo um fator evitando a que seus valores sejam interpretados como quantidades num´ricas.table() Alternativamente. maq 1:5 2:5 3:5 cov Min.1 An´lise de covariˆncia a a Exemplo 1 Os dados dispon´ ıveis em neste link s˜o um exemplo onde a an´lise de covariˆncia pode ser a a a utilizada. of 3 variables: $ maq : Factor w/ 3 levels "1"."3": 1 1 1 1 1 2 2 2 2 2 .table("http://www. se ´ o computador estiver conectado a internet read. a e a > ex12 <. $ resp: int 36 41 39 42 49 40 48 39 45 44 ..2 3rd Qu. O primeiro passo ´ a leitura e organiza¸ao dos dados. Neste caso temos uma vari´vel resposta e duas vari´veis explicativas sendo uma delas a a qualitativa (um fator) e outra quantitativa (num´rica).

trat <. col = c(1.014 69. Note-se que os dados de cada um dos tratamentos s˜o indicados por cores (argumento col)] e padr˜es a o de pontos (argumento pch) indexados pema vari´vel maq que define os n´ a ıveis dos tratamentos > with(ex12.544 --Signif.96e-07 *** maq 2 13.544 --Signif.aov(resp ~ maq + cov. Na an´lise de c˜ a a variˆncia abaixo devemos considerar apenas o teste referente ` vari´vel cov que neste caso est´ a a a a corrigida para o efeito de maq.1181 Residuals 11 27.05 ‘.aov(resp ~ cov + maq.170e-05 *** cov 1 178. data = ex12) > summary(ex12.’ 0.´ ˆ 26 ANALISE DE COVARIANCIA 216 q 45 q resp 40 q q q 35 15 20 cov 25 30 Figura 68: Dados para an´lise de covariˆncia.’ 0.01 ‘*’ 0. Para isto a basta inverter a ordem dos termos na especifica¸ao do modelo. plot(resp ~ cov.014 178.6106 0.trat) Df Sum Sq Mean Sq F value Pr(>F) cov 1 305. a Primeiro vamos testar a inclina¸ao (coeficiente β1 ) da reta de regress˜o. Note que para isto a vari´vel cov tem que ser a ultima na a ´ especifica¸ao do modelo.642 2. c˜ > ex12.264e-06 *** Residuals 11 27.200 27.130 119. 4)[maq].284 6.986 2. corrigidos pelo efeito da covari´vel.05 ‘.1 produzida com o comando a seguir.130 305.9330 2.986 2. data = ex12) > summary(ex12.593 5. c˜ > ex12. 2.001 ‘**’ 0.1 ‘ ’ 1 A seguir testamos o efeito do fator maq corrigindo para o efeito da covari´vel. Desta forma os testes a a a de significˆncia tem que ser obtidos em ajustes separados: (i) para o efeito de covari´veis.969 4. pch = (1:3)[maq])) Na an´lise de covariˆncia n˜o temos ortogonalidade entre os fatores. a a Os dados podem ser visualizados na Figura 26. cora a rigido pelo efeito dos tratamentos qualitativos e (ii) para o efeito dos tratamentos qualitativos.cov <.cov) Df Sum Sq Mean Sq F value Pr(>F) maq 2 140.001 ‘**’ 0.1 ‘ ’ 1 . codes: 0 ‘***’ 0.400 70.01 ‘*’ 0. codes: 0 ‘***’ 0.

e colocado na ultima posi¸˜o na especifica¸ao do modelo.0001089 *** maq 13. Neste caso a fun¸ao Anova faz o mesmo que mostrado nas duas an´lises de variˆncias iniciais. h´ uma fun¸ao Anova() no pacote car do R que j´ monta tal quadro automaticamente a c˜ a conforme ilustrado a seguir. devido a n˜o a e a ortogonalidade.05 ‘. ou seja. ou seja. Em geral nas fun¸˜es b´sicas do R evita-se tal jarg˜o co a a e procura-se usar so conceitos ligados ` parametriza¸ao do modelo atrav´s da defini¸˜o dos a c˜ e ca contrastes e por isto tal terminologia est´ apenas em um pacote contribu´ a ıdo.014 1 69.1 ‘ ’ 1 Note que esta fun¸ao ir´ retornar o mesmo resultado para qualquer ordem dos termos c˜ a no modelo. no exemplo acima Anova(ex12. Ena tretanto. ´ ca c˜ . c˜ a a obtendo para cada termo a soma de quadrados quando este ´ corrigido para os demais. por´m com a resalva que. e no a segundo para verificar o efeito do tratamento. codes: 0 ‘***’ 0.cov. type="III") retornam os mesmos resultados. type="III") e Anova(ex12.6106 0.01 ‘*’ 0.trat. > require(car) > Anova(ex12.217 INTRODUCAO AO R ¸˜ Portanto.986 11 --Signif.434 1 34.1180839 cov 178. a soma das somas de quadrados n˜o corresonde a soma de quadrados total. O argumento type="III" refere-se a um jarg˜o consagrado pelo software SAS que correa sponde a soma de quadrados do tipo III. olhamos o primeiro quadro da ANOVA para verificar o efeito da covari´vel.3664 0.264e-06 *** Residuals 27.’ 0. Se desej´vel poderia-se tomar os resultados de a cada um deles para compor um quandro de an´lise. type = "III") Anova Table (Type III tests) Response: resp Sum Sq Df F value Pr(>F) (Intercept) 87.cov.001 ‘**’ 0.9694 4.284 2 2.

87 1. c˜ Como exemplo.28 0.xls("MgO.86 1.86 1.00 2.br/∼paulojus/dados/MgO.1 27. amostras de referˆncia supostamente de teores e iguais foram enviadas a diferentes laborat´rios nos quais determina¸oes de teores foram feitas o c˜ com replica¸oes.31 0.73 1.83 1.read.1.85 1.88 1.leg.01 1.88 1.00 1. que seria dado por alguma .ufpr.02 2.86 1.68 0.86 2.xls") head(mgo) str(mgo) summary(mgo) Pode-se identificar duas fontes de varia¸ao nos valores medidos.83 1. O o a co o objetivo ´ encontrar um valor ”caracter´ e ıstico”para as amostras.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. uma devido a variabilidade c˜ ` entre laborat´rios e outra devida ` variabilidade das replica¸˜es feitas nos laborat´rios.´ 27 EFEITOS ALEATORIOS 218 27 27.87 1. considere os dados dos teores medidos de um unico elemento mostrados a ´ seguir e que podem ser obtidos em http://www.64 1.1 Efeitos aleat´rios o Componentes de variˆncia a Introdu¸˜o ca O problema que ilustra este t´pico consiste em encontrar valores ”padr˜o”(ou de referˆncia) o a e para a teores de elementos qu´ ımicos Para isto.87 1.84 1.86 1.85 require(gdata) mgo <.68 1.99 2.

por exemplo dada por e e um intervalo de confian¸a.69303 -10. mgo) > summary(mgo.51126716 Residual 0.261394113 0.294108 1.24737682 .846515 Random effects: Formula: ~1 | Lab (Intercept) Residual StdDev: 0.0364 9. > intervals(mgo.06901512 -0.00166549 -0.235126 0 Standardized Within-Group Residuals: Min Q1 Med Q3 -2. o Nos resultados a seguir ajustamos um modelo ajustado com a fun¸˜o lme() do pacote nlme.Error DF t-value p-value (Intercept) 1.02752389 0. upper (Intercept) 1.675205 2. c e a e medidas da variabilidade entre e dentro de laborat´rios. associada a uma medida de variabilidade desta m´dia. ca > require(nlme) O summary() mostra um resumo dos resultados mais importantes do ajuste do modelo incluindo as estimativas da m´dia (Fixed Effects: Intercept) e dos desvios padr˜o entre laborat´rios e a o (Random Effects: Intercept) e das replicatas (Random Effects: Residual).5112672 0.10150856 Number of Observations: 26 Number of Groups: 8 O intervalo de confian¸a para m´dia e as estimativas das variˆncias e desvios padr˜es podem c e a o ser obtidos como mostrado a seguir."label") [1] "Fixed effects:" > VarCorr(mgo. Al´m disto deseja-se estimar os ”componentes de variˆncia”.005807107 0.lme.lme) Lab = pdLogChol(1) Variance StdDev (Intercept) 0.219 INTRODUCAO AO R ¸˜ ”m´dia”adequada.07620438 Max 3.675204 0.lme(MgO ~ 1. random = ~1 | Lab.lme <.lme) Linear mixed-effects model fit by REML Data: mgo AIC BIC logLik -13.1813949 18 9. > mgo.056301 attr(.07620438 Fixed effects: MgO ~ 1 Value Std. isto ´. which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est.

0 1. c a c˜ excluindo-se o dado at´ ıpico.2 Avaliando o ajuste e qualidade dos dados Os resultados mostrados anteriormente devem ser vistos apenas como uma ilustra¸˜o dos coca mandos b´sicos para obten¸˜o dos resultados.28 e 0. a transforma¸ao n˜o ´ necess´ria. sendo que este dado tamb´m foi considerado suspeito pela fonte dos o e dados.lme)) q 3 Standardized residuals 2 1 q 0 q q q q q qq q q qq q q q q q −1 q −2 q 0. em acordo com o respons´vel pelos dados.´ 27 EFEITOS ALEATORIOS 220 > print(plot(mgo.1.5 2. No primeiro desses todos os res´ o ıduos s˜o a visualizados conjuntamente.0 Fitted values Figura 69: Gr´fico de res´ a ıduos do modelo ajustado 27.31). o A observa¸ao de valor 0.6)) > dim(mgo1) [1] 25 2 O modelo ajustado assume que os dados possuem distribui¸ao normal e os gr´ficos de c˜ a perfil de verossimilhan¸a do parˆmetro da transforma¸ao Box-Cox na figura 71 mostram que. enquanto que no segundo usa-se gr´ficos condicionais do sistema a gr´fico fornecido pelo pacote lattice para separar os res´ a ıduos de cada laborat´rio. Entretanto. c˜ a e a .5 1. c˜ Os gr´ficos de res´ a ıduos das figuras 69 e 70 mostram observa¸oes discrepantes e pode-se c˜ detectar que ocorrem nos dados do Laborat´rio E. Uma poss´ alternativa ´. n˜o deve-se tomar os resultados a ca a obtidos como corretos ou definitivos pois uma an´lise criteriosa deve verificar anomalias dos a dados e adequa¸ao a pressupostos do modelo. a > mgo1 <.subset(mgo. !(Lab == "E" & MgO > 0.68 do laborat´rio E ´ bastante diferente das demais replicatas deste c˜ o e laborat´rio (0. optar por remover ıvel e a este dado da an´lise o que pode ser feito com o comando a seguir.

54301 Random effects: Formula: ~1 | Lab (Intercept) Residual StdDev: 0.5 1.1 0.08601 -55.55185 32.1 q H q D q E F 0.) | Lab.5. resid(.lme. a > mgo1.221 INTRODUCAO AO R ¸˜ > require(MASS) > with(mgo. lam = seq(1.5 2.0 q q B C q q q 0.0 −0.2 0. random = ~1 | Lab.0 −0. abline = 0)) 0.2 0.5 1. mgo1) > summary(mgo1.5 2. 5. len = 200))) > with(mgo1. len = 200))) O modelo ajustado com o novo conjunto de dados apresenta resultados diferentes do anterior.lme(MgO ~ 1.0 Fitted values Figura 70: Gr´fico de res´ a ıduos para cada laborat´rio do modelo ajustado.1 q q Residuals q q q q q 0.1 0. boxcox(MgO ~ Lab.5 2. o .1 A 0.0 −0. boxcox(MgO ~ Lab.2 0.5.lme <.lme) Linear mixed-effects model fit by REML Data: mgo1 AIC BIC logLik -59.1 0.01831692 Fixed effects: MgO ~ 1 > print(plot(mgo.5 1. reduzindo a estimativa de variˆncia entre as replicatas. lam = seq(0.0 1.5577551 0.) ~ fitted(. 3.0 1.0 G 0.0 1.

1972321 17 8. Poderia-se ent˜o considerar ainda o a remover todas as observa¸oes deste laborat´rio.0 log−Likelihood 55 60 45 log−Likelihood 50 55 0.0 Figura 71: Perfis de verossimilhan¸a do parˆmetro da transforma¸ao Box-Cox na presen¸a e c a c˜ c ausˆncia do ponto at´ e ıpico do Laborat´rio E.5 1.242955 1.3673809 Number of Observations: 25 Number of Groups: 8 > intervals(mgo1.659078 0.0003355097 0.´ 27 EFEITOS ALEATORIOS 222 60 95% 65 95% 2 3 λ 4 5 50 0. nota-se que na verdade todas as observa¸˜es do Laborat´rio E parecem at´ e co o ıpicas com valores inferiores aos obtidos nos demais laborat´rios.lme) Lab = pdLogChol(1) Variance StdDev (Intercept) 0. c˜ o > mgo2 <.55775509 Residual 0.3598894 -0.0 1.5 λ 2.subset(mgo.3110907386 0.411808 0 Standardized Within-Group Residuals: Min Q1 Med Q3 -2.0 2.5482108 .01831692 Al´m disto.lme.3652780 -0. o Value Std. Lab != "E") > dim(mgo2) [1] 23 2 Max 2.659078 2."label") [1] "Fixed effects:" > VarCorr(mgo1. upper (Intercept) 1.1781699 0. which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est.Error DF t-value p-value (Intercept) 1.5 3.075202 attr(.

random = ~1 | Lab.) | Lab. mgo2) > summary(mgo2.854012 0.01811513 Fixed effects: MgO ~ 1 Value Std..5 1.lme) Linear mixed-effects model fit by REML Data: mgo2 AIC BIC logLik -78.lme(MgO ~ 1.03545001 16 52.0 1.09324064 0.0 1.5 2.lme <.5 1.Error DF t-value p-value (Intercept) 1. o > mgo2. resid(.08602 Random effects: Formula: ~1 | Lab (Intercept) Residual StdDev: 0.0 G 2 1 0 −1 −2 H q q q q Standardized residuals D q q q q q E F q q q 2 1 0 −1 −2 A 2 1 0 −1 −2 q q B q q q q C q q 0.5 1.5 2. type = "p") ~ fitted(.0 1.17204 -74.lme.89891 42.29932 0 Standardized Within-Group Residuals: Min Q1 Med Q3 Max .5 2.0 0.223 INTRODUCAO AO R ¸˜ > print(plot(mgo1. + abline = 0)) 0.0 Fitted values Figura 72: Gr´fico de res´ a ıduos para cada laborat´rio do modelo ajustado.

j ) = σε a covariˆncia entre observa¸oes a c˜ a c˜ diferentes do mesmo laborat´rio.1587727 0. e o O problema ent˜o consiste em estimar µ e a variˆncia associada a esta estimativa. estimadores minque (estimadores de norma quadr´tica m´ a ınima).3 Fundamentos Assumindo que efeitos aleat´rios podem ser usados para descrever o efeito de laborat´rios."label") [1] "Fixed effects:" > VarCorr(mgo2. c a c Sob o modelo assumido os observa¸˜es tem distribui¸˜o normal co ca Y ∼ N (1lµ.´ 27 EFEITOS ALEATORIOS 224 -2. which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est.09324064 Residual 0.lme. que por a a ` 2 sua vez est´ associada aos valores dos parˆmetros de variˆncia do modelo σε e σ 2 . a . Cov(Yi. a a a c˜ 2 variˆncia de cada observa¸ao individual. V ).lme) Lab = pdLogChol(1) Variance StdDev (Intercept) 0.854012 1.000328158 0. a matriz V pode ser obtida por um prou o duto de Kronecker simples entre matrizes diagonais e unit´rias multiplicadas pelos componentes a de variˆncia.j ) = σε + σ 2 . εi ∼ N (0.4590419 Number of Observations: 23 Number of Groups: 7 > intervals(mgo2. µ ´ o valor a e e o e 2 e o e o real do elemento na amostra padr˜o.929162 attr(.j .3606918 2.008693816 0. σ 2 ) ´ o termo associado a j-´sima medida feita no i-´simo laborat´rio o e ` e e o 2 e σ ´ a variabilidade das medidas de replicatas dentro dos laborat´rios. σε ) ´ o efeito aleat´rio do i-´simo laborat´rio a 2 e σε que representa a variabilidade de medidas fornecidas por diferentes laborat´rios (entre o laborat´rios) e ij ∼ N (0.01811513 Os resultados s˜o substancialmente diferentes e a decis˜o de exclus˜o on n˜o dos dados deste a a a a Laborat´rio deve ser cuidadosamente investigada dentro do contexto destes dados e conjunto o com especialista da ´rea. Diferentes m´todos de estima¸˜o a a a e ca s˜o propostos na literatura tais como estimadores de momentos baseados na an´lise de variˆna a a cia. a 27. o a e igual n´mero de replicatas nos diferentes laborat´rios. Yi. estimadores de m´xima a verossimilhan¸a e m´xima verossimilhan¸a restrita. Esses ultia a a ´ mos parˆmetros s˜o chamados de componentes de variˆncia. o o podemos descrever os teores por um modelo de efeitos aleat´rios: o Yij = µ + εi + ij .778861 1.1. em que 1l ´ um vetor unit´rio de dimens˜o igual ao numero de observa¸˜es n e V ´ a matriz e a a co e 2 de variˆncias e covariˆncias das observa¸oes com elementos dados por: Var(Yi. e os demais elementos s˜o nulos. No caso balanceado. isto ´.3302089 -0.5091805 -0. upper (Intercept) 1. em que yij s˜o valores observados na j-´sima medida feita no i-´simo laborat´rio.

lme)[. os estimadores de σε e σ 2 s˜o obtidos por maximiza¸˜o num´rica de tal fun¸˜o e o estimador do parˆmetro de interesse e sua variˆncia s˜o ent˜o obtidos por: a a a a ˆ ˆ µ = (1l V −1 1l)−1 1l V −1 y ˆ ˆ µ ˆ Var(ˆ) = (1l V −1 1l)−1 (6) (7) ˆ e em que V ´ a matrix de variˆncias e covariˆncias estimada das observa¸oes obtida a partir das a a c˜ 2 2 estimativas σε e σ .lme(). Estes estimadores s˜o obtidos maximizando-se a fun¸˜o de verossimilha¸a de uma a ca c proje¸ao do vetor dos dados no espa¸o complementar os definido pela parte fixa do modelo.975).075202 attr(. c˜ c 2 a ca e ca Tipicamente. coefficients$fixed + qt(c(0. 0.659078 > VarCorr(mgo1.0003355097" "contrasts" "logLik" "method" "data" "coefficients" "varFix" "numIter" "groups" "fitted" "residuals" O intervalo de confian¸a para m´dia pode ent˜o ser obtido por: c e a µ ± t1−α/2. 1] (Intercept) Residual "0.225 INTRODUCAO AO R ¸˜ Considerando os recursos computacionais atualmente dispon´ ıveis e as propriedades dos diferentes estimadores.lme.n−1 ˆ ˆ µ Var(ˆ). Nos comandos a seguir mostramos a obten¸ao do intervalo segundo c´lculos dessa express˜o c˜ a a e a equivalˆncia com o informado pela fun¸˜om intervals. nossa preferˆncia ´ pelo uso de estimadores de m´xima verossimilhan¸a e e a c restrita.242955 2.659078 2.025. df = fixDF$X) * + sqrt(varFix)) [1] 1. ˆ ˆ No exemplo em quest˜o s˜o estes os estimadores utilizados para obter as estimativas a a mostradas na Sess˜o anterior (ver o resultado de summary(mgo1.lme. .action" > mgo1.lme$coeff$fixed (Intercept) 1. > names(mgo1.242955 1. which = "fixed") Approximate 95% confidence intervals Fixed effects: lower est.lme$varFix (Intercept) (Intercept) 0.3110907386" "0."label") [1] "Fixed effects:" . e ca > mgo1. upper (Intercept) 1.075202 > intervals(mgo1.lme) [1] "modelStruct" "dims" [6] "sigma" "apVar" [11] "call" "terms" [16] "fixDF" "na.lme) e com valores mostrados a novamente a seguir.0389005 > with(mgo1.

> require(lme4) O comando para se obter uma an´lise equivalente a anterior ´ mostrado a seguir.3110907386 0.´ 27 EFEITOS ALEATORIOS 226 Para uma observa¸˜o individual o intervalo ´ dado por ca e y ± t1−α/2. groups: Lab.1.n−1 2 σε + σ 2 .00033551 0.412 A op¸˜o padr˜o ´ o ajuste por m´xima verossimilhan¸a restrita. Error t value (Intercept) 1.6591 0. E o c˜ a calculado como mostrado nas linhas de comando. Lab (Intercept) 0. 1]) > vcomp [1] 0.018317 Number of obs: 25. e as estimativas σε e σ 2 podem obtidas da seguinte forma.numeric(VarCorr(mgo1. Os resultados a ` e s˜o apresentados de forma diferente.as.9989227 27. ρ= 2 σε .54 -66.lmer <. 8 Fixed effects: Estimate Std. 2 σε + σ 2 > vcomp[1]/sum(vcomp) [1] 0. ˆ2 ˆ > vcomp <.lmer(MgO ~ 1 + (1 | Lab).1972 8.557755 Residual 0. mgo1) > summary(mgo1.lmer) Linear mixed model fit by REML Formula: MgO ~ 1 + (1 | Lab) Data: mgo1 AIC BIC logLik deviance REMLdev -59.0003355097 O coeficiente de correla¸˜o intraclasse reflete a rela¸ao entre a variabilidade das observa¸oes ca c˜ c˜ ´ definido ela express˜o a seguir e dentro dos laborat´rios em rela¸ao a variabilidade total. pr´m os elementos s˜o equivalentes. a e a > mgo1.4 Alternativas de c´digo o O pacote lme4 reimplementa algumas funcionalidades do nlme onde o modelo ´ definido ine dicando os termos aleat´rios entre parˆnteses na f´rmula e eliminando o uso do argumento o e o random.43 32.52 -65.09 -55. Estimativas de m´xima ca a e a c a verossimilhan¸a podem ser obtidas usando o argumento REML=FALSE.09 Random effects: Groups Name Variance Std.31109074 0.Dev. c .lme)[.

28 -66.56 -65. Lab (Intercept) 0. REML = FALSE) > summary(mgo1. 8 Fixed effects: Estimate Std.6591 0.lmer.1845 8.ml) Linear mixed model fit by maximum likelihood Formula: MgO ~ 1 + (1 | Lab) Data: mgo1 AIC BIC logLik deviance REMLdev -60.27217959 0.521708 Residual 0.lmer.lmer(MgO ~ 1 + (1 | Lab).04 Random effects: Groups Name Variance Std. mgo1.993 .00033552 0.56 -56.018317 Number of obs: 25. Error t value (Intercept) 1.91 33.Dev.ml <.227 INTRODUCAO AO R ¸˜ > mgo1. groups: Lab.

df = 1). add = T) Note que. add = T) Nos gr´ficos anteriores comparamos o histograma da distribui¸ao emp´ a c˜ ırica obtida por simula¸ao com a curva te´rica da distribui¸ao.rnorm(1000) > hist(z. a (1) Vejamos como ilustrar este resultado. Inicialmente vamos definir o valor da semente de n´meros aleat´rios para que os resultados possam ser reproduzidos.28 USANDO SIMULACAO PARA ILUSTRAR RESULTADOS ¸˜ 228 28 Usando simula¸˜o para ilustrar resultados ca Podemos utilizar recursos computacionais e em particular simula¸oes para inferir disc˜ tribui¸oes amostrais de quantidades de interesse. 1) ent˜o Z 2 ∼ χ2 . c˜ o a a a 28. Veremos alguns exemplos a seguir. Vamos come¸ar gerando u o c uma amostra de 1000 n´meros da distribui¸ao normal padr˜o. main = "") > curve(dchisq(x. -4. A seguir vamos fazer um hisu c˜ a tograma dos dados obtidos e sobrepor a curva da distribui¸ao te´rica.1 Rela¸˜es entre a distribui¸˜o normal e a χ2 co ca Resultado 1: Se Z ∼ N(0. prob = T. Este uso de simula¸oes ´ apenas um ponto de partida pois estas s˜o especialmente uteis c˜ e a ´ para explorar situa¸oes onde resultados te´ricos n˜o s˜o conhecidos ou n˜o podem ser obtidos. para fazer a compara¸˜o do histograma e da curva te´rica ´ necess´rio que o hisca o e a tograma seja de frequˆncias relativas e para isto usamos o argumento prob = T. 4. > hist(z^2. 10. o c˜ (1) . prob = T. 0. O gr´fico da direita da a a Figura 73 mostra o histograma dos quadrados do valores da amostra e a curva da distribui¸ao c˜ 2 de χ(1) . Uma outra forma e mais eficaz forma de comparar c˜ o c˜ Figura 73: Histograma das amostra da e a curva te´rica da distribui¸ao normal padr˜o (eso c˜ a querda) e histograma dos valores ao quadrado com a curva te´rica da distribui¸ao χ2 (direita). main = "") > curve(dnorm(x). a a > z <. e Agora vamos estudar o comportamento do quadrado da vari´vel. o que ajuda na compreens˜o e visualiza¸˜o c˜ a ca dos conceitos e resultados. Na teoria de estat´ c˜ ıstica existem v´rios rea sultados que podem ser ilustrados via simula¸ao. Fazemos isto com os c˜ o comando abaixo e o resultado est´ no gr´fico da esquerda da Figura 73.

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

seed(23) z <. df = 3).2 Distribui¸˜o amostral da m´dia de amostras da distribui¸˜o ca e ca normal Resultado 3: Se Y1 . sum) par(mfrow = c(1. 1) 28.matrix(rnorm(20000. sz2) abline(0. . 30) hist(sz2.apply(y. 1. sendo que as diferen¸as s˜o devidas ao erro de simula¸ao pro trabalharmos c a c˜ .97721 > var(ybar) [1] 1. mean = 100.matrix(rnorm(30000).5 (= 30/20). σ 2 ) ent˜o y ∼ N(µ. main = "".28 USANDO SIMULACAO PARA ILUSTRAR RESULTADOS ¸˜ 230 Figura 75: Histograma da uma amostra da soma dos quadrados de trˆs valores da normal e 2 padr˜o e a curva te´rica da distribui¸ao de χ(3) (esquerda) e o respectivo qq-plot. 2)) curve(dchisq(x. sd = sqrt(30)). df = 3). e > set.seed(381) > y <. Vamos organizar as amostras em uma matriz onde cada coluna e a corresponde a uma amostra. a o c˜ trˆs n´meros.678735 Pelo Resultado 3 acima esperamos que a m´dia das m´dias amostrais seja 100 e a variˆncia e e a seja 1.apply(z^2. e que a distribui¸ao das m´dias amostrais seja normal. Y2 . A seguir vamos calcular a m´dia de cada amostra. Yn ∼ N(µ. ca ca (3) > > > > > > > > set. mean) > mean(ybar) [1] 99. nc = 1000) > ybar <. nc = 3) sz2 <. a ¯ Neste exemplo vamos obter 1000 amostras de tamanho 20 de uma distribui¸ao normal de c˜ m´dia 100 e variˆncia 30. . prob = T. σ 2 /n). 0. . add = T) qqplot(qchisq(ppoints(length(sz2)). Na Figura 75 mostramos no gr´fico a esquerda. 2. o histograma dos valores obtidos e u a ` com a curva da distribui¸˜o esperada e no da direita o qq-plot para a distribui¸˜o χ2 . valores bem pr´ximos c˜ e o dos obtidos acima.

a mediana na amostra. 105) hist(ybar. Para completar vamos obter o gr´fico com o histograma das a m´dias das amostras e a distribui¸ao te´rica conforme Figura 76 e o respectivo qq-plot. sd = sqrt(30/20)). e da amostra e T2 = md(x). Considere uma distribui¸ao normal de m´dia µ = 0 e variˆncia unit´ria e amostras de c˜ e a a tamanho n = 20 desta distribui¸˜o. u c˜ gere N amostras de tamanho n. prob = T. para cada amostra calcule S 2 e V = (n − 1)S 2 /σ 2 . Considere agora dois estimadores: T1 = ¯ a m´dia ca (x). n−1 2σ 2 n−1 2.231 INTRODUCAO AO R ¸˜ com amostras de tamanho finito. a vari´vel V = (n − 1)S 2 /σ 2 tem distribui¸˜o a c˜ a ca 2 χn−1 . c˜ com os 3. DICA: Voce pode come¸ar pensando nos passos necess´rios para ilustrar este resultado: c a ˆ ˆ ˆ ˆ ˆ escolha os parˆmetros de uma distribui¸ao normal. 95. No exerc´ anterior compare os valores te´ricos E[S 2 ] = σ 2 e V ar[S 2 ] = ıcio o valores obtidos na simula¸ao. mean = 100. a c˜ escolha o tamanho de amostra n e o n´mero de simula¸oes N . Avalie e compare atrav´s de simula¸oes e c˜ . Ilustrar usando simula¸ao o resultado que afirma que para o estimador S 2 = c˜ n−1 da variˆncia de uma distribui¸ao normal. add = T) qqnorm(ybar) qqline(ybar) Note que para obter o qq-plot neste exemplo utilizamos as fun¸oes qqnorm qqline j´ dispon´ c˜ a ıveis no R para fazer qq-plot para distribui¸ao normal. fa¸a um histograma com os valores V e compare com a curva de uma distribui¸ao c c˜ χ2 . e c˜ o > > > > > par(mfrow = c(1.3 Exerc´ ıcios ¯ 2 (Yi −Y ) 1. 2)) curve(dnorm(x. c˜ 28. c˜ Figura 76: Histograma de uma amostra da distribui¸ao amostral da m´dia e a curva te´rica da c˜ e o distribui¸ao e o respectivo qq-plot.

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

c˜ .b <. ”loops” e a ”fam´ ılia” *apply Agrupando comandos O R ´ uma linguagem que interpreta express˜es. u > a > a [1] > b [1] > x > x [1] > y [1] > z [1] <. execu¸˜o condicional. Em certas situa¸˜es.1:3 y <.y <." para digita¸ao c˜ em uma mesma linha.333333 29. a ´ E poss´ atribuir os mesmos valores a v´rios objetos de uma s´ vez utilizando atribui¸˜es ıvel a o co m´ltiplas de valores.y/x <. como no ”prompt”do R as chaves s˜o opcionais.1 Agrupando comandos.2 Execu¸˜o condicional ca Execu¸˜es condicionais s˜o controladas por fun¸˜es especiais que verificam se uma condi¸ao ´ co a co c˜ e satisfeita para permitir a execu¸ao de um comando. o que implica que o unico tipo de comando e o ´ usado ´ uma express˜o ou fun¸ao que executa o processamento da requisi¸˜o e retorna algum e a c˜ ca resultado.x + 4 z <. Nesta sess˜o vamos alguns formatos para facilitar/agilizar o uso de comandos. controle ca de fluxo. As seguintes fun¸˜es e operadores podem c˜ co ser usadas para controlar execu¸ao condicional.x + 4 <.10 10 10 <. co a > { + + + + } > x > y > z > x [1] > y [1] > z [1] x <.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 ".233 INTRODUCAO AO R ¸˜ 29 29.000000 2.000000 3.z <.1:3 <.y/x 1 2 3 5 6 7 5.

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

15 > { + if (x > 8) + z <. A escolha e co de qual usar vai depender do contexto e objetivo do c´digo e em geral n˜o existe solu¸˜o unica. que possui v´rias vari´veis a a relacionadas a caracter´ ısticas de ve´ ıculos. c˜ > f1 <. Entre as vari´veis est˜o as que indicam o consumo a a (mpg .3 26.8 19.5 * x + w <.rnorm(i) .5 [16] 15.z . Primeiro vamos implementar uma solu¸ao usando for().0 30.2 17. z. n e para calcule a m´dia de cada e amostra.0 21. .8 32. Para separar os dados a a da vari´vel mpg para cada tipo de cˆmbio. .0 22.4 22.function(n) { + medias <.4 17. while() e repeat(). o a ca ´ sendo que uma mesma tarefa pode ser feita por uma ou outra.4 33.4 10. Por exemplo considere o conjunto de dados codemtcars.3 19.3 15. z.4 14. w) Um comando util para manipula¸ao de dados ´ o split() que permite separa dados por ´ c˜ e grupos.2 10.235 INTRODUCAO AO R ¸˜ [1] 35 > rm(x. e 29.9 27.y + } > z [1] 20 > w [1] 5 > rm(x.numeric(n) + for (i in 1:n) { + am <. Apenas para ilustra¸ao considere o seguinte exemplo resolvido de trˆs formas diferentes com c˜ e cada uma destas fun¸˜es: co Dado um valor de n gerar amostrar de tamanho 1.3 Controle de fluxo O controle de fluxo no R ´ implementado pelas fun¸˜es for(). w) > x <.miles per gallon) e o tipo de cˆmbio.0 21.2 13.5 15. 2.8 16.4 30. . y.7 21. . split(mpg. y. am)) $`0` [1] 21.3 24.10 > y <. manual ou autom´tico (am).1 14.4 Outro comando com funcionalidade similar ´ agregate().2 $`1` [1] 21.4 18. podemos usar: a a > data(mtcars) > with(mtcars.z + y + if (x <= 8) + z <.2 * x + w <.7 18.8 19. com 3 casas decimais.4 15.7 15.

seed(283) > f2(10) [1] 1.224 Agora vamos executar a mesma tarefa com while() > f2 <.224 E finalmente a mesma tarefa com repeat() > f3 <.546 0.007 -0.086 -0.i + 1 + } + return(medias) + } > set.1 + repeat { + am <.137 0. Na verdade. CONTROLE DE ¸˜ FLUXO. co e Suponha agora que queremos preservar e retornar tamb´m os dados simulados. dig = 3) + if (i == n) + break + i <.numeric(n) + i <.138 NOTA: as solu¸oes acima s˜o apenas ilustrativas e n˜o representam a forma mais eficiente c˜ a a de efetuar tal opera¸ao o R.341 -0.392 1.function(n) { + medias <.rnorm(i) + medias[i] <. Para ilustrar e vamos mostrar como fazer isto modificando um pouco a primeira fun¸ao. EXECUCAO CONDICIONAL.514 -0.546 0.137 0.086 -0.007 -0. dig = 3) + } + return(medias) + } > set. para este tipo de c´lculo recomenda-se o uso de fun¸oes c˜ a c˜ do tipo *apply que veremos no restante desta sess˜o.341 -0.29 AGRUPANDO COMANDOS.137 0.392 1.seed(283) > f3(10) [1] 1.514 -0.seed(283) > f1(10) [1] 1.392 1.1 + while (i <= n) { + am <.round(mean(am).138 0.514 -0.063 -0.224 236 0.138 0. c˜ .063 -0.086 -0. ”LOOPS” E A ”FAM´ ILIA” *APPLY + medias[i] <.007 -0.4 Alguns coment´rios adicionais a Nas solu¸˜es acima as amostras foram usadas para calcular as m´dias e depois descartadas.numeric(n) + i <.function(n) { + medias <. a 29.341 -0. dig = 3) + i <.546 0.rnorm(i) + medias[i] <.063 -0.round(mean(am).i + 1 + } + return(medias) + } > set.round(mean(am).

2003886 -0.1 + for (i in ns) { + am <.function(ns) { + medias <. dig = 3) + j <. Nas fun¸˜es acima geravamos amostras com ca co tamanhos sequˆnciais com incremento de 1 elemento no tamanho da amostra.0009700 -0.function(n) { + res <. 10)) [1] -1.j + 1 + } + return(medias) + } > set.035963 1.f1a(4) > names(ap) [1] "amostras" "medias" > ap $amostras $amostras[[1]] [1] 1.list() + res$medias <.392 1.rnorm(i) + medias[j] <.007 -0.056 0.422 -0.seed(283) > ap <.numeric(n) + for (i in 1:n) { + res$amostras[[i]] <.3257288 $amostras[[3]] [1] 0.6665789 $amostras[[4]] [1] 2. > f5 <.00687 $amostras[[2]] [1] 0.177 0.round(mean(res$amostras[[i]]).174572 1.761383 $medias [1] 1.158 .063 -0.round(mean(am).214059 1.numeric(length(ns)) + j <.list() + res$amostras <.4913491 -1. A fun¸ao a e c˜ seguir mostra como gerar amostras de tamanhos especificados pelo usu´rio e para isto toma a como argumento um vetor de tamanhos de amostra.rnorm(i) + res$medias[i] <.546 Vamos agora ver uma outra modifica¸˜o. 5.seed(231) > f5(c(2. 8. dig = 3) + } + return(res) + } > set.237 INTRODUCAO AO R ¸˜ > f1a <.

392 1. sempre retornando uma lista sapply() para uso em vetores.138 2.) { + x <.lapply(1:10.list(pos = mean(x). Vejamos algums exemplos. 5.list(pos = mean(x. a ˆ apply() para uso em matrizes. dig = 3)) [1] 1.514 -0.seed(231) sapply(vec. B = modB)) + } Agora vamos rodar a fun¸ao 10 vezes. tapply() e co lapply() para implementar c´lculos de forma mais eficiente. simplificando a estrutura de dados do resultado se poss´ ıvel (para vetor ou matriz) mapply() para uso em vetores.. disp = sd(x)) + modB <. sapply(). c˜ a Inicialmente definimos a fun¸˜o: ca > proc <.086 -0.056 0. ”LOOPS” E A ”FAM´ ILIA” *APPLY 238 29.function(. Usualmente usamos as fun¸˜es apply().29 AGRUPANDO COMANDOS.007 -0. EXECUCAO CONDICIONAL.137 0. proc) . dig = 3) set.158 [1] -1. Seja o problema mencionado no in´ desta sess˜o de gerar amostras de tamanhos sequenıcio a ciais e calcular a m´dia para cada uma delas. c˜ > set.224 0. Uma alternativa aos c´digos apresentados e o seria: > set.1).341 -0.c(2. No pr´ximo exemplo consideramos uma fun¸˜o que simula dados e calcula medidas de o ca posi¸ao e dispers˜o associadas utilizando para cada uma delas duas medidas alternativas. f6) 0. Considere agora a modifica¸ao mencionado anteriormente de calcular m´dias de amostras c˜ e com tamanho fornecidos pelo usu´rio a > > > > vec <. CONTROLE DE ¸˜ FLUXO.422 -0.. 10) f6 <. vers˜o multivariada de sapply() a lapply() para ser aplicado em listas ˆ ˆ ˆ ˆ 1.5 Evitando ”loops” — a ”fam´ ılia” *apply O R ´ uma linguagem vetorial e ”loops”podem e devem ser substitu´ e ıdos por outras formas de c´lculo sempre que poss´ a ıvel.063 -0.rnorm(500) + modA <.177 3. function(x) round(mean(rnorm(x)). disp = mad(x)) + return(list(A = modA. trim = 0.function(n) round(mean(rnorm(n)).546 0. 8. arrays ou data-frames tapply() para uso em vetores.seed(126) > res <.seed(283) > sapply(1:10.

7] 0.06210404 0.059818054 0.2] [.39231 .078982050 0. mediaAB) rownames(mAB) <. que neste caso ´ uma lista. variˆncia e coeficinte de varia¸ao do consumo para cada tipo de cambio. mean) A B 0.02210935 0.02798788 -0.6] [.05680834 -0.02725767 -0. LETTERS[1:2].9] [.010179733 0.07898205 0.0958355 0.07898205 -0.02058979 0.02029610 E para obter as m´dias das m´dias de cada medida: e e > apply(mAB. sep = "") mAB [.05981805 0.1023454 0.01017973 0. am.8] [. Agora vamos a e extrair desta lista as m´dias aritm´ticas e depois ambas. x$B$pos) mAB <.06122656 0.5] [.3] [.01706928 -0. A fun¸ao tapply() pode ser usada para calcular o resultado de uma opera¸ao sobre dados.1] 0.027987878 > mAB <.020589788 0. 1.function(x) x$A$pos mA <.sapply(res.239 INTRODUCAO AO R ¸˜ O resultado est´ armazanado no objeto res.02058979 0. function(x) sapply(x. tapply(mpg.02781770 0.1] [.9] [.4] [.06122656 0.function(x) c(x$A$pos.8] [.04582751 0.05914628 0.02029610 modeloA modeloB modeloA modeloB Os comandos acima podem ser reescritos em vers˜es simplificadas: o > mA <.095835502 0.045827513 0.061226561 -0.3] [.0958355 0. c˜ c˜ para cada um dos n´ ıveis de uma segunda vari´vel No primeiro exemplo consideramos a novamente o conjunto de dados mtcars mencionado anteriormente.04085053 [. m´dia aritm´tica e aparada: e e e e > > > > > > mediaA <. e a c˜ > with(mtcars.14737 24. function(y) y$pos)) > mAB A B A B [.6] -0.02725767 0.sapply(res.04085053 [.05981805 0.sapply(res. mean)) 0 1 17. mediaA) mediaAB <.10] -0.10] -0.5] [.020411456 -0. Os comandos abaixo calculam m´dia.sapply(res.027257675 -0.02798788 -0.02385153 0.01782913 4.02210935 0.006781871 -0.006781871 -0.1023454 0.01706928 [.006781871 -0.01017973 0.04582751 0.05680834 -0. function(x) x$A$pos) > mA [1] [6] 0.7] 0.06210404 0.2] [.05914628 [.paste("modelo".020411456 -0.4] [.02781770 0.

66788 56. y.85114 66.53166 57.55652 34. sd = 10) > y <.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 <. > x <.73959 39.05864 65.with(xy.02577 > with(mtcars.35969 > gCV <. tapply(x.rep(LETTERS[1:5].92209 39.tapply(x.03091 45. EXECUCAO CONDICIONAL.24760 45. y = rep(LETTERS[1:5].36997 60.41214 48. am.96075 46.02277 50.08328 20.45439 47.78913 45.90542 62.77170 40.21829 49. y.53931 37. each = 10) > x [1] [9] [17] [25] [33] [41] [49] > y 55. var)) 0 1 14.28053 Vejamos ainda um outro exemplo onde definimos 50 dados divididos em 5 grupos. y.37572 62.93054 37.01286 40.13208 45.17779 46.78483 35.19106 17.80234 37.26204 47.35279 18. sd = 10).with(xy.65681 25.13100 11.67566 39.06637 66.46560 44.91571 51. mean)) > gM A B C D E 49.01864 38.26776 60.33724 49. tapply(mpg. + each = 10)) > gM <.29422 61.90432 60.60778 55.69673 56.66166 58.62899 43.rnorm(50.93003 240 51. function(x) 100 * sd(x)/mean(x))) 0 1 22.69930 38.73984 57.07629 50.tapply(x.29661 38. mean = 50. function(z) 100 * sd(z)/mean(z))) > gCV A B C D E 16. tapply(x.03602 34.frame(x = rnorm(50.17599 23. CONTROLE DE ¸˜ FLUXO.25661 > gCV <. am.67300 16. function(z) 100 * sd(z)/mean(z)) > gCV A B C D E 16. ”LOOPS” E A ”FAM´ ILIA” *APPLY > with(mtcars.48886 44.06588 50.37572 42.data. tapply(mpg.06800 47.77284 Para organizar os dados em um data-frame: > xy <. y.71391 65.97707 17.45986 65.89312 43. mean) > gM A B C D E 52.61359 32.28745 42.00313 39.03077 . mean = 50.29 AGRUPANDO COMANDOS.99390 44.35892 25.37867 48.

rowSums() e colSums(). c˜ a 6.241 INTRODUCAO AO R ¸˜ 5.round(rnorm(500.076 system elapsed 0. lam = 5) O que queremos montar um vetor com os valores unicos que definem estes intervalos. ]) + mx + } + mx <.apply(x. > system.sort(c(li. Inicialmente vamos simular estes valores.time(mx <. m = 70. sd = 10)) > ls <. ncol = m) .085 > system.f(x) + }) user 0. ca > x <.003 A fun¸ao rowMeans() ´ substancialmente mais eficiente (menos tempo de execu¸˜o.004 system elapsed 0. Encapsulamos os comandos com a fun¸ao e c˜ system.rowMeans(x)) user 0.000 0. Considere gerarmos uma matrix 1000 × 300 representando 1000 amostras de tamanho 300. Ao final teremos uma e matrix indicando.008 0.1)) { + all[j + 1] <.time() que compara os tempos de execu¸˜o.matrix(rnorm(1000 * 300).100 system elapsed 0.rep(min(aux).time({ + f <.min(aux[aux > all[j]]) + } + n <. mean)) user 0. > li <. nrow = n.function(x) { + mx <. 1.length(li) + aij <.time({ + aux <.103 > system.matrix(0. m) + for (j in 1:(m . Inicialmente vamos fazer um c´digo usando ”loops”guardando os resultados no o objeto B. Outc˜ e ca ras fun¸oes simulares s˜o colMeans(). nc = 300) > system. para cada elemento do vetor de valores unicos. ls)) + m <. a pertinˆncia a cada ´ e intervalo. Considere o seguinte problema: Sejam li e ls vetores com os limites superiores e inferiores definindo intervalos.000 0. O que desejamos ´ calcular a m´dia de cada uma das amostras Os c´digos a seguir e e o mostras trˆs formas alternativas de fazer isto.numeric(1000) + for (i in 1:1000) mx[i] <. e ´ testar a pertinˆncia de cada elemento a cada um dos intervalos.time(mx <.mean(x[i.li + rpois(li.length(table(aux)) + all <.

usando a estrutura vetorial da linguagem R vamos reimplementar este c´digo o de maneira mais eficiente e adequada para a linguagem.function(x.sapply(all. Considere agora uma extens˜o do problema anterior. 0) + A <. j] <.aij } system elapsed 0.032 2. e testando a igualdade dos resultados com identical(). CONTROLE DE ¸˜ FLUXO. m) + for (j in 1:(m . ls)) + m <.004 0. inf = li. ”LOOPS” E A ”FAM´ ILIA” *APPLY + + + + + + + + }) for (i in 1:n) { for (j in 1:m) { aij[i. nrow = n.time({ + aux <.length(table(aux)) + all <.matrix(0.sort(unique(c(li.1)) { + all[j + 1] <. ncol = m . B) [1] TRUE 7.li + rpois(li.29 AGRUPANDO COMANDOS. m = 70. sup = ls) + }) user 0. + 1. 1.time({ + all <. inf. e a c c˜ > system.length(li) + aij <. Note a diferen¸a nos tempos de execu¸ao. lam = 5) > system.ifelse(all[j] >= li[i] & all[j] <= ls[i].sort(c(li. sd = 10)) > ls <.rep(min(aux).790 242 user 2.round(rnorm(500. Ao final usamos identical() para testar se os resultados num´ricos s˜o exatamente os mesmos. O resultado final ´ a e uma matrix indicando para cada intervalo obtido desta forma a sua pertinˆncia a cada e um dos intervalos originais. > li <.037 > identical(A. interv1. 0) } B <. Da mesma forma que no caso anterior implementamos com um ”loop”e depois usando a estrutura vetorial da linguagem. sup) ifelse(x >= inf & x <= sup. usando sapply().032 system elapsed 0.1) + for (i in 1:n) { . EXECUCAO CONDICIONAL. Queremos montar o vetor com os a valores unicos que definem estes intervalos como no caso anterior.536 Agora.min(aux[aux > all[j]]) + } + n <. guardando os resultados no objeto A. e depois usar este vetor ´ montar intervalos com pares de elementos consecutivos deste vetor e testar se cada um destes intervalos est´ contido em cada um dos intervalos originais. ls))) + interv1 <.

time({ + all <. sup = ls) + }) user 0. inf = li.ifelse(all[j] >= li[i] & all[j + 1] <= ls[i].243 INTRODUCAO AO R ¸˜ + + + + + + + }) for (j in 1:m .150 user 2.2 Q1. inf.Natacao 0 1 1 0 2 => Mulher praticante de Volei e Nata¸ao c~ 0 0 0 1 2 => Mulher praticante de Atletismo Gostaria de criar uma tabela cruzada entre essas vari´veis: a M F Futebol 21 10 Nata¸~o ca 13 20 Volei 5 2 Atletismo 10 10 . sup) ifelse(x[1] >= inf & x[2] <= + sup.1 Q1.4 Q2 1 0 1 0 1 => Homem Praticante de Futebol.Qual Esporte voc^ pratica: e 1. 1.892 > system. 1. interv1.3 Q1.() Nata¸ao c~ Q2 . ls))) + all12 <. all[-1]) + interv1 <.sort(unique(c(li. ` 1. B) [1] TRUE Uso da fam´ *apply – outros exemplos Os exemplos a seguir foram retirados de menılia sagens enviada a lista R_STAT. por exemplo: Q1 .032 system elapsed 0.aij } system elapsed 0.050 > identical(A. j] <.()Volei 3. 0) } B <.function(x. 1.()Atletismo 2.000 0.()Futebol 2.Masculino() 4.apply(all12. adapdato de mensagem enviada por Silvano C Costa Tenho uma pergunta onde pode haver mais de uma resposta.1) { aij[i.Sexo: 1.040 3.cbind(all[-length(all)]. 0) + A <.Feminino() Ent~o teria os dados dessa forma: a Q1.

S)[2. CONTROLE DE ¸˜ FLUXO.as. 1). "Natacao". > with(esportes.data.frame(matrix(sample(c(0. ])) [1.sample(c("M". ]. > with(esportes. 300. S)[2.] [4. rbind(table(Futebol. rep = TRUE) dim(esportes) 5 [1] 75 > head(esportes) 1 2 3 4 5 6 Futebol Natacao 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¸˜o 1: Para cada esporte podemos contar os praticantes de cada sexo em cada ca esporte. podemos obter a tabela desejada combinando os resultados de tabelas para cada esporte. nc = 4)) names(esportes) <.] F 19 19 24 20 M 19 22 20 21 Solu¸˜o 2: alternativamente. 1:4]. ]. usar tapply() para somar os praticantes (1) de cada a sexo. e a > + > > > esportes <. como n˜o temos o question´rio aqui vamos primeiro ca a a simular dados deste tipo como se tiv´ssemos 75 question´rios.] [3. rep = TRUE). "Volei". table(Atletismo.c("Futebol". S)[2. podemos usar sapply() para tomar cada esporte e. > sapply(esportes[. separadamente utilizando table() e verificando a segunda linha da tablea a seguir. ”LOOPS” E A ”FAM´ ILIA” *APPLY 244 Para mostrar como obter a solu¸˜o.] [2. function(x) tapply(x. table(Futebol. EXECUCAO CONDICIONAL. sum)) Futebol Natacao Volei Atletismo F 19 19 24 20 M 19 22 20 21 . esportes$S.29 AGRUPANDO COMANDOS. "Atletismo") esportes$S <. S)[2. "F"). table(Volei. S)) S Futebol F M 0 18 19 1 19 19 Desta forma. table(Natacao. 75. + ]. como ca os dados s˜o codificados em 0/1.

5. Para fazer os a testes-t nas 1000 reamostras utilizamos apply() que vai gerar uma lista de 100 elementos com resultados dos testes. 3.4.5) Eu gostaria de juntar estes dois vetores num mesmo vetor e fazer 1000 reamostragens neste vetor de tamanho do vetor a e com reposi¸ao. a a > e <.4. Tenho duas amostras.245 INTRODUCAO AO R ¸˜ 2.5. c~ e <.5.4. 1]. 5.3. 3. 2])) Para ver o resultado do teste em uma das amostras selecionamos um elemento da lista. 3.4.test(x[. Inicialmente vamos entrar com os dados e obter o teste-t. a <-c(1.test(a. 4. 7. 4.5. + 6. 5.2. 3. rep = T).1.c(5. As reamostras ser˜o arranjadas num array de dimens˜o 11 × 2 × 1000.460057 sample estimates: mean of x mean of y 4. 2.6.7.8889 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -1.4.c(1.2) Depois eu queria ver aplicar o teste t(nas amostras) e ver como se comportam estes p-valores.5. + 2. 7.3. 5.3. 2) b <. Adaptado de mensagem enviada por Andr´ e Queria fazer uma amostragem e tirar as informa¸~es. 3.6.000000 Agora obtemos as 1000 reamostras deste vetor cada uma com 11×2 = 22 valores utilizando sample(). x[. 5.5. 4.5. > > > > a <.4. 2. 4.ab <. 6. 4. 4. 1.4.3. 5) tt.4.3.278239 1. 3.2) b <-c(5.c(5. length(e) * 1000. 3. function(x) t.array(sample(e. 3.6.3. 4. 5. > TT[[1]] . 1000)) Portanto cada elemento da terceira dimens˜o corresponde a uma reamostra.c(5.apply(reamostras. 6. dim = c(length(e)/2.2.090909 4. > TT <.ab Welch Two Sample t-test data: a and b t = 0.7. df = 14. 5. 4.14. 3.t.1423. 4. co Aplico o teste t e tenho um P-valor.3. 3.6. 3. 4. p-value = 0. b) tt.5.4. 5. 5. 2) > reamostras <.4. 6.3.3. 5.5.3.

8448. x[.val. e ent˜o uma a e a a poss´ forma seria utlizar o comando lapply(). 1] and x[. + 2]. arquivo gravado c˜ a em disco. main = "P-valor") = 2) OBS: note que est˜o sendo usadas as op¸˜ees default do teste-t para compara¸˜o de a co ca duas amostras dadas em t. 1]. etc) de fun¸ao e n˜o no resultado que ela retorna. main = "Diferen¸a de m´dias") c e col = 2.ab$p..sapply(TT.. hist(sapply(TT. a a Para alterar algum argumento basta acrescentar o argumento desejados na chamada de apply(). ` > > > > hist(sapply(TT. function(x) abline(v = tt. . n˜o pareado. .value" "parameter" "p.int" "data. lwd = 3) x$p. variˆncias diferentes.) t.test(x[. Al´m das mencionadas acima v´rias outras tem sido e a implementadas. como no exemplo a seguir. dentre v´ris outras). etc). Notadamente se destacam as do pacote plyr (a_ply.6 Extens˜es da fam´ *apply o ılia As fun¸˜es da fam´ *apply tem o prop´sito geral de aplicar uma fun¸˜o repetidamente a co ılia o ca diversas partes de um conjunto de dados.886. var.name" "estimate" > pvals <. > TT <. df = 19.29 AGRUPANDO COMANDOS.1072869 sample estimates: mean of x mean of y 4.test() (bilateral. comparados aos valores a ` obtidos na reamostragem. Supunha que desejamos fazer o histograma das trˆs vari´veis. r_ply. ”LOOPS” E A ”FAM´ ILIA” *APPLY 246 Welch Two Sample t-test data: x[.7436506 0.818182 Finalmente pode-se extrair uma quantidade de interesse dos resultados. function(x) abline(v = diff(tt. Como exemplo considere com c˜ a conjunto de dados trees. e e c e a direita os p-valores. col diff(x$est)). extra´ ımos os p-valores.value) Os gr´ficos no Figura 2 mostram valores obtidos an amostra. A esquerda ´ mostrado a estimativa da diferen¸a de m´dias.). d_ply.apply(reamostras. l_ply. ıvel . > names(TT[[1]]) [1] "statistic" [6] "null.val). CONTROLE DE ¸˜ FLUXO.08001 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -1.value" "alternative" "method" "conf. 3..000000 4. alturas e e a volumes de ´rvores. EXECUCAO CONDICIONAL. function(x) x$p. uma data-frame que possui trˆs colunas com diˆmetros.. function(x. 2] t = -1.equal = TRUE) 29.ab$est). p-value = 0. a Por exemplo considere a fun¸˜o l_ply que aplica uma fun¸ao em elementos uma lista por´m ca c˜ e em situa¸oes onde estamos interessados apenas em um efeito colateral (gr´fico.

> data(trees) > par(mfrow = c(1.2 0.nz/plyr/. hist) Neste caso. a e a > require(plyr) > l_ply(trees. . o que pode ser indesej´vel e/ou desnecess´rio.8 sapply(TT.val) 1.0 20 Frequency 40 60 80 100 120 0. function(x) diff(x$est)) 2 0 0.co.247 Diferença de médias INTRODUCAO AO R ¸˜ P−valor Frequency 100 150 200 250 300 350 0 50 −2 −1 0 1 sapply(TT.4 0. function(x) x$p. al´m de produzir os gr´ficos as resultados dos c´lculos do histograma s˜o retornados e a a a na tela. A fun¸˜o l_ply() produz o mesmo a a ca resultado gr´fico por´m sem que os resultados dos c´lculos do histograma sejam retornados.6 0. hist) Para mais informa¸oes sobre o pacote plyr consulte as informa¸˜es e documenta¸Oes em c˜ co c˜ http://had.0 Figura 77: Valores da diferen¸a de m´dias (esquerda) e p-valor(direita) da amostra (linhas c e verticais) comparados aos histogramas dos valores obtinos nas reamostras . 3)) > lapply(trees.

embora simples. Em muitos casos tais modelos tem a sua forma a funcional espec´ ıfica para o prolema sendo tratado. c˜ a lineariza¸˜o parcial do modelo. Alvaro Pires a da Silva do Departamento de Ciˆncia do Solo da esalq/usp e refere-se ao ajuste da equa¸˜o e ca de van Genutchen para a curva de reten¸˜o de ´gua no solo (ou curva de reten¸˜o de ´gua no ca a ca a solo). Tal proe ı c˜ cedimento. 30. a equa¸ao de van Genutchen ´ um dos modelos matem´ticos utic˜ e a lizados para descrever a curva caracter´ ıstica de ´gua no solo que caracteriza a armazenagem de a agua atrav´s de rela¸ao entre a umidade e o potencial matricial. O modelo de van Genutchen c˜ c˜ a ´ dado pela seguinte equa¸˜o: e ca θ = θR + (θS − θR ) 1 1 + (αΨm )n 1−(1/n) (8) em que Ψm ´ o potencial matricial aplicado a amostra e θ ´ a umidade volum´trica medida e ` e e na amostra. relacionada a algum mecanismo (biol´gico. α e n que definem o formato da e ca curva sendo que o primeiro representa o inverso do potencial de entrada de ar e o segundo ´ um e ´ ındice da distribui¸ao dos tamanhos de poros. O objetivo destas notas n˜o ´ o de investigar todas estas op¸oes. mas apenas fornecer os elementos iniciais para a e c˜ ilustrar a possibilidade de se obter tais resultados usando o R. Diferentemente dos modelos lineares. respectivamente. declarando apenas a fun¸ao e valores iniciais. α. pode se ineficiente para o uso de m´todos num´ricos. θR . al´m da escolha e calibragem dos algor´ ca e ıtmos. inicializa¸ao autom´tica com valores iniciais obtidos automaticamente. Inicialmente mostramos um a e u ajuste feito de forma ”ingˆnua”(na¨ve). Para cada tens˜o aplicada a amostra perde o co o a parte do conte´do de ´gua e mede-se a umidade residual na amostra. e e o ajuste com nls() pode incorporar procedimentos que tendem a aprimorar o comportamento dos m´todos num´ricos tais como o fornecimento de fun¸oes que informem sobre a derivada do e e c˜ modelo sendo ajustado. Primeiro discutimos como efetuar um a unico ajuste para um conjunto de dados e algumas sugest˜es para examinar resultados. A partir dos pares pontos u a com valores medidos de tens˜o e umidade. Para determina¸ao da curva ´ e c˜ c˜ caracter´ ıstica de ´gua o procedimento usual ´ o de se tomar uma amostra que ´ submetida a e e a diferentes tens˜es em condi¸˜es de laborat´rio. a Nesta se¸˜o vamos ilustrar com dados da ´rea de f´ ca a ısica de solos o ajuste de modelos n˜o a lineares utilizando a fun¸ao nls(). o f´ ısico. Informalmente falando. ca . ´ O exemplo mostrado aqui foi motivado por um quest˜o levantada pelo Prof. tipo e controle dos algor´ ıtmos dispon´ ıveis. Entretanto. θ) e (θS .1 Exemplo: o modelo de van Genutchen Este exemplo mostra o ajuste de um modelo n˜o linear. Esta c˜ e o fun¸˜o ´ bastante flex´ e incorpora diversas op¸oes para fazer ajustes incluindo caracter´ ca e ıvel c˜ ısticas do modelo. obtem-se a curva de reten¸ao de ´gua no solo que a c˜ a descreve a varia¸ao da umidade em fun¸ao dos valores de tens˜o. O parˆmetros desconhecidos do modelo modelo s˜o θS e θR que correspondem a a a ` umidade volum´trica na satura¸˜o e residual. Portanto s˜o obtidos dados para os pares de ponc˜ a tos (Ψm . etc) inerente ao processo em quest˜o. o ajuste de modelos n˜o lineares n˜o permite que as a a express˜es dos estimadores dos parˆmetros desconhecidos do modelo sejam obtidas analiticao a mente sendo portanto necess´rio o uso de m´todos n´mericos. Ao ´ o final mostramos como efetuar v´rios ajustes de uma s´ vez de forma eficiente e extrair alguns a o resultados de particular interesse. n) s˜o parˆmetros desconhecidos a serem estimados e que caracterizam a a a curva de reten¸˜o. cujo ´ um acrˆnimo para non-linear least squares.˜ 30 AJUSTE DE MODELOS NAO LINEARES 248 30 Ajuste de modelos n˜o lineares a Modelos n˜o lineares permitem o ajuste de rela¸˜es mais complexas que rela¸˜es lineares ou a co co lineariz´veis entre quantidades de interesse.

Vemos a seguir que dispomos de 15 pontos medidos da curva de reten¸˜o da primeira amostra e 13 para a segunda.factor(am)) > summary(cra) am 30:15 41:13 pot Min.0636 1st Qu.br/~paulojus/dados/cra. am == 30) > cra30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 am pot 30 10 30 19 30 30 30 45 30 63 30 64 30 75 30 89 30 105 30 138 30 490 30 3000 30 4100 30 5000 30 26300 u 0.3071 30 19 0.: 58.0730 .2436 Max.2628 0.") > head(cra) 1 2 3 4 5 6 am pot u 30 10 0.leg.8 3rd Qu. sep = ".subset(cra.2828 0.2628 > cra <. Alvaro que podem ser obtidos usando o comando mostrado a seguir.5 Mean : 2139.0 u Min.ufpr.:0.1199 Median :0.1468 0.1655 0.1969 Mean :0.3071 Inicialmente vamos nos concentrar na discuss˜o do ajuste do modelo e para isto.2404 0.0 1st Qu.2931 30 30 0.2272 0. ca > cra <.transform(cra.csv".1879 3rd Qu. vamos a isolar os dados referentes a uma unica amostra.:0.table("http://www. : 10. :26300. :0.249 INTRODUCAO AO R ¸˜ ´ Para exemplificar o ajuste utilizamos dados cedidos pelo Prof.2931 0.3071 0.2522 0.2828 30 45 0.2120 0.read.2681 30 64 0. ´ > cra30 <. No objeto cra a primeira coluna (am) indica o n´mero da amostra.1013 0. :0.2753 0.2681 0. + head = T. am = as.5 Median : 107. Este conjunto de dados refere-se a apenas duas amostras que s˜o um subconjunto dos de dados original que cont´m diversas amostras. u a segunda (pot) o potencial aplicado e a terceira (u) a umidade do solo.1205 0.: 1550.0 Max. O objetivo ´ a e e determinar da curva de reten¸˜o de agua no solo estimada segundo modelo de van Genutchen ca ´ para cada uma das amostras.2753 30 63 0.

Este ´ um modelo n˜o linear pode ser o e a ajustado utilizando o m´todo de m´ e ınimos quadrados conforme implementado em nls(). plot(u ~ log10(pot). 0. pontanto considerando-se ca ca m´ximos e m´ a ınimos assint´ticos para a fun¸ao. + ylim = c(0.00 0 5000 10000 Ψm 20000 0. + ylab = expression(theta). tal como crit´rio de convergˆncia.1 visualizamos os dados de umidade versus press˜o a a a aplicada na amostra. o e . ylab = expression(theta). Os a valores foram escolhidos ap´s uma s´ria de tentativas. A escolha de valores iniciais para os demais o c˜ parˆmetros ´ menos obvia. (ii) o segundo informa o objeto contendo o conjunto de dados cujas nomes das colunas relevantes devem ter o mesmo nome utilizado na declara¸ao do modelo e.0 1.0 log10(Ψm) 3. visual por tentativa e erro. A fun¸˜o possui trˆs argumentos obrigat´rios: (i) o primeiro ´ utilizado para declarar a express˜o ca e o e a do modelo a ser ajustado. Uma das formas de se obter tais valores ´ efetuar um ajuste aproxa e ´ e imado.20 q q q q q q q q q q 0. especialmente em exemplos como este com um pequeno n´mero de dados. α) s˜o parˆmetros (coeficientes) a serem estic˜ a a mados a partir do ajuste do modelo te´rico aos dados.5 4. e estes nomes tamb´m devem coincidir com os e e utilizados na declara¸ao do modelo.00 1. A documenta¸ao de nls() fornece mais detalhes.10 q q q q 0. θR .0 4.20 0. n. o a a > with(cra30. H´ argumentos adicionais para controlar o comportamento c˜ a algor´ ıtimo. xlab = expression(log[10](Psi[m])). plot(u ~ pot. os dados nas colunas u e pot do objeto de dados correspondem a θ e ψm na ` equa¸ao 8.5 2.5 No gr´fico ` esquerda da Figura 30.35))) Portanto. ylim = c(0. tra¸ando-se curvas sobre o gr´fico dos dados. e e c˜ A escolha dos valores iniciais ´ crucial e pode influenciar nos resultados do ajuste utilizando e m´todos num´ricos.0 2. e e u Os valores iniciais para θS e θR foram escolhidos inspecionando-se o gr´fico e considerando a a interpreta¸˜o destes como valores de satura¸˜o e residual de umidade.5 3. e as demais quantidades (θR .35))) Uma melhor visualiza¸˜o ´ obtida utilizando-se no eixo horizontal o logar´ ca e ıtmo (base 10) dos valores das press˜es aplicadas conforme mostrado no gr´fico ` direita.30 0. xlab = expression(Psi[m]). isto ´.˜ 30 AJUSTE DE MODELOS NAO LINEARES 250 0. uma lista com nomes dos elementos. (iii) c˜ valores iniciais para os parˆmetros a serem ajustados que devem ser passados por uma named a list. O comando c a a seguir ilustra como fazer tal procedimento a partir do gr´fico dos dados originais mostrado a anteriormente definindo uma express˜o para curve() com o modelo de van Genutchen. 0.30 q q q q q q q q q q θ q q θ q q 0. > with(cra30.10 q q 0.

list(coef(fit30)).324121 0. plot(log10(pot). pch = "+". 2)) with(cra30.3)).017744 18.251 INTRODUCAO AO R ¸˜ > curve(0.ur)/((1 + (alpha * pot)^n)^(1 . lty = 2) Definidos os valores iniciais prossegue-se com o ajuste do modelo conforme os comandos a seguir. col = c(1.52 Residual standard error: 0. xlab = expression(log[10](Psi[m])). ylab = expression(theta(Umidade. pch = c(1. "ajustado"). c("observado".resid(fit30) . Neste particular exemplo calculamos uma quantidade de interesse pr´tico denotada por S que ´ um indicador a e da qualidade f´ ısica do solo. A c˜ c˜ a Figura 30.1/1.1))^(1/n . + to = 27000. fitted(fit30). col = "red")) legend(3. + n = 1.2))))) > S [1] 0. c("observado".01104 on 11 degrees of freedom Number of iterations to convergence: 8 Achieved convergence tolerance: 8. type = "b". points(log10(pot). points(log10(pot). g/g)))) with(cra30.1. + data = cra30. melhor a sua qualidade f´ ısica. col = c(1. col = "red")) legend(3.026202 1.05. 0.ur) * (((2 * n + 1)/(n .007082 0. pch = 3. xlab = expression(log[10](Psi)). 3). ur = 0.1 * x)^1.211815 0.3. > fit30 = nls(u ~ ur + (us .038780 0. u. Gr´ficos de res´ a a ıduos semelhantes aos obtidos para avaliar ajuste de modelos lineares podem e devem tamb´m ser investivados em uma an´lise. u. "ajustado"). > + > > + > + > + > + > with(cra30.3)^(1 .27 ur 0.1/n)).05)/((1 + (0. plot(log10(pot). 3). from = 0.913e-06 A partir do modelo ajustado pode-se calcular quantidades de interesse. alpha = 0.35.05 + (0. 0. g/g)))) with(cra30. pch = c(1. fitted(fit30).10 alpha 0.071085 0.3)) > summary(fit30) Formula: u ~ ur + (us .105207 11. ylab = expression(theta(Umidade.1/n)) Parameters: Estimate Std.04097124 Os valores preditos s˜o obtidos de forma direta com fitted(fit30) ou predict(fit30). start = list(us = 0. a Para visualiza¸ao e avalia¸ao do modelo ajustado podemos fazer diferentes gr´ficos. add = T.0. Neste exemplo mostramos o e a qq-plot dos res´ ıduos e o gr´fico dos res´ a ıduos versus valores preditos.ur)/((1 + (alpha * pot)^n)^(1 . > S = with(as. 2)) rs <. Quanto maior o valor de S.3. abs((-n * (us .48 n 1.1 mostra os pontos ajustados no gr´fico da esquerda. Error t value us 0.35 . e a uni˜o destes pontos no a a gr´fico da direita.

na escala original.5 4.00 0. "valores ajustados"). list(pot = pp))) > legend("topright".0 1.10 0. g g) 0. c("valores iniciais".25 +q + + q + q + q + q q q q q + q 0.5 3.02 q q q q q q q q q q 0. lty = 2:1) .15 0.30 + q + q + q + q q q q observado ajustado observado ajustado θ(Umidade.20 0.01 q q q q q q q q resid(fit30) 0. g g) 0. resid(fit30)) abline(h = 0. col = "navy") Para obter uma melhor visualiza¸ao do modelo ajustado pode-se obter valores na curva c˜ ajustada n˜o apenas nos pontos observados.5 3. predict(fit30.10 ++ q q q + q 1.00 q −0.0 4. A Figura 30. A curva com o modelo ajustado a serem desenhadas sobre o gr´fico dos a a dados s˜o obtidas com comandos a seguir. l = 201) > lines(pp.0 1.10^seq(1.0 log10(Ψm) 3.20 0.5.20 fitted(fit30) 0.01 q 0.0 2.01 q q q q −0.02 Sample Quantiles 0.0 4.5 4.5 2.0 2.15 0.25 0.30 > > > > qqnorm(rs) qqline(rs) plot(fitted(fit30).15 0. 4. o modelo ajustado na escala original Note que neste exemplo em geral prefere-se a visualiza¸ao na escala logar´ c˜ ıtmica do potencial conforme gr´fico da direita. a > pp <.0 log10(Ψ) 3.01 q q q q −1 0 Theoretical Quantiles 1 0.25 θ(Umidade.10 0. mas em uma sequˆncia de valores ao longo do a e gr´fico como ilustrado a seguir.˜ 30 AJUSTE DE MODELOS NAO LINEARES 252 0.5 Normal Q−Q Plot q q 0.30 q q q q q q q q q q q 0.5 2.5 1.1 mostra a direita o modelo definido pelos valores a ` iniciais e o modelo ajustado.

20 0. A seguir utilizamos a fun¸ao by() para proceder o ajuste para a c˜ cada amostra individualmente. Nesta sess˜o o ajuste ´ feito para cada amostra individa c˜ a e ualmente automatizando v´rias chamadas a fun¸˜o nls() atrav´s de lapply() emulando o a ` ca e comportamento das v´rias chamadas em um loop.0 2.30 valores iniciais valores ajustados q q q q q q q q q q θ q q θ q q 0. start = ini) .00 0 5000 10000 Ψm 20000 0. sem a necesidade e repetir os passos acima a cada a ajuste.3. Isto reduz a escala dos valores das vari´veis e a a tamb´m torna o problema mais est´vel numericamente. e a > fit.3)) nlsfit = nls(u ~ ur + (us .0 4. mas o procedimento demostrado a seguir ´ geral e funcionar´ igualmente para um maior n´mero de amostras. data = x. Na pr´xima sess˜o ser´ mostrado como a o a a obter os todos os ajustes com uma unica chamada a nls().function(x.2 Ajustando modelo a v´rios conjuntos de dados a Vamos considerar uma situa¸ao comum na pr´tica onde em geral tem-se v´rias amostras para c˜ a a ´ portanto conveniente as quais deseja-se fazer ajuste individuais como ilustrado anteriormente E que isto seja feito de forma autom´tica.5 4.vG <. c˜ a a Come¸amos definindo uma fun¸ao que cont´m uma chamada a nls() como acima.10 q q 0. Esta fun¸˜o retorna uma lista com dois elementos. Neste c c˜ e ` fun¸˜o estamos incluindo um argumento ini para passar valores iniciais que caso n˜o fornecido ca a assumir´ os valores indicados. Para isto ´ necess´rio a ca e e a redefinir a especicifa¸ao do modelo e utilizar o argumento method="plinear" em nls().0 1. + n = 1. ur = 0.5 Coment´rios: ´ importante lembrar que certos modelos n˜o lineares s˜o parcialmente lina e a a eariz´veis e neste caso o ajuste pode ser mais preciso e numericamente est´vel se beneficiando a a disto para reduzir a dimens˜o do problema de otimiza¸˜o num´rica. um para ca cada amostra. Finalmente cuidados usuais c˜ ca a com ajuste de modelos utilizando m´todos iterativos devem ser observados. e a u Ser˜o mostradas duas solu¸oes. alpha = 0. Por outro lado.30 0.253 INTRODUCAO AO R ¸˜ 0. ini = list(us = 0.0 log10(Ψm) 3.00 1. Neste c˜ exemplo em particilar pode-se considerar fazer o ajuste na escala de log10 (Ψm ) j´ que os resula tados s˜o tipicamente visualizados desta forma.02. sendo que cada um deles cont´m o ajuste do modelo n˜o linear. Neste exemplo vamos considerar duas amostras.10 q q q q 0. em geral reparametrizae a ¸oes podem mudar a interpreta¸˜o de alguns parˆmetros de modelo. tais como sensibile idade a valores iniciais e verifica¸ao de convergˆncia do algor´ c˜ e ıtmo num´rico. e 30.5 2.20 q q q q q q q q q q 0. Ilustramos ambos casos porque a ´ ` forma mais adequada vai depender de situa¸ao em quest˜o e dos objetivos da an´lise.ur)/(1 + (alpha * pot)^n)^(1 + 1/n).05.5 3.

038779921 1.324120 0.026202 1. j´ que ca a para cada uma das duas amostras s˜o extraidos quatro coeficientes.079473 14.009 Residual standard error: 0.171615 -0.122402 0.10 alpha 0.071084 0. cra$am.113320 0.211816 0.ur)/(1 + (alpha * pot)^n)^(1 .609 n 1.1/n) Parameters: Estimate Std. Error t value us 0.211815924 $`41` us ur 0.007082 0.48 n 1.006207 on 9 degrees of freedom Number of iterations to convergence: 7 Achieved convergence tolerance: 8. Por exemplo. sapply() ou similares para extrair resultados de interesse. a > lapply(allfits. quando extraindo coeficientes a fun¸˜o retorna uma matrix 4 × 2.007082084 0.01104 on 11 degrees of freedom Number of iterations to convergence: 6 Achieved convergence tolerance: 7.1/n) Parameters: Estimate Std.009446 25.038780 0. enquanto que a segunda ”simplifica”o objeto resultante se poss´ ıvel. fit.741 ur -0.24314784 -0.035928 0.ur)/(1 + (alpha * pot)^n)^(1 .03592829 n 1.105207 11.vG) > names(allfits) [1] "30" "41" Neste caso.243148 0.765e-06 > lapply(allfits. Note que co a primeira retorna sempre uma lista. o objeto resultante allfits ´ uma lista de listas e portanto podemos usar e fun¸˜es como lapply().52 Residual standard error: 0.˜ 30 AJUSTE DE MODELOS NAO LINEARES 254 > allfits <.by(cra.27 ur 0.12240207 alpha 0.11332039 .017744 18.619e-06 $`41` Formula: u ~ ur + (us . coef) $`30` us ur alpha n 0.713 alpha 0.022324 1.324120339 0. Error t value us 0. summary) $`30` Formula: u ~ ur + (us .

lpsimax.24314784 -0.list(coef(fit)).10^seq(1.2))))) > Sall <. vamos mostrar uma poss´ forma de combinar ıvel a visualiza¸ao dos ajustes em em um unico gr´fico.255 INTRODUCAO AO R ¸˜ > sapply(allfits. Neste caso interpreta-se que cada a a amostra informa sobre os respectivos valores para (θS . predict. θR ) enquanto que todas as amostrs . 30 us 0. g/g)))) with(cra. isto ´ em uma unica chamada a o e ´ a nls() que portanto vai utilizar todos os dados de todas as amostras. Para isto simplesmente definimos uma fun¸ao que c˜ recebe o modelo ajustado e usa os coeficiente para calcular o valor de S. Isto pode ser adequado quando deseja-se de fato ajustes individuais ` c˜ e se.function(fit) with(as.038779921 n 1. . list(pot = pp)) with(cra. e Nesta sess˜o vamos considerar fazer todos os ajustes de s´ vez.02950320 Finalmente. max(log(pot))) pp <.03592829 1. por um lado s˜o efetuadas v´rias chamadas ` fun¸˜o.sapply(allfits. por outro o n´mero de dados em a a a ca u cada uma delas ´ pequeno. Passamos o objeto (lista) contendo todos os ajustes e a fun¸˜o que calcula S para sapply() que neste caso vai ca simplificar o resultado para formato de um vetor.04097126 0. ylab = expression(theta(Umidade. para encerrar este exemplo. calculaS) > Sall 30 41 0. as.1)/(n .character(am))) lapply(allpred. text(log10(pot).12240207 0. e e a talvez mais eficiente que a mostrada anteriormente ´ discutida a seguir.3 Combinando ajustes Na sess˜o anterior obtivemos o ajusta para cada amostra separadamente fazendo v´rias a a chamadas a fun¸ao nls(). j´ que a fun¸ao calculaS retorna um escalar a c˜ para cada amostra. a > > > > + > > lpsimax <.211815924 coef) 41 0. > calculaS <. plot(log10(pot). isto pode ser interessante pois permite comparar e testar hip´teses para escolha o 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ˆmetros (α. Vamos ent˜o aqui obter a este ´ ındice para cada uma das amostra. Al´m do aspecto ` e computacional.1))^(1/n . u. function(yp) lines(log10(pp). Uma forma alternativa de obter parˆmetros para cada amostra. Come¸amos definindo uma sequˆncia de c˜ ´ a c e valores para os quais queremos visualizar os ajustes.with(cra. xlab = expression(log[10](Psi)). u. Armazenamos os valores preditos para cada amostra no objeto allpred e optamos aqui por mostrar os ajustes para as duas amostras no mesmo gr´fico.324120339 ur 0. n) s˜o comuns entre as amostras.007082084 alpha 0. abs((-n * (us + ur) * (((2 * n . l = 501) allpred <.lapply(allfits. yp)) 30. type = "n".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.

0.609e-06 Para ajuste assumindo valores comuns para os parˆmetros α e n n˜o utilizamos o indicados a a de grupos para estes parˆmetros e informamos apenas um valor inicial para cada um deles.113320 residual sum-of-squares: 0.038780 0. 0.5 3.25 41 41 41 conjuntamente informam sobre (α.122402 0.1/n[am]).5 4.04).3.0 log10(Ψ) 3. Ap´s ajustar os modelos ”candidatos”podemos fazer o uma compara¸ao formal dos ajustes atravez de anova(). ur = c(0.20 1 .ur[am]) * (1/(1 + (alpha * pot)^n))^(1 + 1/n). cra.324120 0.nls(u ~ ur[am] + (us[am] .3). + ur = c(0.25))) > mod0 Nonlinear regression model model: u ~ ur[am] + (us[am] .035928 1. 0). a > mod1 <. Os dois ajustes s˜o mostrados a seguir a a o seletor [] ´ usado para indicar que os dados s˜o tratados em grupos definidos por am.25.007085 -0.˜ 30 AJUSTE DE MODELOS NAO LINEARES 256 0. 1.3). n = c(1.25)) > mod1 0. No caso e a do modelo com parˆmetros distintos informamos oito valores iniciais para os parˆmetros.001688 Number of iterations to convergence: 6 Achieved convergence tolerance: 4. + n = 1. cra. o que n˜o seria poss´ ajustando os c˜ a ıvel modelos separadamente como mostrado sess˜o anterior. alpha = 0. g g) 0. alpha = c(0.nls(u ~ ur[am] + (us[am] . 0.10 θ(Umidade.04.ur[am]) * (1/(1 + (alpha[am] * + pot)^n[am]))^(1 . 0). start = list(us = c(0.5 2.211819 1.0 4.0 2.04.3.15 0.0 1.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.5 0. n).ur[am]) * (1/(1 + (alpha[am] * pot)^n[am]))^(1 data: cra us1 us2 ur1 ur2 alpha1 alpha2 n1 n2 0. start = list(us = c(0.243148 0. a a > mod0 <.

Df Res.257 INTRODUCAO AO R ¸˜ Nonlinear model: data: us1 0.1/n) (1/(1 + (alpha[am] * pot)^n[am]))^(1 .Sum Sq Df Sum Sq F value 1 22 0. o > anova(mod1.ur[am]) * (1/(1 + (alpha * pot)^n))^(1 cra us2 ur1 ur2 alpha n 0. que a neste caso indica que o modelo mais parcimonioso com parˆmetros comuns explica os dados a satisfat´riamente.24870 -0.02759 0.935 (1/(1 + (alpha * pot)^n))^(1 .0016884 2 0.17195 sum-of-squares: 0. mod0) Analysis of Variance Table Model 1: u ~ ur[am] + (us[am] .ur[am]) * Model 2: u ~ ur[am] + (us[am] .401e-06 Neste exemplo temos ent˜o um modelo inicial com oito e outro mais parcimonioso com a apenas seis parˆmetros e utilizamos um teste formal para orientar a escolha de modelo.03056 -0.03994 1.00015786 0.32106 residual regression model u ~ ur[am] + (us[am] .4091 .0018462 2 20 0.001846 1/n) Number of iterations to convergence: 5 Achieved convergence tolerance: 2.ur[am]) * Res.1/n[am] Pr(>F) 0.

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

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

a e . 81 ) q 5 ( 23 . 76 ) q 2 ( 30 . 63 ) q cy 3 4 ( 26 . 80 ) q 0 0 1 1 2 3 cx 4 5 6 7 Figura 78: Exemplo hipot´tico com dois atributos medidos em cinco localiza¸˜es identificadas e co por pares de coordenadas.31 CLASSES PARA DADOS ESPACIAIS: O PACOTE SP 260 7 ( 25 . 59 ) q 6 ( 18 . Os valores dos atributos s˜o indicados dentro dos parˆntesis.

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

SpatialPointsDataFrame(coords = cord. 7))) > all. 0) differ >" > slot(SPDF. SPDF1) [1] "Attributes: < Component 4: Numeric: lengths (2.nrs") numeric(0) Os demais atributos/slots do objeto s˜o definidos automaticamente mas podem ser modifia cados. permitindo portanto.nrs. proj4string = CRS(as. 1. max = c(7. bbox = cbind(min = c(0. data. 5. Vamos agora examinar com mais detalhe toda a concep¸ao de classes c˜ definida no sp que tem uma estrutura hier´quica. come¸ando por classes e construtores de a c . + 0). "coords. desde que identificadas pelo mesmo nome da linha.character(NA)). No exemplo a seguir alteramos a ordem dos elementos do data-frame de atributos para ilustrar o pareamento. que para esta ultima registra as colunas do data-frame ´ original que foram indicadas como coordenadas.31 CLASSES PARA DADOS ESPACIAIS: O PACOTE SP 262 Uma outra forma de criar um objeto que represente dados com geometria dada por pontos esparsos ´ usar a fun¸ao SpatialPointsDataFrame() que recebe coordenadas e atributos sepae c˜ radamente em dois argumentos obrigat´rios. 0). > args(SpatialPointsDataFrame) function (coords. exceto c˜ a por match. SPDF2) [1] TRUE At´ aqui vimos que coordinates() e SpatialPointsDataFrame() criam diretamente obe jetos da referida classe. "coords. O resultado apenas difere do retornado pela fun¸ao o c˜ coordinates() no slot coords. match. coordenadas e atributos em ordens diferentes. bbox = NULL) NULL > DF1 <. data = DF. max = c(7.ID que permite que os dois objetos sejam pareados pelos nomes das suas linhas (rownames).equal(SPDF.nrs = numeric(0).SpatialPointsDataFrame(coords = cord. coords. data = DF) > all.nrs") [1] 1 2 > slot(SPDF1.] 0 7 [2. "bbox") <.cbind(min = c(0. > slot(SPDF1. > SPDF1 <.] 0 7 A fun¸ao possui ainda outros argumentos opcionais j´ comentados anteriormente.ID = TRUE. ] > DF1 var1 var2 3 18 81 1 23 63 5 30 80 2 26 76 4 25 59 > SPDF2 <. 2.equal(SPDF1.DF[c(3. 7)) > bbox(SPDF1) min max [1. 4).

cbind(min = c(0. O retˆngulo envolvente pode ser calculado c˜ a a partir das coordenadas dos dados (como feito automaticamente pelas fun¸oes j´ vistas).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. a ca ca Este objeto ent˜o simplesmente define em que regi˜o estar˜o os dados e por qual sistema de a a a coordenadas estar˜o referenciados. ou c˜ a definido arbitrariamente pelo usu´rio. 2. proj4string = CRS(projargs = as. o tipo de geometria dos dados. Estas subclasses definem. 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.Spatial(bbox = bb. "max") > S <. A fun¸ao ainda verifica se os valores passados em a ca c˜ bbox s˜o compat´ a ıveis com a proje¸˜o informada. Na c˜ sa´ desta fun¸ao fica claro que a classe SpatialPoints herda os atributos de Spatial. e nas colunas os valores m´ a ınimos e m´ximos a para cada uma.] 0 7 > proj4string(S) [1] NA A classe Spatial possui trˆs subclasses: e SpatialPoints. M´todos s˜o implementados para extrair os elementos do objeto. "bbox") <. Deve a conter nas linhas a dimens˜o das coordenadas. como os nomes sugerem. 7)) > bbox(S) min max [1. A classe mais geral ´ Spatial e um objeto desta classe tem apenas duas informa¸oes (slots): e c˜ o retˆngulo envolvente (bbox .263 INTRODUCAO AO R ¸˜ objetos mais gerais que se tornam mais detalhados a cada n´ e onde cada classe herda os ıvel atributos da classe superior mais geral. sendo que esta ultima pode ser um "NA" que em SIG’s a ´ corresponde a dados sem proje¸ao (null projection). A ıda c˜ . A string que informa sobre a proje¸ao deve ser definida usando a fun¸ao CRS() c˜ c˜ pois esta ir´ validar a defini¸˜o e sintaxe. Assim como no exemplo anterior vamos examinar os slots e tipos de objetos que estes recebem com a fun¸ao getSlots() aplicada ao nome da classe. retornando erro caso sejam incompat´ ca ıveis. max = c(7. e a > getSlots("Spatial") bbox proj4string "matrix" "CRS" > bb <. range)) > colnames(bb) <.] 0 7 [2.c("min". 0).t(apply(cord. SpatialLines e SpatialPolygons. podendo ainda ser alterado depois de definido.bounding box ) e a informa¸˜o do tipo de proje¸˜o (proj4string).

que por default ´ pareada com e as coordenadas pelos nomes das linhas (rownames).] 0 7 Is projected: NA proj4string : [NA] Number of points: 5 > ind <. entre outros.31 CLASSES PARA DADOS ESPACIAIS: O PACOTE SP 264 fun¸˜o construtora tem coords como argumento obrigat´rio e as herdadas da classe Spatial. J´ vimos acima como um objeto c˜ a desta classe ´ criado mas note-se que ele poderia ser criado ainda a partir de um objeto e SpatialPoints com a simples adi¸˜o do data-frame dos atributos.1:nrow(cord) > SP <. ıvel ca > getSlots("SpatialPoints") coords bbox proj4string "matrix" "matrix" "CRS" > args(SpatialPoints) function (coords. dai porque na cria¸˜o do objeto ca SpatialPoints asseguramos a defini¸ao dos nomes de linhas. 2] < 3 > SP[ind.SpatialPoints(coords = cord) > SP <. 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. E a ıvel poss´ fazer sele¸˜o de elementos.] 0 7 [2.SpatialPoints(coords = cord.character(NA)). bbox = NULL) NULL > row. ] SpatialPoints: cx cy 2 3 2 5 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. ca o ´ ainda importante notar que v´rios m´todos usuais j´ bbox e proj4string como opcionais. proj4string = CRS(as. Os estratores. plot(). a > getSlots("SpatialPointsDataFrame") . E a e a ´ ainda s˜o definidos para este n´ de classes tais como summary(). m´todos e ca e seletores continuam v´lidos.coordinates(SP)[.names(cord) <.

by class "SpatialPoints". bem como quais as subclasses definidas para esta classe em v´rios n´ a ıveis.0 Mean :24.nrs coords bbox proj4string "data.265 INTRODUCAO AO R ¸˜ data coords. > summary(SPDF3) Object of class SpatialPointsDataFrame Coordinates: min max [1.0 3rd Qu.:63. SPDF3) [1] "Attributes: < Component 3: Attributes: < Component 2: Component 1: target is NULL.frame" "numeric" "matrix" "matrix" "CRS" > SPDF3 <.0 Min.8 3rd Qu. 1) 30 80 Neste ponto podemos revisar a estrutura das classes verificando a sa´ de getClass() ıda que informa os slots de cada classe ou subclasse. :81. qual(is) a(s) class(es) por ela extendida – se alguma. directly "SpatialLines". DF) > all.0 1st Qu. :59.0 Max.4 Mean :71. distance 2 .] 0 7 Is projected: NA proj4string : [NA] Number of points: 5 Data attributes: var1 var2 Min. > getClass("Spatial") Class "Spatial" [package "sp"] Slots: Name: Class: Known Class Class Class Class Class bbox proj4string matrix CRS Subclasses: "SpatialPoints".:23.0 Median :76. :30.:26.0 Median :25.equal(SPDF1.:80.0 1st Qu.SpatialPointsDataFrame(SP.] 0 7 > SPDF3[ind.] 0 7 [2. by class "SpatialPoints". distance 2 "SpatialPixels". ] coordinates var1 var2 2 (3.] 0 7 [2. directly "SpatialPointsDataFrame". directly "SpatialPolygons".0 > bbox(SPDF3) min max [1.0 Max. :18. 2) 26 76 5 (5.

directly Class "Spatial". tais como modelos de eleva¸ao digital. directly Class "SpatialPixels". Todo o conjunto de pontos fica definido a partir de co apenas algums informa¸oes b´sicas como origem e espa¸amento. by class "SpatialPolygons". entre outras. by class "SpatialPixels". distance 2 Class "SpatialGridDataFrame". distance 2 Class "SpatialPixelsDataFrame". by class "SpatialPoints". o que permite que os pontos c˜ a c de toda a malha sejam tratados de uma s´ vez ao inv´s de cada ponto individualmente. 1 × 0. malhas de a c˜ e interpola¸ao de pontos. with explicit coerce 31. distance 2 Class "SpatialGrid". As informa¸˜es necess´rias s˜o o centro da primeira c´lula da malha. a co a a e o tamanho e n´mero de c´lulas em cada dimens˜o.31 CLASSES PARA DADOS ESPACIAIS: O PACOTE SP 266 Class "SpatialLinesDataFrame". by class "SpatialPixels". Tais representa¸oes s˜o comuns em sensoriamento remoto c˜ c˜ a e representa¸˜es do tipo raster em SIG’s. Como exemplo vamos criar uma malha retangular com espa¸amento de 0.nrs numeric coords matrix bbox proj4string matrix CRS Extends: Class "SpatialPoints". o que ´ feito com GridTopology que define as c´lulas da malha de c˜ e e pontos. 2 sobre c a ´rea do exemplo anterior. imagens (por ex. by class "SpatialPoints". directly Class "SpatialGrid". distance 3 > getClass("SpatialPointsDataFrame") Class "SpatialPointsDataFrame" [package "sp"] Slots: Name: Class: data data. distance 3 Class "SpatialGridDataFrame". A combina¸ao da classe GridTopology com u e a c˜ . by class "SpatialLines".frame coords. distance 3 Class "SpatialPixelsDataFrame". directly. de sat´lite).2 Pontos em malha regular: grid e pixel SpatialGrid e SpatialPixels s˜o representa¸oes de pontos arranjados de forma regular a c˜ numa regi˜o. distance 2 Known Subclasses: Class "SpatialPixelsDataFrame". distance 4 Class "SpatialPolygonsDataFrame". by class "SpatialGrid". Estas o e classes extendem SpatialPoints de forma a registrar e utilizar as informa¸oes sobre o arranjo c˜ regular das localiza¸oes. by class "SpatialPoints". by class "SpatialPoints". distance 2 > getClass("SpatialPoints") Class "SpatialPoints" [package "sp"] Slots: Name: Class: coords matrix bbox proj4string matrix CRS Extends: "Spatial" Known Subclasses: Class "SpatialPointsDataFrame".

SpatialGrid(GT) > getClass("SpatialGrid") Class "SpatialGrid" [package "sp"] Slots: Name: grid Class: GridTopology grid. add = T) Neste exemplo definimos a malha a partir da dimens˜o da ´rea. 0. > getClass("SpatialGridDataFrame") Class "SpatialGridDataFrame" [package "sp"] Slots: Name: Class: Extends: data grid data. cellsize = espac. Entretanto.c(0.05 0. pch = 19) > plot(SG.] 0 7 [2.2 mostra a sobreposi¸ao c˜ das localiza¸˜es dos dados originais e a malha de pontos que cobre a area no espa¸amento co ´ c especificado.index integer coords matrix bbox matrix proj4string CRS .ceiling(diff(t(bbox(SPDF3)))/espac) > GT <.2) > centro1 <. + cells. 1] + espac/2 > centro1 [1] 0. A extens˜o natural ´ dada pela classe SpatialGridDataFrame que associa a malha um a e ` data-frame com atributos associados a cada um dos pontos.1. by class "SpatialPixels".index integer coords matrix bbox matrix proj4string CRS Extends: Class "SpatialPixels".dim = nums) > SG <.offset = centro1. directly Class "SpatialPoints".] 0 7 > espac <. by class "SpatialPixels". distance 2 Class "Spatial". podendo a malha ser criada de outras formas e/ou importada de algum outro o objeto ou formato e neste caso o retˆngulo envolvente (bounding box ) ´ criado automaticamente. distance 3 Known Subclasses: "SpatialGridDataFrame" > plot(SPDF3.4. a e Note ainda que no exemplo continuamos usando o dado sem proje¸ao ou qualquer tipo de c˜ sistema de coordenadas. A Figura 31.267 INTRODUCAO AO R ¸˜ os elementos de Spatial gera a subclasse SpatialGrid.GridTopology(cellcentre. > bbox(SPDF3) min max [1.bbox(SPDF3)[.frame GridTopology grid. cex = 0. isto n˜o ´ a a a e compuls´rio.10 > nums <.

assim como em SpatialPoints. distance 2 "SpatialPoints".31 CLASSES PARA DADOS ESPACIAIS: O PACOTE SP 268 q q q q q Class Class Class Class "SpatialGrid". sendo que outras representa¸oes poss´ c˜ ıveis existem em . como definida em e ca e SpatialGrid. respectivamente. directly "SpatialPixels". Al´m disto.3 Classe para linhas e pol´ ıgonos Vimos at´ aqui que a subclasse SpatialPoints e as subclasses derivadas dela extene dem a classe Spatial para acomodar coordenadas de uma geometria de pontos. Como os grids tipicamente tem alta resolu¸ao. ou ainda a area de estudo ıcie ´ ´ pode ser bem recortada. isto faz com e a c˜ que um grande volume de mem´ria seja utilizado sem necessidade. distance 3 "Spatial". distance 4 O formato de grid (raster) apresenta algumas limita¸oes em certas circunstˆncias. by class "SpatialGrid". Por c˜ a exemplo se a area tem muitos recortes e/ou v´rias c´lulas n˜o possuem atributos. em um modelo de eleva¸˜o digital ca de terreno poderiam haver pontos abaixo da superf´ da agua. As outras geometrias espaciais s˜o linhas e pol´gonos que s˜o tratadas pelas classes SpatialLines e a ı a SpatialPolygons. by class "SpatialGrid". Por exemplo. A representa¸ao destas geometrias no sp ´ feita atrav´s c˜ e e de uma conjunto sequencial de pontos. em certas o e situa¸oes pode-se desejar exportar dados para aplicativos externos em forma de coordenadas de c˜ pontos. por´m guardando co e tamb´m a informa¸˜o de o que se tem ´ um subconjunto de uma malha. Nestes casos pode-se usar a representa¸˜o alternativa de SpatialPixels que guarda ca informa¸˜es apenas dos pontos de interesse. by class "SpatialGrid". 31. levando a um formato bastante irregular com muitas partes dentro de bbox por´m fora da ´rea. os valores ´ a e a correspondentes devem ser indicados como NA.

ambas subclasses s˜o extendidas pela adi¸ao de atributos em a c˜ subsubclasses SpatialLinesDataFrame e SpatialPolygonsDataFrame. Pontos s˜o definidos simplesmente por um par de coordenadas.6-36 (built on 2011-05-20) is now loaded ------------------------------------------------------------> data(ca20) > areas <. a enquanto que linhas e pol´ ıgonos s˜o definidos por um conjunto de pontos com uma certa estrua tura. sendo o pol´ a ıgono representado por uma linha fechada. c˜ A seguir vamos utilizar um exemplo envolvendo trˆs pol´ e ıgonos dispon´ ıveis em um conjunto de dados do pacote geoR.ufpr. ou seja. "reg3")] > areas $reg1 east north 1 5590 5690 2 5340 5800 .269 INTRODUCAO AO R ¸˜ ambientes de SIG.ca20[c("reg1". > getClass("SpatialLines") Class "SpatialLines" [package "sp"] Slots: Name: Class: lines list bbox proj4string matrix CRS Extends: "Spatial" Known Subclasses: "SpatialLinesDataFrame" > getClass("SpatialPolygons") Class "SpatialPolygons" [package "sp"] Slots: Name: Class: polygons list plotOrder integer bbox proj4string matrix CRS Extends: "Spatial" Known Subclasses: "SpatialPolygonsDataFrame" Assim como um objeto em SpatialPoints ´ definido por um conjunto de pontos. ´ a Assim como em SpatialPoints. "reg2". Desta forma. Estas duas geometrias s˜o semelhantes em sua forma. analogae mente em SpatialLines ´ definido por um conjunto de linhas e em SpatialPolygons ´ definido e e por um conjunto de pol´ ıgonos.br/geoR geoR version 1. uma linha onde o primeiro e ultimo pontos s˜o iguais. Para nos concentrar apenas nos pol´ ıgonos vamos extra´ ı-los do objeto de dados original e armazen´-los em uma lista onde cada elemento ´ uma matriz.leg. criaram-se as fun¸oes Line e Polygon para se especificar estes elementos. a e > require(geoR) ------------------------------------------------------------Analysis of geostatistical data For an Introduction to geoR go to http://www.

a c˜ e > getClass("Polygon") Class "Polygon" [package "sp"] Slots: Name: labpt area hole ringDir Class: numeric numeric logical integer Extends: "Line" > Polygon(areas$reg1) An object of class "Polygon" Slot "labpt": [1] 5364. se a coordenada do ultimo ponto coincide com a do primeiro. o primeiro passo ´ transformar cada matriz que define e um pol´ ıgono em um objeto da classe Polygon. a sua ´rea.879 5596.31 CLASSES PARA DADOS ESPACIAIS: O PACOTE SP 270 3 4 5 6 7 8 5220 5250 5350 5450 5510 5590 5700 5370 5370 5500 5600 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 Para construir um SpatialPolygon.530 coords matrix . A estrutura de um ´ objeto da classe Polygon inclui ainda o r´tulo atribu´ ao pol´ o ıdo ıgono (labpt) que ´ dado pelo e seu centroide. a por exemplo. que verifica se o pol´ ıgono est´ bem definido. e informa¸oes sobre se ele ´ interno ou externo (hole e ringDir).

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

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

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

so') > matern(0.1.l=11). 1) .1.´ 32 INTERFACE COM CODIGOS COMPILADOS 274 > dyn. 1) > matern(seq(0.load('teste.

H´ ainda outras fun¸oes que podem a c˜ redirecionar as sa´ ıdas em outros formatos. Por exemplo. Depois de digitarmos este comando os resultados deixam de ser mostrado na tela sendo enviados para o arquivo. a ˆ postscript() . ˆ 33. ou somente os resultados dos comandos. respectivamente. um arquivo.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. por exemplo. cujos conte´dos podem ser redirecionados pelo usu´rio para outro local a u a (dispositivo) como.275 INTRODUCAO AO R ¸˜ 33 (Re)-direcionando sa´ ıdas texto e gr´ficas a Por ”default”o R em uma sess˜o interativa produz sa´ a ıdas texto na janela do programa e sa´ ıdas gr´ficas um uma janela gr´fica. ˆ ˆ A xtable() do pacote (xtable) prepara tabelas em L TEX HTML() do pacote (R2HTML) e diversas outras fun¸˜es deste pacote preparam sa´ co ıdas em html A latex() e html() do pacote Hmisc preparam. e o conte´do volta a ser mostrado na tela. Portanto. c˜ u > sink() A fun¸ao recebe tem ainda outros argumentos que podem controlar o envio de conte´do para c˜ u o arquivo. 33. os fun¸˜o listadas a seguir redireu ca cionam para os respectivos formatos gr´ficos.off() Da mesma forma que sink() redireciona conte´do texto. ela tamb´m pode a ca a e e ser aberta em branco quando o usu´rio chama a fun¸˜o de parˆmetros gr´ficos par() ou por a ca a a um dos seguintes comandos: ˆ ˆ ˆ x11() no LINUX/UNIX windows() no Windows quartz() no Macintosh Para fechar a janela gr´fica usamos: a > dev. Para mais detalhes veja args(sink) e help(sink).2 Gr´ficos a Abrindo e redirecionando janelas gr´ficas A janela gr´fica ´ tipicamente aberta quando a a e o usu´rio chama alguma fun¸˜o que produza um gr´fico. Alguns (mas n˜o todos!) exemplo s˜o citados a a a seguir. o argumento echo recebe os valores TRUE ou FALSE indicando se os comandos devem ser inclu´ ıdos no arquivo. Al´m desta forma. Para encerrar o envio de conte´do para o arquivo basta chamar u a fun¸ao sem argumento algum. sa´ ıdas em LTEXe html. Outras ferramentas para redirecionamento de conte´ do texto A fun¸˜o sink() rediu ca reciona as sa´ ıdas para um arquivo em formato texto. a tela texto e a janela gr´ficas devem ser entendidas a a a como sa´ ıdas padr˜o.

.prev() torna ativo o dispositivo gr´fico anterior a dev. rate=5)) > dev..jpg que chamamos de exemplohist.jpg") > hist(rexp(150.. ´ obrigat´rio o uso de dev.set(which=k) torna ativo o k-´simo dispositivo gr´fico e a dev.copy(jpeg.off() Duas observa¸oes importantes: c˜ 1. u a graphics. o a Os comandos a seguir exemplificam o uso de uma destas fun¸oes para gerar um arquivo do tipo c˜ .off() .list() lista os dispositivos gr´ficos a dev. a maioria dos dispositivos gera apenas 1 (um) gr´fico por arquivo sendo necess´rio pora a tanto gerar um arquivo para cada gr´fico desejado.jpeg") > dev. Para abri-los basta usar as fun¸˜es mencionadas a u co acima (por ex. which=k) cionam o conte´do do dispositivo gr´fico ativo para impressora ou arquivo. which=k) e dev.print(device.´ 33 (RE)-DIRECIONANDO SA´ IDAS TEXTO E GRAFICAS 276 ˆ ˆ ˆ pdf() png() jpeg() Existem ainda outros dispositivos que podem ser espec´ ıficos de uma detarminada plataforma (sistema operacional) Cada uma desta fun¸˜es recebe argumentos espec´ co ıficos. . . suponha que voce esteja com uma janela gr´fica aberta e queira enviar o a gr´fico que est´ sendo mostrado na tela (na janela ativa) para um arquivo meugrafico. a ´ M´ ltiplas janelas gr´ficas E poss´ abrir v´rioa janelas gr´ficas ao mesmo tempo. x11() no LINUX) Neste caso uma das janelas ser´ a ”ativa”onde novos gr´ficos a a ser˜o produzidos e as demais ficam ”inativas”.jpeg.jpg contendo um histograma de um conjunto de dados.off() ao final para ”fechar”o arquivo e o 2.off() fecha todos os dispositivos gr´ficos que est˜o abertos a a redire- ˆ Por exemplo.next() torna ativo o pr´ximo dispositivo gr´fico o a dev. u a ıvel a a dispositivos (”devices”) gr´ficos m´ltiplos. ou seja.copy(device.... > jpeg("exemplohist. mas todas elas recebem um argumento obrigat´rio. file="meugrafico. a a Para isto pode usar os comandos: > dev. o nome do arquivo para onde o gr´fico deve ser enviado. H´ fun¸˜es para controlar o comportamento a a co destas janelas ˆ ˆ ˆ ˆ ˆ dev.

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

No o e o Windows ´ um diret´rio onde o R foi instalado.utf8 LC_MESSAGES=pt_BR. Por exemplo.utf8 [7] LC_PAPER=pt_BR. no LINUX ´ o diret´rio de onde o R foi iniciado. e o Nos comandos a seguir mostramos como verificar qual o diret´rio de trabalho sendo usado. verificamos qual o diret´rio onde o R foi instalado e ca o como mudar o diret´rio de trabalho. permiss˜es etc. As fun¸oes a seguir mostram como obter o caminho e nome do diret´rio c˜ o earquivo tempor´rios.utf8 LC_TIME=pt_BR. o > getwd() [1] "/home/paulojus/DEST/aulasR/Rnw" > wdir <.home() [1] "/usr/local/lib/R" > setwd(R.home()) > getwd() [1] "/usr/local/lib/R" > setwd("/home/paulojus") > getwd() [1] "/home/paulojus" O R automaticamente mant´m um diret´rio tempor´rio para uso em cada sess˜o e dentro e o a a deste um arquivo.utf8 LC_ADDRESS=C LC_IDENTIFICATION=C attached base packages: [1] tools stats graphics grDevices utils datasets methods base 34.utf8 [10] LC_TELEPHONE=C LC_NUMERIC=C LC_MONETARY=C LC_NAME=C LC_MEASUREMENT=pt_BR. AMBIENTE E O SISTEMA DE ARQUIVOS 278 > sessionInfo() R version 2.getwd() > wdir [1] "/home/paulojus/DEST/aulasR/Rnw" > R. o guardamos esta informa¸˜o num objeto. a > tempdir() [1] "/tmp/Rtmp2DNOZI" > tempfile() [1] "/tmp/Rtmp2DNOZI/file42f27b85" . A localiza¸ao ”default”desta area de trabalho depende do sistema a a c˜ ´ operacional.2 ´ Area de trabalho Ao iniciar o R ´ aberta ou iniciada uma ´rea de trabalho (”workspace”) onde os objetos desta e a sess˜o poder˜o ser gravados.utf8 [4] LC_COLLATE=pt_BR.0 Patched (2011-05-28 r56008) Platform: i686-pc-linux-gnu (32-bit) locale: [1] LC_CTYPE=pt_BR.13.34 R.

Por exemplo dir() a c˜ o vai listar o conte´do do diret´rio.279 INTRODUCAO AO R ¸˜ 34.rds" "doc/COPYING.".LIB" "doc/FAQ" "doc/KEYWORDS. recursive = FALSE.rds" "COPYRIGHTS" "KEYWORDS" "RESOURCES" > dir(path = "doc".info() o > getwd() [1] "/home/paulojus" > dir(". all. include.files = FALSE. Informa¸oes sobre u o a ca c˜ cada elemento do diret´rio podem ser obtidas com file.3 Manipula¸˜o de arquivos e diret´rios ca o H´ uma diversidade de fun¸oes para interagir com o diret´rios e arquivos.dirs = FALSE) NULL > file. full = TRUE) "doc/COPYING" "doc/CRAN_mirrors. e possui v´rios argumentos para sele¸˜o./") [1] "lost+found" "misc" > setwd(R.LIB" "html" "NEWS.db" "doc/RESOURCES" . ignore.home()) > dir() [1] "bin" [6] "lib" [11] "share" > args(dir) function (path = ".csv" "FAQ" "KEYWORDS.case = FALSE.pdf" "paulojus" > dir(pattern = "COPY") [1] "COPYING" > dir(path = "doc") [1] [5] [9] [13] [1] [4] [7] [10] [13] "AUTHORS" "COPYING" "CRAN_mirrors.names = FALSE.db" "manual" "THANKS" "doc/AUTHORS" "doc/COPYRIGHTS" "doc/html" "doc/manual" "doc/THANKS" "COPYING..info("bin")$isdir [1] TRUE > dir(path = "bin") [1] [6] [11] [16] [21] [26] "BATCH" "exec" "LINK" "Rcmd" "Rprof" "Stangle" "build" "f77_f2c" "mkinstalldirs" "Rd2dvi" "Rscript" "Sweave" "check" "INSTALL" "pager" "Rdconv" "rtags" "COMPILE" "javareconf" "pgfsweave" "Rdiff" "Sd2Rd" "config" "libtool" "R" "REMOVE" "SHLIB" "COPYING" "doc" "library" "modules" "SVN-REVISION" "etc" "NEWS" "include" "NEWS.info("bin") size isdir mode mtime ctime atime uid bin 4096 TRUE 755 2011-05-29 18:30:51 2011-05-29 18:30:51 2011-05-29 19:02:45 0 gid uname grname bin 0 root root > file. pattern = NULL. full.csv" "doc/KEYWORDS" "doc/NEWS.

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

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

acelerando muito o processo c a a de edi¸˜o de textos. c˜ a ˆ A p´gina oficial do Sweave cont´m o manual. rodar a fun¸˜o Sweave() no seu documento com um comando do tipo: ca Sweave(”foo. Outro exemplo ainda ´ este material sobre o R que foi todo originalmente editado em e formato Sweave. Iniciar o R 3. c˜ .1 Usando o Sweave O que ´ e por que adotar o Sweave e O Sweave ´ uma funcionalidade do R implementada por algumas fun¸oes do pacote utils (no e c˜ pacote tools em vers˜es mais antigas do R) que permite a edi¸˜o ´gil de documentos combinando o ca a A Xe o R.Rnw 2. c˜ a 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´digo das an´lises ı o a seja disponibilizado junto e inegrado ao texto. identifique e corrija o erro e processe o novamente com Sweave(). a fun¸ao Sweave() ir´ imprimir uma mensagem na tela como a c˜ a seguir dizendo que o documento foo. sem a necessidade de fazer tal inclus˜o manualmente e passo a a passo.2 Usando o Sweave Os passos b´sicos para uso do Sweave s˜o: a a 1. No Windows a instala¸ao do MiKTeX deve prover as ferramentas necess´rias. Editar o arquivo .35 USANDO O SWEAVE 282 35 35. ca Uma outra vantagem relevante ´ a de que todo c´digo usado para an´lise fica no arquivo e o a texto (fonte) preservando a mem´ria dos procedimentos usados e possibilitando a reprodu¸˜o o ca ou modifica¸ao da an´lises facilmente e a qualquer tempo. relat´rios de an´lises. Leia a mensagem. listas de exerc´ o ıcios. textos t´cnicos. 35. sa´ a ıdas computacionais e/ou gr´ficos inclu´ a ıdos automaticamente no texto. 35. artigos cient´ e o a ıfico e livros. FAQ (”Frequantly asked a e questions”) e informa¸oes adicionais.tex' Caso outra mensagem que n˜o esta apare¸a na tela algum problema deve ter ocorrido com a c o c´digo R em seu documento. A 4. As possibilidades de uso do Sweave s˜o diversas e podemos citar como examplos a confec¸ao a c˜ de relat´rios.tex foi gerado. Este macanismo tamb´m permite que o texto seja agil e autom´ticamente atualizado e a para qualquer mudan¸a ou inclus˜o de dados e/ou nas an´lises. o L TE Usando o Sweave o usu´rio pode ter comandos.Rnw.Rnw”) eval=F Ao final destes passos. You can now run LaTeX on 'foo. artigos. Neste documento vamos supor que seu arquivo se chama foo. exemplos.3 ˆ Outras informa¸oes uteis para uso do Sweave c˜ ´ A O Sweave tem algumas dependˆncias de outroas recursos no L TEX. provas. No caso do LINUX e certifique-se que voce tem os seguintes pacotes instalados: tetex-bin e tetex-extra. Compile e visualize o documento LTEX de forma usual.

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

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

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

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

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

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

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

o A A vers˜o para WEB foi obtida convertendo o documento LTEXpara xhtml usando o proa grama TeX4ht. equa¸˜es e s´ a o co ımbolos matem´ticos.xml que c˜ a utilizam mathml para impress˜o de f´rmulas. Todo o material foi produzido em ambiente Debian-Linux e/ou Ubuntu-Linux.38 RODANDO O R DENTRO DO XEMACS 290 Sobre este texto Este material ´ produzido e disponibilizado usando exclusivamente recursos de SOFTe WARE LIVRE. A O texto foi editado em LTEX e combinado com c´digo R usando o recurso do Sweave. a a a Se seu navegador n˜o suporta mathml (como por exemplo o Internet Explorer) voce pode a habilitar este suporte instalando o MathPlayer. a Para visualiza¸˜o pela WEB sugerimos o uso do navegador Mozilla Firefox. A p´gina a WEB ´ disponibilizada em um servidor APACHE rodando em um Debian-Linux. Este documento ca pode n˜o ser´ bem visualizado em anavegadores que n˜o possuam suporte a mathml. e . A op¸ao de convers˜o utilizada produz documentos em formato .