Índice
O Curso
Material de Apoio
Área dos Alunos
Visitantes
Forum
notaR
Área Restrita
Cursos Anteriores
IBUSP
Outras Insitutições
IBUSP
Outras Insitutições
Mestrando em botânica pela USP, sou aluno da Prof. Dra. Lúcia Lohmann. O título do meu projeto é Filogenia Molecular do Gênero Dolichandra s.l. (Bignoniaceae).
Seleção de modelo que descreva a área foliar de uma espécie
A área foliar é um dos parâmetros mais utilizados para se entender diversos aspectos da performance das plantas, como utilização de água e luz, entre varias outras características. Atualmente existem diversos métodos que permitem a estimativa da área foliar por equipamentos, contudo são destrutivos e pouco práticos em campo. Uma alternativa à eles é o método não-destrutivos que utiliza análises de regressão baseadas nas dimensões das folhas, o que possibilita uma estimativa barata, fácil e que permite diversas tomadas de medidas do mesmo indivíduo durante seu desenvolvimento.
Para tanto minha função pretende selecionar modelos teóricos que melhor descrevam a área foliar de uma determinada espécie. Para isso utilizarei os parâmetros comprimento (C), largura (L) e C*L das folhas e pré-selecionei como modelos default: eliptico, linear e potencial. O teste será feito pelo método de regressão e para a avaliação utilizarei estimativas baseadas nos parâmetros usados nos modelos e estimativas da área foliar de outra natureza, como pelos métodos por massa ou digitalização.
Comentários
Bem interessante! Mas a ideia é apenas testar a adequação do modelo, ou estimar a area para dados que não tem estimativas por massa ou digitalização? A função poderia fazer ambos, inclusive, recebendo dados de folha com área estimada, e folhas à estimar, mas acho que apenas testar os diversos modelos já seria bem interessante.
— Fabio de A. Machado 2011/04/06 19:09
Resposta
A idéia é fazer uma função que teste a adequeção dos dados (um subconjunto de folhas que eu tenho tanto as medidas de comprimento e largura, quanto a área estimada por técnicas mais dispendiosas) a um modelo. Uma vez o modelo escolhido, poderei estimar a área do restante dos dados em que apenas as medidas de largura e comprimento foram tomadas.
Após a entrega Função muito legal, e demonstra que você entende muito o modelo de regressão linear gaussiana. Só não ficou claro o propósito da randomização. Seria uma simulação da hipótese nula de ausência de efeito?
leaf package:unknown R Documentation Estima a área foliar Description: Função que estima a área foliar de uma espécie com base em medidas da folha. Primeiramente a função escolha a variável que melhor descreve a área com base no ajuste a uma reta de regressão pelo critério de menor valor da somatória de resíduos quadrados - RSS. Uma vez obtidos os coeficientes, a função estima a área foliar de uma segunda matriz. Com leaf também é possível simular valores de área com o mesmo n amostral utilizado e verificar a variação apresentada. Usage: leaf(area, matriz1, matriz2, reps=0) Arguments: area Um vetor com medidas da área foliar. matriz1 Uma matriz com medidas foliares dos mesmos indivíduos do argumento area onde os indivíduos são as linhas e as variáveis são as colunas. matriz2 Uma matriz com um novo conjunto de medidas foliares para as quais a área é desconhecida onde os indivíduos as linhas e as variáveis são as colunas. reps Número de repetições da simulação. Como defeault a simulação não é feita. Details: O critério escolhido para selecionar a variável é o de menor valor de somatório dos resíduos quadrados. A ordem dos valores de área no vetor deve ser a mesma dos indivíduos mensurados na matriz1. As colunas em matriz1 e matriz2 devem conter as mesmas variáveis. Value: Um objeto da classe list. comp1 : coluna com menor valor de RSS. comp2 : RSS e coeficientes da regressão. comp3 : Vetor com as áreas estimadas. comp4 : Intervalo da distribuição dos valores simulados entre 2.5% e 97.5%. Note: Cabe ao usuário definir quais são as medidas foliares que melhor poderiam descrever a área das folhas na espécie em estudo. Author(s): Luiz Henrique Martins Fonseca References: Kemp, C.D. 1960. Methods of Estimating the Leaf Area of Grasses from Linear Measurements. Annals of Botany 24(4): 491-499. Examples: area <- c(63.00, 71.30, 72.85, 83.74, 95.40, 95.40, 104.32, 114.24, 116.61, 122.83) matriz1 <- matrix(c(14.0, 15.5, 15.5, 15.8, 15.9, 15.9, 16.3, 16.8, 16.9, 17.3, 4.5, 4.6, 4.7, 5.3, 6.0, 6.0, 6.4, 6.8, 6.9, 7.1), nrow = 10) matriz2 <- matrix(c(14.4, 14.8, 14.9, 15.0, 15.1, 15.6, 15.6, 15.6, 16.3, 16.8, 5.4, 5.4, 5.7, 5.7, 6.3, 6.3, 6.6, 6.6, 7.2, 8.1), nrow = 10) leaf(area, matriz1, matriz2, reps=500)
Resolvi mudar um pouco a proposta inicial e não mais buscar modelos, mas sim variáveis que estejam mais relacionadas com a área foliar. O modelo amplamente utilizado na literatura é o linear, em detrimento de modelos quadráticos ou cúbicos.
leaf - linear estimation of area leaf <- function(area, matriz1, matriz2, reps=0) ########## Busca da funcao que descreve a area foliar em funcao da uma variavel que tenha o menor valor de RSS ############ { result <- matrix(ncol=3,nrow=dim(matriz1)[2]) ### cria uma matriz para armazenar resultados for(i in 1:dim(matriz1)[2]) { lm <- lm(area~matriz1[,i]) result[i,1] <- sum(lm$residuals^2) ##coloca na primeira coluna o valor da sum(residuos^2) result[i,2:3] <- lm$coefficients ##coloca na segunda e terceira colunas os coeficients col <- which.min(result[,1]) ret <- result[result[,1]==min(result[,1]),] names(ret) <- c("RSS", "Intercepto", "inclinacao") } ########## Estimativa de área ########## area.est <- ret[2]+matriz2[,which.min(result[,1])]*ret[3] ########## Simulacao ########## if(reps>0) { sim <- matrix(ncol=3, nrow = reps) for(i in 1:reps) { ran <- rnorm(length(area), mean(area), sd(area)) lm <- lm(ran~matriz1[, which.min(result[,1])]) ## ajusta o modelo para cada repeticao sim[i,1] <- sum(lm$residuals^2) #guarda a somatoria dos residuos quadrados na primeira coluna sim[i,2:3] <- as.numeric(coef(lm)) # guarda os coefs na segunda e terceira colunas ret1 <- qnorm(c(0.025, 0.975), mean(sim[,1]), sd(sim[,1])) ## valores entre 2.5% e 97.5% ret2 <- qnorm(c(0.025, 0.975), mean(sim[,2]), sd(sim[,2])) ## valores entre 2.5% e 97.5% ret3 <- qnorm(c(0.025, 0.975), mean(sim[,3]), sd(sim[,3])) ## valores entre 2.5% e 97.5% } ########## Retorno da analise com simulacao ############ simula <- matrix(c(ret1, ret2, ret3), ncol = 3, nrow = 2) dimnames(simula) <- list(c("2.5%", "97.5%"), c("RSS", "Intercepto", "inclinacao")) a <- list(col, ret, area.est, simula) names(a) <- c("variavel", "coeficientes", "area.estimada", "simulacao") return(a) } if(reps==0) { ########## Retorno da analise sem simulacao ############ a <- list(col, ret, area.est) names(a) <- c("variavel", "coeficintes", "area.estimada") return(a) } }