[R-br] Regressão segmentada!

Ivan Bezerra Allaman ivanalaman em yahoo.com.br
Quinta Novembro 17 09:52:15 BRST 2011


Bom dia senhores!!

Estou encontrando um problema no ajuste de uma regressão segmentada, e não estou encontrando onde está este problema. Já fiz vários ajustes deste tipo, mais com este modelo particularmente tem alguma coisa errada que não sei onde é. No estudo dos pontos de chutes, o erro é claro, mais não estou sabendo como contornar. Deveria haver três segmentos, mais pelo estudo com janelas interativas, parece haver 5 segmentos. Se alguém puder ajudar, agradeço desde já. Segue um CMR.

x <- c(0,0,0,10,10,10,20,20,20,35,35,35)
y <- c(7.77, 7.81, 7.81, 7.60, 7.67, 7.65, 7.60, NA, 7.66, 7.60, 7.42, 7.50)

segment_lpl <- function(x,b0,b1,b2,K,X0,X1){
  (b0+b1*x)*(x<=X0)+
  (K)*(X0<x & x<X1)+
  (b0+b1*X0-b2*(X1-x))*(x>=X1)
}

teste <- nls(y ~ segment_lpl(x,b0,b1,b2,K,X0,X1),
         start=list(b0=7.8,b1=-0.02,b2=-0.01,K=7.5,X0=10,X1=20)) 

library(gWidgetsRGtk2) 
limits <- list(b0=c(7,8),        
               b1=c(-0.05,0),   
               b2=c(-0.04,0),   
               K=c(7,8),        
               X0=c(8,10),
               X1=c(18,25))

start <- list()                       # lista com os valores para chute

#-----------------------------------------------------------------------------
#função que será atualizada a cada movimento do deslizador
#parâmetros dentro de svalue() são controlados, nomes igual aos da lista

plot.chute <- function(...){
  #faz o gráfico de dispersão
  plot(y ~ x)
  #sobrepõe a curva com os valores dos deslizadores
  curve(segment_lpl(x, svalue(b0), svalue(b1), svalue(b2), svalue(K),svalue(X0), svalue(X1)),
        add=TRUE, col=2)
  #reescreve o start com os valores dos delizadores, para usar na nls()
  start <- list(b0=svalue(b0), b1=svalue(b1), b2=svalue(b2), K=svalue(K), X0=svalue(X0), X1=svalue(X1))
}

#-----------------------------------------------------------------------------
#criação da janela com deslizadores
#na primeira chamada escolher uma das opções (sempre escolho a 1)
#Select a GUI toolkit
#essa função pode estar num arquivo fn.R e carregada com source("fn.R")

w <- gwindow("Caixa com deslizadores para controlar parâmetros")
tbl <- glayout(cont=w)
for(i in 1:length(limits)){
  tbl[i,1] <- paste("Controle", names(limits)[i])
  tbl[i,2, expand=TRUE] <- (assign(names(limits)[i],
                                   gslider(from=limits[[i]][1],
                                           to=limits[[i]][2],
                                           by=diff(limits[[i]])/20,
                                           value=mean(limits[[i]]),
                                           container=tbl, handler=plot.chute)))
}
# 
#-----------------------------------------------------------------------------
#agora com a caixa criada, basta chamar a função e mover os deslizadores
plot.chute()                             

(S,P,f)
Allaman

\begin{signature}
<<>>=
Prof. Dr. Ivan Bezerra Allaman
Universidade Estadual de Santa Cruz
Departamento de Ciências Exatas e Tecnológicas
Ilhéus/BA - Brasil
Fone: +55 73 3680-5076
E-mail: ivanalaman em yahoo.com.br/ivanalaman em gmail.com
@
\end{signature}
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20111117/5343d68a/attachment.html>


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