Ferramentas do usuário

Ferramentas do site


02_tutoriais:tutorial2:start

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
02_tutoriais:tutorial2:start [2022/05/26 18:03]
adalardo [As Funções que operam distribuições de probabilidades]
02_tutoriais:tutorial2:start [2023/08/14 13:13] (atual)
Linha 12: Linha 12:
  
  
-No nosso [[02_tutoriais:​tutorial1:​start|Tutorial 1a]] de introdução à linguagem, vimos alguns tipos básicos de informações que podem ser armazenados em objetos do R e a **estrutura básica de armazenamento que são os vetores**. ​Nesse tutorial vamos apresentar algumas ferramentas de operações algébricas e estatísticas no R.  ​+No nosso [[02_tutoriais:​tutorial1:​start|Tutorial 1a]] de introdução à linguagem, vimos alguns tipos básicos de informações que podem ser armazenados em objetos do R e a **estrutura básica de armazenamento que são os vetores**. ​Neste tutorial vamos apresentar algumas ferramentas de operações algébricas e estatísticas no R.  ​
  
 <WRAP center round box 60%> <WRAP center round box 60%>
Linha 60: Linha 60:
  
  
-Acima, apesar dos objetos conterem a mesma informação de dados, o objeto ''​ c '' ​ pertence a classe +Acima, apesar dos objetos conterem a mesma informação de dados, o objeto ''​c'' ​ pertence a classe 
-''​ integer '',​ representada por números inteiros, enquanto os outros objetos são da classe ''​ numeric ''​ . Os objetos armazenam a mesma coisa, mas não são idênticos já que o atributo de classe é diferente. Essa atribuição a classe é feita pelas funções ao criar os objetos. ​  +''​integer'',​ representada por números inteiros, enquanto os outros objetos são da classe ''​numeric''​. Os objetos armazenam a mesma coisa, mas não são idênticos já que o atributo de classe é diferente. Essa atribuição a classe é feita pelas funções ao criar os objetos. ​  
  
 ===== Operações com Vetores ===== ===== Operações com Vetores =====
  
-As operações algébricas com vetores apresentam duas características importantes:​ **equivalência de posição** e **ciclagem do vetor de menor tamanho**. A **equivalência** define que os valores serão operados respeitando suas posições equivalentes entre dois ou mais vetores de mesmo tamanho. No caso de vetores de tamanhos diferentes, há a ciclagem dos elementos do vetor de menor tamanho. Nesse último caso, se o vetor maior é múltiplo do menor, não há nenhuma mensagem na operação. Caso não possa ciclar todos os elementos o mesmo número de vezes, o R opera parte do vetor menor no último ciclo e avisa com uma mensagem de alerta: ​''​longer object length is not a multiple of shorter object length''​. ​+As operações algébricas com vetores apresentam duas características importantes:​ **equivalência de posição** e **ciclagem do vetor de menor tamanho**. A **equivalência** define que os valores serão operados respeitando suas posições equivalentes entre dois ou mais vetores de mesmo tamanho. No caso de vetores de tamanhos diferentes, há a ciclagem dos elementos do vetor de menor tamanho. Nesse último caso, se o vetor maior é múltiplo do menor, não há nenhuma mensagem na operação. Caso não possa ciclar todos os elementos o mesmo número de vezes, o R opera parte do vetor menor no último ciclo e avisa com uma mensagem de alerta: '​longer object length is not a multiple of shorter object length'​. ​
  
 Estude os resultados dos comandos nos três exemplos abaixo para entender as operações com vetores. Estude os resultados dos comandos nos três exemplos abaixo para entender as operações com vetores.
Linha 77: Linha 77:
  
  
-Aqui temos a característica da **equivalência**. Os vetores de mesmos tamanhos, quando operados algebricamente,​ operam os valores ​da posições equivalentes. ​+Aqui temos a característica da **equivalência**. Os vetores de mesmos tamanhos, quando operados algebricamente,​ operam os valores ​das posições equivalentes. ​
  
  
Linha 92: Linha 92:
  
 Nesse último bloco de código temos, além da equivalência entre as posições de vetores de mesmo tamanho, algumas operações algébricas que retornam palavras reservadas no R: ''​NaN'',​ ''​Inf''​ e ''​-Inf'':​ Nesse último bloco de código temos, além da equivalência entre as posições de vetores de mesmo tamanho, algumas operações algébricas que retornam palavras reservadas no R: ''​NaN'',​ ''​Inf''​ e ''​-Inf'':​
-O ''​NaN''​ significa ​''not a number'', ou seja um valor numérico indefinido ou irrepresentável. Operações como ''​ 0/0 ''​ ou ''​ √-1 ''​ retornam ''​ NaN ''​. Dividir um número ​ real por ''​ 0 ''​ retorna ''​ Inf ''​ ou ''​ -Inf ''​((apesar de divisão por 0 não ser definida matematicamente,​ o R considera que o valor a ser dividido é muito próximo de 0)).  ​+O ''​NaN''​ significa 'not a number',​ ou seja um valor numérico indefinido ou irrepresentável. Operações como ''​0/​0''​ ou ''​√-1''​ retornam ''​NaN''​. Dividir um número ​ real por ''​0''​ retorna ''​Inf''​ ou ''​-Inf''​((apesar de divisão por 0 não ser definida matematicamente,​ o R considera que o valor a ser dividido é muito próximo de 0)).  ​
  
  
Linha 112: Linha 112:
 </​code>​ </​code>​
  
-Nestes blocos temos o princípio da ciclagem. Ao realizar operações com vetores de tamanhos diferentes, o vetor menor é ciclado, ou seja, reutilizado para a operação. Note que se o tamanho dos vetores for múltiplo ​todos as posições do vetor serão ​utilizada ​um mesmo número de vezes e o R não retorna nenhuma mensagem((lembre-se de sempre inspecionar os objetos que você criar!)). Se os vetores não forem múltiplos a operação é realizada porém com uma mensagem de aviso.+Nestes blocos temos o princípio da ciclagem. Ao realizar operações com vetores de tamanhos diferentes, o vetor menor é ciclado, ou seja, reutilizado para a operação. Note que se o tamanho dos vetores for múltiplo, todas as posições do vetor serão ​utilizadas ​um mesmo número de vezes e o R não retorna nenhuma mensagem ​de aviso((lembre-se de sempre inspecionar os objetos que você criar!)). Se os vetores não forem múltiplos a operação é realizada porém com uma mensagem de aviso.
  
  
Linha 216: Linha 216:
  
  
-onde $p_i$ é a proporção de indivíduos da espécie $i$ em relação ao total de indivíduos. A seguir construímos um objeto ​de representa ​abundâncias ​de espécies em uma comunidade ​(<​code>​abund</​code>​) e calculamos o valor do índice, usando objetos intermediários,​ sempre verificando cada passo intermediário para garantir que os objetos formados contém o valor que queremos:+onde $p_i$ é a proporção de indivíduos da espécie $i$ em relação ao total de indivíduos. A seguir construímos um objeto ​chamado ''​abund'',​ que representa ​as abundâncias ​das espécies em uma comunidade. Em seguida, ​calculamos o valor do índice, usando objetos intermediários,​ sempre verificando cada passo intermediário para garantir que os objetos formados contém o valor que queremos:
  
 <code rsplus> <code rsplus>
Linha 245: Linha 245:
 {{:​02_tutoriais:​tutorial2:​eagle.png?​250 ​ |}} {{:​02_tutoriais:​tutorial2:​eagle.png?​250 ​ |}}
  
-No código,  ​<code rsplus>​-sum(abund/​sum(abund) * log( abund/​sum(abund)))</​code>, ​ temos uma característica muito básica e fundamental da sintaxe da linguagem R. O aninhamento de funções. O interpretador do R foi desenhado para ler a linha de comando começando pelas funções mais internas e expandindo o resultado para as mais externas, de maneira análoga com o que fizemos ao calcular o valor com os objetos intermediários. No caso do código aninhado, os valores intermediários só existem durante o processamento do código.  ​+No código ​acima,  ​podemos observar ​uma característica muito básica e fundamental da sintaxe da linguagem R: o aninhamento de funções. O interpretador do R foi desenhado para ler a linha de comando começando pelas funções mais internas e expandindo o resultado para as mais externas, de maneira análoga com o que fizemos ao calcular o valor com os objetos intermediários. No caso do código aninhado, os valores intermediários só existem durante o processamento do código.  ​
  
  
Linha 275: Linha 275:
 </​code>​ </​code>​
  
-Nesse caso, se o objeto não existir nesse compartimento,​ mas estiver em outro, o R não irá considerá-lo e retornara ​a mensagem de erro que o objeto não foi encontrado. Veja o código a seguir:+Nesse caso, se o objeto não existir nesse compartimento,​ mas estiver em outro, o R não irá considerá-lo e retornará ​a mensagem de erro que o objeto não foi encontrado. Veja o código a seguir:
  
    
Linha 284: Linha 284:
  
  
- 
-<WRAP center round important 80%> 
- 
-{{:​02_tutoriais:​tutorial2:​int_pi.png?​400|}} 
- 
-</​WRAP>​ 
  
 ===== Distribuições Probabilísticas ===== ===== Distribuições Probabilísticas =====
Linha 298: Linha 292:
 </​WRAP>​ </​WRAP>​
  
-Como não poderia deixar de ser para uma ferramenta de análise de dados, o R contém muitas distribuições probabilísticas no pacote ''​stats'',​ carregado ​por padrão ​quando iniciamos uma sessão no R. +R contém muitas distribuições probabilísticas no pacote ''​stats'',​ carregado ​automaticamente ​quando iniciamos uma sessão no R. 
  
 Vamos entender como essas distribuições são utilizadas no R com um exemplo de dados. Vamos entender como essas distribuições são utilizadas no R com um exemplo de dados.
Linha 309: Linha 303:
   * a distribuição de largura do quadril é bem representada por uma distribuição probabilística normal   * a distribuição de largura do quadril é bem representada por uma distribuição probabilística normal
  
-A partir desses dois parâmetros (média e desvio) da distribuição normal podemos, por exemplo, simular os dados de uma amostra de 200 tamanhos de quadris no R. A função ''​rnorm''​ faz a simulação de amostras aleatórias de uma distribuição normal e tem como argumentos ''​n''​ que é o tamanho amostral, ''​ mean ''​ e ''​ sd '',​ que são os parâmetros que definem a distribuição normal.+A partir desses dois parâmetros (média e desvio) da distribuição normal podemos, por exemplo, simular os dados de uma amostra de 200 tamanhos de quadris no R. A função ''​rnorm''​ faz a simulação de amostras aleatórias de uma distribuição normal e tem como argumentos ''​n''​ que é o tamanho amostral, ''​mean''​ e ''​sd'',​ que são os parâmetros que definem a distribuição normal.
  
 <code rsplus> <code rsplus>
Linha 336: Linha 330:
 </​code> ​ </​code> ​
  
-Como entendemos todos os comando ​acima, podemos refazer a simulação de amostra e contar as mulheres que não caberiam nos assentos de avião em uma única linha. Agora vamos repetir a nossa amostra 10x:+Como entendemos todos os comandos ​acima, podemos refazer a simulação de amostra e contar as mulheres que não caberiam nos assentos de avião em uma única linha. Agora vamos repetir a nossa amostra 10x:
  
  
Linha 373: Linha 367:
  
 Por volta de 5% das mulheres não caberiam nessas poltronas, o que não parece lá muito simpático por parte das companhias aéreas!  ​ Por volta de 5% das mulheres não caberiam nessas poltronas, o que não parece lá muito simpático por parte das companhias aéreas!  ​
-Vamos nos perguntar outra coisa, por exemplo, qual o tamanho de assento ​que caberiam 99% das mulheres de cerca de vinte anos? Para extrair esse valor diretamente da distribuição normal teórica, usamos a função ''​qnorm''​.+Vamos nos perguntar outra coisa, por exemplo, qual o tamanho de assento ​no qual caberiam 99% das mulheres de cerca de vinte anos? Para extrair esse valor diretamente da distribuição normal teórica, usamos a função ''​qnorm''​.
  
 <code rsplus> <code rsplus>
Linha 462: Linha 456:
 ===== Qui-quadrado na unha ===== ===== Qui-quadrado na unha =====
 Vamos fechar com um exemplo hipotético de um estudo de preferência alimentar. ​ Vamos fechar com um exemplo hipotético de um estudo de preferência alimentar. ​
-Nosso ecólogo virtual estimou a proporção de cinco tipos de itens alimentares para uma espécie de ave em uma área. Esses itens estavam disponíveis na proporção de 60%, 28%, 9%, 2,5% e 0,5%. No mesmo local, amostrou ao acaso eventos de alimentação desta ave, contando quantos eventos foram de consumo de cada um dos itens. Os resultados das contagens dos eventos de alimentação foram 544, 285, 117, 54, 12, para cada um dos itens respectivamente.  ​+Nosso ecólogo virtual estimou a proporção de cinco tipos de itens alimentares para uma espécie de ave em uma área. Esses itens estavam disponíveis na proporção de 60%, 28%, 9%, 2,5% e 0,5%. No mesmo local, amostrou-se ao acaso eventos de alimentação desta ave, contando quantos eventos foram de consumo de cada um dos itens. Os resultados das contagens dos eventos de alimentação foram 544, 285, 117, 54, 12, para cada um dos itens respectivamente.  ​
  
 Vamos criar os objetos com estes valores: ​ Vamos criar os objetos com estes valores: ​
Linha 491: Linha 485:
 qui2 qui2
 </​code>​ </​code>​
-Qual a chance de um valor de Qui-quadrado maior ou igual a este ocorrer por acaso (ou seja, mesmo que não haja preferência)?​ Como são cinco itens alimentares,​ temos quatro graus de liberdade, e o que queremos saber é a probabilidade ​do Qui-quadrado sob a hipótese nula ter um valor igual ou maior ao observado. Obtemos isto com a função de probabilidade acumulada da distribuição de Qui-quadrado:​+Qual a chance de um valor de Qui-quadrado maior ou igual a este ocorrer por acaso (ou seja, mesmo que não haja preferência)?​ Como são cinco itens alimentares,​ temos quatro graus de liberdade, e o que queremos saber é: qual a probabilidade ​de encontrarmos ​diferença observada em relação ao esperado ou maiores, em um cenário onde a espécie não tem preferência alimentar (hipótese nula)  ​Obtemos isto com a função de probabilidade acumulada da distribuição de Qui-quadrado:​
 <code rsplus> <code rsplus>
 pchisq(q = qui2, df = 4, lower.tail = FALSE) pchisq(q = qui2, df = 4, lower.tail = FALSE)
Linha 507: Linha 501:
 <code rsplus> <code rsplus>
 ## Faz o grafico da funcao Qui-quadrado com 4 graus de liberdade, ## Faz o grafico da funcao Qui-quadrado com 4 graus de liberdade,
-## veja ajuda funcao curve+## veja ajuda da funcao curve
 curve(dchisq(x,​ df = 4), 0, 70, xlab = "​Qui-quadrado,​ 4 g.l.", ylab = "​Densidade probabilística"​) curve(dchisq(x,​ df = 4), 0, 70, xlab = "​Qui-quadrado,​ 4 g.l.", ylab = "​Densidade probabilística"​)
 ## Sobrepoe uma linha vermelha a partir ​ ## Sobrepoe uma linha vermelha a partir ​
Linha 523: Linha 517:
 [[https://​www.monkeyuser.com/​2019/​code-entropy/​|{{:​02_tutoriais:​tutorial2:​119-code-entropy.png?​400 ​ |}}]] [[https://​www.monkeyuser.com/​2019/​code-entropy/​|{{:​02_tutoriais:​tutorial2:​119-code-entropy.png?​400 ​ |}}]]
  
-As linguagens de programação,​ assim como as linguagens naturais, estão em constante modificação. Existe na comunidade do R um principio de novo //dialeto// que foi chamado de  ''​tidyverse''​. Esse conjunto de pacotes propõem formas mais compactas ​códigos ​mais simples ​para manipular e grafar dados((Há muito fãs e muitos críticos dessa nova sintaxe do R. Para saber mais, veja o artigo [[https://​github.com/​matloff/​TidyverseSkeptic|Tidyverse Skeptic]] de Norman Matloff, professor da Universidade da California. ​ )). Este curso é baseado na forma mais original da linguagem contida nos pacotes básicos da distribuição do R e sem a pretensão de ensinar esse novo paradigma. Entretanto, irão encontrar muita documentação que usa essa filosofia. Uma das dificuldades para entender o código nesse //dialeto// é a introdução do conceito de canalização ​ de procedimentos,​ onde o resultado de uma função pode ser direcionada a outra através do //pipe// (''​%>​%''​). Essa ferramenta, que está no pacote ''​magrittr'',​ modifica bastante a lógica de funções aninhadas do interpretador do R. Abaixo listamos alguns dos conceitos básicos para entender os códigos em ''​tidyverse'':​+As linguagens de programação,​ assim como as linguagens naturais, estão em constante modificação. Existe na comunidade do R um movimento com um novo //dialeto// que foi chamado de  ''​tidyverse''​. Esse conjunto de pacotes propõem formas mais compactas ​de códigos para manipular e grafar dados((Como toda boa polêmica existem muitos apoiadores ​e muitos críticos dessa nova sintaxe do R. Para saber mais, veja o artigo [[https://​github.com/​matloff/​TidyverseSkeptic|Tidyverse Skeptic]] de Norman Matloff, professor da Universidade da California. )). Este curso é baseado na forma mais original da linguagem contida nos pacotes básicos da distribuição do R e sem a pretensão de ensinar esse novo dialeto. Entretanto, irão encontrar muita documentação que usa essa filosofia. Uma das dificuldades para entender o código nesse //dialeto// é a introdução do conceito de canalização ​ de procedimentos,​ onde o resultado de uma função pode ser direcionada a outra através do //pipe// (''​%>​%''​). Essa ferramenta, que está no pacote ''​magrittr'',​ modifica bastante a lógica de funções aninhadas do interpretador do R. Abaixo listamos alguns dos conceitos básicos para entender os códigos em ''​tidyverse'':​
  
   * ''​x %>% f''​ é equivalente a ''​f(x)''​   * ''​x %>% f''​ é equivalente a ''​f(x)''​
02_tutoriais/tutorial2/start.1653599005.txt.gz · Última modificação: 2022/05/26 18:03 por adalardo