<!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>