Não foi possível enviar o arquivo. Será algum problema com as permissões?
Diferenças

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
Próxima revisão Ambos lados da revisão seguinte
disciplinas:ce223:comandos2008 [2008/03/26 23:11]
paulojus
disciplinas:ce223:comandos2008 [2008/05/26 15:22]
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(3,2,3))+array(freqs,​ dim=c(2,3,3)) 
 +, , 1
  
-nomes = list(c('​PR'​,'​SC'​,'​RS'​)c('​M'​,'​F'​)c('nao fuma','​fuma pouco','​fuma muito'​))+     [,1] [,2] [,3] 
 +[1,]   ​45 ​  ​21 ​  40 
 +[2,]   ​16 ​  ​33 ​  45
  
-hf = array(freqs,​ dim=c(3,2,3), dimnames=nomes)+, , 2 
 + 
 +     [,1] [,2] [,3] 
 +[1,]   ​28 ​  ​34 ​  50 
 +[2,]   ​22 ​  ​21 ​  37 
 + 
 +, , 3 
 + 
 +     [,1] [,2] [,3] 
 +[1,]   ​37 ​  ​56 ​  85 
 +[2,]   ​15 ​  ​30 ​  29 
 + 
 +# Cada matrix 2x3 contem as contagens por sexo (linhas) e estado (colunas).  
 +# A ultima dimensao refere-se ao habito de fumar. 
 + 
 +nomes = list(c('​M','​F'​),​c('​PR','​SC','​RS'​),​c('​nao fuma','​fuma pouco','​fuma muito'​)) 
 + 
 +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 480: Linha 519:
 by(d4[,​4],​d4$sexo,​function(x)as.character(x)) by(d4[,​4],​d4$sexo,​function(x)as.character(x))
 </​code>​ </​code>​
 +
 +
  
 Listas Listas
Linha 545: Linha 586:
  
 === 24/03/2008 === === 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>
 N<- rpois(10000,​ lambda=15) N<- rpois(10000,​ lambda=15)
Linha 551: Linha 595:
 Y<- N*Pr Y<- N*Pr
 q99 <- quantile(Y, prob=0.99) q99 <- quantile(Y, prob=0.99)
 +</​code>​
 +
 +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>
 hist(Y) hist(Y)
- 
- 
 hist(Y, prob=T) hist(Y, prob=T)
 lines(density(Y)) lines(density(Y))
 plot(density(Y)) plot(density(Y))
 abline(v=q99) 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. 
-hy<- hist(Y)+<code R> 
 +hy <- hist(Y)
 hy hy
 class(hy) class(hy)
Linha 567: Linha 616:
 </​code>​ </​code>​
  
-Criando função: +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>
 mf<- function(n,​lam,​r,​q){ mf<- function(n,​lam,​r,​q){
-N<​-rpois(n,​lambda=lam) +  ​N<​-rpois(n,​lambda=lam) 
-Pr<​-rexp(n,​rate=r) +  Pr<​-rexp(n,​rate=r) 
-Y<​-N*Pr +  Y<​-N*Pr 
-qq <- quantile(Y,​prob=q) +  qq <- quantile(Y,​prob=q) 
-hist(Y,​prob=T) +  hist(Y,​prob=T) 
-lines(density(Y)) +  lines(density(Y)) 
-abline(v=qq) +  abline(v=qq) 
-text("​topright",​ paste("​quantil",​ q, "​=",​ qq)) +  text("​topright",​ paste("​quantil",​ q, "​=",​ qq)) 
-return(invisible(qq))+  return(invisible(qq))
 } }
- 
 mf(10000, 15, 1/50000, 0.99) mf(10000, 15, 1/50000, 0.99)
-resp<- mf(10000,​15,​ 1/50000, 0.99)+resp <- mf(10000,​15,​ 1/50000, 0.99)
 resp resp
 </​code>​ </​code>​
  
-=== 24/03/2008 === +=== 26/03/2008 === 
-Exercício proposto no material do cursoe ​extensões discutidas em aula.+Exercício proposto no material do curso e extensões discutidas em aula.
  
 Calculando o valor da expressão Calculando o valor da expressão
Linha 605: Linha 654:
 </​code>​ </​code>​
  
-Noque que está éa expressão da log-verossimilhanca para uma a.a. de uma distribuição de Poisson+Noque que está é a expressão da log-verossimilhanca para uma a.a. de uma distribuição de Poisson
 <code R> <code R>
 mf(y=x, lam=11) mf(y=x, lam=11)
Linha 629: Linha 678:
 </​code>​ </​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.+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.
 <​code>​ <​code>​
 optimize(mf,​ c(min(x), max(x)), maximum=T, y=x) optimize(mf,​ c(min(x), max(x)), maximum=T, y=x)
 </​code>​ </​code>​
 +
 +==== Semana 6 ====
 +
 +=== 31/03/2008 e 02/04/2008 ===
 +Lendo dados externos no formato data.frame
 +
 +<code R>
 +milsa=read.table('​milsa.dat',​header=T)
 +</​code>​
 +
 +Transformando numericos em fatores
 +<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>​
 +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)
 +
 +table(civil,​instrucao)
 +
 +table(civil,​instrucao,​regiao)
 +</​code>​
 +
 +Proporcoes
 +<code R>
 +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>​
 +
 +Resumos
 +<code R>
 +summary(milsa[,​-1])
 +
 +par(mfrow=c(3,​2))
 +
 +barplot(table(civil))
 +barplot(table(instrucao))
 +barplot(table(regiao))
 +
 +pie(table(civil),​main='​estado civil'​)
 +pie(table(instrucao),​main='​grau de instrucao'​)
 +pie(table(regiao),​main='​regiao de origem'​)
 +</​code>​
 +
 +Analise bivariada
 +<code R>
 +barplot(table(civil,​instrucao))
 +barplot(table(regiao,​instrucao))
 +
 +barplot(table(civil,​instrucao),​beside=T)
 +barplot(table(regiao,​instrucao),​beside=T,​legend.text=T)
 +</​code>​
 +
 +Esquema dos 5 numeros
 +<code R>
 +fivenum(idade)
 +
 +[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>​
 +
 +Medidas robustas
 +<code R>
 +salario1=salario
 +salario1[36]=93.30
 +
 +mean(salario);​ mean(salario1)
 +
 +median(salario);​ median(salario1)
 +
 +mean(salario,​trim=0.1);​ mean(salario1,​trim=0.1)
 +
 +sd(salario);​ sd(salario1)
 +
 +#distancia inter quartis
 +
 +IQR(salario);​ IQR(salario1)
 +
 +##Desvio absoluto mediano (MAD: median absolute deviation)
 +##​mediana(|Xi - median(X)| * 1.4826
 +##A constante 1.4826 torna o mad comparavel com o sd de uma normal
 +
 +mad(salario);​ mad(salario1)
 +</​code>​
 +
 +Ramo-folhas
 +<code R>
 +stem(salario)
 +
 +  The decimal point is at the |
 +
 +   4 | 0637
 +   6 | 379446
 +   8 | 15791388
 +  10 | 5816
 +  12 | 08268
 +  14 | 77
 +  16 | 0263
 +  18 | 84
 +  20 | 
 +  22 | 3
 +
 +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>​
 +
 +Histogramas
 +<code R>
 +par(mfrow=c(2,​2))
 +
 +hist(salario,​main='​salario'​)
 +
 +hist(salario,​nclass=15,​main='​salario'​)
 +hist(idade,​main='​idade'​)
 +
 +barplot(table(filhos),​main='​No de filhos'​)
 +
 +par(mfrow=c(1,​1))
 +
 +hist(salario,​main='​salario'​)
 +rug(salario)
 +</​code>​
 +
 +Estimando uma funcao de densidade
 +<code R>
 +hist(salario,​main='​salario',​prob=T)
 +lines(density(salario))
 +
 +hist(idade,​main='​idade',​prob=T)
 +lines(density(idade))
 +</​code>​
 +
 +Boxplot
 +<code R>
 +par(mfrow=c(1,​2))
 +
 +boxplot(idade,​main='​idade'​)
 +rug(idade,​side=2)
 +
 +boxplot(salario,​main='​salario'​)
 +rug(salario,​side=2)
 +
 +par(mfrow=c(2,​1))
 +
 +boxplot(idade,​horizontal=T,​main='​idade'​)
 +rug(idade,​side=1)
 +
 +boxplot(salario,​ horizontal=T,​main='​salario'​)
 +rug(salario,​side=1)
 +</​code>​
 +
 +Variaveis categoricas e numericas
 +<code R>
 +boxplot(salario~regiao)
 +boxplot(idade~civil)
 +
 +boxplot(scale(salario),​scale(idade)) #variaveis na mesma escala
 +</​code>​
 +
 +Ambas variaveis numericas
 +<code R>
 +plot(salario,​idade) #variaveis na mesma escala
 +
 +corr=round(cor(salario,​idade),​2)
 +
 +text(20,​25,​paste('​rho=',​corr))
 +
 +</​code>​
 +
 +
 +==== Semana 7 ====
 +
 +=== 07/04/2008 e 09/04/2008 ===
 +
 +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
 +
 +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>
 +
 +read.table('​nome do arquivo',​ header=T, sep=','​)
 +
 +# ou
 +
 +read.csv('​nome do arquivo',​ header=T)
 +</​code>​
 +
 +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)
 +
 +x = read.xls ('​aeusp.xls'​)
 +
 +head(x)
 +
 +  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>​
 +
 +=== 30/04/2008 ===
 +
 +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>​
 +
 +Calculando o valor da estatística de interesse para a primeira e segunda amostra
 +<code R>
 +max(ams[1,​])/​quantile(ams[1,​],​ prob=0.75)
 +unname(max(ams[1,​])/​quantile(ams[1,​],​ prob=0.75))
 +unname(max(ams[2,​])/​quantile(ams[2,​],​ prob=0.75))
 +</​code>​
 +
 +Escrevendo uma função que calcula o valor da estatística de interesse e calculando novamente o valor para a primeira e segunda amostras.
 +<code R>
 +T.est <- function(x) unname(max(x)/​quantile(x,​ prob=0.75))
 +T.est(ams[1,​])
 +T.est(ams[2,​])
 +</​code>​
 +
 +Calculando valor da estatística de interesse agora para todas as amostras de uma só vez
 +<code R>
 +ts <- apply(ams, 1, T.est)
 +length(ts)
 +ts
 +</​code> ​
 +
 +Explorando os resultados: medidas resumo, grafico de densidade estimada e IC (95%)
 +<code R>
 +summary(ts)
 +plot(density(ts))
 +quantile(ts,​ prob=c(0.025,​ 0.975))
 +</​code> ​
 +
 +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>​
 +
 +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>​
 +
 +=== 07/05/2008 ===
 +
 +Exercicios sobre o uso do Latex.
 +
 +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>​
 +
 +Apos o preambulo coloque o titulo, autoria e data do artigo.
 +<​code>​
 +
 +\Title{Título do Trabalho}
 +\author{Nome do Autor}
 +\date{\today}
 +</​code>​
 +
 +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>​
 +
 +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>​
 +
 +Escreva os comandos do Latex para construir a seguinte matriz:
 +
 +<​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>​
 +
 +Escreva os comandos do Latex para montar as seguintes tabelas. Tente numerar as tabelas, colocar um comentário e referenciar as tabelas no texto.
 +
 +<​latex>​
 +\begin{tabular}{ccc}
 +\hline
 +           &​masculino & feminino \\
 +\hline
 +Não fumac  &​45 ​       & 16       \\
 +Fuma pouco &​28 ​       & 22       \\
 +\hline
 +\end{tabular}
 +</​latex>​
 +
 +<​latex>​
 +\begin{tabular}{|l|cc|}
 +\hline
 +           &​masculino & feminino \\
 +\hline\hline
 +Não fuma   &​45 ​       & 16       \\
 +Fuma pouco &​28 ​       & 22       \\
 +\hline
 +\end{tabular}
 +</​latex>​
 +
 +Incluindo figuras.
 +
 +Os comandos abaixo criam um arquivo Postscript com um histograma.
 +<code R>
 +postscript('​histograma.ps'​)
 +hist(rnorm(1000))
 +dev.off()
 +</​code>​
 +
 +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>​
 +
 +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>​
 +\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>​
 +
 +Colocando duas figuras lado a lado. Acrescente \usepackage{subfigure} no preambulo.
 +<​latex>​
 +\begin{figure}[h]
 +   ​\centerline{
 +   ​\subfigure[]{\includegraphics[width=10cm,​ height = 10cm]{histograma.ps}
 +   ​\label{fig:​hist1}}
 +   \hfil
 +   ​\subfigure[]{\includegraphics[width=5cm,​ height=5cm]{histograma.ps}
 +   ​\label{fig:​hist2}}
 +   }
 +   ​\caption{}
 +   ​\label{fig:​histogramas}
 +\end{figure}
 +</​code>​
 +
 +Fazendo referencia: Figuras \ref{fig:​histogramas},​ \ref{fig:​hist1} e \ref{fig:​hist2}.
 +
 +
 +
 +
 +
  

QR Code
QR Code disciplinas:ce223:comandos2008 (generated for current page)