<div dir="ltr"><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Ele mencionou que foi no RStudio. A manipulate, assim como outros pacotes são instalados junto com o RStudio. Inclusive, alguns deles só funcionam por meio do RStudio, como é o caso da manipulate. Nas minhas tentativas há mais de 6 meses atrás eu não consegui usar a manipulate fora do RStudio, isso porque ela cria janelas para interação nativas do mesmo tipo que gera a interface do RStudio. Formas mais gerais de trabalhar com deslizadores, etc, estão disponíveis no pacote rpanel além de outros.<br>
<br></div><div class="gmail_default" style="font-family:trebuchet ms,sans-serif">Sobre o modelo a considerar para os dados, é como o Fernando relatou, o modelo não descreve o sinal dos dados. Modelo e dados são incompatíveis. Ou seja, o modelo não é apropriado para os dados mas isso não significa dizer que não seja ajustável. Ajustável quero dizer no sentido de jogar numa rotina de ajuste de modelos não lineares de algum aplicativo e convergir. Pode muito bem ter convergido para mínimo local. Se você disser o nome do aplicativo que ele usa (mas não diga), posso quase garantir que foi o que aconteceu. O fato é que não basta convergir. A regra é, depois que convergiu, coloque sobre os gráfico a função ajustada para ver se realmente faz sentido. A função que você quer usar não condiz com o sinal dos dados, então suspeito que você tenha que trocar de modelo. Segue CMR comentado.<br>
<br><span style="font-family:courier new,monospace">require(lattice)<br><br>xyplot(y~x, data=dados, type=c("p","smooth"))<br><br>## O sinal do dado aponta que uma função apropriada deve apresentar<br>## concavidade para cima e ser não simétrica ao se afastar do ponto de<br>
## mínimo.<br><br>## Valores iniciais.<br>guess <- list(a=1, b=3, n=3)<br><br>## Modelo não linear.<br>func <- function(x, n, a, b){<br>    y <- (-(a*(x^(2*n))+b)/((x-186)*(x+186)))<br>    return(y)<br>}<br><br>## Gráfico da função com os valores iniciais dentro do domínio observado<br>
## na amostra.<br>with(guess,<br>     curve(func(x, a, b, n),<br>           min(dados$x), max(dados$x)))<br>abline(v=186, lty=2)<br><br>## Ao fazer o estudo da função verifica-se que o denominador tende à<br>## zero quando x tende à 186, com isso, o valor da função tende ao<br>
## infinito e isso independe dos parâmetros. A função tem comportamento<br>## não compatível com os dados.<br><br>## Sobrepondo dados e função a partir dos valores iniciais.<br>plot(y~x, data=dados)<br>with(guess,<br>     curve(func(x, a, b, n),<br>
           add=TRUE, col=2))<br>abline(v=186, lty=2)<br><br>## Lower e upper são argumentos não considerados pela nls().<br><br>fit <- nls(y~func(x, n, a, b), data=dados, start=guess)<br>## Error in numericDeriv(form[[3L]], names(ind), env) : <br>
##   Missing value or an infinity produced when evaluating the model<br><br>## Repare na mensagem de erro que diz **Missing value or an infinity<br>## produced**. Significa que ao avaliar as derivadas parciais do modelo<br>
## com relação aos parâmetros nos valores forncecidos como chute e<br>## vindos de x, teve-se elementos NA ou Inf.<br><br>f <- expression(-(a*(x^(2*n))+b)/((x-186)*(x+186)))<br><br>## Veja que ocorre um -Inf na avaliação dessas derivadas.<br>
d.a <- D(f, "a"); d.a<br>eval(d.a, envir=c(guess, list(x=dados$x)))<br>d.n <- D(f, "n"); d.n<br>eval(d.n, envir=c(guess, list(x=dados$x)))<br>d.b <- D(f, "b"); d.b<br>eval(d.b, envir=c(guess, list(x=dados$x)))<br>
<br>## Essas derivadas dependem só de x e theta. Se remover o x que confere<br>## o -Inf (posição 187), aquela mensagem de erro some.<br><br>dados[187,]<br><br>## Veja que o x=186 é o que faz com que o denominador seja 0 e aí o<br>
## valor na função não existe nesse ponto.<br><br>fit <- nls(y~func(x, n, a, b), data=dados[-187,], start=guess)<br>## Error in nls(y ~ func(x, n, a, b), data = dados[-187, ], start = guess) : <br>##   number of iterations exceeded maximum of 50<br>
<br>## Agora o erro passa a ser outro. O procedimento de iteração inicia mas<br>## para por execer o número mínimo de passos. Pedir um traço para ver<br>## por onde caminhou é útil.<br><br>fit <- nls(y~func(x, n, a, b), data=dados[-187,], start=guess, trace=TRUE)<br>
## ... linhas omitidas ...<br>## 744.8148 :  -7.50089e-07  1.20808e+04  2.18981e+00<br>## 743.1941 :  -8.314966e-07  1.211611e+04  2.180563e+00<br>## 741.5353 :  -9.211941e-07  1.215176e+04  2.171376e+00<br>## 739.8368 :  -1.019954e-06  1.218775e+04  2.162250e+00<br>
## 738.097 :  -1.128613e-06  1.222408e+04  2.153185e+00<br><br>## Poderia-se aumentar o número de passos ou qualquer outro número para<br>## deixar fazer mais tentativas, porém, do meu ponto de vista, a função<br>## candidata não representa é capaz de representar o sinal dos<br>
## dados. Minha opção seria buscar uma função apropriada.</span><br><br>À disposição.<br>Walmes.<br></div></div>