Não foi possível enviar o arquivo. Será algum problema com as permissões?
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 Próxima revisão Ambos lados da revisão seguinte | ||
disciplinas:ce223:comandos2008 [2008/03/19 15:08] ehlers |
disciplinas:ce223:comandos2008 [2008/03/26 23:20] paulojus |
||
---|---|---|---|
Linha 341: | Linha 341: | ||
colSums(m1) | colSums(m1) | ||
+ | </code> | ||
- | #operacoes com matrizes | + | Operacoes com matrizes |
+ | <code R> | ||
m4 <- matrix(1:6, nc = 3) | m4 <- matrix(1:6, nc = 3) | ||
m5 <- matrix(10 * (1:6), nc = 3) | m5 <- matrix(10 * (1:6), nc = 3) | ||
Linha 375: | Linha 376: | ||
solve(mat, vec) | solve(mat, vec) | ||
- | </code> | ||
- | |||
- | <code R> | ||
- | x <- c(0, 1, 2, 3, 4, 5 ,6, 7, 8, 9, 10) | ||
- | x | ||
- | x <- 0:10 | ||
- | x | ||
- | x <- seq(0,10, by=1) | ||
- | x <- scan() | ||
- | 1: 0 | ||
- | 2: 1 | ||
- | ... | ||
- | 10: 9 | ||
- | 11: 10 | ||
- | 12: | ||
- | </code> | ||
- | |||
- | Extendendo as possibilidades | ||
- | <code R> | ||
- | seq(0,1, by=0.1) | ||
- | (0:10)/10 | ||
- | |||
- | 2*(0:10) | ||
- | seq(0,20,by=2) | ||
- | |||
- | 10:0 | ||
- | seq(10,0, by=-1) | ||
</code> | </code> | ||
Linha 446: | Linha 420: | ||
is.factor(d2$lev) | is.factor(d2$lev) | ||
+ | </code> | ||
- | # Aplicando uma funcao a um Data Frame separando por fatores | + | Aplicando uma funcao a um Data Frame separando por fatores |
+ | <code R> | ||
by(d2$Y, d2$lev, summary) | by(d2$Y, d2$lev, summary) | ||
+ | </code> | ||
- | # Criando um Data Frame a partir de todas as combinacoes de 2 fatores. | + | Criando um Data Frame a partir de todas as combinacoes de 2 fatores. |
+ | <code R> | ||
d3 = expand.grid(1:3, 4:5) | d3 = expand.grid(1:3, 4:5) | ||
d3 | d3 | ||
is.data.frame(d3) | is.data.frame(d3) | ||
+ | </code> | ||
- | # Adicionando colunas | + | Adicionando colunas |
+ | <code R> | ||
d4 = data.frame(peso=rnorm(15,65,5),altura=rnorm(15,160,10)) | d4 = data.frame(peso=rnorm(15,65,5),altura=rnorm(15,160,10)) | ||
d4 | d4 | ||
Linha 465: | Linha 442: | ||
d4=cbind(d4,sexo=c(rep('M',10),rep('F',5))) | d4=cbind(d4,sexo=c(rep('M',10),rep('F',5))) | ||
d4 | d4 | ||
+ | </code> | ||
- | # Toda coluna que não seja composta exclusivamente de números é definida como um fator. | + | Toda coluna que não seja composta exclusivamente de números é definida como um fator. |
+ | <code R> | ||
is.factor(d4$sexo) | is.factor(d4$sexo) | ||
[1] TRUE | [1] TRUE | ||
Linha 505: | Linha 483: | ||
Listas | Listas | ||
<code R> | <code R> | ||
- | #Listas sao estruturas genericas e flexiveis que permitem armazenar | + | |
- | #diversos formatos em um unico objeto. | + | Listas sao estruturas genericas e flexiveis que permitem armazenar |
+ | diversos formatos em um unico objeto. | ||
lis1 <- list(A = 1:10, B = "CE 223", C = matrix(1:9,ncol = 3)) | lis1 <- list(A = 1:10, B = "CE 223", C = matrix(1:9,ncol = 3)) | ||
Linha 522: | Linha 501: | ||
[2,] 2 5 8 | [2,] 2 5 8 | ||
[3,] 3 6 9 | [3,] 3 6 9 | ||
+ | </code> | ||
- | #Varias funcoes do R retornam listas | + | Varias funcoes do R retornam listas |
+ | <code R> | ||
d1 | d1 | ||
Linha 548: | Linha 528: | ||
plot(lis2) | plot(lis2) | ||
+ | </code> | ||
- | #Selecionando elementos de uma lista | + | Selecionando elementos de uma lista |
+ | <code R> | ||
lis1$A | lis1$A | ||
Linha 559: | Linha 540: | ||
lis1[[3]] | lis1[[3]] | ||
+ | </code> | ||
+ | |||
+ | ==== Semana 5 ==== | ||
+ | |||
+ | === 24/03/2008 === | ||
+ | **Problema:** | ||
+ | Considere duas variáveis aleatórias: ''N'' com distribuição Poisson de parâmetro 15 e ''Pr'' com distribuição exponencial de parâmetro 1/50000. Queremos obter o quantil 99 de uma variável aleatória ''Y'' dada pelo produto das anteriores, isto é ''Y = N * Pr''. | ||
+ | |||
+ | **Solução:** a solução analítica requer a obtenção da f.d.p. de ''Y''seguida da resolução de uma equação envolvendo integração desta f.d.p. para encontrar o quantil pedido. Entretanto, vamos aqui ilustrar uma alternativa numérica para resolver o problema, usando uma aproximação numérica por simulação. | ||
+ | <code R> | ||
+ | N<- rpois(10000, lambda=15) | ||
+ | Pr<- rexp(10000, rate=1/50000) | ||
+ | Y<- N*Pr | ||
+ | q99 <- quantile(Y, prob=0.99) | ||
+ | </code> | ||
+ | |||
+ | Vamosagora visualizar a distribuição de interesse de diferentes formas: pelo hiostograma das simulações e, | ||
+ | uma forma alternativa (e mais interessante!!!) utilizando estimação de densidades. | ||
+ | <code R> | ||
+ | hist(Y) | ||
+ | hist(Y, prob=T) | ||
+ | lines(density(Y)) | ||
+ | plot(density(Y)) | ||
+ | abline(v=q99) | ||
+ | </code> | ||
+ | |||
+ | Note que que funçãos podem retornar resultados e/ou gráficos. A função ''hist()'' é um exemplo de função que retorna ambos. | ||
+ | <code R> | ||
+ | hy<- hist(Y) | ||
+ | hy | ||
+ | class(hy) | ||
+ | plot(hy) | ||
+ | hist | ||
+ | </code> | ||
+ | |||
+ | Criando uma função-- um exemplo. Vamosencapsular todo o procedimento acima em uma função. Isto pode | ||
+ | ser útil para tornar a execução mias rápida e eficiente quando o procedimento deve ser repetido várias vezes. | ||
+ | (o equivalente a construir ''macros''). | ||
+ | <code R> | ||
+ | mf<- function(n,lam,r,q){ | ||
+ | N<-rpois(n,lambda=lam) | ||
+ | Pr<-rexp(n,rate=r) | ||
+ | Y<-N*Pr | ||
+ | qq <- quantile(Y,prob=q) | ||
+ | hist(Y,prob=T) | ||
+ | lines(density(Y)) | ||
+ | abline(v=qq) | ||
+ | text("topright", paste("quantil", q, "=", qq)) | ||
+ | return(invisible(qq)) | ||
+ | } | ||
+ | mf(10000, 15, 1/50000, 0.99) | ||
+ | resp <- mf(10000,15, 1/50000, 0.99) | ||
+ | resp | ||
+ | </code> | ||
+ | |||
+ | === 24/03/2008 === | ||
+ | Exercício proposto no material do cursoe extensões discutidas em aula. | ||
+ | |||
+ | Calculando o valor da expressão | ||
+ | <code R> | ||
+ | x <- c(12, 11,14,15,10,11,14,11) | ||
+ | E=-length(x)*10 + sum(x) * log(10) - sum(log(factorial(x))) | ||
+ | E | ||
+ | </code> | ||
+ | |||
+ | Agora tornando mais flexível, escrevendo uma função que permite entrar com diferentes amostras e/ou valores de λ. | ||
+ | <code R> | ||
+ | mf <- function(y, lam){ | ||
+ | -length(y)*lam + sum(y) * log(lam) - sum(log(factorial(y))) | ||
+ | } | ||
+ | mf(y=x, lam=10) | ||
+ | </code> | ||
+ | |||
+ | Noque que está éa expressão da log-verossimilhanca para uma a.a. de uma distribuição de Poisson | ||
+ | <code R> | ||
+ | mf(y=x, lam=11) | ||
+ | mf(y=x, lam=12) | ||
+ | mf(y=x, lam=13) | ||
+ | </code> | ||
+ | |||
+ | Vamos então fazer o gráfico da função log-verossimilhança. Como esta é uma função do parâmetro λ vamos primeiro redefinir a função de uma forma mais conveniente colocando o parâmetro como o primeiro argumento. | ||
+ | <code R> | ||
+ | mf <- function(lam, y){ | ||
+ | -length(y)*lam + sum(y) * log(lam) - sum(log(factorial(y))) | ||
+ | } | ||
+ | l <- seq(5, 25, l=200) | ||
+ | ll <- mf(l) | ||
+ | ll <- mf(l, y=x) | ||
+ | plot(l, ll, type="l", xlab=expression(lambda), ylab=expression(l(lambda))) | ||
+ | </code> | ||
+ | |||
+ | Vamos agora indicar a solução analítica. | ||
+ | <code R> | ||
+ | mean(x) | ||
+ | abline(v=mean(x)) | ||
+ | </code> | ||
+ | |||
+ | A solução também poderia ser obtida por otimização numérica. Isto não é vantajoso para este problema mas pode ser a solução cem casosonde asolução analítica não é disponível. | ||
+ | <code> | ||
+ | optimize(mf, c(min(x), max(x)), maximum=T, y=x) | ||
</code> | </code> | ||