[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