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:02] ehlers |
disciplinas:ce223:comandos2008 [2008/05/26 15:11] ehlers |
||
---|---|---|---|
Linha 306: | Linha 306: | ||
<code R> | <code R> | ||
freqs = scan(file='http://leg.ufpr.br/~ehlers/CE223/fumo.dat') | freqs = scan(file='http://leg.ufpr.br/~ehlers/CE223/fumo.dat') | ||
+ | freqs | ||
+ | [1] 45 16 21 33 40 45 28 22 34 21 50 37 37 15 56 30 85 29 | ||
+ | |||
+ | array(freqs, dim=c(2,3,3)) | ||
+ | , , 1 | ||
+ | |||
+ | [,1] [,2] [,3] | ||
+ | [1,] 45 21 40 | ||
+ | [2,] 16 33 45 | ||
+ | |||
+ | , , 2 | ||
+ | |||
+ | [,1] [,2] [,3] | ||
+ | [1,] 28 34 50 | ||
+ | [2,] 22 21 37 | ||
+ | |||
+ | , , 3 | ||
+ | |||
+ | [,1] [,2] [,3] | ||
+ | [1,] 37 56 85 | ||
+ | [2,] 15 30 29 | ||
- | array(freqs, dim=c(3,2,3)) | + | # Cada matrix 2x3 contem as contagens por sexo (linhas) e estado (colunas). |
+ | # A ultima dimensao refere-se ao habito de fumar. | ||
- | nomes = list(c('PR','SC','RS'), c('M','F'), c('nao fuma','fuma pouco','fuma muito')) | + | nomes = list(c('M','F'),c('PR','SC','RS'),c('nao fuma','fuma pouco','fuma muito')) |
- | hf = array(freqs, dim=c(3,2,3), dimnames=nomes) | + | hf = array(freqs, dim=c(2,3,3), dimnames=nomes) |
hf | hf | ||
+ | , , nao fuma | ||
+ | |||
+ | PR SC RS | ||
+ | M 45 21 40 | ||
+ | F 16 33 45 | ||
+ | |||
+ | , , fuma pouco | ||
+ | |||
+ | PR SC RS | ||
+ | M 28 34 50 | ||
+ | F 22 21 37 | ||
+ | |||
+ | , , fuma muito | ||
+ | |||
+ | PR SC RS | ||
+ | M 37 56 85 | ||
+ | F 15 30 29 | ||
m1 <- matrix(1:12, ncol = 3) | m1 <- matrix(1:12, ncol = 3) | ||
Linha 341: | Linha 380: | ||
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 377: | Linha 417: | ||
</code> | </code> | ||
+ | === 19/03/2008 === | ||
+ | Data frames | ||
<code R> | <code R> | ||
- | x <- c(0, 1, 2, 3, 4, 5 ,6, 7, 8, 9, 10) | + | d1 = data.frame(x=1:10,y=c(51,54,61,67,68,75,77,75,80,82)) |
- | 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 | + | d1 |
- | <code R> | + | |
- | seq(0,1, by=0.1) | + | |
- | (0:10)/10 | + | |
- | 2*(0:10) | + | x y |
- | seq(0,20,by=2) | + | 1 1 51 |
+ | 2 2 54 | ||
+ | 3 3 61 | ||
+ | 4 4 67 | ||
+ | 5 5 68 | ||
+ | 6 6 75 | ||
+ | 7 7 77 | ||
+ | 8 8 75 | ||
+ | 9 9 80 | ||
+ | 10 10 82 | ||
- | 10:0 | + | names(d1) |
- | seq(10,0, by=-1) | + | |
+ | d1$x | ||
+ | d1$y | ||
+ | |||
+ | d1[,1] | ||
+ | d1[,2] | ||
+ | |||
+ | plot(d1) | ||
+ | |||
+ | plot(d1$x,d1$y) | ||
+ | |||
+ | d2 = data.frame(Y = c(rnorm(5,mean=10,sd=2), rnorm(5,16,2), rnorm(5,14,2))) | ||
+ | |||
+ | gl(3, 5) | ||
+ | [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 | ||
+ | Levels: 1 2 3 | ||
+ | |||
+ | d2$lev = gl(3, 5) | ||
+ | |||
+ | d2 | ||
+ | |||
+ | is.factor(d2$lev) | ||
</code> | </code> | ||
- | Selecionando indivíduos pela sua posição (indexando valores de um vetor). Note que comandos a seguir somente mostram resultados sem alterar //x// | + | Aplicando uma funcao a um Data Frame separando por fatores |
<code R> | <code R> | ||
- | x[1] | + | by(d2$Y, d2$lev, summary) |
- | x[4] | + | |
- | x[1:3] | + | |
- | x[5:8] | + | |
- | x[c(2, 5, 7]) | + | |
- | x | + | |
</code> | </code> | ||
- | Selecionando valores do vetor segundo outros critérios. Nos comandos a seguir o objeto original não é alterado. | + | Criando um Data Frame a partir de todas as combinacoes de 2 fatores. |
<code R> | <code R> | ||
- | pesos <- c(67, 83, 56, 91, 58, 47, 82, 75) | + | d3 = expand.grid(1:3, 4:5) |
- | pesos[pesos > 80] | + | d3 |
- | pesos[pesos < 50 | pesos > 80] | + | |
- | pesos[pesos > 50 & pesos < 80] | + | is.data.frame(d3) |
</code> | </code> | ||
- | + | Adicionando colunas | |
- | Substituindo valores de um vetor. Note que comandos alteram valores do vetor. | + | |
<code R> | <code R> | ||
- | x[1:3] <- c(0, 10, 20) | + | d4 = data.frame(peso=rnorm(15,65,5),altura=rnorm(15,160,10)) |
- | x | + | d4 |
- | pesos | + | d4=cbind(d4,sexo=c(rep('M',10),rep('F',5))) |
- | pesos[4] | + | d4 |
- | pesos[4] <- 81 | + | |
- | pesos | + | |
- | pesos[pesos > 80] | + | |
- | pesos[pesos > 80] <- 85 | + | |
- | pesos | + | |
- | pesos[pesos > 80] <- NA | + | |
- | pesos | + | |
- | pesos[is.na(pesos)] <- 90 | + | |
- | pesos | + | |
</code> | </code> | ||
- | Identificando as posições dos elementos que satisfazem certo critério. | + | Toda coluna que não seja composta exclusivamente de números é definida como um fator. |
<code R> | <code R> | ||
- | pesos | + | is.factor(d4$sexo) |
- | which(pesos == 56) | + | [1] TRUE |
- | which(pesos == 90) | + | |
- | which(pesos < 70) | + | letters |
+ | |||
+ | LETTERS | ||
+ | |||
+ | d4=cbind(d4,nome=letters[1:15]) | ||
+ | |||
+ | is.factor(d4$nome) | ||
+ | [1] TRUE | ||
+ | |||
+ | d4$nome= as.character(d4$nome) | ||
+ | |||
+ | d4 | ||
+ | |||
+ | dim(d4) | ||
+ | |||
+ | names(d4) | ||
+ | |||
+ | dimnames(d4) | ||
+ | |||
+ | rownames(d4) | ||
+ | |||
+ | colnames(d4) | ||
+ | |||
+ | d4[d4$sexo=='M',1:2] | ||
+ | |||
+ | d4[d4$sexo=='F',4] | ||
+ | |||
+ | by(d4[,1:2],d4$sexo,function(x)x) | ||
+ | |||
+ | by(d4[,4],d4$sexo,function(x)as.character(x)) | ||
</code> | </code> | ||
- | Amostrando valores de um vetor. Note uso do ''rep'' para definir amostra com reposição. ''args()'' mostra os argumentos da função. | + | |
+ | |||
+ | Listas | ||
<code R> | <code R> | ||
- | dados <- c(34, 28, 31, 32, 43, 40, 45, 39, 26, 29) | + | |
- | sample(dados, 3) | + | Listas sao estruturas genericas e flexiveis que permitem armazenar |
- | sample(dados, 3) | + | diversos formatos em um unico objeto. |
- | sample(dados, 3, rep=TRUE) | + | |
- | args(sample) | + | lis1 <- list(A = 1:10, B = "CE 223", C = matrix(1:9,ncol = 3)) |
+ | lis1 | ||
+ | |||
+ | $A | ||
+ | [1] 1 2 3 4 5 6 7 8 9 10 | ||
+ | |||
+ | $B | ||
+ | [1] "CE 223" | ||
+ | |||
+ | $C | ||
+ | [,1] [,2] [,3] | ||
+ | [1,] 1 4 7 | ||
+ | [2,] 2 5 8 | ||
+ | [3,] 3 6 9 | ||
</code> | </code> | ||
- | Ordenando valores | + | Varias funcoes do R retornam listas |
<code R> | <code R> | ||
- | dados | + | d1 |
- | sort(dados) | + | |
- | rev(sort(dados)) | + | lis2 = lm (y ~ x, data=d1) |
- | sort(dados, decreasing=T) | + | |
+ | lis2 | ||
+ | |||
+ | is.list(lis2) | ||
+ | |||
+ | class(lis2) | ||
+ | |||
+ | summary(lis2) | ||
+ | |||
+ | anova(lis2) | ||
+ | |||
+ | names(lis2) | ||
+ | |||
+ | lis2$pred | ||
+ | |||
+ | lis2$residuals | ||
+ | |||
+ | par(mfrow=c(2,2)) | ||
+ | |||
+ | plot(lis2) | ||
</code> | </code> | ||
- | Acrescentando elementos e concatenando dois ou mais vetores<code R> | + | Selecionando elementos de uma lista |
- | x <- 0:10 | + | <code R> |
- | x | + | lis1$A |
- | x <- c(x, 11) | + | |
- | x | + | |
- | x1 <- c(51:60, 101:110) | + | lis2$coeff |
- | x1 | + | |
- | x2 <- c(x, c(15, 18, 21, 15, 30)) | + | lis1[3] |
- | x2 | + | |
- | x3 <- c(x2, x1) | + | lis1[[3]] |
- | x3 | + | |
- | c(1:10, seq(21, 50, by=2), c(100, 110, 150)) | ||
</code> | </code> | ||
- | ==== Semana 2 ==== | + | ==== Semana 5 ==== |
- | === 03/03/2008 === | + | |
- | Operadores aritméticas e funções para operações aritméticas, prioridade de operações, uso de parêntesis. | + | === 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> | <code R> | ||
- | x <- 0:10 | + | N<- rpois(10000, lambda=15) |
- | px <- choose(10, x) * (0.3)^x * (1-0.3)^(10-x) | + | Pr<- rexp(10000, rate=1/50000) |
- | px | + | Y<- N*Pr |
+ | q99 <- quantile(Y, prob=0.99) | ||
</code> | </code> | ||
- | Gráficos | + | Vamos agora visualizar a distribuição de interesse de diferentes formas: pelo histograma das simulações e, |
+ | uma forma alternativa (e mais interessante!!!) utilizando estimação de densidades. | ||
<code R> | <code R> | ||
- | plot(x, px) # ver gráfico | + | hist(Y) |
- | plot(x, px, type="h") # ver gráfico | + | hist(Y, prob=T) |
+ | lines(density(Y)) | ||
+ | plot(density(Y)) | ||
+ | abline(v=q99) | ||
+ | </code> | ||
+ | |||
+ | Note que funções 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> | </code> | ||
- | Funções relacionadas a distribuições de probabilidades | + | Criando uma função -- um exemplo. Vamos encapsular todo o procedimento acima em uma função. Isto pode |
+ | ser útil para tornar a execução mais rápida e eficiente quando o procedimento deve ser repetido várias vezes. | ||
+ | (o equivalente a construir ''macros''). | ||
<code R> | <code R> | ||
- | px <- dbinom(x, 10, 0.3) | + | mf<- function(n,lam,r,q){ |
- | px | + | 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> | </code> | ||
- | Gráfico da função acumulada | + | === 26/03/2008 === |
+ | Exercício proposto no material do curso e extensões discutidas em aula. | ||
+ | |||
+ | Calculando o valor da expressão | ||
<code R> | <code R> | ||
- | Fx <- pbinom(x, 10, 0.3) | + | x <- c(12, 11,14,15,10,11,14,11) |
- | Fx | + | E=-length(x)*10 + sum(x) * log(10) - sum(log(factorial(x))) |
- | cumsum(px) # note que soma acumulada de dbinom() fornece mesmo resultado que pbinom() | + | E |
- | plot(x, Fx, type="s") | + | |
</code> | </code> | ||
- | Lei da reciclagem (//recycling rule//) -- válida para as operações aritméticas | + | Agora tornando mais flexível, escrevendo uma função que permite entrar com diferentes amostras e/ou valores de λ. |
<code R> | <code R> | ||
- | 2 * x | + | mf <- function(y, lam){ |
- | (0.3)^x | + | -length(y)*lam + sum(y) * log(lam) - sum(log(factorial(y))) |
- | x1 <- c(2, 5, 7, 8) | + | } |
- | x1 | + | mf(y=x, lam=10) |
- | x2 <- c(10, 20) | + | |
- | x2 | + | |
- | x1 + x2 | + | |
- | x2 + x1 | + | |
- | x3 <- (1:3)*10 | + | |
- | x3 | + | |
- | x1 + x3 | + | |
- | x3 + x1 | + | |
- | x2 + x3 | + | |
- | x3 + x2 | + | |
- | x1 * x2 | + | |
- | x1 * x2 | + | |
- | exp(x1) + log(x2) | + | |
</code> | </code> | ||
- | Argumentos de funções: ordem dos argumentos, nomes dos argumentos, casamento parcial de nomes, argumentos com //default// | + | Noque que está é a expressão da log-verossimilhanca para uma a.a. de uma distribuição de Poisson |
<code R> | <code R> | ||
- | args(dbinom) | + | mf(y=x, lam=11) |
- | dbinom(x, 10, 0.3) | + | mf(y=x, lam=12) |
- | dbinom(x=x, size=10, prob=0.3) | + | mf(y=x, lam=13) |
- | dbinom(prob=0.3, x=x, size=10) | + | |
- | dbinom(size=10, prob=0.3, x=x) | + | |
- | dbinom(x, s=10, p=0.3) | + | |
- | dbinom(x, p=0.3, s=10) | + | |
- | dbinom(x, p=0.3, s=10) | + | |
- | dbinom(x, 10, 0.3, log=F) | + | |
- | dbinom(x, 10, 0.3, log=T) | + | |
</code> | </code> | ||
- | === 05/03/2008 === | + | 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> | ||
- | Verificando máximos, mínimos e suas posições em um vetor.<code R> | + | Vamos agora indicar a solução analítica. |
- | pesos <- c(67, 83, 56, 91, 58, 47, 82, 75) | + | <code R> |
- | max(pesos) | + | mean(x) |
- | min(pesos) | + | abline(v=mean(x)) |
- | which(pesos == max(pesos)) | + | |
- | which.max(pesos) | + | |
- | which(pesos == min(pesos)) | + | |
- | which.min(pesos) | + | |
</code> | </code> | ||
- | Testando pela ocorrência de ''NA''. Note o uso do caracter de negação ''!'' <code R> | + | 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 em casos onde a solução analítica não é disponível. |
- | dat <- c(43, 56, NA, 23, 48, 33, NA, 29, 33, 39) | + | <code> |
- | is.na(dat) | + | optimize(mf, c(min(x), max(x)), maximum=T, y=x) |
- | !is.na(dat) | + | |
- | which(is.na(dat)) | + | |
- | which(!is.na(dat)) | + | |
- | dat1 <- dat[!is.na(dat)] | + | |
</code> | </code> | ||
- | ==== Semana 3 ==== | + | ==== Semana 6 ==== |
- | === 10/03/2008 === | + | |
- | Outras funções de probabilidades<code R> | + | === 31/03/2008 e 02/04/2008 === |
- | args(dchisq) | + | Lendo dados externos no formato data.frame |
- | args(dt) | + | |
- | </code> | + | |
- | Algumas contantes e operadores<code R> | + | <code R> |
- | exp(1) | + | milsa=read.table('milsa.dat',header=T) |
- | exp(3) | + | |
- | print(pi, dig=12) | + | |
- | print(pi, dig=12) | + | |
- | pi | + | |
- | options(digits=12) | + | |
- | pi | + | |
- | exp(1) | + | |
</code> | </code> | ||
- | Examinar opções de ''options()''<code R> | + | Transformando numericos em fatores |
- | options() | + | <code R> |
+ | milsa$civil=factor(milsa$civil,lev=1:2,lab=c('solteiro','casado')) | ||
+ | milsa$instrucao=factor(milsa$instrucao,lev=1:3,lab=c('1oGrau','2oGrau','superior'),ord=T) | ||
+ | milsa$regiao=factor(milsa$regiao,lev=1:3,lab=c('interior','capital','outro')) | ||
+ | head(milsa) | ||
</code> | </code> | ||
+ | Criando nova variavel numerica | ||
+ | <code R> | ||
+ | milsa=transform(milsa,idade=ano+mes/12) | ||
+ | </code> | ||
+ | |||
+ | Tabulacao | ||
+ | <code R> | ||
+ | table(milsa$instrucao) | ||
+ | |||
+ | table(milsa$civil) | ||
+ | |||
+ | table(milsa$regiao) | ||
+ | |||
+ | table(milsa[,c(2,3)]) | ||
+ | |||
+ | table(milsa$civil,milsa$instrucao) | ||
+ | attach(milsa) | ||
- | === 12/03/2008 === | + | table(civil,instrucao) |
- | Funções para verificar exitência de ''NA'''s ''NaN'''s e valores infinitos (''Inf'') <code R> | + | table(civil,instrucao,regiao) |
- | x <- c(5, 0, -2) | + | |
- | x/0 | + | |
- | is.nan(x/0) | + | |
- | is.finite(x/0) | + | |
- | !is.finite(x/0) | + | |
</code> | </code> | ||
- | Explicações sobre como o R armazana objetos (RAM e/ou dispositivos como por exemplo o HD)<code R> | + | Proporcoes |
- | save.image() | + | <code R> |
- | q() | + | tmp=table(civil,regiao) |
+ | |||
+ | cbind(tmp, total=rowSums(tmp)) | ||
+ | |||
+ | prop.table(tmp,mar=1)# linhas somam 1 | ||
+ | |||
+ | rbind(tmp, total=colSums(tmp)) | ||
+ | |||
+ | prop.table(tmp,mar=2)# colunas somam 1 | ||
+ | |||
+ | prop.table(tmp)# todos somam 1 | ||
</code> | </code> | ||
- | Listando e apagando objetos | + | Resumos |
<code R> | <code R> | ||
- | ls() | + | summary(milsa[,-1]) |
- | objects() | + | |
- | rm(x) | + | par(mfrow=c(3,2)) |
- | rm(list=ls()) | + | |
- | args(ls) | + | barplot(table(civil)) |
- | ls() | + | barplot(table(instrucao)) |
- | ls(all=T) | + | barplot(table(regiao)) |
+ | |||
+ | pie(table(civil),main='estado civil') | ||
+ | pie(table(instrucao),main='grau de instrucao') | ||
+ | pie(table(regiao),main='regiao de origem') | ||
</code> | </code> | ||
- | Tipos de objetos no R: matrizes | + | Analise bivariada |
<code R> | <code R> | ||
- | x <- 1:24 | + | barplot(table(civil,instrucao)) |
- | x | + | barplot(table(regiao,instrucao)) |
- | m <- matrix(x, nr=6) | + | |
- | m | + | barplot(table(civil,instrucao),beside=T) |
- | m <- matrix(x, nr=6, byrow=T) | + | barplot(table(regiao,instrucao),beside=T,legend.text=T) |
- | m | + | |
- | x <- 1:25 | + | |
- | m <- matrix(x, nr=6) | + | |
- | m | + | |
- | attributes(x) | + | |
- | attributes(m) | + | |
</code> | </code> | ||
- | Tipos de objetos no R: arrays | + | Esquema dos 5 numeros |
<code R> | <code R> | ||
- | x <- 1:24 | + | fivenum(idade) |
- | a <- array(x, dim=c(4,3,2)) | + | |
- | a | + | [1] 20.83333 30.58333 34.91667 40.54167 48.91667 |
+ | |||
+ | quantile(idade,c(0.25,0.75)) | ||
+ | 25% 75% | ||
+ | 30.66667 40.52083 | ||
</code> | </code> | ||
- | Digitação e conversão de uma tabela de tripla entrada (dada no quadro durante a aula) em um objeto do tipo ''array'' | + | Medidas robustas |
- | | | PR || SC || RS || | + | <code R> |
- | | | Masculino | Feminino | Masculino | Feminino | Masculino | Feminino | | + | salario1=salario |
- | |Não Fuma ^ 45 ^ 16 ^ 21 ^ 33 ^ 40 ^ 45 ^ | + | salario1[36]=93.30 |
- | |Fuma pouco ^ 28 ^ 22 ^ 34 ^ 21 ^ 50 ^ 37 ^ | + | |
- | |Fuma muito ^ 37 ^ 15 ^ 56 ^ 30 ^ 85 ^ 29 ^ | + | |
- | Comentários sobre ordem de entrada dos dados, cliclagem das variáveis e definição das dimensões do array<code R> | + | mean(salario); mean(salario1) |
- | freqs <- scan() | + | |
- | 1: 45 | + | median(salario); median(salario1) |
- | 2: 28 | + | |
- | 3: 37 | + | mean(salario,trim=0.1); mean(salario1,trim=0.1) |
- | 4: 16 | + | |
- | 5: 22 | + | sd(salario); sd(salario1) |
- | 6: 15 | + | |
- | 7: 21 | + | #distancia inter quartis |
- | 8: 34 | + | |
- | 9: 56 | + | IQR(salario); IQR(salario1) |
- | 10: 33 | + | |
- | 11: 21 | + | ##Desvio absoluto mediano (MAD: median absolute deviation) |
- | 12: 30 | + | ##mediana(|Xi - median(X)| * 1.4826 |
- | 13: 40 | + | ##A constante 1.4826 torna o mad comparavel com o sd de uma normal |
- | 14: 50 | + | |
- | 15: 85 | + | mad(salario); mad(salario1) |
- | 16: 45 | + | |
- | 17: 37 | + | |
- | 18: 29 | + | |
- | 19: | + | |
- | freqs | + | |
- | Af <- array(freqs, dim=c(3,2,3)) | + | |
- | Af | + | |
</code> | </code> | ||
- | ==== Semana 4 ==== | + | Ramo-folhas |
- | === 19/03/2008 === | + | |
- | Data frames | + | |
<code R> | <code R> | ||
- | d1 = data.frame(x=1:10,y=c(51,54,61,67,68,75,77,75,80,82)) | + | stem(salario) |
- | d1 | + | The decimal point is at the | |
- | x y | + | 4 | 0637 |
- | 1 1 51 | + | 6 | 379446 |
- | 2 2 54 | + | 8 | 15791388 |
- | 3 3 61 | + | 10 | 5816 |
- | 4 4 67 | + | 12 | 08268 |
- | 5 5 68 | + | 14 | 77 |
- | 6 6 75 | + | 16 | 0263 |
- | 7 7 77 | + | 18 | 84 |
- | 8 8 75 | + | 20 | |
- | 9 9 80 | + | 22 | 3 |
- | 10 10 82 | + | |
- | names(d1) | + | stem(salario,scale=2) |
+ | 4 | 06 | ||
+ | 5 | 37 | ||
+ | 6 | 379 | ||
+ | 7 | 446 | ||
+ | 8 | 1579 | ||
+ | 9 | 1388 | ||
+ | 10 | 58 | ||
+ | 11 | 16 | ||
+ | 12 | 08 | ||
+ | 13 | 268 | ||
+ | 14 | 77 | ||
+ | 15 | | ||
+ | 16 | 026 | ||
+ | 17 | 3 | ||
+ | 18 | 8 | ||
+ | 19 | 4 | ||
+ | 20 | | ||
+ | 21 | | ||
+ | 22 | | ||
+ | 23 | 3 | ||
+ | </code> | ||
- | d1$x | + | Histogramas |
- | d1$y | + | <code R> |
+ | par(mfrow=c(2,2)) | ||
- | d1[,1] | + | hist(salario,main='salario') |
- | d1[,2] | + | |
- | plot(d1) | + | hist(salario,nclass=15,main='salario') |
+ | hist(idade,main='idade') | ||
- | plot(d1$x,d1$y) | + | barplot(table(filhos),main='No de filhos') |
- | d2 = data.frame(Y = c(rnorm(5,mean=10,sd=2), rnorm(5,16,2), rnorm(5,14,2))) | + | par(mfrow=c(1,1)) |
- | gl(3, 5) | + | hist(salario,main='salario') |
- | [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 | + | rug(salario) |
- | Levels: 1 2 3 | + | </code> |
- | d2$lev = gl(3, 5) | + | Estimando uma funcao de densidade |
+ | <code R> | ||
+ | hist(salario,main='salario',prob=T) | ||
+ | lines(density(salario)) | ||
- | d2 | + | hist(idade,main='idade',prob=T) |
+ | lines(density(idade)) | ||
+ | </code> | ||
- | is.factor(d2$lev) | + | Boxplot |
+ | <code R> | ||
+ | par(mfrow=c(1,2)) | ||
- | # Aplicando uma funcao a um Data Frame separando por fatores | + | boxplot(idade,main='idade') |
+ | rug(idade,side=2) | ||
- | by(d2$Y, d2$lev, summary) | + | boxplot(salario,main='salario') |
+ | rug(salario,side=2) | ||
- | # Criando um Data Frame a partir de todas as combinacoes de 2 fatores. | + | par(mfrow=c(2,1)) |
- | d3 = expand.grid(1:3, 4:5) | + | boxplot(idade,horizontal=T,main='idade') |
- | d3 | + | rug(idade,side=1) |
- | is.data.frame(d3) | + | boxplot(salario, horizontal=T,main='salario') |
+ | rug(salario,side=1) | ||
+ | </code> | ||
- | # Adicionando colunas | + | Variaveis categoricas e numericas |
+ | <code R> | ||
+ | boxplot(salario~regiao) | ||
+ | boxplot(idade~civil) | ||
- | d4 = data.frame(peso=rnorm(15,65,5),altura=rnorm(15,160,10)) | + | boxplot(scale(salario),scale(idade)) #variaveis na mesma escala |
- | d4 | + | </code> |
- | d4=cbind(d4,sexo=c(rep('M',10),rep('F',5))) | + | Ambas variaveis numericas |
- | d4 | + | <code R> |
+ | plot(salario,idade) #variaveis na mesma escala | ||
- | # Toda coluna que não seja composta exclusivamente de números é definida como um fator. | + | corr=round(cor(salario,idade),2) |
- | is.factor(d4$sexo) | + | text(20,25,paste('rho=',corr)) |
- | [1] TRUE | + | |
- | letters | + | </code> |
- | LETTERS | ||
- | d4=cbind(d4,nome=letters[1:15]) | + | ==== Semana 7 ==== |
- | is.factor(d4$nome) | + | === 07/04/2008 e 09/04/2008 === |
- | [1] TRUE | + | |
- | d4$nome= as.character(d4$nome) | + | Analisar os dados do Exercicio 26, Capitulo 1 do livro NOÇÕES DE PROBABILIDADE E ESTATÍSTICA disponiveis em http://www.ime.usp.br/~noproest |
- | d4 | + | Note que ha brancos no arquivo de dados (dados omissos). Uma forma de tratar este problema é abrir o arquivo Excel e salvar como um arquivo texto do tipo CSV (comma separated values). Posteriormente este arquivo pode ser lido como |
+ | <code R> | ||
- | dim(d4) | + | read.table('nome do arquivo', header=T, sep=',') |
- | names(d4) | + | # ou |
- | dimnames(d4) | + | read.csv('nome do arquivo', header=T) |
+ | </code> | ||
- | rownames(d4) | + | Uma alternativa melhor é utilizar a função read.xls do pacote gdata pois assim não precisamos abrir o arquivo Excel. Após salvar o arquivo aeusp.xls na sua area de trabalho execute |
+ | <code R> | ||
+ | library(gdata) ou require(gdata) | ||
- | colnames(d4) | + | x = read.xls ('aeusp.xls') |
- | d4[d4$sexo=='M',1:2] | + | head(x) |
- | d4[d4$sexo=='F',4] | + | Num Comun Sexo Idade Ecivil X.Reproce X.Temposp X.Resid Trab Ttrab X.Itrab |
+ | 1 1 JdRaposo 2 4 4 Nordeste 21 9 3 NA 20 | ||
+ | 2 2 JdRaposo 2 1 1 Sudeste 24 9 1 1 14 | ||
+ | 3 3 JdRaposo 2 2 1 Nordeste 31 3 1 1 14 | ||
+ | 4 4 JdRaposo 1 2 2 Nordeste 10 3 1 4 10 | ||
+ | 5 5 JdRaposo 2 4 2 Nordeste 31 6 1 1 11 | ||
+ | 6 6 JdRaposo 2 4 2 Sudeste 24 4 2 NA 15 | ||
+ | X.Renda X.Acompu X.Serief | ||
+ | 1 1 2 1 | ||
+ | 2 2 2 7 | ||
+ | 3 5 2 7 | ||
+ | 4 5 2 11 | ||
+ | 5 6 1 4 | ||
+ | 6 4 2 4 | ||
+ | </code> | ||
- | by(d4[,1:2],d4$sexo,function(x)x) | + | === 30/04/2008 === |
- | by(d4[,4],d4$sexo,function(x)as.character(x)) | + | Gerando 1000 amostras de tamanho n=20 de uma distribuição normal padrão |
+ | <code R> | ||
+ | rnorm(20, m=70, sd=10) | ||
+ | ams <- matrix(rnorm(20*1000, m=70, sd=10), ncol=20) | ||
+ | dim(ams) | ||
+ | ams[1,] | ||
+ | ams[2,] | ||
</code> | </code> | ||
- | Listas | + | Calculando o valor da estatística de interesse para a primeira e segunda amostra |
<code R> | <code R> | ||
- | #Listas sao estruturas genericas e flexiveis que permitem armazenar | + | max(ams[1,])/quantile(ams[1,], prob=0.75) |
- | #diversos formatos em um unico objeto. | + | unname(max(ams[1,])/quantile(ams[1,], prob=0.75)) |
+ | unname(max(ams[2,])/quantile(ams[2,], prob=0.75)) | ||
+ | </code> | ||
- | lis1 <- list(A = 1:10, B = "CE 223", C = matrix(1:9,ncol = 3)) | + | Escrevendo uma função que calcula o valor da estatística de interesse e calculando novamente o valor para a primeira e segunda amostras. |
- | lis1 | + | <code R> |
+ | T.est <- function(x) unname(max(x)/quantile(x, prob=0.75)) | ||
+ | T.est(ams[1,]) | ||
+ | T.est(ams[2,]) | ||
+ | </code> | ||
- | $A | + | Calculando valor da estatística de interesse agora para todas as amostras de uma só vez |
- | [1] 1 2 3 4 5 6 7 8 9 10 | + | <code R> |
+ | ts <- apply(ams, 1, T.est) | ||
+ | length(ts) | ||
+ | ts | ||
+ | </code> | ||
- | $B | + | Explorando os resultados: medidas resumo, grafico de densidade estimada e IC (95%) |
- | [1] "CE 223" | + | <code R> |
- | + | summary(ts) | |
- | $C | + | plot(density(ts)) |
- | [,1] [,2] [,3] | + | quantile(ts, prob=c(0.025, 0.975)) |
- | [1,] 1 4 7 | + | </code> |
- | [2,] 2 5 8 | + | |
- | [3,] 3 6 9 | + | |
- | #Varias funcoes do R retornam listas | + | Aumentando o número de amostras para 5000. |
+ | <code R> | ||
+ | ams <- matrix(rnorm(20*5000, m=70, sd=10), ncol=20) | ||
+ | ts <- apply(ams, 1, T.est) | ||
+ | plot(density(ts)) | ||
+ | </code> | ||
- | d1 | + | Distribuição amostral da média: empírica (por simulação) //versus// teórica |
+ | <code R> | ||
+ | medias <- apply(ams, 1, mean) | ||
+ | plot(density(medias)) | ||
+ | curve(dnorm(x,mean=70, sd=10/sqrt(20)), 60, 80, add=TRUE, col=2) | ||
+ | </code> | ||
- | lis2 = lm (y ~ x, data=d1) | + | === 07/05/2008 === |
- | lis2 | + | Exercicios sobre o uso do Latex. |
- | is.list(lis2) | + | Um preambulo basico: |
+ | <code> | ||
+ | \documentclass[12pt]{article}% classes basicas: book, article, report e letter | ||
+ | \usepackage[brazil]{babel}% português do Brasil. | ||
+ | \usepackage[latin1]{inputenc}% usar o conjunto de caracteres Europeu Ocidental. | ||
+ | </code> | ||
+ | Para usar Unicode, substitua a última linha por | ||
+ | <code> | ||
+ | \usepackage[utf-8]{inputenc} | ||
+ | </code> | ||
- | class(lis2) | + | Apos o preambulo coloque o titulo, autoria e data do artigo. |
+ | <code> | ||
- | summary(lis2) | + | \Title{Título do Trabalho} |
+ | \author{Nome do Autor} | ||
+ | \date{\today} | ||
+ | </code> | ||
- | anova(lis2) | + | Agora sim começa o documento, |
+ | <code> | ||
+ | \begin{document} | ||
+ | \maketitle | ||
+ | % seu texto ... | ||
+ | % Inclua seções e subseções | ||
+ | \section{Uma seção} | ||
+ | \subsection{Uma subseção} | ||
+ | \end{document} | ||
+ | </code> | ||
- | names(lis2) | + | Escreva os comandos Latex para as seguintes formulas matematicas: |
+ | * <latex>$E(X^2)=\int_{-\infty}^{\infty}x^2 f(x)dx$</latex> | ||
+ | * <latex>$X\sim N(\mu,\sigma^2)\rightarrow f(x)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp\left\{-\frac{1}{2\sigma^2}(x-\mu)^2\right\}$</latex> | ||
+ | * <latex>$(a+b)^n = \sum_{k=0}^n \frac{n!}{k!(n-k)!} a^k b^{n-k}</latex> | ||
- | lis2$pred | + | Escreva os comandos do Latex para construir a seguinte matriz: |
- | lis2$residuals | + | <latex> |
+ | \left[ | ||
+ | \begin{array}{cccc} | ||
+ | a_{11} & a_{12} & \dots & a_{1n}\\ | ||
+ | a_{21} & a_{22} & \dots & a_{2n}\\ | ||
+ | \vdots & \vdots & \vdots & \vdots\\ | ||
+ | a_{m1} & a_{m2} & \dots & a_{mn}\\ | ||
+ | \end{array} | ||
+ | \right] | ||
+ | </latex> | ||
- | par(mfrow=c(2,2)) | + | Escreva os comandos do Latex para montar as seguintes tabelas. Tente numerar as tabelas, colocar um comentário e referenciar as tabelas no texto. |
- | plot(lis2) | + | <latex> |
+ | \begin{tabular}{ccc} | ||
+ | \hline | ||
+ | &masculino & feminino \\ | ||
+ | \hline | ||
+ | Não fumac &45 & 16 \\ | ||
+ | Fuma pouco &28 & 22 \\ | ||
+ | \hline | ||
+ | \end{tabular} | ||
+ | </latex> | ||
- | #Selecionando elementos de uma lista | + | <latex> |
+ | \begin{tabular}{|l|cc|} | ||
+ | \hline | ||
+ | &masculino & feminino \\ | ||
+ | \hline\hline | ||
+ | Não fuma &45 & 16 \\ | ||
+ | Fuma pouco &28 & 22 \\ | ||
+ | \hline | ||
+ | \end{tabular} | ||
+ | </latex> | ||
- | lis1$A | + | Incluindo figuras. |
- | lis2$coeff | + | Os comandos abaixo criam um arquivo Postscript com um histograma. |
+ | <code R> | ||
+ | postscript('histograma.ps') | ||
+ | hist(rnorm(1000)) | ||
+ | dev.off() | ||
+ | </code> | ||
- | lis1[3] | + | Use os comandos abaixo para incluir a figura no seu documento. Será preciso incluir o comando \usepackage[dvips]{graphicx} no preambulo. |
+ | <code> | ||
+ | \begin{figure}[htbp]\centering | ||
+ | \includegraphics[width=10cm, height=10cm]{histograma.ps} | ||
+ | \caption{Histograma de uma amostra de tamanho 1000 da distribuição normal padrão.} | ||
+ | \label{fig:hist} | ||
+ | \end{figure} | ||
+ | </code> | ||
- | lis1[[3]] | + | Pode-se fazer referencia a figura no texto: figura \ref{hfig:ist}, na pagina \pageref{fig:hist}. Note que a figura ficou rotacionada à esquerda. Podemos corrigir refazendo o arquivo .ps ou usando a opção "angle". |
+ | <code R> | ||
+ | postscript('histograma.ps',horozontal=F) | ||
+ | hist(rnorm(1000)) | ||
+ | dev.off() | ||
</code> | </code> | ||
+ | |||
+ | <code> | ||
+ | \begin{figure}[htbp]\centering | ||
+ | \includegraphics[width = 10cm, height = 10cm, angle = 270]{histograma.ps} | ||
+ | \caption{Histograma de uma amostra de tamanho 1000 da distribuição normal padrão.} | ||
+ | \label{fig:hist} | ||
+ | \end{figure} | ||
+ | </code> | ||
+ |