Índice
O Curso
Material de Apoio
Área dos Alunos
Visitantes
Forum
notaR
Área Restrita
Cursos Anteriores
IBUSP
Outras Insitutições
IBUSP
Outras Insitutições
Nos tutoriais anteriores, nós usamos o objeto que é a estrutura básica dos objetos de dados, a classe de objetos vetores. Crie um vetor de dados numéricos, chamado “num”, que seja uma sequência de valores de 0 a 15 divididos em 7 valores equidistantes.
num <- seq(0,15, len=7)
Agora vamos olhar os valores do objeto criado, em seguida elevar cada valor ao quadrado, atribuindo o resultado ao objeto “num2”. Em seguida tire a raiz-quadrada desse vetor.
num length(num) class(num) num2<-num^2 num2 sqrt(num2) num
Agora vamos extrair apena o quinto elemento e em seguida substituir esse elemento pela palavra “quinto_elemento”. Em seguida vamos repetir as operações anteriores:
num[5] num[5]<- "quinto_elemento" num num[-5] length(num) class(num) num^2 sqrt(num^2)
O que aconteceu aqui? Por que não conseguimos mais operar o vetor “num”? Vamos agora voltar o vetor para sua forma original e operar novamente:
num[5]<- 10 num num^2 sqrt(num^2)
Por que ainda não conseguimos? Vamos investigar o vetor e ajustá-lo.
length(num) class(num) num <- as.numeric(num) sqrt(num^2)
A raiz de um valor elevado ao quadrado é o próprio valor? O que aconteceria se o vetor fosse de números negativos? Veja a discussão sobre função quadrática e raiz quadrada como funções inversas nesse link
Salve o arquivo de dados de levantamento de espécies em caixeitais no seu diretório de trabalho e crie um objeto com seu conteúdo em sua área de trabalho do R. Usaremos este conjunto de dados em todos os tutoriais da unidade, exceto o último.
Obs.: Para salvar, clique com o botão direito do mouse e selecione “salvar linque” .
Depois de efetuar a leitura sempre verifique a estrutura dos dados antes de continuar suas análises.
caixeta = read.table("caixeta.csv", header=T, sep=",", as.is=T) class(caixeta) dim(caixeta) names(caixeta) str(caixeta) head(caixeta)
Transforme a coluna especie
em fator, em um vetor separado. Isso ajuda na manipulação de dados, já que o vetor é correspondente à coluna, mas é de uma classe diferente.
spp=factor(caixeta$especie) spp
Verifique o resultado dos comandos abaixo
unique(spp) unique(caixeta$especie)
Prosseguindo com o mesmo conjunto de dados do tutorial anterior:
Contando spp por local e selecionando uma localidade
str(caixeta) caixeta.local = table(caixeta$especie, caixeta$local) str(caixeta.local) class(caixeta.local) dimnames(caixeta.local) caixeta.local[,"chauas"]
Transformando um objeto de outra classe em matriz
caixeta.mat=matrix(caixeta.local,ncol=3) colnames(caixeta.mat)<-colnames(caixeta.local) rownames(caixeta.mat)<-rownames(caixeta.local) caixeta.mat str(caixeta.mat)
Faz diferença??
table(caixeta.local==caixeta.mat)
Número de espécies por local
caixeta.vf=caixeta.mat>0 caixeta.vf riqueza=apply(caixeta.vf,2,sum) riqueza
chauas = caixeta.mat[,"chauas"] which(chauas>0) chauas.bin <- chauas chauas.bin[which(chauas>0)]<-1 chauas.bin
Selecionando colunas, linhas e valores do objeto caixeta, baseado em critérios de algum estado de um fator (espécie, local).
str(caixeta) nome.spp <- unique(caixeta$especie) nome.local <- unique(caixeta$local) caixeta[caixeta$especie==nome.spp[1],] caixeta[caixeta$local==nome.local[2],] caixeta[caixeta$especie==nome.spp[1] & caixeta$local==nome.local[2],]
Qual o erro?
Tente esse comando:
caixeta[caixeta$especie==nome.spp[1] & caixeta$local==nome.local[1],]
Se tomamos uma amostra ao acaso com reposição1) de uma população estatística e medimos algum atributo dos elementos desta amostra, podemos estimar a variância desta medida na população com :
$$s^2 = \frac{\sum_{i=1}^n (x_i-\bar{x})^2}{n-1}$$
Onde
O denominador $n-1$ é necessário para que o estimador não seja enviesado. O que aconteceria se usássemos o tamanho da amostra $n$ e não $n-1$ como denominador?
Vamos investigar isto com uma simulação, sorteando amostras de uma população com uma variância conhecida, e calculamos a variância de cada uma delas pelos dois métodos. Um estimador sem viés em média tem o valor do que ele estima, que é parâmetro da população que ele estima. Portanto, basta comparar as médias das variâncias calculadas das duas maneiras para avaliar se há viés.
Usaremos as funções de construção de matrizes e de cálculos de funções marginais (apply
) para realizar estas simulações.
Para calcular a variância amostral definida pela expressão acima temos a função var
do R. Vamos agora criar uma função para calcular a variância sem a correção de viés $$n-1$$, ou seja:
$$s^2 = \frac{\sum_{i=1}^n (x_i-\bar{x})^2}{n}$$
Para isto copie e cole o seguinte comando no R 2):
var.2=function(x)(var(x)*(length(x)-1))/length(x)
Agora vamos criar mil amostras de tamanho 10, tomadas de uma população com distribuição normal de média igual a um e variância igual a quatro. O primeiro passo é gerar dez mil valores sorteados desta distribuição normal:
valores = rnorm(10000, mean=1, sd=2)
Agora vamos distribuir estes valores em uma matriz com 1000 colunas. Como são 10.000 valores, cada coluna terá 10 linhas, e representará uma das 1000 amostras de tamanho 10.
valores.m = matrix(valores,ncol=1000)
Agora vamos usar a função apply
para calcular as variâncias de cada coluna desta matriz, usando as duas funções
##Estimador com correção variancias1 = apply(valores.m, 2, var) ## Estimador sem correção variancias2 = apply(valores.m, 2, var.2)
Por fim calculamos as médias dos dois conjuntos de 1000 variâncias. O estimador sem viés terá uma média que converge ao valor da variância na população, que é 4:
mean(variancias1) mean(variancias2)
As matrizes de transição são uma maneira conveniente de modelar o crescimento de uma população dividida em faixas etárias, ou estágios de desenvolvimento 3).
Uma forma de representar essas populações que apresentam estágios diferentes é com diagramas mostrando as transições e permanências entre estados.
Uma forma compacta de representar matematicamente essas transições e permanência é utilizando a forma de matriz, que nesse caso se chama matriz de transição, como na figura abaixo:
Para uma população de Coryphanta robinsorum (Cactaceae) no deserto do Arizona, dividida em três estágios, a matriz de transição foi:
0,43 0 0,56 0,33 0,61 0 0 0,30 0,96
Os elementos da matriz são a probabilidades de transição, num intervalo de tempo, do estágio correspondente ao número da coluna para o estágio correspondente ao número da linha. Por exemplo, a chance de um indivíduo passar do estágio 1 (plântula) para o 2 (jovem) é 0,33, e de permanecer em 1 é de 0,43.
Crie um objeto da classe matriz com esses valores. Isso nos permitirá realizar operações matriciais para prever o estado da população.
mat.trans <- matrix(c(0.43,0.33,0,0,0.61,0.3,0.56,0,0.96),3,3) mat.trans
Agora crie um vetor com as abundâncias iniciais de indivíduos em cada classe. Vamos começar com 50 plântulas , 25 jovens e 10 adultos.
pop.inicio <- c(50,25,10) names(pop.inicio)<-c("plântula", "jovem", "adulto") pop.inicio
Para calcular o número de indivíduos em cada estágio após um intervalo de tempo, basta multiplicar a matriz de transição pelas abundâncias dos indivíduos em cada estágio. Usamos o operador de multiplicação matricial %*%
para isso. Qual será o número de plantas em cada estágio após três intervalos?
pop.1 <- mat.trans%*%pop.inicio pop.1 pop.2 <- mat.trans%*%pop.1 pop.2 pop.3 <- mat.trans%*%pop.2 pop.3
Vamos agora armazenar a trajetória do tamanho dos estágios na população em um data frame:
pop <- data.frame(t0=pop.inicio, t1=pop.1, t2=pop.2, t3=pop.3) pop
Por fim, vamos olhar esses dados em um gráfico. O código abaixo vai ser abordado na aula de gráficos, por enquanto apenas copie e cole as linhas no console do R:
matplot(x=0:3, t(pop), type="l", xlab="tempo", ylab="numero de indivíduos") legend("topright", legend=names(pop.inicio), bty="n", lty=1:3, col=1:3)
Opcional: a multiplicação de matrizes usados neste tipo de modelo de dinâmica populacional estruturada. Com um pouco mais álgebra linear você pode obter muito mais informações. Por exemplo, a taxa de crescimento geométrico da população é o primeiro autovalor da matriz de transição, que pode ser calculado com a função eigen
4). Se a taxa é maior que um a população está crescendo. É o caso dessa população?
eigen(mat.trans)