[R-br] Fit não linear com função que aprensenta singularidades.

Fernando Souza nandodesouza em gmail.com
Quinta Agosto 28 23:13:13 BRT 2014


Nao consegui aqui. Mas tenho a impressão que o problema está no modelo 
utilizado.
Você tem certeza que este modelo se ajusta aos dados. Eu tentei achar os 
chutes iniciais utilizando a função manipulate (no Rstudio) e não 
consigo achar valores de parâmetros para essa função que se ajuste o 
dados. de uma olhada aí.

library(manipulate)
modelo<-function(a,n,b,x){-((a*(x^(2*n)) + b)/((x-186)*(x+186)))}
modelo(1,3,3,c(1,2,3,4,5,6,9,12,18,24,30,36,48,60,72,84,96,120,144))
start <- list()
manipulate({plot(y~x,dados)
             curve(modelo(a=a,n=n,b=b,x),add=TRUE)
             start <- list(a=a,n=n,b=b)},
            a=slider(-1.001,3, initial=-1.001),
            n=slider(-5.001,100,initial=-5.001),
            b=slider(1.001,100, initial = 1.001)
            )

On 27-08-2014 16:25, Michelle Baú Graczyk wrote:
> Desculpe Fernando, seguem os dados:
>
> > dput(file)
> structure(list(x = 0:372, y = c(1.552918816, 1.177870257, 0.728582521,
> 0.754977859, 1.014857186, 0.952781237, 0.92487764, 0.930448803,
> 0.825743421, 1.061320976, 0.778891815, 0.987829557, 0.839076467,
> 1.035174095, 1.026961486, 1.180269616, 0.897432732, 0.750135342,
> 0.713731659, 0.986891474, 0.814066753, 0.838472048, 0.819105964,
> 0.913483671, 1.134245404, 0.790984967, 0.785299927, 0.795018406,
> 0.839324923, 0.735915178, 0.593269981, 0.923184631, 1.018998131,
> 0.803540789, 0.80479661, 0.72999522, 0.699068733, 0.618802888,
> 0.815272405, 0.803152178, 0.701841573, 0.734495312, 0.73549551,
> 0.903936404, 0.99491774, 0.990528339, 0.752979853, 0.708288706,
> 0.822200524, 0.787724769, 0.852584706, 0.741692593, 0.833094394,
> 0.835140976, 0.843551076, 0.789762592, 0.71986185, 0.641050114,
> 0.800506751, 0.884314696, 0.987518987, 0.768463801, 0.866236287,
> 1.065961223, 0.806744447, 0.766739735, 0.751533707, 0.696793602,
> 0.936172067, 0.998768819, 0.790549371, 1.112424217, 0.727549674,
> 0.91716513, 0.785049082, 0.835587721, 0.673062803, 0.849652599,
> 0.849677285, 0.792995714, 0.817868458, 0.790538222, 0.718977121,
> 0.969363333, 0.821173251, 0.682762966, 0.547801611, 0.864380029,
> 0.637068436, 0.716060144, 0.925191396, 0.82309242, 1.217327091,
> 0.950335691, 0.825029108, 0.858161444, 0.620884509, 0.743739175,
> 0.782014247, 0.815065357, 0.746548647, 0.778370215, 0.747050338,
> 0.85151045, 0.853198681, 0.741675073, 0.980756505, 0.78396288,
> 0.87737065, 0.76027349, 0.814334321, 0.955472852, 0.797915475,
> 0.64547774, 0.703556084, 1.160420157, 0.697551714, 0.680614453,
> 0.87038201, 0.885639002, 0.931712588, 0.634435751, 0.771353703,
> 0.723837157, 0.864745547, 0.683628583, 0.677707032, 0.625280281,
> 0.780408834, 0.740849273, 0.816243934, 0.743649986, 0.767603759,
> 0.788182662, 0.638866562, 0.749819197, 0.61128548, 0.699447788,
> 0.742390183, 0.654970059, 0.621842501, 0.841482993, 0.71000242,
> 0.719206466, 0.651004308, 0.657988171, 0.659939193, 0.590479621,
> 0.916040704, 0.735814044, 0.780472541, 0.690410176, 0.852647617,
> 0.663802217, 0.774593992, 0.679669203, 0.841208257, 0.644216344,
> 0.790331175, 0.655288593, 0.598600651, 0.850198089, 0.639451072,
> 0.790941168, 0.56980038, 0.751766237, 0.800986145, 0.661843231,
> 0.699207295, 0.729910808, 0.713261821, 0.658346522, 0.698184004,
> 0.725423458, 0.754622693, 0.681435475, 0.471715731, 0.705996852,
> 0.570707406, 0.660579447, 0.738280295, 0.68915117, 0.568583579,
> 0.61153553, 1.02975742, 0.661527086, 0.567946511, 0.543164549,
> 0.702431658, 0.509399922, 0.511034002, 0.683268639, 0.743713692,
> 0.583393828, 0.599969552, 0.722769271, 0.562765552, 0.596352596,
> 0.640454455, 0.610732823, 0.734572557, 0.644839078, 0.714663372,
> 0.679286961, 0.669174296, 0.639958338, 0.732628702, 0.521852221,
> 0.591436817, 0.622606983, 0.592701398, 0.584728486, 0.808503552,
> 0.557689709, 0.683618231, 0.671007461, 0.612336643, 0.867552629,
> 0.71857975, 0.581004025, 0.57724771, 0.65777316, 0.53544089,
> 0.81379122, 0.607679673, 0.561732705, 0.583045033, 0.642250988,
> 0.612925931, 0.619729026, 0.655734541, 0.674082112, 1.199682684,
> 0.565012811, 0.59800977, 0.839234937, 0.806546956, 0.58329986,
> 0.673788265, 0.627473389, 0.69975597, 0.795051056, 0.606857855,
> 0.767389545, 0.691856322, 0.637890254, 0.615875558, 0.527046717,
> 0.69097876, 0.543992738, 0.721710941, 0.541890412, 0.623967124,
> 0.765809615, 0.697307239, 0.648002123, 0.695423905, 0.58107251,
> 0.663865924, 0.676050654, 0.576674348, 0.75346084, 0.684342896,
> 0.692429683, 0.749339007, 0.681089865, 0.694518471, 0.61196794,
> 0.704916225, 0.752186703, 0.973376864, 0.884314696, 0.892780539,
> 0.644331016, 0.810050036, 0.659620659, 0.875652955, 0.739896856,
> 1.050720157, 0.701284935, 0.939293702, 1.023670231, 0.841587313,
> 0.925278197, 0.780156396, 0.887787516, 0.823984315, 0.985433384,
> 0.894676614, 0.83659827, 0.96598687, 0.787544001, 0.764039361,
> 0.898974437, 0.861125405, 0.933638924, 0.86870652, 0.861905018,
> 0.992322483, 1.381073587, 0.899413218, 1.055144597, 1.048128881,
> 0.947446586, 0.816658028, 0.85940532, 0.972548675, 0.875777979,
> 0.974942459, 0.790028568, 0.71600679, 0.792859541, 0.889052096,
> 0.966600048, 0.89341283, 0.958572986, 1.020383755, 0.76941144,
> 1.110825175, 0.843357567, 1.120730793, 0.889411244, 0.999906782,
> 1.02455496, 1.051479065, 1.095087992, 0.923559705, 1.128647961,
> 1.313131831, 0.915153587, 1.058557692, 0.853607998, 0.949029701,
> 0.969001, 1.091106314, 1.033087696, 0.957625347, 0.90042775,
> 1.315533579, 0.86301272, 0.970012346, 0.996177543, 0.872745533,
> 1.169665612, 1.130164184, 1.12352832, 1.059315803, 1.008628249,
> 1.296573626, 1.045684131, 1.193302444, 1.181863084, 1.096267365,
> 1.240134937, 1.16928576, 1.233877333, 1.092117661, 1.15841578,
> 1.500965885, 1.229769834, 1.438586533, 1.346249834, 1.459758706,
> 1.542678738, 1.583001188, 1.512468952, 1.330386034, 1.215865019,
> 1.642284388, 1.588310357, 1.602909577, 1.479793712, 1.527826283
> )), .Names = c("x", "y"), class = "data.frame", row.names = c(NA,
> -373L))
>
>
>
>
> Boa Tarde,
>
> Eu estou fazendo um fit nâo linear com um polinômio. Porém, a fiunção 
> que eu estou usando :
> y= - {[a*(x^(2*n)) + b]/[(x-186)(x+186)]} apresenta duas assíntotas em 
> +- 186 e por isso dá um erro no fit: Erro em numericDeriv(form[[3l]], 
> names(ind), env): obtido valor faltante ou infinito quando avaliando o 
> modelo.
> Pelo que eu entendi, o motivo é que a derivada também possui 
> assíntotas nestes mesmo postos e daí na função vai para o infinito.
> Eu fiz D( (-(a*(x^(2*n)) + b)/((x-186)(x+186))), "x") e a mensagem de 
> erro foi: Erro em x^(2*n)argumento não numérico para operador binário. 
> Aí eu pensei que era por causa do n e deixei então só o x^2 e o erro 
> foi o mesmo. Eu procurei na internet e não achei nada que explicasse o 
> que está querendo dizer. O que seria um operador binário?
>
> Voltando às assintotas, eu achei uma função chamada 
> ‘NLSstAsymptotic(xy)’ que é para assintotas verticais em gráficos mas 
> eu tentei emplementá-la e nâo deu certo. Tem outra função que eu possa 
> usar para que o fit seja feito mesmo que a função usada para o fit 
> apresente singularidades?
>
> Abaixo está o código:
>
>
>
> file <- read.table(file="/Users/bau/Desktop/teste/DISparam.txt", 
> col.names=c('x','y'))
> plot(x=file$x, y=file$y, xlab='Valores de x', ylab='Valores de y', 
> lwd=0.5,)
>
>
> dados <- data.frame(x=file$x,y=file$y)
>
> #chute inicial
> guess <- list(a=1, b=3, n=3)
>
> # funcao usada para o fit #
> func <- function(x,n, a, b){
>   y <- (-(a*(x^(2*n)) +b)/((x-186)*(x+186)))
>   return(y)
> }
>
> #executa o fit e armazena resultado na variavel 'fit'
> fit <- nls(y ~ func(x,n,a,b), data=dados, start=guess, lower=-200, 
> upper=200)
> fit
> summary(fit)
> #gera valores de y a partir do resultado do fit, para plotar
> #o resultado no mesmo grafico que os dados
> yfit <- predict(fit)
> #plota a linha do fit
> lines(dados$x, yfit, col='blue',lwd=2)
> #carrega os parametros
> param <- coef(fit)
>
> Obrigada,
>
> Michelle
>
>
> _______________________________________________
> R-br mailing list
> R-br em 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.

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20140828/efe40763/attachment.html>


Mais detalhes sobre a lista de discussão R-br