Subsections

9 Miscelânia de funcionalidades do R

9.1 O R como calculadora

Podemos fazer algumas operações matemáticas simples utilizando o R. Vejamos alguns exemplos calculando as seguinte somas:

(a)
$10^2 + 11^2 + \ldots + 20^2$ Para obter a resposta devemos E estes passos correspondem aos seguintes comandos
> (10:20)
> (10:20)^2
> sum((10:20)^2)
Note que só precisamos do último comando para obter a resposta, mas é sempre útil entender os comandos passo a passo!

(b)
$\sqrt{\log(1)} + \sqrt{\log(10)} +
\sqrt{\log(100)} + \ldots + \sqrt{\log(1000000)} $,
onde $\log$ é o logarítmo neperiano. Agora vamos resolver com apenas um comando:
> sum(sqrt(log(10^(0:6))))

9.2 Gráficos de funções

Para ilustrar como podemos fazer gráficos de funções vamos considerar cada uma das funções a seguir cujos gráficos são mostrados na Figura [*].

(a)
$f(x) = 1 - \frac{1}{x} sin(x)$ para $0 \leq x \leq 50$

(b)
$f(x) = \frac{1}{\sqrt{50 \pi}} \; \exp[-\frac{1}{50} (x-100)^2)]$ para $85 \leq x \leq 115$

Figura : Gráficos das funções mostradas em (a) e (b).
\begin{figure}\centerline{\includegraphics[width=\textwidth,height=3in]{figuras/misc01.ps}}\end{figure}

A idéia básica é criar um vetor com valores das abscissas (valores de $x$) e calcular o valor da função (valores de $f(x)$) para cada elemento da função e depois fazer o gráfico unindo os pares de pontos. Vejamos os comandos para o primeiro exemplo.

> x1 <- seq(0,50, l=101)
> y1 <- 1 - (1/x1) * sin(x1)
> plot(x1, y1, type="l")
Note que este procedimento é o mesmo que aprendemos para fazer esboços de gráficos a mão em uma folha de papel!
Há uma outra maneira de fazer isto no R utilizando plot.function conforme pode ser visto no comando abaixo que nada mais faz que combinar os três comandos acima em apenas um.
> plot(function(x) 1 - (1/x) * sin(x), 0, 50)

Agora vamos ver o gráfico para o segundo exemplo.

> x2 <- seq(80, 120, l=101)
> y2 <- (1/sqrt(50*pi)) * exp(-0.02 * (x2-100)^2)
> plot(x2, y2, type="l")
Note que esta função é a densidade da distribuição normal o o gráfico pode também ser obtido com:
> y2 <- dnorm(x2, 100, 5)
> plot(x2, y2, type="l")
## ou ainda:
> plot(function(x) dnorm(x, 100, 5), 85, 115)

9.3 Integração numérica

A função integrate é usada para integração numérica em uma dimensão. Como exemplo vamos considerar resolver a seguinte integral:

\begin{displaymath}
I = \int_{-3}^3 x^2 d x.
\end{displaymath} (2)

Para resolver a integral devemos criar uma função no R com a expressão da função que vamos integrar e esta deve ser passada para integrate conforme este exemplo:
> fx <- function(x) x^2
> integrate(fx, -3, 3)
18 with absolute error < 2e-13
A integral acima corresponde à área mostrada no gráfico da Figura [*].
Figura : Gráfico onde a área indicada corresponde à integral definida na equação [*].
\begin{figure}\centerline{\includegraphics[width=0.5\textwidth]{figuras/misc02.ps}}\end{figure}

Esta figura é obtida com os seguinte comandos:

> x <- seq(-4, 4, l=100)
> x2 <- x^2
> plot(x, x^2, ty='l')
> x <- seq(-3, 3, l=100)
> x2 <- x^2
> polygon(rbind(cbind(rev(x),0),cbind(x,x2)), col='gray')

Vejamos mais um exemplo. Sabemos que para distribuições contínuas de probabilidades a integral está associada a probabilidade em um intervalo. Seja $f(x)$ uma f.d.p. de uma variável contínua, então $P(a < X < b) = \int_a^b f(x) dx$. Por exemplo, seja $X$ v.a. com distribuição $N(100, 81)$ e portanto $f(x) = \frac{1}{9\sqrt{2\pi}}\exp\{-\frac{1}{162}(x-100)^2\}$. A probabilidade $P(85 < X < 105)$ pode ser calculada das três formas diferentes mostradas a seguir.

> fx <- function(x){(1/(9*sqrt(2*pi))) * exp(-(1/162)*(x-100)^2)}
> integrate(fx, 85, 105)
0.6629523 with absolute error < 7.4e-15

> integrate(function(x) dnorm(x, 100, 9), 85, 105)
0.6629523 with absolute error < 7.4e-15

> pnorm(105, 100, 9) - pnorm(85, 100, 9)
[1] 0.6629523

9.4 Criando vetores com elementos repetidos

As funções rep e seq do R são úteis para criar vetores de dados que seguem um certo padrão.
Clique aqui para ver um arquivo de dados.
vamos ver os comandos que podem ser usados para criar vetores para cada uma das três colunas iniciais deste arquivo.

## Primeira coluna
> rep(1:4, each=12)
## ou
> rep(1:4, rep(12,4))

## Segunda coluna
> rep(rep(1:3, each=4),4)

## Terceira coluna
> rep(1:4, 12)

9.5 Exercícios

  1. Calcule o valor das expressões abaixo
    1. Seja $x = (12, 11, 14, 15, 10, 11, 14, 11)$.
      Calcule $E = -n\lambda + (\sum_1^n x_i) \log(\lambda) - \sum_1^n \log(x_i !)$, onde $n$ é o número de elementos do vetor $x$ e $\lambda = 10$.
      Dica: o fatorial de um número pode ser obtido utilizando a função prod. Por exemplo o valor de $5!$ é obtido com o comando prod(1:5).
      Há ainda uma outra forma usando a função Gama e lembrando que para $a$ inteiro, $\Gamma(a+1) = a!$. Portanto podemos obter o valor de $5!$ com o comando gamma(6).

    2. $E = (\pi)^2 + (2\pi)^2 + (3\pi)^2 + ... + (10\pi)^2$
    3. $E = \log(x+1) + \log(\frac{x+2}{2}) + \log(\frac{x+3}{3}) + \ldots + \log(\frac{x+20}{20})$, para $x=10$
  2. Obtenha o gráfico das seguintes funções:
    1. $f(x) = x^{12} (1-x)^{8}$ para $0 < x < 1$
    2. Para $\phi=4$,

      \begin{eqnarray*}
\rho(h) = \left\{ \begin{array}{ll}
1 - 1.5\frac{h}{\phi} + ...
...h < \phi$} \cr
0 \mbox{ , caso contrário}
\end{array} \right.
\end{eqnarray*}


  3. Considerando as funções acima calcule as integrais a seguir e indique a área correspondente nos gráficos das funções.
    1. $I_1 = \int_{0.2}^{0.6} f(x) d x$
    2. $I_2 = \int_{1.5}^{3.5} \rho(h) d h$

  4. Mostre os comandos para obter as seguintes sequências de números
    1. 1 11 21 31 41 51 61 71 81 91
    2. 1 1 2 2 2 2 2 3 3 3
    3. 1.5 2.0 2.5 3.0 3.5 1.5 2.0 2.5 3.0 3.5 1.5 2.0 2.5 3.0 3.5

Paulo Justiniano Ribeiro Jr