#=============================================================================== #. Título : Análise quantitativa de dados - AQE #. Autor : José Cláudio Faria/UESC/DCET # Data : 2023-06-15 16:06:01 # Objetivos: #=============================================================================== # a) Apresentar os recursos básicos do R para análise de regressão # b) Fundamentação em regressão linear # c) Distinção dos modelos lineares dos não lineares #=============================================================================== #. Verificando se um modelo é ou não linear nos parâmetros fl <- expression(a + b*x) # polinômio de grau I fq <- expression(a + b1*x + b2*x^2) # polinômio de grau II fe <- expression(a*exp(x/b)) # exponencial - não linear #.. Observar que as derivadas NÃO DEPENDEM do parâmetro b: Linear -> lm deriv(fl, c('a', 'b')) #.. Observar que as derivadas NÃO DEPENDEM dos parâmetros b1 e b2: Linear -> lm deriv(fq, c('a', 'b1', 'b2')) #.. Observar que as derivadas DEPENDEM do(s) parâmetro(s): Não linear -> nls deriv(fe, c('a', 'b')) #.. Informando valores do parâmetros e plotando para verificar a forma #... Informando valores a <- 1 b <- 2 b1 <- 1 b2 <- -0.5 x <- seq(fr=-10, to=10, by=.5) #... Plotando # polinômio de grau I plot(eval(fl) ~ x, type='b') # polinômio de grau II plot(eval(fq) ~ x, type='b') # exponencial - não linear plot(eval(fe) ~ x, type='b') #. Exemplo básico de nls #... alterando o sinal dos parâmetros para verificar alteração na forma da curva plot(eval(expression(-a*exp(x/b))) ~ x, type='b') plot(eval(expression(a*exp(x/-b))) ~ x, type='b') plot(eval(expression(-a*exp(x/-b))) ~ x, type='b') #.. BOD (dataset) #... Simplest form of fitting a first-order model to these data str(BOD) BOD #... plot with(BOD, plot(demand ~ Time, xlim=c(0,8), ylim=c(0,20)) ) m_1 <- nls(demand ~ a*(1-exp(-exp(b)*Time)), data=BOD, start=c(a=20, b=log(.35)), trace=TRUE) summary(m_1) coef(m_1) m_1 # Mais fácil with(BOD, points(predict(m_1) ~ Time, col='red', pch=19) ) # Mais trabalhoso #(a <- coef(m_1)[1]) #(b <- coef(m_1)[2]) #with(BOD, # points(eval(expression(a*(1-exp(-exp(b)*Time)))) ~ Time, # col='red', # pch=19) #) # Mais fácil with(BOD, lines(spline(predict(m_1) ~ Time, n=1e3), col='red', lw=2) ) # Mais trabalhoso #(a <- coef(m_1)[1]) #(b <- coef(m_1)[2]) #with(BOD, # lines(spline(eval(expression(a*(1-exp(-exp(b)*Time)))) ~ Time, # n=1e3), # col='red', # lw=2) #) #... Using a self-starting model fm3 <- nls(demand ~ SSasympOrig(Time, a, b), data=BOD, trace=TRUE) summary(fm3) coef(fm3) fm3