Modelos não lineares....

9 Ago
2011
9 Ago
'11
02:41
Pessoal; Novamente recorro a ajuda de vcs...Estou tendo dificuldades no ajuste de um modelo não linear aos meus dados. Vejam mensagem de erro que está aparecendo.
a=6> b=0.16> c=-0.125 plot(HT~DAP,data=dados)> curve(1.30+(x^2/a+b*x+c*x^2),add=T) n <- nls(HT~(DAP^2/a+b*DAP+c*DAP^2)+1.3,data=dados,+ start=list(a=a, b=b, c=c))Erro em nlsModel(formula, mf, start, wts) : matriz gradiente singular nas estimativas iniciais dos parâmetros Em anexo segue a base de dados! Muito obrigado pela ajuda!
Thiago de Paula Protásio Acadêmico de Engenharia Florestal Universidade Federal de Lavras Laboratório de Energia da Biomassa Florestal Laboratório de Biomateriais (035) 9183-2246

9 Ago
9 Ago
10:49
Tiago Meus conhecimentos de MNL são torpes, mas as poucas vezes que os enfrentei esse erro apareceu algumas... Essa mensagem é um indicativo de que seu modelo pode estar superparametrizado, aí a superfície dos mínimos quadrados é plana e a matriz tem gradiente singular! Nesses casos vale a pena "esmiuçar" o modelo... Daqui a pouco o Walmes manda uma solução definitiva e elegante sobre isso! abraço, FH 2011/8/8 Thiago De paula protásio <depaulaprotasio@yahoo.com.br> > Pessoal; > > Novamente recorro a ajuda de vcs... > Estou tendo dificuldades no ajuste de um modelo não linear aos meus dados. > > Vejam mensagem de erro que está aparecendo. > > > a=6 > > b=0.16 > > c=-0.125 > > > plot(HT~DAP,data=dados) > > curve(1.30+(x^2/a+b*x+c*x^2),add=T) > > > n <- nls(HT~(DAP^2/a+b*DAP+c*DAP^2)+1.3,data=dados, > + start=list(a=a, b=b, c=c)) > Erro em nlsModel(formula, mf, start, wts) : > matriz gradiente singular nas estimativas iniciais dos parâmetros > > Em anexo segue a base de dados! > > Muito obrigado pela ajuda! > > > Thiago de Paula Protásio > Acadêmico de Engenharia Florestal > Universidade Federal de Lavras > Laboratório de Energia da Biomassa Florestal > Laboratório de Biomateriais > (035) 9183-2246 > > _______________________________________________ > R-br mailing list > R-br@listas.c3sl.ufpr.br > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça > código mínimo reproduzível. >

17:14
Thiago, Já foi recomendado o não envio de arquivos anexos nas mensagens. Leia o guia de postagem. Sugestão mais simples para conjuntos pequenos é usar dput() como eu faço abaixo. O problema observado já foi solucionado pelo Fernando. O modelo em questão é não identificável da forma como foi escrito. Existem dois termos x^2 que o torna não estimável. Outro ponto é que o modelo é linear. Veja o código abaixo. # lendo da área de transferência (ctrol+c no arquivo texto) da <- read.table("clipboard", header=TRUE, dec=",") str(da) # ao dar o dput() gero a estrutura que copio do console e colo # aqui para que todos tenham acesso imediato (código mínimo REPRODUZÍVEL) dput(da) # esse é o resultado do dput() que agora joguei para objeto da <- structure(list(Arvore = 1:100, DAP = c(8.3, 13.6, 13.4, 20.4, 10.1, 14.4, 13.1, 15.6, 13.4, 13.6, 14.4, 4.4, 10.4, 10.4, 11.6, 12.1, 12.4, 13.4, 10.6, 14.6, 12.2, 14.1, 10.4, 7.2, 4.4, 10.1, 14.6, 8.1, 15.1, 14.1, 11.6, 16.3, 11.4, 13.6, 11.4, 13.1, 13.4, 13.1, 11.4, 10.1, 12.4, 17.4, 10.3, 10.4, 7.4, 14.6, 15.3, 13.6, 10.4, 12.1, 10.6, 12.2, 9.4, 10.6, 15.3, 7.1, 16.8, 16.1, 19.6, 8.4, 12.4, 15.4, 12.6, 12.6, 12.6, 9.4, 10.5, 10.1, 13.4, 8.1, 11.6, 14.4, 11.8, 13.6, 15.6, 10.3, 8.6, 9.4, 9.1, 12.4, 11.4, 5.2, 11.6, 12.5, 7.5, 8.4, 9.3, 5.1, 18.4, 16.1, 6, 9.4, 12.5, 9.5, 11.2, 11.5, 6.5, 11.6, 9.5, 11.5), HT = c(9, 8.65, 10.75, 11.87, 9.14, 9.95, 9.7, 10.5, 9, 8.55, 9.9, 5.15, 9.25, 8.78, 8.3, 8.8, 9.65, 10.93, 9.25, 9.48, 10.25, 10, 9.26, 7.47, 5.83, 8.4, 10.45, 7.67, 11.1, 10.95, 11.1, 11.7, 10.36, 11.15, 8.8, 0.05, 9.6, 11.5, 10.4, 10.65, 10.77, 10.62, 11.68, 8.45, 5.64, 11.37, 11.1, 12.47, 9.65, 9.85, 10.3, 9.86, 5.9, 9.92, 9.36, 8.24, 11.68, 12.13, 12.21, 8.2, 10, 11.16, 10.35, 8.1, 10.3, 8.87, 8.75, 8.8, 9.45, 8.75, 10.45, 11.82, 10.55, 10.15, 11.1, 10.23, 8.25, 10.3, 9.7, 9.72, 10.27, 5.9, 9.6, 10.1, 8.12, 8.55, 9.17, 5.47, 12.68, 10.5, 6.88, 9.72, 11.5, 10.18, 10.5, 10.26, 7.54, 8.7, 9.7, 8.43)), .Names = c("Arvore", "DAP", "HT"), class = "data.frame", row.names = c(NA, -100L)) dput(da) # isso é o dput(), use esse mecanismo para fornecer CMR à lista # gráfico e chutes a <- 6; b <- 0.16; c <- -0.125 plot(HT~DAP, da) curve(1.30+(x^2/a+b*x+c*x^2), add=TRUE) # esse modelo tem dois termos multiplicando x^2 # temos c*x^2 e temos (1/a)*x^2, portando, não é possível estimá-los # um termo é função linear do outro # gradiente do modelo não linear avaliados no ponto a, b, c grad <- deriv3(~1.30+(x^2/a+b*x+c*x^2), c("a","b","c"), function(a, b, c, x) NULL) grad.eval <- grad(a=a, b=b, c=c, x=da$DAP) str(grad.eval) F <- attr(grad.eval, "gradient") eigen(t(F)%*%F) # último autovalor é praticamente zero solve(t(F)%*%F) # sistema é singular plot(F[,c("a","c")]) # linha perfeita diz que a é função de c (ou contrário) # porém, a+c talvez seja uma função estimável ac <- -.01; b <- 0.8 plot(HT~DAP, da) curve(1.30+(ac*x^2+b*x), add=TRUE) n0 <- nls(HT~(ac*DAP^2+b*DAP)+1.3, data=da, start=list(ac=ac, b=b)) summary(n0) # veja que esse modelo é linear e portanto pode-se usar lm() # o problema é definir b0=1.3 na lm() que não sei se é possível # perceba que foi necessário apenas uma interação para convergir #----------------------------------------------------------------------------- Tenho códigos de ajuste de modelos não lineares à dados de DAP nos meus materiais (http://www.leg.ufpr.br/~walmes/cursoR/cursoR4.pdf) À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ========================================================================== 2011/8/9 Fernando Henrique Toledo <fernandohtoledo@gmail.com> > Tiago > > Meus conhecimentos de MNL são torpes, mas as poucas vezes que os enfrentei > esse erro apareceu algumas... > > Essa mensagem é um indicativo de que seu modelo pode estar > superparametrizado, aí a superfície dos mínimos quadrados é plana e a matriz > tem gradiente singular! > > Nesses casos vale a pena "esmiuçar" o modelo... > > Daqui a pouco o Walmes manda uma solução definitiva e elegante sobre isso! > > abraço, > FH > > 2011/8/8 Thiago De paula protásio <depaulaprotasio@yahoo.com.br> > >> Pessoal; >> >> Novamente recorro a ajuda de vcs... >> Estou tendo dificuldades no ajuste de um modelo não linear aos meus dados. >> >> Vejam mensagem de erro que está aparecendo. >> >> > a=6 >> > b=0.16 >> > c=-0.125 >> >> > plot(HT~DAP,data=dados) >> > curve(1.30+(x^2/a+b*x+c*x^2),add=T) >> >> > n <- nls(HT~(DAP^2/a+b*DAP+c*DAP^2)+1.3,data=dados, >> + start=list(a=a, b=b, c=c)) >> Erro em nlsModel(formula, mf, start, wts) : >> matriz gradiente singular nas estimativas iniciais dos parâmetros >> >> Em anexo segue a base de dados! >> >> Muito obrigado pela ajuda! >> >> >> Thiago de Paula Protásio >> Acadêmico de Engenharia Florestal >> Universidade Federal de Lavras >> Laboratório de Energia da Biomassa Florestal >> Laboratório de Biomateriais >> (035) 9183-2246 >> >> _______________________________________________ >> R-br mailing list >> R-br@listas.c3sl.ufpr.br >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br >> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça >> código mínimo reproduzível. >> > > > _______________________________________________ > R-br mailing list > R-br@listas.c3sl.ufpr.br > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça > código mínimo reproduzível. >
5120
Idade (dias atrás)
5120
Última atividade (dias atrás)
2 comentários
3 participantes
participantes (3)
-
Fernando Henrique Toledo
-
Thiago De paula protásio
-
Walmes Zeviani