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