<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.3429" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial color=#0000ff>Estava vendo a discussão, e não consegui 
rodar isto...</FONT></DIV>
<DIV><SPAN style="FONT-FAMILY: courier new,monospace"># modelo não 
contínuo</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
style="FONT-FAMILY: courier new,monospace">curve(segment_lpl(x, b0=7.8, 
b1=-0.02, b2=-0.01, K=7.5, X0=10, X1=20), -1, 30)</SPAN></DIV>
<DIV><SPAN style="FONT-FAMILY: courier new,monospace">Erro em eval(expr, envir, 
enclos) : <BR>  não foi possível encontrar a função "segment_lpl"<BR>> 
<BR></SPAN></DIV>
<BLOCKQUOTE 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV><FONT face="trebuchet ms,sans-serif">Ivan,<BR><BR>O modelo que você 
  passou não é contínuo nos "cotovelos". Pelos dados que passou, penso que você 
  queira um modelo contínuo nas trocas de taxa. Eu fiz uns ajustes quanto à 
  isso<BR><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace"># modelo não contínuo</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">curve(segment_lpl(x, b0=7.8, 
  b1=-0.02, b2=-0.01, K=7.5, X0=10, X1=20), -1, 30)</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace"># modelo tri-linear segmentado 
  contínuo</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">tri.lin <- function(x, x0, b0, 
  x1, b1, x2, b2){</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">  ## x0: intercepto</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">  ## b0: inclinação/taxa do 
  primeiro segmento</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">  ## x1: primeiro "cotovelo", 
  mudança de taxa</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">  ## b1: inclinação/taxa do 
  segundo segmento</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">  ## x2: segundo "cotovelo", 
  mudança de taxa</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">  ## b2: inclinação/taxa do 
  terceiro segmento</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">  
  (x0+b0*x)*(x<x1)+</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">  
  (x0+b0*x1+b1*(x-x1))*(x>x1)*(x<x2)+</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">  
  (x0+b0*x1+b1*(x2-x1)+b2*(x-x2))*(x>x2)</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">}</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">curve(tri.lin(x, x0=0, b0=1, x1=2, 
  b1=-1, x2=4, b2=1), -1, 6)</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">abline(v=c(0,2,4), lty=2)</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">x <- 
  c(0,0,0,10,10,10,20,20,20,35,35,35)</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">y <- c(7.77, 7.81, 7.81, 7.60, 
  7.67, 7.65, 7.60, NA, 7.66, 7.60, 7.42, 7.50)</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">plot(y~x)</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">curve(tri.lin(x, x0=7.8, b0=-0.017, 
  x1=10, b1=0, x2=20, b2=-0.01), add=TRUE)</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">da <- data.frame(x=x, 
  y=y)</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">da <- 
  da[complete.cases(da),]</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">> n0 <- nls(y~tri.lin(x, x0, 
  b0, x1, b1, x2, b2), data=da, trace=TRUE,</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">+           
  start=list(x0=7.8, b0=-0.017, x1=10, b1=0.001, x2=20, b2=-0.01)) </SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">Erro em nlsModel(formula, mf, 
  start, wts) : </SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">  matriz gradiente singular 
  com estimativas de parâmetros iniciais</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">> </SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">> tri.lin.model <- 
  deriv3(~(x0+b0*x)*(x<x1)+</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">+   
  (x0+b0*x1+b1*(x-x1))*(x>x1)*(x<x2)+</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">+   
  (x0+b0*x1+b1*(x2-x1)+b2*(x-x2))*(x>x2),</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">+   
  c("x0","b0","x1","b1","x2","b2"),</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">+   function(x, x0, b0, 
  x1, b1, x2, b2){NULL})</SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">Erro em deriv3.formula(~(x0 + b0 * 
  x) * (x < x1) + (x0 + b0 * x1 + b1 *  : </SPAN><BR 
  style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">  Função '`>`' não está na 
  tabela de derivadas</SPAN><BR style="FONT-FAMILY: courier new,monospace"><SPAN 
  style="FONT-FAMILY: courier new,monospace">> </SPAN><BR><BR>Porém, o 
  problema da não convergência não é qualidade do chute mas a função do modelo 
  em si. Ao usar o o operador lógico "<" (e outros) a nls() não consegue 
  interpretar para criar a matriz gradiente. O curioso que o modelo 
  bi-segmentado ela faz, não sei como, mas. O mais apropriado, dado que se os 
  valores de x0, x1 e x2 fossem conhecidos isso seria um problema de modelo 
  linear, seria escrever o modelo não linear tirando vantagem disso, dessa 
  linearidade parcial, e usar o algorithm="plinear" na nls(). No livro MASS tem 
  usa seção curta, embora suficiente, para entender como fazer isso. Não sei se 
  os dados que você me mandou são reais ou não, mas entre ficar com uma 
  trilinear (6 parâmetros) passando por 4 pontos no domínio da covariável, eu 
  prefiro ajustar uma cúbica (pelo menos usa menos parâmetros, é contínua). Esse 
  trilinear é ligar com segmentos as médias, e as inclinações são como se fossem 
  contrastes entre essas médias (delta_y/delta_x). Note que trilinear requer 
  mais parâmetros do o temos em grau de liberdade para oferecer!! Outra maneira 
  seria usar a optim() para fazer o ajuste.<BR><BR>À 
  disposição.<BR>Walmes.<BR><BR clear=all></FONT><SPAN 
  style="FONT-FAMILY: trebuchet ms,sans-serif">==========================================================================</SPAN><BR 
  style="FONT-FAMILY: trebuchet ms,sans-serif"><SPAN 
  style="FONT-FAMILY: trebuchet ms,sans-serif">Walmes Marques Zeviani</SPAN><BR 
  style="FONT-FAMILY: trebuchet ms,sans-serif"><SPAN 
  style="FONT-FAMILY: trebuchet ms,sans-serif">LEG (Laboratório de Estatística e 
  Geoinformação, 25.450418 S, 49.231759 W)</SPAN><BR 
  style="FONT-FAMILY: trebuchet ms,sans-serif"><SPAN 
  style="FONT-FAMILY: trebuchet ms,sans-serif">Departamento de Estatística - 
  Universidade Federal do Paraná</SPAN><BR 
  style="FONT-FAMILY: trebuchet ms,sans-serif"><SPAN 
  style="FONT-FAMILY: trebuchet ms,sans-serif">fone: (+55) 41 3361 
  3573</SPAN><BR style="FONT-FAMILY: trebuchet ms,sans-serif"><SPAN 
  style="FONT-FAMILY: trebuchet ms,sans-serif">VoIP: (3361 3600) 1053 
  1173</SPAN><BR style="FONT-FAMILY: trebuchet ms,sans-serif"><SPAN 
  style="FONT-FAMILY: trebuchet ms,sans-serif">e-mail: <A 
  href="mailto:walmes@ufpr.br" target=_blank>walmes@ufpr.br</A></SPAN><BR 
  style="FONT-FAMILY: trebuchet ms,sans-serif"><SPAN 
  style="FONT-FAMILY: trebuchet ms,sans-serif">twitter: @walmeszeviani</SPAN><BR 
  style="FONT-FAMILY: trebuchet ms,sans-serif"><SPAN 
  style="FONT-FAMILY: trebuchet ms,sans-serif">homepage: <A 
  href="http://www.leg.ufpr.br/%7Ewalmes" 
  target=_blank>http://www.leg.ufpr.br/~walmes</A></SPAN><BR 
  style="FONT-FAMILY: trebuchet ms,sans-serif"><SPAN 
  style="FONT-FAMILY: trebuchet ms,sans-serif">linux user number: 
  531218</SPAN><BR style="FONT-FAMILY: trebuchet ms,sans-serif"><SPAN 
  style="FONT-FAMILY: trebuchet ms,sans-serif">==========================================================================</SPAN><BR></DIV>
  <P><FONT face=Arial size=2></FONT></P></BLOCKQUOTE></BODY></HTML>