03_apostila:03-funcoes

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
03_apostila:03-funcoes [2023/08/14 19:05] – edição externa 127.0.0.103_apostila:03-funcoes [2025/08/18 13:37] (atual) – edição externa 127.0.0.1
Linha 1: Linha 1:
 +<WRAP tabs>
 +  * [[02_tutoriais:tutorial2:start|Tutorial]]
 +  * [[01_curso_atual:exercicios2| Exercícios]]
 +  * [[03_apostila:03-funcoes| Apostila]] 
 +</WRAP>
 +
 +====== 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
 +>
 +</code>
 +
 +A notação básica de operações algébricas, como a aplicação hierárquica de parênteses,
 +também pode ser utilizada:
 +<code rsplus>
 +> (4 + 5 ) * 7 - (36/18)^3
 +[1] 55
 +> (2 * ( 2 * ( 2 * (3-4))))
 +[1] -8
 +>
 +</code>
 +
 +Note que somente os parênteses podem ser utilizados nas expressões matemáticas. As chaves ("{}") e os colchetes ("[]") têm outras funções no R:
 +<code rsplus>
 +> (2 * { 2 * [ 2 * (3-4)]})
 +Error: syntax error in "(2 * { 2 * ["
 +>
 +</code>
 +
 +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))
 +</code>
 +
 +
 +==== 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)   # Raiz Quadrada
 +[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)   # Também logaritmo de base 10
 +[1] 1
 +> log( 10, base = 3.4076) # Logaritmo base 3.4076
 +[1] 1.878116
 +> exp( 1 )       # Exponencial
 +[1] 2.718282
 +>
 +</code>
 +
 +As funções trigonométricas:
 +<code rsplus>
 +> sin(0.5*pi)    # Seno
 +[1] 1
 +> cos(2*pi)      # Cosseno
 +[1] 1
 +> tan(pi)        # Tangente
 +[1] -1.224647e-16
 +>
 +> asin(1)       # Arco seno (em radianos)
 +[1] 1.570796
 +> asin(1) / pi * 180
 +[1] 90
 +>
 +> acos(0)      # Arco cosseno (em radianos)
 +[1] 1.570796
 +> acos(0) / pi * 180
 +[1] 90
 +> atan(0)    # Arco tangente (em radianos)
 +[1] 0
 +> atan(0) / pi * 180
 +[1] 0
 +>
 +</code>
 +
 +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
 +>
 +</code>
 +
 +
 +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)             # Função gamma
 +[1] 0.9181687
 +>  
 +</code>
 +
 +
 +
 +==== Criando Variáveis com Atribuição====
 +
 +Mais do que simples operações aritméticas,  o R permite que executemos operações **algébricas** operando sobre variáveis pré-definidas.
 +
 +Para definir uma variável, basta escolher um nome (//lembre-se das regras de nomes no R//) e atribuir a ela um valor:
 +<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 "d" not found          
 +</code>
 +
 +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>
 +
 +
 +<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>
 +
 +
 +<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>
 +
 +
 +<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 ''b'' é a biomassa em //kg// e
 +''d'' é o DAP em //cm//.
 +
 +Já um outro modelo para biomassa das árvores na 
 +mesma situação tem a forma:
 +
 +$$\hat{ln(b)} = -2.6464 + 1,996ln(d) + 0,7558ln(h)$$
 +
 +
 +onde ''h'' é a altura das árvores em //m//.
 +
 +Para uma árvore com DAP de 15//cm// e altura de 12//m//, os
 +modelos resultarão em estimativas muito distintas?
 +
 +</box>
 +
 +
 +
 +==== 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/Inf
 +  [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:
 +  * ''pi''  - constante  pi = 3.141593 ;
 +  * ''Inf'' - infinito;
 +  * ''NaN'' - indeterminado (Not a Number), normalmente resultado de uma operação matemática indeterminada;
 +  * ''NA''  - indeterminado (Not Available), normalmente caracterizando uma observação perdida ou faltante (//missing value//).
 +
 +
 +Na operações matemáticas, ''NaN'' e ''NA'' atuam sempre como **indeterminado**.
 +
 +
 +
 +=== Exercícios ===
 +
 +
 +<box left red 80% | //**2.5. Exercício Conceitual:** Criando Variáveis com Nomes Reservados// >
 +
 +O que acontece se você criar uma variável com o nome ''pi''?  Por exemplo, 
 +<code rsplus>
 +> pi = 10
 +</code>
 +O que acontece com a constante //pi//?
 +
 +E se for criada uma constante de nome ''sqrt''?  O que acontece com a função raiz quadrada (''sqrt()'')?
 +
 +**DICA:** O que faz a função ''search'', no comando:
 +<code rsplus>
 +> search()
 +</code>
 +</box>
 +
 +
 +<box left red 80%| //**2.6. Exercício Conceitual:** O que é uma Observação Perdida//>
 +
 +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?  E a biomassa de uma floresta?  E a espécie de uma ave?
 +
 +</box>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +===== O R como uma Calculadora Vetorial =====
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +==== Criação de Vetores ====
 +
 +
 +O R, e a linguagem S, foram criados para operar não apenas //número-a-número// como uma calculadora convencional.
 +
 +O R é um ambiente **vetorial**,  isto é, quase todas suas operações atuam sobre um //conjunto de valores//, 
 +que genericamente chamaremos de vetores((No R, "vetores" são uma classe de objetos definida simplesmente como conjuntos de elementos de um mesmo tipo. Os vetores do R não correspondem a vetores de valores da álgebra matricial, para os quais há outra classe de objetos, que é "matrix")).
 +
 +Uma definição mais detalhada dos vetores está [[04-dados#Vetores|na seção sobre manipulação de dados]]. Aqui fornecemos apenas algumas definições e funções importantes para compreender as operações numéricas com vetores.
 +
 +
 +=== Concatenação de Elementos em um Vetor: a Função "c" ===
 +
 +Para criar um vetor, podemos usar a função ''c'' (c = concatenar).  Essa função simplesmente junta todos
 +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  3.4000000  3.1415927  0.7853982  0.3678794  0.8020016  0.4338837
 +
 +</code>
 +
 +=== Criação de Sequências: Operador ":" e Função "seq" ===
 +
 +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
 +</code>
 +
 +Uma forma mais flexível de criar sequências de números (inteiros ou reais) é usando a função ''seq'':
 +<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
 +</code>
 +
 +=== Vetores de Valores Repetidos: Função "rep" ===
 +
 +Também é fácil criar uma sequência de números repetidos utilizando a função ''rep'':
 +<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:5,each=3)
 + [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
 +>
 +</code>
 +
 +
 +=== Exercícios ===
 +
 +<box left red | //**Exercício 2.7.** Palmeira com Muitos Fustes I//>
 +
 +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 ''dap'' com os diâmetros acima e uma sequência que enumera os fustes.
 +
 +</box>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +==== 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  6.8000000  6.2831853  1.5707963  0.7357589  1.6040032
 +[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  2.3025851  1.2237754  1.1447299 -0.2415645 -1.0000000 -0.2206447
 +[8] -0.8349787
 +>             
 +</code>
 +
 +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  3.926991  2.207277  5.614011
 +[8]  3.471070
 +> a - b
 +[1]  0.0000000  8.0000000  0.4000000 -0.8584073 -4.2146018 -5.6321206 -6.1979984
 +[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
 +>             
 +</code>
 +
 +=== Comprimento de Vetores e a Função "length" ===
 +
 +A função ''length'' retorna o número de elementos de um objeto:
 +<code rsplus>
 +> a <- seq(from=0, to=10, by=2)
 +> a
 +[1]  0  2  4  6  8 10
 +> length(a)
 +[1] 6
 +> length(1:20)
 +[1] 20
 +> length(rep(1:10,each=10))
 +[1] 100
 +>                    
 +</code>
 +
 +=== 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**> Operações entre vetores de comprimentos diferentes são realizadas pareando-se seus elementos. Os elementos do vetor mais curto são repetidos sequencialmente até que a operação seja aplicada a todos os elementos do vetor mais longo</box>
 +
 +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 'is' not a multiple of shorter object length
 +> length(b)
 +[1] 10
 +> length(c)
 +[1] 3
 +>                            
 +</code>
 +
 +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)/length(a)
 +[1] 5
 +>
 +</code>
 +
 +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 | //**Exercício 2.8. ** Palmeira com Muitos Fustes II//>
 +
 +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, sem usar a função ''mean''.
 +  - Calcule a variância das áreas transversais, sem usar a função ''var''
 +
 +</box>
 +
 +
 +
 +<box left red | //**Exercício 2.9.** Bits e Bytes//>
 +
 +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.
 +
 +</box>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +==== Vetores: Operações Estatísticas  ====
 +
 +As funções matemáticas sobre vetores operam //elemento-a-elemento// Já as funções estatísticas operam no vetor **como um todo**:
 +<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
 +>      
 +</code>
 +
 +Algumas funções úteis que não são estatísticas, mas operam no vetor são:
 +<code rsplus>
 +> a
 +[1]  1.0000000 10.0000000  3.4000000  3.1415927  0.7853982  0.3678794  0.8020016
 +[8]  0.4338837
 +> sort(a)
 +[1]  0.3678794  0.4338837  0.7853982  0.8020016  1.0000000  3.1415927  3.4000000
 +[8] 10.0000000
 +> rev(sort(a))
 +[1] 10.0000000  3.4000000  3.1415927  1.0000000  0.8020016  0.7853982  0.4338837
 +[8]  0.3678794
 +> cumsum(sort(a))
 +[1]  0.3678794  0.8017632  1.5871613  2.3891629  3.3891629  6.5307556  9.9307556
 +[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  0.4341221 -0.3681178
 +> 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
 +
 +</code>
 +
 +
 +=== Exercícios ===
 +
 +<box left red 100% | //**Exercício 2.10.** Conta de Luz//>
 +
 +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?
 +
 +
 +</box>
 +
 +===== 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()
 +</code>
 +para:
 +<code rsplus>
 +> ls
 +</code>
 +
 +
 +A maioria das funções precisa de certas **informações** para orientar o seu procedimento, tais informações são chamados de **argumentos**.  
 +
 +Os argumentos de qualquer função são detalhadamente explicados nas páginas de ajuda sobre a função.  Mas para uma rápida consulta dos argumentos de uma função podemos usar a função '''args''':
 +<code rsplus>
 +> args(ls)
 +function (name, pos = -1, envir = as.environment(pos), all.names = FALSE,
 +    pattern)
 +NULL
 +> args(q)
 +function (save = "default", status = 0, runLast = TRUE)
 +NULL
 +> args(save.image)
 +function (file = ".RData", version = NULL, ascii = FALSE, compress = !ascii,
 +    safe = TRUE)
 +NULL
 +>    
 +</code> 
 +
 +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("sin")
 +>
 +</code>
 +
 +Outras funções simplesmente não possuem argumentos:
 +<code rsplus>
 +> args(getwd)
 +function ()
 +NULL
 +> getwd
 +function ()
 +.Internal(getwd())
 +<environment: namespace:base>
 +>                                
 +</code>
 +
 +
 +Ao observar o resultado da função '''args''', você notará que alguns argumentos são seguidos de uma expressão que se inicia com o sinal de igualdade ('''=''').  A expressão após o sinal de igualdade é chamada de **valor default** do argumento.   Se o usuário não informar o valor para um dado argumento, a função usa o valor default.  Como exemplo veja a função '''save.image''':
 +<code rsplus>
 +> args(save.image)
 +function (file = ".RData", version = NULL, ascii = FALSE, compress = !ascii,
 +    safe = TRUE)
 +NULL
 +
 +</code>
 +
 +Se o usuário simplesmente evocar a função '''save.image()''', sem informar o nome do arquivo onde a área de trabalho deve ser gravada, o R gravará as informações num arquivo com nome '''.RData'''.
 +
 +
 +
 +=== Exercícios ===
 +
 +<box left red 100% | //**Exercício 2.11.** Argumentos de Funções Estatísticas //>
 +Quais são os argumentos (e seus valores default) das seguintes funções:
 +  * **mean**
 +  * **sd**
 +  * **range**
 +  * **cumsum**
 +</box>
 +
 +
 +<box left red  100% | //**Exercício 2.12.** Argumentos de Funções de Uso Comum //>
 +Quais são os argumentos (e seus valores default) das funções:
 +  * **sort**
 +  * **log**
 +  * **seq**
 +
 +O que é o argumento **". . ."**?
 +</box>
 +
 +
 +===== Distribuições Estatísticas: Funções no R =====
 +
 +
 +Sendo um ambiente para análise de dados, o R dispõe de um grande conjunto de funções para trabalhar com //Distribuições Estatísticas// Essas funções ajudam não só na análise de dados, como também permitem a //simulação// de dados.
 +
 +
 +
 +
 +==== 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 ''rnorm'':
 +<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
 +>     
 +</code>
 +
 +Se quisermos saber a //probabilidade acumulada// até um certo valor de uma variável com distribuição normal utilizamos a função ''pnorm'':
 +<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
 +
 +</code>
 +
 +
 +Se quisermos obter o valor de um //quantil// da distribuição normal utilizamos a função ''qnorm'':
 +<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
 +>  
 +</code>
 +
 +A função ''dnorm'' fornece a //densidade probabilística// para cada valor de uma variável Normal:
 +<code rsplus>
 +> args( dnorm )
 +function (x, mean = 0, sd = 1, log = FALSE)
 +NULL
 +> x = seq(-4, 4, length=10000)             # Sequencia de -4 a 4 com 10.000 valores
 +>
 +> plot(x, dnorm(x))                        # Curva da Dist. Normal com média 0 e desvio padrão 1
 +> points(x, dnorm(x, sd=2))                # Curva da Dist. Normal com média 0 e desvio padrão 2 (adicionada ao gráfico)
 +>
 +</code>
 +
 +
 +
 +=== Exercícios ===
 +
 +<box left red  100% | //**Exercício 2.13** Amplitude Normal//>
 +
 +Tomando uma variável que segue a Distribuição Normal, o que acontece com a //amplitude de variação// dos dados à medida que o tamanho da amostra cresce (por exemplo n= 100, 1000, 10000)?
 +
 +**Dica:** use as funções ''range'' e ''diff''
 +
 +</box>
 +
 +
 +<box left red  100% | //**Exercício 2.14.** Intervalo Normal I //>
 +Qual o intervalo da Distribuição Normal Padronizada que têm a média no centro e contém 50% das observações?
 +
 +</box>
 +
 +<box left red  100% | //**Exercício 2.15.** Intervalo Normal II //>
 +Qual a probabilidade de uma observação da variável Normal Padronizada estar no intervalo [-1.96 , 1.96]?
 +
 +</box>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +==== 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**//distrib// - retorna a //densidade probabilística// para um dado valor da variável;
 +  * **p**//distrib// - retorna a //probabilidade acumulada// para um dado valor da variável;
 +  * **q**//distrib// - retorna o //quantil// para um dado valor de probabilidade acumulada;
 +  * **r**//distrib// - retorna //valores// (números aleatórios) gerados a partir da distribuição;
 +
 +No caso da Distribuição Normal: //distrib// = ''norm'' Para outras distribuições temos:
 +
 +<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, entre outras coisas)) ^
 +| beta        | beta      | shape1, shape2, ncp |
 +| binomial     | binom     | size, prob |
 +| Cauchy       | cauchy    | location, scale |
 +| qui-quadrado | chisq     | df, ncp |
 +| exponential  | exp       | rate |
 +| F            | f         | df1, df2, ncp |
 +| gamma        | gamma     | shape, scale |
 +| geométrica   | geom      | prob |
 +| hypergeométrica | hyper  | m, n, k |
 +| log-normal   | lnorm     | meanlog, sdlog |
 +| logística    | logis     | location, scale |
 +| binomial negativa | nbinom     | size, prob |
 +| normal       | norm      | mean, sd |
 +| Poisson      | pois      | lambda |
 +| t de Student | t         | df, ncp |
 +| uniforme     | unif      | min, max |
 +| Weibull      | weibull   | shape, scale |
 +| Wilcoxon     | wilcox    | m, n  |
 +</box>
 +
 +
 +=== Exercícios ===
 +
 +<box left red  100% | //**Exercício 2.16.** Teste t //>
 +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>
 +
 +
 +<box left red  100% | //**Exercício 2.17.** Teste F //>
 +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>
 +
 +
 +<box left red  100% | //**Exercício 2.18.** Padrão Espacial I //>
 +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 (''plot(x,y)'').  Qual o padrão espacial observado?
 +
 +Você consegue explicá-lo?
 +
 +</box>
 +
 +
 +<box left red  100% | //**Exercício 2.19.** Padrão Espacial II //>
 +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//) (''plot(xp+xf,yp+yf)'').
 +
 +Qual o padrão espacial observado?  Você consegue explicá-lo?
 +
 +</box>
 +
 +<box left red red  100% | //**Exercício 2.20.** Gráfico Quantil-Quantil //>
 +Construa uma seqüência **ordenada** de 1000 números entre 0 e 1:
 +<code rsplus>
 +> p = seq(0, 1, length=1000)
 +</code>
 +O vetor '''p''' representa um vetor de probabilidades acumuladas.
 +
 +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) )
 +</code> 
 +
 +Faça um gráfico dos quantis da distribuição Normal, tomando o vetor '''p''' de probabilidades, contra os valores de '''x''':
 +<code rsplus>
 +> plot( qnorm(p, mean=1), x )
 +</code>
 +
 +Como é o gráfico resultante?  
 +
 +Repita o mesmo processo para a distribuição Exponencial ( '''rexp''' ), cujo valor //default// resulta em média = 1 .  Como é o gráfico resultante? Por que?
 +
 +</box>
 +
 +
 +
 +/*
 +===== Soluções dos Exercícios =====
 +
 +{{:03_apostila:exerc3apostila.r|Aqui}} você encontra os códigos que solucionam alguns dos exercícios propostos. 
 +
 +
 +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.
 +*/