Anna [ecoR]
05_curso_antigo:r2013:alunos:trabalho_final:anna.abrahao:start
Código da função (Plano B)
Eu me chamo Anna Abrahão, sou doutoranda em Ecologia na Unicamp. Meu projeto se intitula "Estratégias de aquisição de nutrientes de plantas de campos rupestres de cerrado". Minha motivação para fazer a disciplina é refazer algumas análises da dissertação de mestrado, para publicação, bem como delinear as análises do doutorado.
Os valores de δ15N (medida da razão 15N/14N) são integradores do ciclo do nitrogênio. Cada etapa do ciclo de N tem um fator de discriminação, que gera uma assinatura isotópica (δ15N) do produto diferente da do substrato. Consequentemente, cada forma de nitrogênio no solo (amônio, nitrato, N orgânico) possui uma assinatura isotópica característica. Dessa forma, é possível estudar mecanismos de aquisição e uso de N pelas plantas a partir de isótopos estáveis de nitrogênio (14N e 15N). Esses valores nos tecidos vegetais dependem dos mecanismos de aquisição, translocação e perda de N, bem como da(s) fonte(s) nas quais o N é adquirido. Como para a maioria das espécies (exceto epífitas, carnívoras, e plantas com associações com organismos fixadores de N atmosférico) a maior fonte de N é o solo, a subtração do valor de δ15N do solo do valor de δ15N foliar de uma espécie indica muito sobre os mecanismos de aquisição e uso desse nutriente: Δδ15N= δ15N foliar- δ15N do solo. Esse índice nos permite comparar o uso de N em de diferentes espécies em diferentes locais retirando o efeito do solo. A função que eu pretendo construir deverá me informar o Δδ15N para cada espécie coletada, e fazer um gráfico de Δδ15N em função do δ15N do solo. Usualmente, os valores de condições do ambiente e das espécies são anotados em matrizes diferentes. O que eu tenho são os valores de δ15N foliar por indivíduo em uma matriz e os valores de δ15N de solo em outra matriz, ambas com uma coluna com a localidade. As entradas serão então as matrizes de (1) δ15N foliar com as colunas de local, espécie, indivíduo (dentro de cada espécie) e δ15N foliar; e (2) local e δ15N do solo. O output será então composto por um dataframe igual ao da matriz (1) ao qual foi adicionada uma coluna com os valores de Δδ15N; por três boxplots, um de δ15N foliar por local, um de δ15N do solo por local e o terceiro de Δδ15N por local; além dos gráficos de Δδ15N em função do δ15N do solo e do δ15N foliar.
A análise de compostos em UPLC-MS nos permite identificar e quantificar compostos, comparando-os com uma amostra padrão de composição e concentração conhecidas. A partir do tempo de retenção na coluna de cromatografia, é possível identificar o composto, e a área do pico no tempo de retenção determinado é proporcional à concentração deste composto. A minha proposta é que inserindo-se dados de uma curva padrão e de áreas de pico de amostras, seja possível determinar a concentração das amostras. As matrizes de entrada serão (1) dados da curva padrão que tenham dados de concentração e tempos de retenção respectivos, e (2) Dados de área do pico. A partir dos dados da curva padrão serão calculados o intercepto e a inclinação da reta. Com esses parâmetros, serão calculadas as concentrações com base nas áreas do pico da matriz 2. É possível que sejam vários compostos, e que haja várias curvas padrão e que cada curva padrão seja usada para calcular a concentração de um composto diferente.
Comentário - Anna
A sua proposta A, pelo que eu entendi envolve juntar duas fontes de informações que estão em arquivos diferentes, fazer uma conta de menos e voilà! E o gráfico que você quer que ele te retorne não parece ser muito informativo…
Já a sua proposta B parece bem mais desafiadora! Você pode até tentar encaixar a sua idéia de pedir pro R retornar algo gráfico nela…
Concordo com a Anna que a proposta B parece mais desafiadora, mas acho que se vc. se sente mais confortável com a proposta A, fique com ela. — Alexandre Adalardo de Oliveira 2013/03/24 11:18
Croma<-function(dados, padrao)
cat("\n \t \t \t O primeiro argumento é o dataframe com cada composto em
uma coluna e com as áreas dos picos observadas nas linhas.
O nome de cada composto deve vir no cabeçalho de cada coluna.
O segundo argumento é um dataframe com as concentrações das soluções
padrão na primeira coluna, e as áreas dos picos correspondentes a
cada composto nas colunas seguintes \n")
padrao<-as.data.frame(padrao)
#Verifica se foi inserida a mesma quantidade de compostos na planilha de dados e na de curvas-padrão
if(ncol(dados)!=ncol(padrao)-1)
stop("\t \t \t \n O numero de compostos deve ser o mesmo para o dataframe de dados e o das curvas-padrão", call.=FALSE)
#Verifica de o nome dos compostos está igual nas planilhas de dados e na de curvas-padrão
for(i in 1:ncol(dados))
if(colnames(dados)[i]!=colnames(padrao)[i+1])
stop("\n A ordem e o nome dos compostos devem ser os mesmos na planilha de dados e na de curvas-padrão")
#Verifica, para cada composto, se há valores de áreas de pico observadas maiores que as da planilha curvas-padrão
maior<-matrix(NA, ncol=ncol(dados), nrow=1)
colnames(maior)<-colnames(dados)
maior<-as.data.frame(maior)
if(max(dados[,i], na.rm=T)>max(padrao[,i+1], na.rm=T))
maior[1,i]<-TRUE
maior[1,i]<-FALSE
cat("\n Cuidado, há valores de concentração maiores que o maior
valor de concentração da curva padrão nos compostos", dimnames(maior[which(maior==TRUE)])[[2]])
#Gera matriz com intercepto, inclinação e r2 das curvas padrão de cada composto
curvas<-matrix(NA, ncol=ncol(padrao), nrow=3)
curvas<-as.data.frame(curvas)
curvas[,1]<-c("Intercepto", "Inclinacao", "r2")
colnames(curvas)<-c("Coeficientes", colnames(dados))
for(i in 2:ncol(padrao))
curvas[1,i]<-coef(lm(padrao[,i]~padrao[,1]))[[1]]#Intercepto
curvas[2,i]<-coef(lm(padrao[,i]~padrao[,1]))[[2]]#Inclinação
curvas[3,i]<-summary(lm(padrao[,i]~padrao[,1]))[8]#Coeficiente de correlação
#Verifica se as curvas padrão tem um bom ajuste (r2>0.7)
ruim<-matrix(NA, ncol=ncol(dados), nrow=1)
colnames(ruim)<-colnames(dados)
for(i in 2:ncol(curvas))
if(curvas[3,i]<0.7)
ruim[1,i-1]<-TRUE
ruim[1,i-1]<-FALSE
if(sum(ruim)>=1)
ruim<-as.data.frame(ruim)
stop("\n \n Atenção, os seguintes compostos tem curvas padrão ruins (com r2<0.7):", dimnames(ruim[which(ruim==TRUE)])[[2]])
#Calcula a concentração de cada composto, com base nas curvas-padrão
concentracao<-matrix(NA, ncol=ncol(dados), nrow=nrow(dados))
concentracao<-as.data.frame(concentracao)
colnames(concentracao)<-colnames(dados)
for(i in 1:ncol(concentracao))
concentracao[,i]<-(dados[,i]-curvas[1,i+1])/curvas[2,i+1]
cat("\n \n \n A concentração dos compostos é a seguinte: \n \n")
return(list(concentracao))
Croma{sem pacote}				                                        	Documentação do R
Calcula concentração de compostos a partir de dados de área do pico para cromatografia, ou abosrbância para
espectrofotômetro, com base em uma curva padrão.
Croma(dados, padrao)
dados	um objeto do R, por exemplo vetor, matriz ou data frame com cada composto em uma coluna e com as áreas dos picos
observadas nas linhas. O nome de cada composto deve vir no cabeçalho de cada coluna.
padrao	um objeto do R, por exemplo matriz ou data frame com as concentrações das soluções padrão na primeira coluna, e
as áreas dos picos correspondentes a cada composto nas colunas seguintes
O objeto padrao deve ser uma matriz ou um data frame com pelo menos duas colunas. A primeira coluna sempre tem as
concentrações dos compostos das amostras padrão e as seguintes tem os valores lidos de áreas de pico ou de valores de
absorbância.
O objeto dados possui apenas as colunas com as leituras de área de pico ou absorbância, a partir das quais serão
calculadas as respectivas concentrações.
A ordem, a quantidade e grafia dos compostos deve ser a mesma no objeto dados e no objeto padrao.
A função alerta quando a curva padrão não tem um bom ajuste, com r2<0.7, mas roda a análise.
A função alerta se há valores de leitura dos dados maiores que as leituras da curva padrão.
A função Croma retorna uma lista com um composto em cada coluna, cada leitura de concentração em uma linha e o nome do
composto no cabeçalho.
Estudante de Doutorado em Ecologia. Universidade Estadual de Campinas, Campinas, Brasil.
#Matriz de dados com NAs
matrix.na<-matrix(sample(c(rep(NA, 17), runif(483, 0, 100))), ncol=4)
colnames(matrix.na)<-c("A", "B", "C", "D")
dados<-matrix.na
#Matriz de dados sem NAs
matriz.picos<-matrix(runif(500, 0, 100), ncol=4)
colnames(matriz.picos)<-c("A", "B", "C", "D")
dados<-matriz.picos
#Matriz de padrões certinha
con<-c(seq(from=0, to=10, by=2))
matriz.padrao<-matrix(c(con, con*10, con*7, con*4, con*6), ncol=5)
colnames(matriz.padrao)<-c("Concentracao", "A", "B", "C", "D")
padrao<-matriz.padrao
Croma(matriz.picos, matriz.padrao)
Croma(matrix.na, matriz.padrao)
#Matriz de padrões esculhambada
matriz.esc<-matrix(c(con, runif(24,0,100)), ncol=5)
colnames(matriz.esc)<-c("Concentracao", "A", "B", "C", "D")
padrao<-matriz.esc
Croma(matriz.picos, matriz.esc)
Croma(matrix.na, matriz.esc)
Arquivo da função Documentação de ajuda
05_curso_antigo/r2013/alunos/trabalho_final/anna.abrahao/start.txt · Última modificação: 2020/08/12 06:04 (edição externa)