Linguagem R

28,619 views

Published on

Curso de Introdução a Linguagem R para estatísticos ministrado no IMECC / UNICAMP e na SPSS.

Published in: Technology

Linguagem R

  1. 1. Introdução a Linguagem R
  2. 2. Introdução a Linguagem R Prof. Me. Anderson Carlos D. Sanches [email_address] www.software.pro.br @andycds
  3. 3. Por que aprender? "Uma das coisas mais importantes que você pode fazer é dedicar um tempo para aprender uma linguagem de programação de verdade. Aprender a programar é como aprender outro idioma: exige tempo e treinamento, e não há resultados práticos imediatos. Mas se você supera essa primeira subida íngreme da curva de aprendizado, os ganhos como cientista são enormes. Programar não vai apenas livrar você da camisa de força dos pacotes estatísticos, mas também irá aguçar suas habilidades analíticas e ampliar os horizontes de modelagem estatística." Tradução um tanto livre de Gotelli & Ellison, 2004. A Primer of Ecological Statistics. Sunderland, Sinauer.
  4. 4. Linguagem R <ul><li>Conceitos
  5. 5. Manipulações e objetos
  6. 6. Modos e atributos de objetos
  7. 7. Distribuições de probabilidade
  8. 8. Gráficos
  9. 9. Programação
  10. 10. Apêndice: Integração de R com Banco de Dados MySQL </li></ul>
  11. 15. História <ul><li>Surgiu como alternativa livre a linguagem S
  12. 16. Software para manipulação de informações, elaboração de cálculos e desenho de gráficos
  13. 17. Diversas aplicações
  14. 18. Extensível através de pacotes
  15. 19. Software Livre </li></ul>
  16. 20. Instalando o R no Windows <ul><li>1. Faça o download no espelho da UFPR:
  17. 21. http://cran-r.c3sl.ufpr.br/
  18. 22. 2. Execute a o instalador clicando sobre ele
  19. 23. 3. Selecione a ajuda complementar a ser instalada
  20. 24. 4. Selecione padrão
  21. 25. 5. Clique no ícone R </li></ul>
  22. 26. Instalando o R no Linux <ul><li>apt-get install r-base </li></ul>
  23. 27. Instalando pacotes adicionais <ul><li>No Windows:
  24. 28. Escolher espelho cran: Brasil(PR)
  25. 29. Instalar pacotes: RMySQL </li></ul><ul><li>No Linux:
  26. 30. apt-get install r-cran-rmysql </li></ul>
  27. 31. Editor de texto para R <ul><li>Mundo Windows: Tinn-R
  28. 32. http://www.sciviews.org/Tinn-R/ </li></ul><ul><li>Mundo Linux: Gedit
  29. 33. Já vem com o Gnome! </li></ul>
  30. 35. Manipulações e objetos
  31. 36. Manipulações <ul><li>Versão: R.version
  32. 37. Informações da sessão: sessionInfo()
  33. 38. Para limpar a tela: Ctrl+L
  34. 39. Para sair: q()
  35. 40. Neste ponto é possível salvar a área de trabalho (y), não salvar (n) ou cancelar a saída (c) </li></ul>
  36. 41. Pedindo ajuda <ul><li>help(solve) ou ?solve
  37. 42. Para casos onde possa haver confusão na notação, use aspas: help( &quot; [[&quot;)
  38. 43. Navegando na documentação: help.start()
  39. 44. Para procurar um assunto: ??solve ou help.search(solve)
  40. 45. Para ver um exemplo: example(dpois)
  41. 46. Tente também:?help.search e ?help </li></ul>
  42. 47. Outras ajudas <ul><li>Esboços (documentos em pdf):
  43. 48. vignette()
  44. 49. vignette(&quot;foreach&quot;)
  45. 50. Procura no site do R (manuais e listas de e-mail):
  46. 51. RSiteSearch(&quot;foo&quot;) </li></ul>
  47. 52. Note que <ul><li>Os comandos são separados por ; ou enter
  48. 53. Maiúsculas ou minúsculas fazem diferença
  49. 54. Para comentar algo, você pode usar #
  50. 55. Se um comando não terminou numa linha, o prompt do R muda de > para +
  51. 56. Você pode usar novamente um comando acessando-o com as setas para cima e para baixo </li></ul>
  52. 57. R como calculadora <ul><li>1/3
  53. 58. 9 ∙ 13 + 15 / 3 + 2
  54. 59. 2 10
  55. 60. Agora faça você: </li></ul>
  56. 61. Objetos <ul><li>Atribuição:
  57. 62. a = 3 ou a ← 3 ou 3 -> a ou assign(&quot;a&quot;, 3)
  58. 63. Esta seta (←) representa o menor e o menos (<-)
  59. 64. Depois: a [enter]
  60. 65. Consultar os objetos da sessão: ls() ou objects()
  61. 66. Remover da memória algum objeto: rm( objeto )
  62. 67. Pode-se remover diversos objetos ao mesmo tempo: rm( obj1, obj2 ) </li></ul>
  63. 68. Salvando e carregando Objetos <ul><li>Salvar os objetos:
  64. 69. save( objeto , file = &quot;meusObjetos.RData&quot;)
  65. 70. Salvando todos os objetos da sessão:
  66. 71. save(list = ls(all=TRUE), file= &quot;tudo.Rdata&quot;) </li></ul><ul><li>Carregar objetos de um arquivo:
  67. 72. load(&quot;meusObjetos.RData&quot;) </li></ul>
  68. 73. Entrada e saída <ul><li>Entrada:
  69. 74. É possível carregar uma série de comandos de um arquivo: source(comandos.r)
  70. 75. Saída:
  71. 76. É possível redirecionar a saída para um arquivo: sink(&quot;saida.lis&quot;)
  72. 77. Para voltar com a saída em vídeo: sink() </li></ul>
  73. 78. Tipos de saída <ul><li>PDF: pdf(&quot;filename.pdf&quot;)
  74. 79. Windows Metafile: win.metafile(&quot;filename.wmf&quot;)
  75. 80. PNG: png(&quot;filename.png&quot;)
  76. 81. JPEGE: jpeg(&quot;filename.jpg&quot;)
  77. 82. BMP: bmp(&quot;filename.bmp&quot;)
  78. 83. Postscript: postscript(&quot;filename.ps&quot;) </li></ul>
  79. 84. Entrada e saída <ul><li>Pode-se carregar um arquivo texto em um objeto:
  80. 85. medidas ← scan(file = &quot;analise.txt&quot;); # ou ainda :
  81. 86. medidas ← scan(file=&quot;analise.csv&quot;, sep=&quot;,&quot;)
  82. 87. O scan também serve para ler do teclado (finalize com 2 enter):
  83. 88. notas ← scan() </li></ul>
  84. 89. Importando uma planilha <ul><li>Crie a planilha
  85. 90. Salve como:
  86. 91. PlanR.csv
  87. 92. Tipo: CSV </li></ul>
  88. 93. Importando uma planilha <ul><li>plan = read.csv(&quot;PlanR.csv&quot;)
  89. 94. Média das notas nas provas:
  90. 95. mean(plan[,2:3])
  91. 96. Sumário das notas:
  92. 97. summary(plan[,2:3]) </li></ul>
  93. 98. Exemplos de E/S <ul><li>source(&quot;arquivo1&quot;)
  94. 99. sink(&quot;arqSaida&quot;, append=TRUE, split=TRUE)
  95. 100. pdf(“saidaPDF.pdf&quot;)
  96. 101. source(“arquivo2&quot;)
  97. 102. sink()
  98. 103. dev.off()
  99. 104. source(“arquivo3&quot;) </li></ul>
  100. 105. Ambiente de trabalho <ul><li>Diretório corrente: getwd()
  101. 106. Mudar o diretório: setwd(&quot;/dire/torio&quot;)
  102. 107. Objetos na memória: ls()
  103. 108. Seus últimos 20 comandos: history(20)
  104. 109. Gravar/carregar histórico:
  105. 110. savehistory(&quot;arquivo&quot;)
  106. 111. loadhistory(&quot;arquivo&quot;)
  107. 112. Ver as opções: options() </li></ul>
  108. 113. Modos e atributos de objetos
  109. 114. Modos e atributos de objetos <ul><li>O objeto mais simples do R é um vetor
  110. 115. Mesmo uma variável (x = 2 por exemplo), é considerada como um vetor de tamanho 1
  111. 116. Concatenar / combinar vetores: c(1, 3, 5, 2)
  112. 117. a = c(1, 2, 3); b = c(4, 5, 6)
  113. 118. c = c(a, b)
  114. 119. Pode-se acessar elementos do vetor com colchetes:
  115. 120. a[3] = 5 </li></ul>
  116. 121. Aritimética de vetores <ul><li>Realize as seguintes operações:
  117. 122. v = c(1, 2, 3, 4, 5)
  118. 123. 2*v
  119. 124. w = c(1)
  120. 125. v * w, v + w
  121. 126. w = c(1, 2)
  122. 127. v * w, v + w
  123. 128. c(w, v, w) </li></ul>
  124. 129. Funções embutidas <ul><li>sqrt: sqrt(2)
  125. 130. log: log(1024, 2)
  126. 131. exp: exp(2)
  127. 132. pi
  128. 133. sin, cos, tan, asin, acos, atan: sin(pi/2)
  129. 134. sqrt(2) = raiz de 2
  130. 135. abs (expressão)
  131. 136. Tente: 13/0; sqrt(-17); sqrt(-17 + 0i) </li></ul>
  132. 137. Operações <ul><li>exponenciação: 2^10
  133. 138. resto da divisão: 7 %% 3
  134. 139. inteiro da divisão: 7 %/% 3 </li></ul>
  135. 140. Funções sobre vetores <ul><li>Intervalo: range
  136. 141. Comprimento: length
  137. 142. Somatório: sum, cumsum
  138. 143. Produtório: prod, cumprod
  139. 144. Média: mean
  140. 145. Variância: var
  141. 146. Máximo e mínimo: max, min, range
  142. 147. Sumário: summary </li></ul>
  143. 148. Ordenação de vetores <ul><li>Ordem inversa: rev
  144. 149. Ordenação: sort
  145. 150. Tente: sort(vetor, decreasing = TRUE)
  146. 151. Obter um vetor de permutações que ordenam o vetor dado: order
  147. 152. Posto dos valores do vetor: rank
  148. 153. Compare rank com order </li></ul>
  149. 154. Intervalos e sequências <ul><li>Intervalo unitário de 1 a 10: 1:10
  150. 155. Gere um intervalo com 10 números, de 2 até 20
  151. 156. Faça: n = 10; 1:n-1; 1:(n-1)
  152. 157. seq(from = 1, to = 10) #from e to são opcionais
  153. 158. seq(1, 10, by = 2)
  154. 159. seq(1,10, length = 3)
  155. 160. seq(length = 51, from = -5, by = .2) </li></ul>
  156. 161. Repetições <ul><li>x = 1:3
  157. 162. rep(x, times = 5)
  158. 163. rep(x, each = 5)
  159. 164. y = rep( c(4, 2, 8, 10, 6), c(1, 2, 2, 1, 3) )
  160. 165. unique(y)
  161. 166. duplicated(y); y[!duplicated(y)]
  162. 167. Construa um vetor com os números de 14 a 7 seguido de 7 números 4 seguido de 8 até 16 passo 2 </li></ul>
  163. 168. Valores Lógicos <ul><li>TRUE, FALSE ou NA
  164. 169. hip = 3 < 2
  165. 170. x = 1:3; x <= 2
  166. 171. == igual, != diferente, & e, | ou, ! negação
  167. 172. Cuidado com T e F!
  168. 173. z ← c(1:3, NA); ind ← is.na(z)
  169. 174. Não confunda com NaN:
  170. 175. 0/0; Inf – Inf; is.nan(NA); is.na(NaN) </li></ul>
  171. 176. Vetores de caracteres <ul><li>Também usados em gráficos
  172. 177. barplot(8:10, main = &quot;Notas da Prova&quot;)
  173. 178. Caractere é definido por &quot; ou por '
  174. 179. Caracteres especiais são precedidos de
  175. 180. Para consultá-los: ?Quotes
  176. 181. Concatenar vetores transformando para strings: paste(0:1, &quot;berto&quot;, sep=&quot;&quot;) </li></ul>
  177. 182. Índice dos vetores <ul><li>Pode-se acessar um elemento do vetor:
  178. 183. v = 1:10; v[5] = NA
  179. 184. y ← v[!is.na(v)]
  180. 185. (v + 1)[(!is.na(v)) & v > 0] -> z
  181. 186. v[3:6]
  182. 187. c(&quot;x&quot;,&quot;y&quot;)[rep(c(1, 2, 2, 1), times = 4)]
  183. 188. y ← v[-(4:6)] </li></ul>
  184. 189. Índice dos vetores <ul><li>Acessando diversos intervalos de índices:
  185. 190. x ← 1:10; x[c(2:3, 5, 7:8)] ← NA
  186. 191. Trocando NA por 0:
  187. 192. x[is.na(x)] ← 0
  188. 193. y = 5:-5
  189. 194. O que este comando faz?
  190. 195. y[y < 0] ← -y[y < 0] </li></ul>
  191. 196. Atributo nome <ul><li>Podemos nomear os índices para facilitar a identificação de ítens num vetor
  192. 197. aluno ← scan(what = character(3))
  193. 198. nota ← 8:10
  194. 199. names(nota) ← aluno
  195. 200. w ← nota[c(&quot;Renata&quot;, &quot;Lili&quot;)] </li></ul>
  196. 201. Outros tipos de objetos <ul><li>matrizes: vetores com mais de um índice
  197. 202. fatores: para manipulação de dados categorizados
  198. 203. listas: vetor com elementos não necessariamente do mesmo tipo
  199. 204. data frames: matrizes com diferentes tipos de colunas
  200. 205. funções: pequenos programas </li></ul>
  201. 206. Atributos intrínsecos <ul><li>vetores possuem só um modo (numérico, complexo, lógico, caractere, bruto): mode
  202. 207. listas tem seu próprio modo, já que um objeto da lista pode ser de qualquer modo, até uma outra lista
  203. 208. comprimento: length
  204. 209. atributos não intrínsecos: attributes #tente no vetor nota criado anteriormente! </li></ul>
  205. 210. Coerção <ul><li>Coerção: troca de modo de um objeto
  206. 211. Pode-se trocar os modos de um vetor:
  207. 212. num ← 1:10
  208. 213. as.character(num) -> digito
  209. 214. renum ← as.integer(digito)
  210. 215. Também funciona: as.double, as.numeric
  211. 216. Converta para lógico: nbool ← c(&quot;TRUE&quot;, &quot;FALSE&quot;) </li></ul>
  212. 217. Alterando o tamanho <ul><li>Mesmo um vetor vazio tem um modo:
  213. 218. e ← numeric()
  214. 219. E seu tamanho pode ser alterado:
  215. 220. e[3] = 2
  216. 221. a = 20:30; a = a[2 * 1:5]
  217. 222. length(a) = 3
  218. 223. z = 1:100; attr(z, &quot;dim&quot;) ← c(10,10) #matriz </li></ul>
  219. 224. Classes <ul><li>Além de modos, objetos tem classes:
  220. 225. x = 1:10; class(x)
  221. 226. y = 3+1i; class(y)
  222. 227. class(z) # do exemplo anterior
  223. 228. Dependendo da classe, alguns métodos se comportam de forma diferente. Ex:
  224. 229. summary(x)
  225. 230. summary(y)
  226. 231. summary(z) </li></ul>
  227. 232. Fatores <ul><li>É um vetor de objetos usado para especificar uma classificação discreta (agrupamento)
  228. 233. sex = c(&quot;m&quot;,&quot;m&quot;,&quot;f&quot;,&quot;f&quot;,&quot;f&quot;,&quot;m&quot;,&quot;m&quot;,&quot;f&quot;,&quot;m&quot;,&quot;f&quot;,&quot;f&quot;)
  229. 234. sexof = factor(sex)
  230. 235. peso = c(63, 80, 49, 59, 55, 72, 90, 73, 68, 53, 61)
  231. 236. pesomed ← tapply( peso, sexof, mean )
  232. 237. Se os fatores tiverem ordem, use ordered ao invés de factor </li></ul>
  233. 238. Matrizes <ul><li>Matrizes são vetores com mais de um índice
  234. 239. mat = 1:150
  235. 240. dim(mat) = c(15,10)
  236. 241. É possível também criar matrizes com 3 ou mais dimensões: dim(mat) = c(5, 10, 3)
  237. 242. Para selecionar elementos: mat[1, 2, 3]
  238. 243. É possível selecionar uma &quot;subseção&quot;, que também é uma matriz: nm ← mat[ , , 2]; dim(nm) </li></ul>
  239. 245. Matrizes <ul><li>mm ← matrix(1:15, nrow = 3, ncol = 5)
  240. 246. mm ← matrix(1:15, nrow = 3, ncol = 5, byrow = TRUE)
  241. 247. mm ← matrix(1:15, nrow = 3, byrow = TRUE)
  242. 248. numb = 1:15
  243. 249. mm ← matrix(numb, ncol = 5, byrow = FALSE) </li></ul>
  244. 250. Matrizes <ul><li>Pode-se construir matrizes combinando vetores por coluna ou linha:
  245. 251. mat.n1 = 1:3; mat.n2 = 4:6; mat.n3 = 7:9
  246. 252. mat.a = cbind(mat.n1, mat.n2, mat.n3)
  247. 253. mat.b = rbind(mat.n1, mat.n2, mat.n3)
  248. 254. E também lendo do teclado:
  249. 255. mat3 = matrix(scan(), ncol = 3, byrow = TRUE) </li></ul>
  250. 256. Operações com matrizes <ul><li>mar ← matrix(1:16, 4, 4)
  251. 257. Diagonal: diag(mar); diag(mar) ← 25
  252. 258. Transposta: t(mar)
  253. 259. Inversa: solve(mat)
  254. 260. Multiplicação matricial: %*%
  255. 261. M ← matrix(1:12,3,4); V ← matrix(13:24, 4, 3)
  256. 262. M%*%V </li></ul>
  257. 263. Nomeando matrizes <ul><li>alunos = matrix(c(1:10, 4:8), ncol = 3)
  258. 264. alunos
  259. 265. colnames(alunos) = c(&quot;numero&quot;, &quot;prova1&quot;, &quot;prova2&quot;)
  260. 266. alunos
  261. 267. mean(alunos[ ,&quot;prova2&quot;]) </li></ul>
  262. 268. Listas <ul><li>Coleção ordenada de objetos:
  263. 269. l = list(nome=&quot;Anderson&quot;, mulher=&quot;Renata&quot;, num.animais=2, idade.animais=c(0,1))
  264. 270. Veja: l[[2]]; l[[4]][2]; l$mulher; l$idade.animais[1]
  265. 271. l$m
  266. 272. k ← &quot;nome&quot;; l[[k]]
  267. 273. Diferença entre l[1] e l[[1]] </li></ul>
  268. 274. Data frames <ul><li>São tipos restritos de listas:
  269. 275. Vetores e matrizes com mesmo tamanho
  270. 276. r = data.frame(z1 = 1:20, z2 = 1:5)
  271. 277. Data frame pode virar matriz:
  272. 278. data.matrix(frame) </li></ul>
  273. 279. Distribuições de probabilidade
  274. 280. Distribuições de probabilidade <ul><li>R possui diversos modelos de distribuição de probabilidade.
  275. 281. Funções para o cálculo de probabilidade, função densidade de probabilidade e sorteios:
  276. 282. Exemplos: beta, binomial, Cauchy, chi-squared, exponential, F, gamma, geometric, hypergeometric, log-normal, logistic, negative binomial, normal, Poisson, Student's t, uniform, Weibull, Wilcoxon </li></ul>
  277. 283. Distribuições de probabilidade <ul><li>d é a função densidade
  278. 284. p é função distribuição acumulada
  279. 285. q é a função quantil
  280. 286. r gera números aleatórios (random)
  281. 287. Ex: Em 10 lançamentos de um dado, qual a probabilidade de sair o número 1 exatamente duas vezes?
  282. 288. dbinom( 2, 10, 1/6) </li></ul>
  283. 289. Distribuição normal <ul><li>Gerando 10 valores de uma normal com média=25 e desvio padrão=5: rnorm(10, 25, 5)
  284. 290. Seja Z ~ Normal(0, 1), calcule P(Z < -1,64): pnorm( -1.64, 0, 1) = 0.0505
  285. 291. Calcule P(Z > 1,96): 1 – pnorm(1.96, 0, 1) = 0.0249
  286. 292. Encontre k tal que P(Z < k) = 0,05: qnorm(0.05,0,1) = -1.6448
  287. 293. Encontre k tal que P(Z > k) = 0.025: qnorm(1-0.025,0,1) = 1.9599 </li></ul>
  288. 294. Distribuição uniforme <ul><li>(ENADE-09) Ana e José conversavam pela Internet e resolveram jogar dados. Cada vez que se lança o dado, o jogador ganha 1 ponto, se sair a face 6; e perde 1 ponto, caso sair a face 1. Para as outras faces, a pontuação é nula. Como eles não possuem um dado, resolveram criar um dado virtual honesto. Dentre as alternativas de código no ambiente computacional R, escolha aquela que simule o jogo proposto. Obs.: a função runif(n, a, b) gera n valores independentes da distribuição Uniforme entre a e b. </li></ul>
  289. 295. Alternativas p ← 0 u ← runif(1, 0, 1) if (u < 1/6) p ← -1 if (u > 5/6) p ← 1 p ← 0 u ← runif(1, 0, 1) if (u < 1/3) p ← -1 if (u > 2/3) p ← 1 p ← 0 u ← runif(1, 1, 6) if (u < 1/3) p ← -1 if (u > 2/3) p ← 1 p ← 0 u ← runif(1, 0, 1) if (u == 1/6) p ← -1 if (u == 5/6) p ← 1 p ← 0 u ← runif(1, 1, 6) if (u < 1/6) p ← -1 if (u > 5/6) p ← 1
  290. 296. Binomial <ul><li>Numa pessoa normal 60% dos leucócitos são neutrófilos. Se observarmos uma amostra de 10 leucócitos de uma pessoa supostamente normal, qual a probabilidade de encontrarmos pelo menos 8 neutrófilos? 0,1672898
  291. 297. sum(dbinom(8:10,10,0.6)) </li></ul>
  292. 298. Binomial <ul><li>Experimentalmente constatou-se que os casos de recuperação de uma certa doença, em uma semana, é 85% quando os pacientes são tratados com a droga W. Se esse tratamento for aplicado a um grupo de 12 indivíduos portadores desta doença, qual a probabilidade de haver no mínimo 2 indivíduos não curados em uma semana? 0,5565404 </li></ul><ul><li>sum(dbinom(0:10, 12, 0.85)) </li></ul>
  293. 299. Geométrica <ul><li>Sabe-se que 10% das peças produzidas por certa máquina apresentam defeitos. Num determinado dia, qual a probabilidade de que a terceira peça produzida por esta máquina seja a primeira defeituosa? 0,081
  294. 300. dgeom(2,0.1) </li></ul>
  295. 301. Geométrica <ul><li>O custo na fabricação de um produto é R$ 1.000. Supostamente terminado, o produto é submetido a um teste. Se aprovado, encerra-se o processo, caso contrário perde-se R$ 400 das peças do produto, que são substituídas e em seguida é feito um novo teste, assim sucessivamente até a obtenção de êxito no teste. Sabendo-se que em 90% das vezes o teste é realizado com sucesso, determine a probabilidade de que o custo de um produto supere R$ 1800. 0,1% </li></ul><ul><li>(1-sum(dgeom(0:2, 0.9))) * 100 </li></ul>
  296. 302. Pascal <ul><li>Ou binomial negativa
  297. 303. Um dado é lançado sucessivamente até se obter a face &quot;1&quot; pela terceira vez. Qual a probabilidade de serem necessários exatemente cinco lançamentos? 0,01929012
  298. 304. dnbinom(2,3,1/6) </li></ul>
  299. 305. Pascal <ul><li>Numa população com um número muito grande de indivíduos, há 20% de hipertensos. Serão sorteadas, uma a uma e sem reposição, pessoas desta população até se conseguir uma amostra de 3 hipertensos. Qual a probabilidade de serem necessários pelo menos 6 sorteios? 0,94208 </li></ul><ul><li>1 – sum(dnbinom(0:2, 3, .2)) </li></ul>
  300. 306. Hipergeométrico <ul><li>Suponhamos que num grupo composto por 12 pessoas existam 7 mulheres. Escolhendo-se simultaneamente 6 pessoas do grupo, qual a probabilidade de serem sorteadas 4 mulheres? 0,3787879
  301. 307. dhyper(4, 7, 12-7, 6) </li></ul>
  302. 308. Hipergeométrico <ul><li>Pequenos motores elétricos são expedidos em lotes de 50 unidades. Antes de uma remessa ser aprovada, inspeciona-se uma amostra com 5 motores. Se nenhum dos 5 for defeituoso, o lote é aprovado. Caso contrário todo os motores são inspecionados. Suponha que existam 3 motores defeituosos no lote. Qual a probabilidade de que a inspeção 100% seja necessária? 0,2760204 </li></ul><ul><li>1 – dhyper(0, 3, 50-3,5) </li></ul>
  303. 309. Poisson <ul><li>Suponhamos que os acidentes de trabalho numa fábrica ocorram segundo as hipóteses de Poisson com uma média de 3 acidentes a cada 5 meses. Qual a probabilidade de ocorrer:
  304. 310. exatamente um acidente num mês? 0,329287 E 2 em 2 meses? 0,2168598 </li></ul><ul><li>algum acidente no próximo mês, sabendo-se que há um mês não ocorre acidente algum. 0,4511884 </li></ul><ul><li>dpois(1, 3/5) </li></ul><ul><li>dpois(2, 2*3/5) </li></ul><ul><li>1 – dpois(0, 3/5) </li></ul>
  305. 311. Poisson <ul><li>A chegada de navios petroleiros, numa refinaria, obedece uma distribuição de Poisson. O número médio de navios que chegam por dia é 2. As instalações da refinaria permitem aportar até 3 navios por dia, sendo que os excedentes a 3 deverão seguir para outro porto. Suponha-se ainda que cada navio permaneça por um dia na refinaria. Pede-se: </li></ul>
  306. 312. Poisson <ul><li>em um dia, qual a probabilidade de ser necessário mandar algum petroleiro para outro porto? </li></ul>0,1428765 <ul><li>qual a probabilidade de que a partir de um dado instante passe 8 horas sem chegar navio algum? </li></ul>0,5134171 <ul><li>em quanto as atuais instalações devem ser aumentadas para permitir manobrar todos os petroleiros em 94% dos dias? </li></ul>4 <ul><li>1 – sum( dpois( 0:3, 2 ) ) </li></ul><ul><li>dpois( 0, 2 * 1/3 ) </li></ul><ul><li>qpois(.94, 2) </li></ul>
  307. 313. Poisson <ul><li>qual o número mais provável de petroleiros que chegarão num certo dia? 1 ou 2 </li></ul><ul><li>qual o número médio de petroleiros atentidos por dia? 1,781982 </li></ul><ul><li>Os que chegam não são o mesmo número que são atendidos! </li></ul><ul><li>0 * dpois(0,2) + 1 * dpois(1,2) + 2 * dpois(2,2) + </li></ul>3 * (1 – sum(dpois(0:2, 2))) <ul><li>barplot( dpois(0:7, 2), names=0:7, col=1:8) </li></ul>
  308. 314. Gráficos
  309. 315. Exemplos <ul><li>demo(graphics)
  310. 316. demo(persp)
  311. 317. demo(image)
  312. 318. demo(smooth)
  313. 319. Lista com todas as demonstrações:
  314. 320. demo()
  315. 321. Fontes e caracteres:
  316. 322. demo(Hershey); demo(Japanese); demo(plotmath) </li></ul>
  317. 323. Gráficos <ul><li>Pode-se desenhar diversos tipos de gráficos: histogramas, box plots, scatter plots etc
  318. 324. Existem alguns pacotes para auxiliar o desenho de gráficos, como o rggobi e o rgl (para gráficos 3D)
  319. 325. Manipular a janela gráfica:
  320. 326. par(mfrow=c( linhas , colunas ))
  321. 327. Histograma: hist(rt(10000, 100)) #rt: t-student
  322. 328. Boxplot: boxplot(rpois(50, 10), rpois(50, 20), rpois(50, 15)) </li></ul>
  323. 329. Gráficos <ul><li>par(mfrow=c(2,4))
  324. 330. tipos = c(&quot;p&quot;, &quot;l&quot;, &quot;b&quot;, &quot;c&quot;, &quot;o&quot;, &quot;h&quot;, &quot;s&quot;)
  325. 331. for(i in 1:length(tipos)) plot(sin, -pi, 2*pi, type = tipos[i])
  326. 332. Dispersão:
  327. 333. x1 ← runif(30, 1, 50); x2 ← runif(30, 0, 1)
  328. 334. y ← 2 + 0.5 * x1 + 4 * x2 + rnorm(30, 0, 1)
  329. 335. pairs(cbind(x1, x2, y)) </li></ul>
  330. 336. Gráficos <ul><li>nota = c(8,9,10)
  331. 337. nome = c(&quot;Anderson&quot;,&quot;Renata&quot;,&quot;Lili&quot;)
  332. 338. barplot(nota, names.arg = nome, main = &quot;Notas da Prova&quot;)
  333. 339. cores = c(&quot;yellow&quot;, &quot;blue&quot;, &quot;green&quot;)
  334. 340. barplot(nota, names.arg = nome, main = &quot;Notas da Prova&quot;, col = cores)
  335. 341. barplot(nota, names.arg=nome, main=&quot;Notas da Prova&quot;, col = cores, horiz = TRUE) </li></ul>
  336. 342. Programação
  337. 343. Programando com R <ul><li>Independência de variáveis:
  338. 344. a ← 1
  339. 345. b ← a
  340. 346. a ← a + 1
  341. 347. Quanto vale o b? </li></ul>
  342. 348. Funções mediaNota ← function(unificada, regimental) { media = (2 * regimental + unificada) / 3 media }
  343. 349. Programando com R X = ∑ 2i + 1 i = 2 27
  344. 350. Laços for resp = 0 for (i in 2:27) { resp = resp + (2*i + 1) } resp
  345. 351. Desafio <ul><li>Você consegue escrever a função fatorial? </li></ul>fatorial = function(n) { mult = 1 for (i in 2:n) { mult = mult * i } mult }
  346. 352. Laços while fatores = function(n) { f = 2 while (n > 1) { while (n %% f == 0) { print(f) n = n / f } f = f + 1 } }
  347. 353. Condicionais mediaFinal = function(unificada, regimental) { media = (2 * regimental + unificada) / 3 media = round(media, 1) if (media >= 7) { print(paste(&quot;Aprovado:&quot;, media)) } else { if (media >= 4) { print(paste(&quot;Exame:&quot;, media)) } else { print(paste(&quot;Reprovado:&quot;, media)) } } }
  348. 354. Parâmetros nomeados <ul><li>mediaFinal(2, 8) #ou seria (8, 2)? </li></ul><ul><li>mediaFinal(unificada = 2, regimental = 8) </li></ul><ul><li>mediaFinal(regimental = 8, unificada = 2) </li></ul>
  349. 355. Operadores comparativos e lógicos <ul><li>==, !=, <, >, <=, >=
  350. 356. negação: !
  351. 357. e: &
  352. 358. ou: |
  353. 359. ou exclusivo: xor()
  354. 360. lógico sequencial && e ||: avaliam somente até obter resultado
  355. 361. (1 > 2) | (4 != 2 + 2) </li></ul>
  356. 362. Escrevendo operadores <ul><li>Também é possível criar seu próprio operador: </li></ul>&quot;%diferencaAbsoluta%&quot; = function(x, y) { abs(x-y) }
  357. 363. Recursividade <ul><li>&quot;Para entender a recursividade, é fundamental entender a recursividade&quot;
  358. 364. Funções podem chamar outras funções, inclusive elas mesmas
  359. 365. Fibonnacci: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55... </li></ul>
  360. 366. Recursividade <ul><li>fibonacci = function(n) {
  361. 367. if (x < 2) return(n)
  362. 368. else return(fibonacci(x - 1) + fibonacci(x - 2))
  363. 369. } </li></ul>
  364. 370. Bibliografia <ul><li>Este material foi baseado nas seguintes referências:
  365. 371. An Introduction to R: www.r-project.org
  366. 372. Tirinhas do Dilbert: http://www.flickr.com/photos/12110586@N06
  367. 373. Notas de aula da disciplina Linguagem de Programação do bacharelado em Estatística da Unicapital, prof. Anderson Sanches
  368. 374. Consulte o autor para outras referências </li></ul>
  369. 375. Dúvidas <ul>? </ul>
  370. 377. Obrigado! Anderson Carlos D. Sanches www.software.pro.br [email_address] Dúvidas, sugestões, correções?
  371. 378. Apêndice: Banco de Dados com MySQL
  372. 379. Integrando R com MySQL <ul><li>Carregar a biblioteca
  373. 380. library(&quot;RMySQL&quot;)
  374. 381. Carregar o driver
  375. 382. drv = dbDriver(&quot;MySQL&quot;)
  376. 383. Conectar
  377. 384. con = dbConnect(drv, username=&quot;anderson&quot;, password=&quot;SENHA&quot;, dbname=&quot;world&quot;, host=&quot;localhost&quot;) </li></ul>
  378. 385. Depois de conectado <ul><li>Exibir as tabelas daquela conexão/esquema
  379. 386. dbListTables(con)
  380. 387. Exibir os campos de uma tabela
  381. 388. dbListFields(con, &quot;Country&quot;);
  382. 389. Importar e exportar data.frames:
  383. 390. d <- dbReadTable(con, &quot;WL&quot;) dbWriteTable(con, &quot;WL2&quot;, a.data.frame)
  384. 391. dbWriteTable(con, &quot;test2&quot;, &quot;~/data/test2.csv&quot;) </li></ul>
  385. 392. Executando comandos <ul><li>Executar um comando SQL arbitrário e extrair seu resultado:
  386. 393. dbGetQuery(con, &quot;select count(*) from a_table&quot;)
  387. 394. Executar um comando SQL e obter seu retorno por partes (como um result set):
  388. 395. rs <- dbSendQuery(con, &quot;select * from WL where width_nm between0.5 and 1&quot;)
  389. 396. d1 <- fetch(rs, n = 10000)
  390. 397. d2 <- fetch(rs, n = -1) </li></ul>
  391. 398. Executar múltiplos comandos <ul><li>con ← dbConnection(MySQL(), dbname = &quot;rs-dbi&quot;, client.flag = CLIENT_MULTI_STATEMENTS )
  392. 399. script ← paste(&quot;select * from WL where width_nm between 0.5 and1&quot; &quot;select * from lasers_id where id LIKE ’AL100 sep = &quot;;&quot;) </li></ul>
  393. 400. Processar os resultados rs1 ← dbSendQuery(con, script) d1 ← fetch(rs1, n = -1) if(dbMoreResults(con)){ rs2 ← dbNextResult(con) d2 ← fetch(rs2, n=-1) }
  394. 401. Informação sobre a conexão <ul><li>summary(MySQL(), verbose = TRUE)
  395. 402. summary(con, verbose = TRUE)
  396. 403. summary(rs,verbose = TRUE)
  397. 404. dbListConnections(MySQL())
  398. 405. dbListResultSets(con)
  399. 406. dbHasCompleted(rs) </li></ul>
  400. 407. Informação sobre a conexão <ul><li>dbGetStatement(rs)
  401. 408. dbHasCompleted(rs)
  402. 409. info ← dbGetInfo(rs)
  403. 410. names(dbGetInfo(drv))
  404. 411. infonames(dbGetInfo(con))
  405. 412. infonames(dbGetInfo(rs)) </li></ul>
  406. 413. Encerrar conexões <ul><li>dbDisconnect(con) </li></ul>
  407. 414. Introdução a Linguagem R Prof. Me. Anderson Carlos D. Sanches [email_address] www.software.pro.br @andycds curso ministrado na SPSS 20/04/10

×