Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
| 03_apostila:03-funcoes [2023/08/14 19:05] – edição externa 127.0.0.1 | 03_apostila:03-funcoes [2025/08/18 13:37] (atual) – edição externa 127.0.0.1 | ||
|---|---|---|---|
| Linha 1: | Linha 1: | ||
| + | <WRAP tabs> | ||
| + | * [[02_tutoriais: | ||
| + | * [[01_curso_atual: | ||
| + | * [[03_apostila: | ||
| + | </ | ||
| + | |||
| + | ====== 2. Funções Matemáticas e Estatísticas ====== | ||
| + | |||
| + | ===== O R como uma Calculadora Fora do Comum ===== | ||
| + | |||
| + | |||
| + | ==== Operações Aritméticas Básicas ==== | ||
| + | |||
| + | A linha de comando do R funciona como uma calculadora. As principais operações aritméticas | ||
| + | e funções matemáticas estão disponíveis. Exemplo: | ||
| + | |||
| + | <code rsplus> | ||
| + | > 4 + 9 | ||
| + | [1] 13 | ||
| + | > 4 - 5 | ||
| + | [1] -1 | ||
| + | > 4 * 5 | ||
| + | [1] 20 | ||
| + | > 4 / 5 | ||
| + | [1] 0.8 | ||
| + | > 4^5 | ||
| + | [1] 1024 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | A notação básica de operações algébricas, | ||
| + | também pode ser utilizada: | ||
| + | <code rsplus> | ||
| + | > (4 + 5 ) * 7 - (36/18)^3 | ||
| + | [1] 55 | ||
| + | > (2 * ( 2 * ( 2 * (3-4)))) | ||
| + | [1] -8 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Note que somente os parênteses podem ser utilizados nas expressões matemáticas. As chaves (" | ||
| + | <code rsplus> | ||
| + | > (2 * { 2 * [ 2 * (3-4)]}) | ||
| + | Error: syntax error in "(2 * { 2 * [" | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Por que o R é uma calculadora **fora do comum** ? Experimente fazer a seguinte operação matemática na sua calculadora: | ||
| + | <code rsplus> | ||
| + | > 1 - (1 + 10^(-15)) | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Funções Matemáticas Comuns ==== | ||
| + | |||
| + | As funções matemáticas comuns também estão disponíveis e podem ser aplicadas diretamente na linha de comando: | ||
| + | <code rsplus> | ||
| + | > sqrt(9) | ||
| + | [1] 3 | ||
| + | > abs( - 1 ) # Módulo ou valor absoluto | ||
| + | [1] 1 | ||
| + | > abs( 1 ) | ||
| + | [1] 1 | ||
| + | > log( 10 ) # Logaritmo natural ou neperiano | ||
| + | [1] 2.302585 | ||
| + | > log( 10, base = 10) # Logaritmo base 10 | ||
| + | [1] 1 | ||
| + | > log10(10) | ||
| + | [1] 1 | ||
| + | > log( 10, base = 3.4076) # Logaritmo base 3.4076 | ||
| + | [1] 1.878116 | ||
| + | > exp( 1 ) # Exponencial | ||
| + | [1] 2.718282 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | As funções trigonométricas: | ||
| + | <code rsplus> | ||
| + | > sin(0.5*pi) | ||
| + | [1] 1 | ||
| + | > cos(2*pi) | ||
| + | [1] 1 | ||
| + | > tan(pi) | ||
| + | [1] -1.224647e-16 | ||
| + | > | ||
| + | > asin(1) | ||
| + | [1] 1.570796 | ||
| + | > asin(1) / pi * 180 | ||
| + | [1] 90 | ||
| + | > | ||
| + | > acos(0) | ||
| + | [1] 1.570796 | ||
| + | > acos(0) / pi * 180 | ||
| + | [1] 90 | ||
| + | > atan(0) | ||
| + | [1] 0 | ||
| + | > atan(0) / pi * 180 | ||
| + | [1] 0 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Funções para arredondamento: | ||
| + | <code rsplus> | ||
| + | > ceiling( 4.3478 ) | ||
| + | [1] 5 | ||
| + | > floor( 4.3478 ) | ||
| + | [1] 4 | ||
| + | > round( 4.3478 ) | ||
| + | [1] 4 | ||
| + | > round( 4.3478 , digits=3) | ||
| + | [1] 4.348 | ||
| + | > round( 4.3478 , digits=2) | ||
| + | [1] 4.35 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | Funções matemáticas de especial interesse estatístico: | ||
| + | <code rsplus> | ||
| + | > factorial( 4 ) # Fatorial de 4 | ||
| + | [1] 24 | ||
| + | > choose(10, 3) # Coeficientes binomiais: combinação de 10 3-a-3 | ||
| + | [1] 120 | ||
| + | > gamma(1.2) | ||
| + | [1] 0.9181687 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ==== Criando Variáveis com Atribuição==== | ||
| + | |||
| + | Mais do que simples operações aritméticas, | ||
| + | |||
| + | Para definir uma variável, basta escolher um nome (// | ||
| + | <code rsplus> | ||
| + | |||
| + | > a = 3.6 | ||
| + | > b = sqrt( 35 ) | ||
| + | > c = -2.1 | ||
| + | > a | ||
| + | [1] 3.6 | ||
| + | > b | ||
| + | [1] 5.91608 | ||
| + | > c | ||
| + | [1] -2.1 | ||
| + | > | ||
| + | > a * b / c | ||
| + | [1] -10.14185 | ||
| + | > b^c | ||
| + | [1] 0.02391820 | ||
| + | > a + exp(c) - log(b) | ||
| + | [1] 1.944782 | ||
| + | > | ||
| + | > a - b * c / d | ||
| + | Error: object " | ||
| + | </ | ||
| + | |||
| + | Não esqueça de definir as variáveis previamente!! | ||
| + | |||
| + | |||
| + | === Exercícios === | ||
| + | |||
| + | <box left red 80% | **Exercício 2.1. //Estimador de Pollard// | ||
| + | |||
| + | Pollard (1971) propôs o seguinte estimador para estimar a densidade no método de | ||
| + | quadrantes: | ||
| + | |||
| + | $$\hat{N} = \frac{4(4n-1)}{\pi \sum_{i=1}^n \sum_{j=1}^4 r_{ij}^2} $$ | ||
| + | |||
| + | onde, $r_{ij}$ é a distância de árvore do quadrante $j$ no | ||
| + | ponto $i$ ao centro do ponto quadrante e $n$ é o número de pontos quadrantes. | ||
| + | |||
| + | A variância desse estimador é: | ||
| + | |||
| + | $$Var(\hat{N_p}) = \frac{\hat{N_p}}{4n-2}$$ | ||
| + | |||
| + | Imagine que foram amostrados 30 quadrantes, e que o valor da soma do quadrado das distâncias de cada árvore ao centro de seu quadrante foi de: | ||
| + | |||
| + | $$\sum_{i=1}^{30} \sum_{j=1}^4 r_{ij}^2 = 2531,794$$ | ||
| + | |||
| + | |||
| + | - Qual a densidade estimada? | ||
| + | - Qual a variância? | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <box left red 80% | **Exercício 2.2. //Área transversal de uma Árvore//** > | ||
| + | |||
| + | A área transversal de uma árvore é calculada assumindo que a secção transversal | ||
| + | do tronco à altura do peito (1,3m) é perfeitamente circular. | ||
| + | Se o diâmetro à altura do peito (DAP) de uma árvore for 13.5cm, qual | ||
| + | a área transversal? | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <box left red 80% | **Exercício 2.3. //Área transversal de uma Árvore (Revisitado)// | ||
| + | |||
| + | Se uma árvore possui três fustes com DAPs de: 7cm, 9cm e 12cm, qual | ||
| + | a sua área transversal de cada fuste? | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <box left red 80% | **Exercício 2.4. //Cálculo da Biomassa de Árvores do Cerrado// | ||
| + | |||
| + | O modelo alométrico de biomassa ajustado para árvores do Cerradão | ||
| + | estabelece que a biomassa é dada pela expressão: | ||
| + | |||
| + | $$\hat{b} = e^{-1,7953} d^{2.2974}$$ | ||
| + | |||
| + | onde '' | ||
| + | '' | ||
| + | |||
| + | Já um outro modelo para biomassa das árvores na | ||
| + | mesma situação tem a forma: | ||
| + | |||
| + | $$\hat{ln(b)} = -2.6464 + 1,996ln(d) + 0, | ||
| + | |||
| + | |||
| + | onde '' | ||
| + | |||
| + | Para uma árvore com DAP de 15//cm// e altura de 12//m//, os | ||
| + | modelos resultarão em estimativas muito distintas? | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ==== Mantendo a Coerência Lógica-Matemática ==== | ||
| + | |||
| + | |||
| + | O R também lida com operações matemáticas que envolvem **elementos infinitos** e **elementos indeterminados**: | ||
| + | |||
| + | > 1/0 | ||
| + | [1] Inf | ||
| + | > -5/0 | ||
| + | [1] -Inf | ||
| + | > 500000000000000000/ | ||
| + | [1] 0 | ||
| + | > 0/0 | ||
| + | [1] NaN | ||
| + | > Inf/Inf | ||
| + | [1] NaN | ||
| + | > log(0) | ||
| + | [1] -Inf | ||
| + | > exp(-Inf) | ||
| + | [1] 0 | ||
| + | > sqrt(Inf) | ||
| + | [1] Inf | ||
| + | > sqrt(-1) | ||
| + | [1] NaN | ||
| + | Warning message: | ||
| + | NaNs produced in: sqrt(-1) | ||
| + | > 2 * NA | ||
| + | [1] NA | ||
| + | > 2 * NaN | ||
| + | [1] NaN | ||
| + | > NA / 10 | ||
| + | [1] NA | ||
| + | > NaN / -1 | ||
| + | [1] NaN | ||
| + | |||
| + | |||
| + | Note que determinadas **palavras** (além do nome das funções) estão reservadas no R, pois são utilizadas com significado especial: | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | |||
| + | Na operações matemáticas, | ||
| + | |||
| + | |||
| + | |||
| + | === Exercícios === | ||
| + | |||
| + | |||
| + | <box left red 80% | //**2.5. Exercício Conceitual: | ||
| + | |||
| + | O que acontece se você criar uma variável com o nome '' | ||
| + | <code rsplus> | ||
| + | > pi = 10 | ||
| + | </ | ||
| + | O que acontece com a constante //pi//? | ||
| + | |||
| + | E se for criada uma constante de nome '' | ||
| + | |||
| + | **DICA:** O que faz a função '' | ||
| + | <code rsplus> | ||
| + | > search() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | <box left red 80%| //**2.6. Exercício Conceitual: | ||
| + | |||
| + | Como se caracteriza uma **observação perdida**? | ||
| + | |||
| + | Quando o diâmetro de uma árvore deve ter o valor **zero** ou o valor **NA**? | ||
| + | |||
| + | E o peso de um animal? | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== O R como uma Calculadora Vetorial ===== | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Criação de Vetores ==== | ||
| + | |||
| + | |||
| + | O R, e a linguagem S, foram criados para operar não apenas // | ||
| + | |||
| + | O R é um ambiente **vetorial**, | ||
| + | que genericamente chamaremos de vetores((No R, " | ||
| + | |||
| + | Uma definição mais detalhada dos vetores está [[04-dados# | ||
| + | |||
| + | |||
| + | === Concatenação de Elementos em um Vetor: a Função " | ||
| + | |||
| + | Para criar um vetor, podemos usar a função '' | ||
| + | os argumentos dados a ela, formando um vetor: | ||
| + | <code rsplus> | ||
| + | > a = c(1, 10, 3.4, pi, pi/4, exp(-1), log( 2.23 ), sin(pi/7) ) | ||
| + | > a | ||
| + | [1] 1.0000000 10.0000000 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | === Criação de Sequências: | ||
| + | |||
| + | Para criar vetores de números com intervalo fixo unitário (intervalo de 1) se utiliza o //operador sequencial// | ||
| + | <code rsplus> | ||
| + | > b = 1:8 | ||
| + | > b | ||
| + | [1] 1 2 3 4 5 6 7 8 | ||
| + | > c = 20:32 | ||
| + | > c | ||
| + | [1] 20 21 22 23 24 25 26 27 28 29 30 31 32 | ||
| + | > d = 2.5:10 | ||
| + | > d | ||
| + | [1] 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 | ||
| + | </ | ||
| + | |||
| + | Uma forma mais flexível de criar sequências de números (inteiros ou reais) é usando a função '' | ||
| + | <code rsplus> | ||
| + | > seq(10, 30) | ||
| + | [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | ||
| + | > seq(10, 30, by=2) | ||
| + | [1] 10 12 14 16 18 20 22 24 26 28 30 | ||
| + | > seq(1.5, 7.9, length=20) | ||
| + | [1] 1.500000 1.836842 2.173684 2.510526 2.847368 3.184211 3.521053 3.857895 | ||
| + | [9] 4.194737 4.531579 4.868421 5.205263 5.542105 5.878947 6.215789 6.552632 | ||
| + | [17] 6.889474 7.226316 7.563158 7.900000 | ||
| + | </ | ||
| + | |||
| + | === Vetores de Valores Repetidos: Função " | ||
| + | |||
| + | Também é fácil criar uma sequência de números repetidos utilizando a função '' | ||
| + | <code rsplus> | ||
| + | > rep(5, 3) | ||
| + | [1] 5 5 5 | ||
| + | > rep(1:5, 3) | ||
| + | [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 | ||
| + | > rep(1: | ||
| + | [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Exercícios === | ||
| + | |||
| + | <box left red | // | ||
| + | |||
| + | Uma palmeira perfilhada possui 10 fustes com os seguintes diâmetros: 5, 6, 7, 5, 10, 11, 6, 8, 9 e 7. | ||
| + | |||
| + | Crie um vetor '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Vetores: Operações Matemáticas | ||
| + | |||
| + | Todas operações matemáticas aplicadas sobre um vetor, serão aplicadas sobre cada elemento desse vetor: | ||
| + | <code rsplus> | ||
| + | > 2 * a | ||
| + | [1] 2.0000000 20.0000000 | ||
| + | [8] 0.8677675 | ||
| + | > sqrt( a ) | ||
| + | [1] 1.0000000 3.1622777 1.8439089 1.7724539 0.8862269 0.6065307 0.8955454 | ||
| + | [8] 0.6586985 | ||
| + | > | ||
| + | > log( a ) | ||
| + | [1] 0.0000000 | ||
| + | [8] -0.8349787 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Se as variáveis que trabalhamos são vetores, operações matemáticas entre variáveis serão realizadas | ||
| + | pareando os elementos dos vetores: | ||
| + | <code rsplus> | ||
| + | > a* b | ||
| + | [1] 1.000000 20.000000 10.200000 12.566371 | ||
| + | [8] 3.471070 | ||
| + | > a - b | ||
| + | [1] 0.0000000 | ||
| + | [8] -7.5661163 | ||
| + | > a^(1/b) | ||
| + | [1] 1.0000000 3.1622777 1.5036946 1.3313354 0.9528356 0.8464817 0.9689709 | ||
| + | [8] 0.9008898 | ||
| + | > | ||
| + | > sqrt( a ) | ||
| + | [1] 1.0000000 3.1622777 1.8439089 1.7724539 0.8862269 0.6065307 0.8955454 | ||
| + | [8] 0.6586985 | ||
| + | > log( b ) | ||
| + | [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 1.7917595 1.9459101 | ||
| + | [8] 2.0794415 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | === Comprimento de Vetores e a Função " | ||
| + | |||
| + | A função '' | ||
| + | <code rsplus> | ||
| + | > a <- seq(from=0, to=10, by=2) | ||
| + | > a | ||
| + | [1] 0 2 4 6 8 10 | ||
| + | > length(a) | ||
| + | [1] 6 | ||
| + | > length(1: | ||
| + | [1] 20 | ||
| + | > length(rep(1: | ||
| + | [1] 100 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | === A Regra da Ciclagem === | ||
| + | |||
| + | O comprimento é muito importante para as operações vetoriais, pois o R permite operações entre dois vetores de comprimentos diferentes, com a seguinte regra: | ||
| + | |||
| + | <box red |**Ciclagem de Valores**> | ||
| + | |||
| + | Quando o comprimento do vetor maior não é múltiplo do comprimento do maior, o R retorna o resultado e um aviso: | ||
| + | |||
| + | <code rsplus> | ||
| + | > b | ||
| + | [1] 0 0 0 0 0 1 1 1 1 1 | ||
| + | > c | ||
| + | [1] 1 2 3 | ||
| + | > c*b | ||
| + | [1] 0 0 0 0 0 3 1 2 3 1 | ||
| + | Warning message: | ||
| + | In c * b : longer object length ' | ||
| + | > length(b) | ||
| + | [1] 10 | ||
| + | > length(c) | ||
| + | [1] 3 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Mas se o comprimento do vetor maior é um múltiplo do maior, o R retorna apenas o resultado, sem nenhum alerta: | ||
| + | |||
| + | <code rsplus> | ||
| + | > a | ||
| + | [1] 1 2 | ||
| + | > b | ||
| + | [1] 0 0 0 0 0 1 1 1 1 1 | ||
| + | > a*b | ||
| + | [1] 0 0 0 0 0 2 1 2 1 2 | ||
| + | > length(b)/ | ||
| + | [1] 5 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Portanto **muito cuidado com as operações entre vetores de diferentes comprimentos**. A regra da ciclagem é um recurso poderoso da linguagem R ((A vantagem mais óbvia da regra da ciclagem é a possibilidade de multiplicação de um vetor por um valor único. Você compreende por que?)), mas se você não tiver clareza do que deseja fazer, pode obter resultados indesejados. | ||
| + | |||
| + | === Exercícios === | ||
| + | |||
| + | <box left red | // | ||
| + | |||
| + | Uma palmeira perfilhada possui 10 fustes com os seguintes diâmetros: 5, 6, 7, 5, 10, 11, 6, 8, 9 e 7. | ||
| + | |||
| + | - Calcule a área transversal de cada fuste dessa palmeira. Guarde este resultado em novo objeto. | ||
| + | - Calcule a média das áreas transversais, | ||
| + | - Calcule a variância das áreas transversais, | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | <box left red | // | ||
| + | |||
| + | Como construir uma sequência que representa o aumento do número | ||
| + | de bits por byte de computador, quando se dobra o tamanho dos bytes? | ||
| + | |||
| + | Essa sequência numérica parte do 2 e dobra os valores a cada passo. | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Vetores: Operações Estatísticas | ||
| + | |||
| + | As funções matemáticas sobre vetores operam // | ||
| + | <code rsplus> | ||
| + | > mean( a ) | ||
| + | [1] 2.491344 | ||
| + | > var( b ) | ||
| + | [1] 6 | ||
| + | > max( c ) | ||
| + | [1] 32 | ||
| + | > sd( a ) | ||
| + | [1] 3.259248 | ||
| + | > sum( c ) | ||
| + | [1] 338 | ||
| + | > min( b ) | ||
| + | [1] 1 | ||
| + | > range( c ) | ||
| + | [1] 20 32 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Algumas funções úteis que não são estatísticas, | ||
| + | <code rsplus> | ||
| + | > a | ||
| + | [1] 1.0000000 10.0000000 | ||
| + | [8] 0.4338837 | ||
| + | > sort(a) | ||
| + | [1] 0.3678794 | ||
| + | [8] 10.0000000 | ||
| + | > rev(sort(a)) | ||
| + | [1] 10.0000000 | ||
| + | [8] 0.3678794 | ||
| + | > cumsum(sort(a)) | ||
| + | [1] 0.3678794 | ||
| + | [8] 19.9307556 | ||
| + | > cumsum(a) | ||
| + | [1] 1.00000 11.00000 14.40000 17.54159 18.32699 18.69487 19.49687 19.93076 | ||
| + | > diff(a) | ||
| + | [1] 9.0000000 -6.6000000 -0.2584073 -2.3561945 -0.4175187 | ||
| + | > diff( seq(10, 34, length=15) ) | ||
| + | [1] 1.714286 1.714286 1.714286 1.714286 1.714286 1.714286 1.714286 1.714286 | ||
| + | [9] 1.714286 1.714286 1.714286 1.714286 1.714286 1.714286 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Exercícios === | ||
| + | |||
| + | <box left red 100% | // | ||
| + | |||
| + | As leituras mensais do medidor de consumo de eletricidade de uma casa foram: | ||
| + | ^Jan^Fev^Mar^Abr^Mai^Jun^Jul^Ago^Set^Out^Nov^Dez^ | ||
| + | |9839|10149|10486|10746|11264|11684|12082|12599|13004|13350|13717|14052| | ||
| + | |||
| + | - Calcule o consumo de cada mês neste período. | ||
| + | - Qual foi o máximo e mínimo de consumo mensal? | ||
| + | - Qual a média, mediana e variância dos consumos mensais? | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | ===== As Funções no R ===== | ||
| + | |||
| + | Já foi visto que ao se digitar o nome de uma função na linha de comando, o R retorna o **código** da função. Veja a diferença de: | ||
| + | <code rsplus> | ||
| + | > ls() | ||
| + | </ | ||
| + | para: | ||
| + | <code rsplus> | ||
| + | > ls | ||
| + | </ | ||
| + | |||
| + | |||
| + | A maioria das funções precisa de certas **informações** para orientar o seu procedimento, | ||
| + | |||
| + | Os argumentos de qualquer função são detalhadamente explicados nas páginas de ajuda sobre a função. | ||
| + | <code rsplus> | ||
| + | > args(ls) | ||
| + | function (name, pos = -1, envir = as.environment(pos), | ||
| + | pattern) | ||
| + | NULL | ||
| + | > args(q) | ||
| + | function (save = " | ||
| + | NULL | ||
| + | > args(save.image) | ||
| + | function (file = " | ||
| + | safe = TRUE) | ||
| + | NULL | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Algumas funções, entretanto, são primitivas ou internas e seus argumentos não são apresentados. Geralmente, nesses casos os argumentos são bastante óbvios: | ||
| + | <code rsplus> | ||
| + | > args(sin) | ||
| + | NULL | ||
| + | > sin | ||
| + | .Primitive(" | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Outras funções simplesmente não possuem argumentos: | ||
| + | <code rsplus> | ||
| + | > args(getwd) | ||
| + | function () | ||
| + | NULL | ||
| + | > getwd | ||
| + | function () | ||
| + | .Internal(getwd()) | ||
| + | < | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | Ao observar o resultado da função ''' | ||
| + | <code rsplus> | ||
| + | > args(save.image) | ||
| + | function (file = " | ||
| + | safe = TRUE) | ||
| + | NULL | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Se o usuário simplesmente evocar a função ''' | ||
| + | |||
| + | |||
| + | |||
| + | === Exercícios === | ||
| + | |||
| + | <box left red 100% | // | ||
| + | Quais são os argumentos (e seus valores default) das seguintes funções: | ||
| + | * **mean** | ||
| + | * **sd** | ||
| + | * **range** | ||
| + | * **cumsum** | ||
| + | </ | ||
| + | |||
| + | |||
| + | <box left red 100% | // | ||
| + | Quais são os argumentos (e seus valores default) das funções: | ||
| + | * **sort** | ||
| + | * **log** | ||
| + | * **seq** | ||
| + | |||
| + | O que é o argumento **". . ."**? | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Distribuições Estatísticas: | ||
| + | |||
| + | |||
| + | Sendo um ambiente para análise de dados, o R dispõe de um grande conjunto de funções para trabalhar com // | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Distribuição Normal ==== | ||
| + | |||
| + | A distribuição Normal é a distribuição central da teoria estatística. Para gerar uma amostra de observações de uma distribuição normal utilizamos a função '' | ||
| + | <code rsplus> | ||
| + | > args( rnorm ) | ||
| + | function (n, mean = 0, sd = 1) | ||
| + | NULL | ||
| + | > vn1 = rnorm( 1000, mean = 40, sd = 9 ) | ||
| + | > mean( vn1 ) | ||
| + | [1] 39.47248 | ||
| + | > sd( vn1 ) | ||
| + | [1] 8.523735 | ||
| + | > range( vn1 ) | ||
| + | [1] 14.93126 62.11959 | ||
| + | > | ||
| + | > vn2 = rnorm( 100000, mean = 40, sd = 9 ) | ||
| + | > mean( vn2 ) | ||
| + | [1] 40.02547 | ||
| + | > sd( vn2 ) | ||
| + | [1] 9.025218 | ||
| + | > range( vn2 ) | ||
| + | [1] 3.40680 78.25496 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | Se quisermos saber a // | ||
| + | <code rsplus> | ||
| + | > args(pnorm ) | ||
| + | function (q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) | ||
| + | NULL | ||
| + | > | ||
| + | > pnorm( 1.96, mean = 0 , sd = 1 ) | ||
| + | [1] 0.9750021 | ||
| + | > pnorm( 1.96 ) | ||
| + | [1] 0.9750021 | ||
| + | > | ||
| + | > pnorm( 27, mean = 20, sd = 7 ) | ||
| + | [1] 0.8413447 | ||
| + | > pnorm( 13, mean = 20, sd = 7 ) | ||
| + | [1] 0.1586553 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | Se quisermos obter o valor de um //quantil// da distribuição normal utilizamos a função '' | ||
| + | <code rsplus> | ||
| + | > args( qnorm ) | ||
| + | function (p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) | ||
| + | NULL | ||
| + | > qnorm( 0.90 ) | ||
| + | [1] 1.281552 | ||
| + | > qnorm( 0.30 ) | ||
| + | [1] -0.5244005 | ||
| + | > | ||
| + | > qnorm( 0.90, 20, 7) | ||
| + | [1] 28.97086 | ||
| + | > qnorm( 0.30, 20, 7) | ||
| + | [1] 16.32920 | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | A função '' | ||
| + | <code rsplus> | ||
| + | > args( dnorm ) | ||
| + | function (x, mean = 0, sd = 1, log = FALSE) | ||
| + | NULL | ||
| + | > x = seq(-4, 4, length=10000) | ||
| + | > | ||
| + | > plot(x, dnorm(x)) | ||
| + | > points(x, dnorm(x, sd=2)) | ||
| + | > | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | === Exercícios === | ||
| + | |||
| + | <box left red 100% | // | ||
| + | |||
| + | Tomando uma variável que segue a Distribuição Normal, o que acontece com a //amplitude de variação// | ||
| + | |||
| + | **Dica:** use as funções '' | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <box left red 100% | // | ||
| + | Qual o intervalo da Distribuição Normal Padronizada que têm a média no centro e contém 50% das observações? | ||
| + | |||
| + | </ | ||
| + | |||
| + | <box left red 100% | // | ||
| + | Qual a probabilidade de uma observação da variável Normal Padronizada estar no intervalo [-1.96 , 1.96]? | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== As Funções que Operam em Distribuições Estatísticas ==== | ||
| + | |||
| + | O que foi apresentado para Distribuição Normal pode ser generalizado para todas as distribuições que o R trabalha. | ||
| + | |||
| + | Há quatro funções para se trabalhar com distribuições estatísticas: | ||
| + | * **d**// | ||
| + | * **p**// | ||
| + | * **q**// | ||
| + | * **r**// | ||
| + | |||
| + | No caso da Distribuição Normal: //distrib// = '' | ||
| + | |||
| + | <box 70% orange centered | **DISTRIBUIÇÕES ESTATÍSTICAS NO R**> | ||
| + | ^ Distribuição ^ Nome no R ^ Parâmetros((os argumentos de cada função incluem estes parâmetros, | ||
| + | | beta | beta | shape1, shape2, ncp | | ||
| + | | binomial | ||
| + | | Cauchy | ||
| + | | qui-quadrado | chisq | df, ncp | | ||
| + | | exponential | ||
| + | | F | f | df1, df2, ncp | | ||
| + | | gamma | gamma | shape, scale | | ||
| + | | geométrica | ||
| + | | hypergeométrica | hyper | m, n, k | | ||
| + | | log-normal | ||
| + | | logística | ||
| + | | binomial negativa | nbinom | ||
| + | | normal | ||
| + | | Poisson | ||
| + | | t de Student | t | df, ncp | | ||
| + | | uniforme | ||
| + | | Weibull | ||
| + | | Wilcoxon | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Exercícios === | ||
| + | |||
| + | <box left red 100% | // | ||
| + | Você realizou um teste //t// de Student bilateral e obteve o valor //t = 2.2// com 19 graus de liberdade. | ||
| + | |||
| + | O teste é significativo ao nível de probabilidade de 5%? E se o valor observado fosse //t = 1.9//? | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <box left red 100% | // | ||
| + | Você realizou um teste //F// e obteve o valor //F = 2.2// com 19 graus de liberdade no numerador e 24 graus de liberdade no denominador. | ||
| + | |||
| + | O teste é significativo ao nível de probabilidade de 5%? E se o valor observado fosse //F = 2.5//? | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <box left red 100% | // | ||
| + | Gere duas amostras (p.ex.: //x// e //y//) de tamanho 1000 (n=1000) de números da distribuição Uniforme. | ||
| + | |||
| + | Faça um gráfico plotando uma amostra contra a outra ('' | ||
| + | |||
| + | Você consegue explicá-lo? | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | <box left red 100% | // | ||
| + | Gere duas amostras (p.ex.: //xp// e //yp//) de tamanho 10 (n=10) de números da distribuição Uniforme, com valor mínimo de zero e máximo de 100. | ||
| + | |||
| + | Gere duas amostras (p.ex.: //xf// e //yf//) de tamanho 1000 (n=1000) de números da distribuição Normal com média zero e desvio padrão 2) | ||
| + | |||
| + | Faça um gráfico plotando a soma das amostras X (//xp+xf//) contra a soma das amostras Y (//yp+yf//) ('' | ||
| + | |||
| + | Qual o padrão espacial observado? | ||
| + | |||
| + | </ | ||
| + | |||
| + | <box left red red 100% | // | ||
| + | Construa uma seqüência **ordenada** de 1000 números entre 0 e 1: | ||
| + | <code rsplus> | ||
| + | > p = seq(0, 1, length=1000) | ||
| + | </ | ||
| + | O vetor ''' | ||
| + | |||
| + | Gere 1000 números aleatórios da distribuição Normal com média e desvio-padrão 1 (um) e coloque os números em ordem: | ||
| + | <code rsplus> | ||
| + | > x = sort( rnorm(1000, mean=1) ) | ||
| + | </ | ||
| + | |||
| + | Faça um gráfico dos quantis da distribuição Normal, tomando o vetor ''' | ||
| + | <code rsplus> | ||
| + | > plot( qnorm(p, mean=1), x ) | ||
| + | </ | ||
| + | |||
| + | Como é o gráfico resultante? | ||
| + | |||
| + | Repita o mesmo processo para a distribuição Exponencial ( ''' | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | /* | ||
| + | ===== Soluções dos Exercícios ===== | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | Se o seu código for diferente, não quer dizer necessariamente que errou. Compare os dois resultados! Como qualquer linguagem, o R é criativo: em muitos casos há mais de uma maneira de solucionar um problema. | ||
| + | */ | ||