====== Comandos mostrados nas aulas do curso (2008) ====== ==== Semana 1 ==== === 27/02/2008 === Quatro formas alternativas de entrada de dados de 0 a 10. 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: Extendendo as possibilidades seq(0,1, by=0.1) (0:10)/10 2*(0:10) seq(0,20,by=2) 10:0 seq(10,0, by=-1) Selecionando indivíduos pela sua posição (indexando valores de um vetor). Note que comandos a seguir somente mostram resultados sem alterar //x// x[1] x[4] x[1:3] x[5:8] x[c(2, 5, 7]) x Selecionando valores do vetor segundo outros critérios. Nos comandos a seguir o objeto original não é alterado. pesos <- c(67, 83, 56, 91, 58, 47, 82, 75) pesos[pesos > 80] pesos[pesos < 50 | pesos > 80] pesos[pesos > 50 & pesos < 80] Substituindo valores de um vetor. Note que comandos alteram valores do vetor. x[1:3] <- c(0, 10, 20) x pesos pesos[4] pesos[4] <- 81 pesos pesos[pesos > 80] pesos[pesos > 80] <- 85 pesos pesos[pesos > 80] <- NA pesos pesos[is.na(pesos)] <- 90 pesos Identificando as posições dos elementos que satisfazem certo critério. pesos which(pesos == 56) which(pesos == 90) which(pesos < 70) Amostrando valores de um vetor. Note uso do ''rep'' para definir amostra com reposição. ''args()'' mostra os argumentos da função. dados <- c(34, 28, 31, 32, 43, 40, 45, 39, 26, 29) sample(dados, 3) sample(dados, 3) sample(dados, 3, rep=TRUE) args(sample) Ordenando valores dados sort(dados) rev(sort(dados)) sort(dados, decreasing=T) Acrescentando elementos e concatenando dois ou mais vetores x <- 0:10 x x <- c(x, 11) x x1 <- c(51:60, 101:110) x1 x2 <- c(x, c(15, 18, 21, 15, 30)) x2 x3 <- c(x2, x1) x3 c(1:10, seq(21, 50, by=2), c(100, 110, 150)) ==== Semana 2 ==== === 03/03/2008 === Operadores aritméticas e funções para operações aritméticas, prioridade de operações, uso de parêntesis. x <- 0:10 px <- choose(10, x) * (0.3)^x * (1-0.3)^(10-x) px Gráficos plot(x, px) # ver gráfico plot(x, px, type="h") # ver gráfico Funções relacionadas a distribuições de probabilidades px <- dbinom(x, 10, 0.3) px Gráfico da função acumulada Fx <- pbinom(x, 10, 0.3) Fx cumsum(px) # note que soma acumulada de dbinom() fornece mesmo resultado que pbinom() plot(x, Fx, type="s") Lei da reciclagem (//recycling rule//) -- válida para as operações aritméticas 2 * x (0.3)^x x1 <- c(2, 5, 7, 8) x1 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) Argumentos de funções: ordem dos argumentos, nomes dos argumentos, casamento parcial de nomes, argumentos com //default// args(dbinom) dbinom(x, 10, 0.3) dbinom(x=x, size=10, prob=0.3) 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) === 05/03/2008 === Verificando máximos, mínimos e suas posições em um vetor. pesos <- c(67, 83, 56, 91, 58, 47, 82, 75) max(pesos) min(pesos) which(pesos == max(pesos)) which.max(pesos) which(pesos == min(pesos)) which.min(pesos) Testando pela ocorrência de ''NA''. Note o uso do caracter de negação ''!'' dat <- c(43, 56, NA, 23, 48, 33, NA, 29, 33, 39) is.na(dat) !is.na(dat) which(is.na(dat)) which(!is.na(dat)) dat1 <- dat[!is.na(dat)] ==== Semana 3 ==== === 10/03/2008 === Outras funções de probabilidades args(dchisq) args(dt) Algumas contantes e operadores exp(1) exp(3) print(pi, dig=12) print(pi, dig=12) pi options(digits=12) pi exp(1) Examinar opções de ''options()'' options() === 12/03/2008 === Funções para verificar exitência de ''NA'''s ''NaN'''s e valores infinitos (''Inf'') x <- c(5, 0, -2) x/0 is.nan(x/0) is.finite(x/0) !is.finite(x/0) Explicações sobre como o R armazana objetos (RAM e/ou dispositivos como por exemplo o HD) save.image() q() Listando e apagando objetos ls() objects() rm(x) rm(list=ls()) args(ls) ls() ls(all=T) Tipos de objetos no R: matrizes x <- 1:24 x m <- matrix(x, nr=6) m m <- matrix(x, nr=6, byrow=T) m x <- 1:25 m <- matrix(x, nr=6) m attributes(x) attributes(m) Tipos de objetos no R: arrays x <- 1:24 a <- array(x, dim=c(4,3,2)) a Digitação e conversão de uma tabela de tripla entrada (dada no quadro durante a aula) em um objeto do tipo ''array'' | | PR || SC || RS || | | Masculino | Feminino | Masculino | Feminino | Masculino | Feminino | |Não Fuma ^ 45 ^ 16 ^ 21 ^ 33 ^ 40 ^ 45 ^ |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 freqs <- scan() 1: 45 2: 28 3: 37 4: 16 5: 22 6: 15 7: 21 8: 34 9: 56 10: 33 11: 21 12: 30 13: 40 14: 50 15: 85 16: 45 17: 37 18: 29 19: freqs Af <- array(freqs, dim=c(3,2,3)) Af ==== Semana 4 ==== === 17/03/2008 === 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 # 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 , , 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 dimnames(m1) dimnames(m1) <- list(c("L1", "L2", "L3", "L4"), c("C1", "C2", "C3")) m1 m2 <- cbind(1:5, 6:10) m2 m3 <- cbind(1:5, 6) m3 margin.table(m1, margin = 1) apply(m1, 1, sum) rowSums(m1) margin.table(m1, margin = 2) apply(m1, 2, sum) colSums(m1) Operacoes com matrizes m4 <- matrix(1:6, nc = 3) m5 <- matrix(10 * (1:6), nc = 3) m4 m5 m4 + m5 m4 * m5 m5 - m4 m5/m4 m4 %*% m5 t(m4) m6 = t(m4)%*% m5 solve(m6) m6[3,3]=20 solve(m6) mat <- matrix(c(1, 5, 2, 3, -2, 1, -1, 1, -1), nc = 3) vec <- c(10, 15, 7) solve(mat, vec) === 19/03/2008 === Data frames d1 = data.frame(x=1:10,y=c(51,54,61,67,68,75,77,75,80,82)) d1 x y 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 names(d1) 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) Aplicando uma funcao a um Data Frame separando por fatores by(d2$Y, d2$lev, summary) Criando um Data Frame a partir de todas as combinacoes de 2 fatores. d3 = expand.grid(1:3, 4:5) d3 is.data.frame(d3) Adicionando colunas d4 = data.frame(peso=rnorm(15,65,5),altura=rnorm(15,160,10)) d4 d4=cbind(d4,sexo=c(rep('M',10),rep('F',5))) d4 Toda coluna que não seja composta exclusivamente de números é definida como um fator. is.factor(d4$sexo) [1] TRUE 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)) Listas 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 $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 Varias funcoes do R retornam listas d1 lis2 = lm (y ~ x, data=d1) lis2 is.list(lis2) class(lis2) summary(lis2) anova(lis2) names(lis2) lis2$pred lis2$residuals par(mfrow=c(2,2)) plot(lis2) Selecionando elementos de uma lista lis1$A lis2$coeff lis1[3] lis1[[3]] ==== 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. N<- rpois(10000, lambda=15) Pr<- rexp(10000, rate=1/50000) Y<- N*Pr q99 <- quantile(Y, prob=0.99) 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. hist(Y) hist(Y, prob=T) lines(density(Y)) plot(density(Y)) abline(v=q99) 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) hy class(hy) plot(hy) hist 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''). 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 === 26/03/2008 === Exercício proposto no material do curso e extensões discutidas em aula. Calculando o valor da expressão x <- c(12, 11,14,15,10,11,14,11) E=-length(x)*10 + sum(x) * log(10) - sum(log(factorial(x))) E Agora tornando mais flexível, escrevendo uma função que permite entrar com diferentes amostras e/ou valores de λ. mf <- function(y, lam){ -length(y)*lam + sum(y) * log(lam) - sum(log(factorial(y))) } mf(y=x, lam=10) Noque que está é a expressão da log-verossimilhanca para uma a.a. de uma distribuição de Poisson mf(y=x, lam=11) mf(y=x, lam=12) mf(y=x, lam=13) 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. 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))) Vamos agora indicar a solução analítica. mean(x) abline(v=mean(x)) 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. optimize(mf, c(min(x), max(x)), maximum=T, y=x) ==== Semana 6 ==== === 31/03/2008 e 02/04/2008 === Lendo dados externos no formato data.frame milsa=read.table('milsa.dat',header=T) Transformando numericos em fatores 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) Criando nova variavel numerica milsa=transform(milsa,idade=ano+mes/12) Tabulacao 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) Proporcoes 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 Resumos 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') Analise bivariada barplot(table(civil,instrucao)) barplot(table(regiao,instrucao)) barplot(table(civil,instrucao),beside=T) barplot(table(regiao,instrucao),beside=T,legend.text=T) Esquema dos 5 numeros 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 Medidas robustas 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) Ramo-folhas 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 Histogramas 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) Estimando uma funcao de densidade hist(salario,main='salario',prob=T) lines(density(salario)) hist(idade,main='idade',prob=T) lines(density(idade)) Boxplot 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) Variaveis categoricas e numericas boxplot(salario~regiao) boxplot(idade~civil) boxplot(scale(salario),scale(idade)) #variaveis na mesma escala Ambas variaveis numericas plot(salario,idade) #variaveis na mesma escala corr=round(cor(salario,idade),2) text(20,25,paste('rho=',corr)) ==== 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 read.table('nome do arquivo', header=T, sep=',') # ou read.csv('nome do arquivo', header=T) 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 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 === 30/04/2008 === Gerando 1000 amostras de tamanho n=20 de uma distribuição normal padrão rnorm(20, m=70, sd=10) ams <- matrix(rnorm(20*1000, m=70, sd=10), ncol=20) dim(ams) ams[1,] ams[2,] Calculando o valor da estatística de interesse para a primeira e segunda amostra 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)) Escrevendo uma função que calcula o valor da estatística de interesse e calculando novamente o valor para a primeira e segunda amostras. T.est <- function(x) unname(max(x)/quantile(x, prob=0.75)) T.est(ams[1,]) T.est(ams[2,]) Calculando valor da estatística de interesse agora para todas as amostras de uma só vez ts <- apply(ams, 1, T.est) length(ts) ts Explorando os resultados: medidas resumo, grafico de densidade estimada e IC (95%) summary(ts) plot(density(ts)) quantile(ts, prob=c(0.025, 0.975)) Aumentando o número de amostras para 5000. ams <- matrix(rnorm(20*5000, m=70, sd=10), ncol=20) ts <- apply(ams, 1, T.est) plot(density(ts)) Distribuição amostral da média: empírica (por simulação) //versus// teórica medias <- apply(ams, 1, mean) plot(density(medias)) curve(dnorm(x,mean=70, sd=10/sqrt(20)), 60, 80, add=TRUE, col=2) === 07/05/2008 === Exercicios sobre o uso do Latex. Um preambulo basico: \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. Para usar Unicode, substitua a última linha por \usepackage[utf-8]{inputenc} Apos o preambulo coloque o titulo, autoria e data do artigo. \Title{Título do Trabalho} \author{Nome do Autor} \date{\today} Agora sim começa o documento, \begin{document} \maketitle % seu texto ... % Inclua seções e subseções \section{Uma seção} \subsection{Uma subseção} \end{document} Escreva os comandos Latex para as seguintes formulas matematicas: * $E(X^2)=\int_{-\infty}^{\infty}x^2 f(x)dx$ $$ E(X^2)=\int_{-\infty}^{\infty}x^2 f(x)dx $$ * $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\}$ $$ 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\} $$ * $(a+b)^n = \sum_{k=0}^n \frac{n!}{k!(n-k)!} a^k b^{n-k} $$ (a+b)^n = \sum_{k=0}^n \frac{n!}{k!(n-k)!} a^k b^{n-k} $$ As fórmulas acima ficam destacadas do texto. Para que uma formula fique dentro do texto use $ formula $ ao inves de $$ formula $$. Escreva os comandos do Latex para construir a seguinte matriz: \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] \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] Escreva os comandos do Latex para montar as seguintes tabelas. Tente numerar as tabelas, colocar um comentário e referenciar as tabelas no texto. \begin{tabular}{ccc} \hline & masculino & feminino \\ \hline Não fuma & 45 & 16 \\ Fuma pouco & 28 & 22 \\ \hline \end{tabular} \begin{tabular}{ccc} \hline & masculino & feminino \\ \hline Não fuma & 45 & 16 \\ Fuma pouco & 28 & 22 \\ \hline \end{tabular} \begin{tabular}{|l|cc|} \hline & masculino & feminino \\ \hline\hline Não fuma & 45 & 16 \\ Fuma pouco & 28 & 22 \\ \hline \end{tabular} \begin{tabular}{|l|cc|} \hline & masculino & feminino \\ \hline\hline Não fuma & 45 & 16 \\ Fuma pouco & 28 & 22 \\ \hline \end{tabular} Criando uma tabela Latex de dentro do R. m=data.frame(x=rnorm(10),y=rgamma(10)) library(Hmisc) latex(round(m,4), title='',file='tab1.tex',caption='Usando o comando latex do pacote Hmisc.') Agora basta incluir o arquivo tab1.tex no seu documento. Incluindo figuras. Os comandos abaixo criam um arquivo Postscript com um histograma. postscript('histograma.ps') hist(rnorm(1000)) dev.off() Use os comandos abaixo para incluir a figura no seu documento. Será preciso incluir o comando \usepackage[dvips]{graphicx} no preambulo. \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} Pode-se fazer referencia a figura no texto: figura \ref{fig:hist}, na pagina \pageref{fig:hist}. Note que a figura ficou rotacionada à esquerda. Podemos corrigir refazendo o arquivo .ps postscript('histograma.ps',horizontal=F) hist(rnorm(1000)) dev.off() ou usando a opção "angle" \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} Colocando duas figuras lado a lado. Acrescente \usepackage{subfigure} no preambulo. \begin{figure}[h] \centerline{ \subfigure[histograma grande]{\includegraphics[width=10cm,height=10cm]{histograma.ps} \label{fig:hist1}} \hfil \subfigure[histograma pequeno]{\includegraphics[width=5cm,height=5cm]{histograma.ps} \label{fig:hist2}} } \caption{Exemplo de duas figuras.} \label{fig:histogramas} \end{figure} Fazendo referencia: Figuras \ref{fig:histogramas}, \ref{fig:hist1} e \ref{fig:hist2}. Mais sobre fórmulas matemáticas. $\overbrace{x_1+\underbrace{x_2+\ldots+x_{n-1}}_{n-2}+x_n}^n$ $$ \overbrace{x_1+\underbrace{x_2+\ldots+x_{n-1}}_{n-2}+x_n}^n $$ $ \widehat{\theta\lambda\beta} $, $ \tilde{\pi} $, $ \widetilde{\pi q} $. $ \widehat{\theta\lambda\beta} $, $ \tilde{\pi} $, $ \widetilde{\pi q} $. $$ \int_0^{\infty} e^{-st} \, dt = \frac{e^{-st}}{-s}\Bigg|_0^{\infty} $$ $$ \int_0^{\infty} e^{-st}\,dt = \frac{e^{-st}}{-s} \Bigg|_0^{\infty} $$ $$ I_{x\in A}=\left\{\begin{array}{rc} 1 &\mbox{se}\quad x\in A\\ 0 &\mbox{se}\quad x\notin A \end{array}\right. $$ $$ I_{x\in A} = \left\{ \begin{array}{rc} 1 & \mbox{se} \quad x \in A\\ 0 & \mbox{se} \quad x \notin A \end{array} \right. $$ Para gerar automaticamente uma tabela de conteúdo (ou sumário), lista de figuras e lista de tabelas inclua estes comandos logo após \begin{document} \tableofcontents \listoffigures \listoftables Compile 3 vezes seu arquivo .tex e os arquivos .toc .lof e .lot serão criados. Funções de verossimilhança Seja (12,15,9,10,17,12,11,18,15,13) uma amostra aleatoria de $X\sim N(\mu,4)$ .