Nothing
prof.dev<- function ( object,
which = NULL,
min = NULL,
max = NULL,
step = NULL,
length = 7,
startlastfit = TRUE,
plot = TRUE,
perc = 95,
col = "darkgreen")
{
cat("******************************************************************", "\n")
if (is.null(object$y) )
stop(paste(deparse(substitute(object)), "does not have `y' components"))
if (is.null(min))
stop(paste("The min has not been specified"))
if (is.null(max))
stop(paste("The max has not been specified"))
# if (is.null(step))
# stop(paste("The step has not been specified"))
if (is.null(which))
stop(paste("The parameter has not been specified"))
else
{
if (!any(which == c("mu", "sigma", "nu", "tau")))
stop(paste("The parameter has not been specified correctly."))
}
#interval <- seq(from=min, to=max, by=step)
interval <- if (is.null(step)) seq(from=min, to=max, length.out=length) else seq(from=min, to=max, by=step)
interval <- ifelse(interval==0,0.0001,interval)
fix.parameter <- rep(0, length(interval))
G.deviances <- rep(0, length(interval))
m <- length(interval)
for (i in 1:m)
{
if (which == "mu")
{
if ("mu"%in%object$parameters)
{
mu.start <- rep(interval[i],length(object$y))
object$call$mu.fix <- TRUE
object$call$mu.start <- mu.start
cat("mu.start=(" ,interval[i],")","\n")
}
else
stop(paste("The mu is not a valid parameter of the current model."))
}
if (which == "sigma")
{
if ("sigma"%in%object$parameters)
{
sigma.start <- rep(interval[i],length(object$y))
object$call$sigma.fix <- TRUE
object$call$sigma.start <- sigma.start
cat("sigma.start=(" ,interval[i],")","\n")
}
else
stop(paste("The sigma is not a valid parameter of the current model."))
}
if (which == "nu")
{
if ("nu"%in%object$parameters)
{
nu.start <- rep(interval[i],length(object$y))
object$call$nu.fix <- TRUE
object$call$nu.start <- nu.start
cat("nu.start=(" ,interval[i],")","\n")
}
else
stop(paste("The nu is not a valid parameter of the current model."))
}
if (which == "tau")
{
if ("tau"%in%object$parameters)
{
tau.start <- rep(interval[i],length(object$y))
object$call$tau.fix <- TRUE
object$call$tau.start <- tau.start
cat("tau.start=(" ,interval[i],")","\n")
}
else
stop(paste("The tau is not a valid parameter of the current model."))
}
# FIT THE MODEL
object$call$control <- object$control
out <- eval(object$call)
fix.parameter[i] <- interval[i]
G.deviances[i] <- out$G.deviance
if (startlastfit)
{
if ("mu"%in%object$parameters) object$call$mu.start <- out$mu.fv
if ("sigma"%in%object$parameters) object$call$sigma.start <- out$sigma.fv
if ("nu"%in%object$parameters) object$call$nu.start <- out$nu.fv
if ("tau"%in%object$parameters) object$call$tau.start <- out$tau.fv
}
cat("******************************************************************", "\n")
}
prof.out <- cbind(interval, G.deviances)
mx <- which.min(G.deviances)
if ((mx<=1)||(mx>=m)) stop("increase the interval to contain the MLE of the parameter")
prof.fun <- splinefun(interval, G.deviances) # the profile likelihood as a function
PML <- uniroot(prof.fun, c(min, max), deriv=1)$root # get the ML
Gmin <- prof.fun(PML)
lim <- Gmin + qchisq((perc/100), 1)
xl <- as.vector(interval)
CI <- c(NA, NA)
if (plot)
{
#
loglik <- G.deviances
xlabel <- paste("Grid of the",which,"parameter")
xlab <- xlabel
ylab <- "Global Deviances"
main <- "Profile Global Deviance"
curve(prof.fun, min, max, xlab=xlab, ylab=ylab, main=main, col=col, frame.plot = TRUE)
plims <- par("usr")
segments(PML, plims[3], PML, Gmin, lty = 3)
la <- xl[mx]
y0 <- plims[3]
if (lim < max(loglik))
{
abline(h = lim, lty = 3)
y0 <- plims[3]
scal <- (1/10 * (plims[4] - y0))/par("pin")[2] #par("pin")[2]=the height of the plot in inches
scx <- (2/10 * (plims[2] - plims[1]))/par("pin")[1] #par("pin")[1]=the width of the plot in inches
# MS change to 2/10 from 1/10 Sunday, December 9, 2007 at 23:29
text(xl[1] + scx, lim + scal, paste(perc,"%"))
}
# #Defines the lower bound
if (loglik[1] > lim) {
leftFun <- function(x) {prof.fun(x)-lim} #
lcrossing <- uniroot(leftFun, c(min, PML))$root # get the ML
CI[1] <- lcrossing
segments( lcrossing, y0, lcrossing, lim, lty = 3)
}
#Defines the upper bound
if (loglik[m] > lim) {
rcrossing <- uniroot(leftFun, c(PML, max))$root # get the ML
segments( rcrossing, y0, rcrossing, lim, lty = 3)
CI[2] <- rcrossing
}
cat("******************************************************************", "\n")
cat("The Maximum Likelihood estimator is " ,PML, "\n")
cat("with a Global Deviance equal to ", Gmin, "\n")
if ((loglik[1] > lim) && (loglik[m] > lim))
{cat("A ", perc,"% Confidence interval is: (" ,lcrossing, ",", rcrossing, ") \n")}
cat("******************************************************************", "\n")
out <-list(values=prof.out, fun=prof.fun, min=min, max=max, max.value=PML, CI=CI, criterion="GD" )
class(out) <- "ProfLikelihood.gamlss"
return(invisible(out))
}
else return(prof.out)
}
#prof.dev1(h,"nu",min=-2.000,length=6,max=2,type="l")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.