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: [email protected]/[email protected]
@
\end{signature}_______________________________________________
R-br mailing list
[email protected]
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.