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

Mauro Sznelwar sznelwar em uol.com.br
Sexta Agosto 29 09:44:21 BRT 2014


Onde pega esta library manipulate? Quando tentei, no Windows 7, deu que não está disponível na versão R 3.1. Por acaso é exclusiva do Linux, ou ainda não está oficializada?

Oi Fernando, 

Ele nem desenha a curva em cima do gráfico. Isso indica então que não tem parâmetros que façam com que a função se ajuste, né?
Engraçado porque meu orientador conseguiu fazer o fit usando esta função. 
Aqui está como eu plotei mas a curva em azul nem apareceu sobre o gráfico.

file <- read.table(file="/Users/bau/Desktop/teste/DISparam.txt", col.names=c('x','y'))
dados <- data.frame(x=file$x,y=file$y)


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, col="blue")
            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)
)

Mas uma função que tem singularidades é aceita para ajustar os dados no R? Se a função ajustasse, não teria problema o fato de ela apresentar singularidades?

Muito obrigada,

Michelle



Em 28 de agosto de 2014 23:13, Fernando Souza <nandodesouza em gmail.com> escreveu:

  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.




--------------------------------------------------------------------------------
_______________________________________________
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/20140829/f27d8348/attachment.html>


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