Tag: processamento de dados

Preparação de uma matriz de dados biológicos

Ao prepararmos uma matriz de dados biológicos para análise multivariada temos que ter inicialmente dois cuidados: devemos fazer com que o identificador dos objetos (usualmente estações de coleta) sejam os nomes das linhas e devemos substituir NAs (células vazias) por zeros.
Normalmente os dados de abundância são submetidos a alguma transformação monotônica, como log(x+1), para tornar a distribuição normal, estabilizar a variância e fazer com que as medidas de distância trabalhem melhor.
Para a mudança dos nomes das linhas utilizamos a função rownames,  para substituição dos NAs por zeros is.na e, finalmente, para logaritimização log1p.
A seguir veremos um exemplo destas etapas iniciais de uma análise multivariada.
#dados

ST SP1 SP2 SP3
ST1 4 2
ST2 8 4 1
ST3 1 3 5
ST4
3 7


# lê os dados
dat.bio <-read.delim(“clipboard”,row.names=1)
dat.bio 

    SP1 SP2 SP3
ST1   4   2  NA
ST2   8   4   1
ST3   1   3   5
ST4  NA   3   7
# substitui NAs por 0
dat.bio[is.na(dat.bio)]<-0
dat.bio
    SP1 SP2 SP3
ST1   4   2   0
ST2   8   4   1
ST3   1   3   5
ST4   0   3   7
# logaritimização  ln(x+1)
dat.biolog <- log1p(dat.bio)
dat.biolog
          SP1      SP2       SP3
ST1 1.6094379 1.098612 0.0000000
ST2 2.1972246 1.609438 0.6931472
ST3 0.6931472 1.386294 1.7917595
ST4 0.0000000 1.386294 2.0794415


Looping para consolidar dados

Obtive dados de batimetria em


Depois de trabalhar um pouco os dados em banco de dados fiquei com uma tabela (dat.bat) que indicava o código do bloco estatístico de 10′ de lado e as profundidades registradas (100 por bloco).

Meu objetivo foi consolidar as informações desta tabela que tinha cerca de 24 mil linhas em uma que contivesse por bloco os valores mínimo, médio, máximo e os quartis de 2,5%, 25%, 50%, 75% e 97,5%. Também tive a curiosidade em ver quanto tempo era gasto para processar as informações de cada bloco.

Para rodar a rotina abaixo criei um vetor com os níveis dos blocos e um data.frame para colocar os resultados dos cálculos

blocos<-levels(dat.bat$BL)
Q<-rep(0,length(blocos))
dat.stat<-data.frame(blocos,Q,Q,Q,Q,Q,Q,Q,Q)
names(dat.stat)<-c(“BL”,”Min”,”Q002″,”Q025″,”Q050″,”Q075″,”Q098″,”Max”,”Med”)

Depois fiz um looping para o cálculo. Inicialmente o resultado do message (ou print) só aparecia se a rotina fosse parada ou terminada. Como eu estava no Windows tive que desmarcar a saída com buffer em Misc (Ctrl W) ou colocar após o message o comando flush.console()

for (i in 1:nrow(dat.bat)) {
dat.stat[i,c(2:8)]<-quantile(dat.bat[BL==blocos[i],2],
prob=c(0,0.025,0.25,0.5,0.75,0.975,1))
dat.stat[i,9]<-mean(dat.bat[BL==blocos[i],2])
message(“linha “,i,” processada às “,format(Sys.time(), “%H:%M:%S”))
}