Successfully reported this slideshow.

Linguagem R

32

Share

Upcoming SlideShare
Linguagem R
Linguagem R
Loading in …3
×
1 of 106
1 of 106

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

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

×