Nothing
##################################################################################
### CLASS METHODS ###
##################################################################################
## Constructor for creating a new object of the class RtreemixData.
## The data can also be read from a file with a specific format.
setMethod("initialize", "RtreemixData",
function(.Object, Sample, Patients, Events, Description, File) {
## Read from file
if(!missing(File)) {
file.in <- file(File, "r", blocking = FALSE)
while(length(.Object@Description <- scan(file.in, character(0), sep = " ", nlines = 1,
quiet = TRUE, comment.char = "#")) == 0) {}
.Object@Description <- paste(.Object@Description, collapse = " ")
mat.sample <- NULL
while(length(line <- scan(file.in, character(0), sep = " ", nlines = 1,
quiet = TRUE, comment.char = "#")) == 0) {}
while(length(line) > 0) {
mat.sample <- rbind(mat.sample, as.integer(line))
line <- scan(file.in, character(0), sep = " ", nlines = 1,
quiet = TRUE, comment.char = "#")
}
.Object@Sample <- mat.sample
while(length(.Object@Patients <- scan(file.in, character(0), sep = " ", nlines = 1,
quiet = TRUE, comment.char = "#")) == 0) {}
while(length(.Object@Events <- scan(file.in, character(0), sep = " ", nlines = 1,
quiet = TRUE, comment.char = "#")) == 0) {}
.Object@Events <- c("0", .Object@Events)
close(file.in)
if(.Object@Patients[1] == "NULL")
.Object@Patients <- paste("P", 1:nrow(.Object@Sample), sep = "")
else
if((length(.Object@Patients) != nrow(.Object@Sample)))
stop("From file: Please give the corect number of patient IDs!")
if(.Object@Events[1] == "NULL")
.Object@Events <- paste("E", 0:ncol(.Object@Sample), sep = "")
else
if((length(.Object@Events) != ncol(.Object@Sample) + 1))
stop("From file: Please give the corect number of events")
return(.Object)
}
## Use given data
if(missing(Sample))
stop("The sample matrix is missing!")
if(!is.matrix(Sample))
stop("The provided Sample must be a binary matrix.")
.Object@Sample <- Sample
if(missing(Patients) && (nrow(Sample) != 0))
Patients <- paste("P", 1:nrow(Sample), sep = "")
if(missing(Patients) && (nrow(Sample) == 0))
Patients <- character(0)
if((length(Patients) != nrow(Sample)))
stop("Please give the corect number of patient IDs!")
.Object@Patients <- Patients
if(missing(Events))
Events <- paste("E", 0:ncol(Sample), sep = "")
if((length(Events) != (ncol(Sample) + 1)))
stop("Please give the correct number of events!")
.Object@Events <- Events
.Object@Description <- ifelse(missing(Description), character(0), Description)
.Object
})
## Accessor functions for the slots of the class RtreemixData.
if(!isGeneric("Sample"))
setGeneric("Sample", function(object) standardGeneric("Sample"))
setMethod("Sample", "RtreemixData", function(object) object@Sample)
if(!isGeneric("Patients"))
setGeneric("Patients", function(object) standardGeneric("Patients"))
setMethod("Patients", "RtreemixData", function(object) object@Patients)
if(!isGeneric("Events"))
setGeneric("Events", function(object) standardGeneric("Events"))
setMethod("Events", "RtreemixData", function(object) object@Events)
if(!isGeneric("Description"))
setGeneric("Description", function(object) standardGeneric("Description"))
setMethod("Description", "RtreemixData", function(object) object@Description)
## Replacement functions for the slots of the class RtreemixData.
## We don't allow replacement of the sample.
##if(!isGeneric("Sample<-"))
## setGeneric("Sample<-", function(object, value) standardGeneric("Sample<-"))
##setReplaceMethod("Sample", "RtreemixData", function(object, value) {object@Sample <- value; object})
if(!isGeneric("Patients<-"))
setGeneric("Patients<-", function(object, value) standardGeneric("Patients<-"))
setReplaceMethod("Patients", "RtreemixData", function(object, value) {
if(length(value) != nrow(object@Sample))
stop("Please give the corect number of patient IDs!")
else {
object@Patients <- value;
object
}
})
if(!isGeneric("Events<-"))
setGeneric("Events<-", function(object, value) standardGeneric("Events<-"))
setReplaceMethod("Events", "RtreemixData", function(object, value) {
if((length(value) != (ncol(object@Sample) + 1)) && (length(object@Sample) != 0))
stop("Please give the correct number of events!")
else {
object@Events <- value;
object
}
})
if(!isGeneric("Description<-"))
setGeneric("Description<-", function(object, value) standardGeneric("Description<-"))
setReplaceMethod("Description", "RtreemixData", function(object, value) {
if (!is.character(value))
stop("The specified description must be of type character!")
else {
object@Description <- value;
object
}
})
## A method for getting the number of patients i.e. the sample size N.
if(!isGeneric("sampleSize"))
setGeneric("sampleSize", function(object) standardGeneric("sampleSize"))
setMethod("sampleSize", signature = signature(object = "RtreemixData"),
definition = function(object)
return(nrow(object@Sample))
)
## A method for getting the number of genetic events L.
if(!isGeneric("eventsNum"))
setGeneric("eventsNum", function(object) standardGeneric("eventsNum"))
setMethod("eventsNum", signature = signature(object = "RtreemixData"),
definition = function(object)
return(length(object@Events))
)
## Printing function for the class RtreemixData.
setMethod("print", "RtreemixData", function(x, ...) .printRtreemixData(x))
setMethod("show", "RtreemixData", function(object) .printRtreemixData(x = object))
.printRtreemixData <- function(x) {
if(length(Sample(x)) == 0)
return(cat("Empty object!\n"))
cat("RtreemixData object with", eventsNum(x), "genetic events from",
sampleSize(x), "patients.\n\n")
if(!identical(Description(x), character(0)))
cat("Description: ", Description(x), "\n\n")
cat("Patients: ", Patients(x), "\n\n")
cat("Events: ", Events(x), "\n\n")
cat("First 10 samples:\n\n")
a <- cbind(rep(1, sampleSize(x)), Sample(x))
rownames(a) <- Patients(x)
colnames(a) <- Events(x)
if(nrow(a) > 10) {
a <- a[1:10, ]
}
print(a)
}
################################################################################
## Constructor for creating a new object of the class RtreemixModel.
setMethod("initialize", "RtreemixModel",
definition = function(.Object, ParentData, Weights, WeightsCI, Resp,
CompleteMat, Star, Trees) {
## Initializing the slots inherited from the parent class
if(!missing(ParentData)) {
.Object@Sample <- Sample(ParentData)
.Object@Patients <- Patients(ParentData)
.Object@Events <- Events(ParentData)
.Object@Description <- Description(ParentData)
}
## Initializing the slots from RtreemixModel
if(missing(Weights))
.Object@Weights <- numeric(0)
else {
.Object@Weights <- Weights
if (length(.Object@Weights) != 0)
names(.Object@Weights) <- paste("Alpha", 1:length(.Object@Weights), sep = "")
}
if(missing(WeightsCI))
.Object@WeightsCI <- list()
else {
if(missing(Weights))
stop("Confidence intervals for the weights cannot be specified when the weights are missing!")
.Object@WeightsCI <- WeightsCI
if (length(.Object@WeightsCI) != 0) {
if(length(Weights) != length(WeightsCI))
stop("The length of the list specifying the confidence intervals
for the mixture weights have to be equal to their length.")
names(.Object@WeightsCI) <- paste("Alpha", 1:length(.Object@WeightsCI), sep = "")
for(i in 1:length(.Object@WeightsCI)) {
if(!(length(.Object@WeightsCI[[i]]) == 2))
stop("The confidence intervals for the weights are not correctly specified!")
else
names(.Object@WeightsCI[[i]]) <- c("lower", "upper")
}
}
}
if(missing(Resp)) {
.Object@Resp <- matrix(numeric(0), 0, 0)
} else {
if((nrow(Resp) != length(Trees)) || (ncol(Resp) != nrow(.Object@Sample)))
stop("Uncorrect assignment of the responsibilities!")
.Object@Resp <- Resp
if(nrow(.Object@Resp) != 0)
rownames(.Object@Resp) <- paste("T", 1:nrow(Resp), sep = "")
}
if(missing(CompleteMat))
.Object@CompleteMat <- matrix(integer(0), 0, 0)
else
.Object@CompleteMat <- CompleteMat
if(missing(Star))
.Object@Star <- logical(0)
else
.Object@Star <- Star
if(missing(Trees) || (length(Trees) == 0))
.Object@Trees <- list()
else {
if(sum(sapply(Trees, function(x) {class(x) == "graphNEL"})) != length(Trees))
stop("The tree components are not objects of class graphNEL!")
if(missing(ParentData)) {
.Object@Events <-
paste("E", 0:(max(sapply(Trees,
function(x) {return(length(nodes(x)))})) - 1), sep = "")
}
.Object@Trees <- Trees
if(!identical(length(.Object@Trees), as.integer(0)))
names(.Object@Trees) <- paste("T", 1:length(.Object@Trees), sep = "")
}
if(!identical(length(.Object@Trees), length(.Object@Weights)))
stop("The number of mixture parameters doesn't match the number of tree components!")
.Object
})
## Accessor functions for the class RtreemixModel.
if(!isGeneric("Weights"))
setGeneric("Weights", function(object) standardGeneric("Weights"))
setMethod("Weights", "RtreemixModel", function(object) object@Weights)
if(!isGeneric("WeightsCI"))
setGeneric("WeightsCI", function(object) standardGeneric("WeightsCI"))
setMethod("WeightsCI", "RtreemixModel", function(object) object@WeightsCI)
if(!isGeneric("Resp"))
setGeneric("Resp", function(object) standardGeneric("Resp"))
setMethod("Resp", "RtreemixModel", function(object) object@Resp)
if(!isGeneric("CompleteMat"))
setGeneric("CompleteMat", function(object) standardGeneric("CompleteMat"))
setMethod("CompleteMat", "RtreemixModel", function(object) object@CompleteMat)
if(!isGeneric("Star"))
setGeneric("Star", function(object) standardGeneric("Star"))
setMethod("Star", "RtreemixModel", function(object) object@Star)
if(!isGeneric("Trees"))
setGeneric("Trees", function(object) standardGeneric("Trees"))
setMethod("Trees", "RtreemixModel", function(object) object@Trees)
## Replacement functions for the class RtreemixModel.
if(!isGeneric("Weights<-"))
setGeneric("Weights<-", function(object, value) standardGeneric("Weights<-"))
## The weights are a numeric vector with components that add up to 1.
setReplaceMethod("Weights", "RtreemixModel",
function(object, value) {
if((length(value) != numTrees(object)) || !is.numeric(value) || (sum(value) != 1))
stop("Uncorrect assignment of the weights of the tree components!")
else {
object@Weights <- value;
object
}
})
## Replacement functions for the other slots are not allowed.
## if(!isGeneric("WeightsCI<-"))
## setGeneric("WeightsCI<-", function(object, value) standardGeneric("WeightsCI<-"))
## setReplaceMethod("WeightsCI", "RtreemixModel",
## function(object, value) {object@WeightsCI <- value; object})
## if(!isGeneric("Resp<-"))
## setGeneric("Resp<-", function(object, value) standardGeneric("Resp<-"))
## setReplaceMethod("Resp", "RtreemixModel",
## function(object, value) {object@Resp <- value; object})
## if(!isGeneric("CompleteMat<-"))
## setGeneric("CompleteMat<-", function(object, value) standardGeneric("CompleteMat<-"))
## setReplaceMethod("CompleteMat", "RtreemixModel",
## function(object, value) {object@CompleteMat <- value; object})
## if(!isGeneric("Star<-"))
## setGeneric("Star<-", function(object, value) standardGeneric("Star<-"))
## setReplaceMethod("Star", "RtreemixModel",
## function(object, value) {object@Star <- value; object})
## if(!isGeneric("Trees<-"))
## setGeneric("Trees<-", function(object, value) standardGeneric("Trees<-"))
## setReplaceMethod("Trees", "RtreemixModel",
## function(object, value) {object@Trees <- value; object})
## A method for getting the number of trees in the mixture model.
if(!isGeneric("numTrees"))
setGeneric("numTrees", function(object) standardGeneric("numTrees"))
setMethod("numTrees", signature = signature(object = "RtreemixModel"),
definition = function(object)
return(as.integer(length(object@Trees)))
)
## A method for getting a specific tree k from the list of trees in the mixture model.
if(!isGeneric("getTree"))
setGeneric("getTree", function(object, k) standardGeneric("getTree"))
setMethod("getTree", signature = signature(object = "RtreemixModel", k = "numeric"),
definition = function(object, k) {
if(k > numTrees(object))
stop("The specified k is larger than the number of trees the model contains!")
if(!(is.numeric(k)) || !(trunc(k) == k) || !(k > 0))
stop("The tree number must be an integer greater than zero!")
return(object@Trees[[k]])
}
)
## A method for getting the data.
if(!isGeneric("getData"))
setGeneric("getData", function(object) standardGeneric("getData"))
setMethod("getData", signature = signature(object = "RtreemixModel"),
definition = function(object) {
if (length(Sample(object)) != 0)
return(new("RtreemixData",
Sample = Sample(object),
Patients = Patients(object),
Events = Events(object)))
else
print("Empty object! The random mixture models are not estimated from a given dataset!")
})
## Printing function for the class RtreemixModel.
setMethod("print", "RtreemixModel", function(x, ...) .printRtreemixModel(x))
setMethod("show", "RtreemixModel", function(object) .printRtreemixModel(x = object))
.printRtreemixModel <- function(x) {
if(numTrees(x) == 0)
return(cat("Empty object!\n"))
cat("RtreemixModel object with", numTrees(x), "tree components.\n\n")
cat("The weights of the trees are:\n")
print(Weights(x))
cat("\n The trees are:\n")
print(Trees(x))
}
## Helper function for plotting. Taken from the package Rgraphviz with some changes
## for regulating the size of the text labels in the graphs.
.plott1 <- function (x, y, ..., main = NULL, cex.main = NULL,
col.main = "black", sub = NULL, cex.sub = NULL, col.sub = "black",
drawNode = drawAgNode, xlab, ylab) {
plot.new()
old.mai = par(mai = 0.01 + c(0.83 * (!is.null(sub)),
0, 0.83 * (!is.null(main)), 0))
on.exit(par(mai = old.mai), add = TRUE)
ur <- upRight(boundBox(x))
plot.window(xlim = c(0, getX(ur)), ylim = c(0, getY(ur)),
log = "", asp = NA, ...)
box()
xy <- xy.coords(NA, NA)
def.nodeFontSize <- as.integer(getDefaultAttrs()$node$fontsize)
def.edgeFontSize <- as.integer(getDefaultAttrs()$edge$fontsize)
plot.xy(xy, type = "n", ...)
if (!missing(xlab) && !missing(ylab))
stop("Arguments 'xlab' and 'ylab' are not handled.")
if (!is.null(sub) || !is.null(main))
title(main, sub, cex.main = cex.main, col.main = col.main,
cex.sub = cex.sub, col.sub = col.sub)
agn <- AgNode(x)
nodeDims <- sapply(agn, function(n) {
c(getNodeRW(n) + getNodeLW(n), getNodeHeight(n))
})
strDims <- sapply(agn, function(n) {
s <- labelText(txtLabel(n))
if (length(s) == 0) {
rv <- c(strwidth(" "), strheight(" "))
}
else {
rv <- c(strwidth(s) * (1.1 * def.nodeFontSize / labelFontsize(txtLabel(n))),
strheight(s) * (1.4 * def.nodeFontSize / labelFontsize(txtLabel(n))))
}
return(rv)
})
cex <- min(nodeDims/strDims)
if (is.finite(cex)) {
old.cex <- par(cex = cex)
on.exit(par(cex = old.cex), add = TRUE)
}
if (length(drawNode) == 1) {
lapply(agn, drawNode)
}
else {
if (length(drawNode) == length(AgNode(x))) {
for (i in seq(along = drawNode)) {
drawNode[[i]](agn[[i]])
}
}
else {
stop(paste("Length of the drawNode parameter is ",
length(drawNode), ", it must be either length 1 or the number of nodes.",
sep = ""))
}
}
arrowLen <- par("pin")[1]/diff(par("usr")[1:2]) * min(nodeDims)/pi
lapply(AgEdge(x), lines, len = arrowLen, edgemode = edgemode)
#lapply(AgEdge(x), lines, len = arrowLen)
invisible(x)
}
.plott2 <- function(x, fontSize = 10){
## we set the global Graphviz attributes
graphAttrs <- getDefaultAttrs(layoutType = 'dot')
graphAttrs <- getDefaultAttrs()
graphAttrs$cluster <- NULL
#graphAttrs$graph$splines <- FALSE
## set the fontsize for the node labels
graphAttrs$node$fontsize <- fontSize
graphAttrs$node$fillcolor <- "lightblue"
#graphAttrs$node$height <- 0.5
#graphAttrs$node$width <- 0.5
## set the local attributes lists
nodeAttrs <- list()
edgeAttrs <- list()
## node labels
node.names <- nodes(x)
nodeAttrs$label <- nodes(x)
#nodeAttrs$label <- paste(" ", nodes(x), " ", sep = "")
names(nodeAttrs$label) <- node.names
edgeW <- format(unlist(edgeWeights(x)), digit = 1)
names(edgeW) <- edgeNames(x)
toRemove <- removedEdges(x)
if (length(toRemove) > 0)
edgeW <- edgeW[-toRemove]
edgeAttrs$label <- edgeW
return(agopen(graph = x, name = "some name", attrs = graphAttrs,
nodeAttrs = nodeAttrs, edgeAttrs = edgeAttrs))
}
## Function for plotting a graph x using the two helper functions defined above.
.plotRes <- function(x, fontSize) {
.plott1(.plott2(x, fontSize))
}
## The plot function for RtreemixModel.
if(!isGeneric("plot"))
setGeneric("plot", function(x, y, ...) standardGeneric("plot"))
setMethod("plot",
signature(x = "RtreemixModel", y = "missing"),
function(x, k, fontSize = 8) {
require('Rgraphviz') || stop('package Rgraphviz is required')
if(missing(k)) {
if(numTrees(x) > 1) {
par(mfrow = c(ceiling(numTrees(x)/2), 2))
#lapply(Trees(x), .plotRes, fontSize)
lapply(Trees(x), function(tr, fs = fontSize) {
## check whether each node (except root) has inEdges in order to remove pruned nodes
indic <- sapply(nodes(tr)[-1], function(nd, tr = tr) {ifelse(length(inEdges(nd, tr)[[1]]) < 1, 1, 0)}, tr)
if (sum(indic) > 0) {
grTemp <- removeNode(nodes(tr)[which(indic > 0) + 1], tr) ## +1 for skipping root
} else {
grTemp <- tr
}
.plotRes(grTemp, fontSize)
}, fontSize)
} else {
tr <- getTree(x, 1)
## check whether each node (except root) has inEdges in order to remove pruned nodes
indic <- sapply(nodes(tr)[-1], function(nd, tr = tr) {ifelse(length(inEdges(nd, tr)[[1]]) < 1, 1, 0)}, tr)
if (sum(indic) > 0) {
tr <- removeNode(nodes(tr)[which(indic > 0) + 1], tr) ## +1 for skipping root
}
.plotRes(tr, fontSize)}
} else {
if ((k > numTrees(x)) || (k < 1)) {
stop("The tree number must be an integer greater than zero and smaller or equal to the number of tree components in the mixture model!")
} else {
.plotRes(getTree(x, k), fontSize)
}}
})
## setMethod("plot", "RtreemixModel",
## definition = function(x, y, ...){
## for(i in (1:numTrees(x))) {
## ew <- edgeWeights(Trees(x)[[i]])
## lw <- unlist(unlist(ew))
## toRemove <- removedEdges(Trees(x)[[i]])
## if (length(toRemove) > 0) lw <- lw[-toRemove]
## names(lw) <- edgeNames(Trees(x)[[i]])
## eAttrs <- list()
## eAttrs$label <- lw
## X11()
## plot(Trees(x)[[i]], edgeAttrs = eAttrs)
## }
## })
## Constructor for creating a new object of the class RtreemixSim.
setMethod("initialize", "RtreemixSim",
definition = function(.Object, Model, SimPatterns,
SamplingMode, SamplingParam, WaitingTimes, SamplingTimes) {
if(missing(Model) || (class(Model) != "RtreemixModel"))
stop("Please specify the RtreemixModel from which the simulations are drawn!")
else {
## Initializing the slots inherited from the parent classes (RtreemixData and RtreemixModel)
.Object@Sample <- Sample(Model)
.Object@Patients <- Patients(Model)
.Object@Events <- Events(Model)
.Object@Description <- Description(Model)
.Object@Weights <- Weights(Model)
.Object@WeightsCI <- WeightsCI(Model)
.Object@Resp <- Resp(Model)
.Object@CompleteMat <- CompleteMat(Model)
.Object@Trees <- Trees(Model)
}
## Initializing the slots from RtreemixSim
if(class(SimPatterns) != "RtreemixData")
stop("The simulated patterns have to be given as an RtreemixData object!")
if(missing(SimPatterns))
stop("Please specify the simulated patterns!")
else
.Object@SimPatterns <- SimPatterns
if(missing(SamplingMode))
.Object@SamplingMode <- character(0)
else {
if ((SamplingMode != "exponential") && (SamplingMode != "constant"))
stop("The sampling mode has to be exponential or constant!")
.Object@SamplingMode <- SamplingMode
}
if(missing(SamplingParam))
.Object@SamplingParam <- numeric(0)
else {
.Object@SamplingParam <- SamplingParam
}
if(missing(WaitingTimes))
.Object@WaitingTimes <- numeric(0)
else {
if (length(WaitingTimes) != sampleSize(SimPatterns))
stop("The waiting times are missing for some patterns!")
.Object@WaitingTimes <- WaitingTimes
}
if(missing(SamplingTimes))
.Object@SamplingTimes <- numeric(0)
else {
if (length(SamplingTimes) != sampleSize(SimPatterns))
stop("The sampling times are missing for some patterns!")
.Object@SamplingTimes <- SamplingTimes
}
.Object
})
## Accessor functions for the slots of the class RtreemixSim.
if(!isGeneric("SimPatterns"))
setGeneric("SimPatterns", function(object) standardGeneric("SimPatterns"))
setMethod("SimPatterns", "RtreemixSim", function(object) object@SimPatterns)
if(!isGeneric("SamplingMode"))
setGeneric("SamplingMode", function(object) standardGeneric("SamplingMode"))
setMethod("SamplingMode", "RtreemixSim", function(object) object@SamplingMode)
if(!isGeneric("SamplingParam"))
setGeneric("SamplingParam", function(object) standardGeneric("SamplingParam"))
setMethod("SamplingParam", "RtreemixSim", function(object) object@SamplingParam)
if(!isGeneric("WaitingTimes"))
setGeneric("WaitingTimes", function(object) standardGeneric("WaitingTimes"))
setMethod("WaitingTimes", "RtreemixSim", function(object) object@WaitingTimes)
if(!isGeneric("SamplingTimes"))
setGeneric("SamplingTimes", function(object) standardGeneric("SamplingTimes"))
setMethod("SamplingTimes", "RtreemixSim", function(object) object@SamplingTimes)
## Replacement functions for the slots of the class RtreemixSim.
## Replacements of the slots is not a good idea.
## if(!isGeneric("SimPatterns<-"))
## setGeneric("SimPatterns<-", function(object, value) standardGeneric("SimPatterns<-"))
## setReplaceMethod("SimPatterns", "RtreemixSim",
## function(object, value) {object@SimPatterns <- value; object})
## if(!isGeneric("SamplingMode<-"))
## setGeneric("SamplingMode<-", function(object, value) standardGeneric("SamplingMode<-"))
## setReplaceMethod("SamplingMode", "RtreemixSim",
## function(object, value) {object@SamplingMode <- value; object})
## if(!isGeneric("SamplingParam<-"))
## setGeneric("SamplingParam<-", function(object, value) standardGeneric("SamplingParam<-"))
## setReplaceMethod("SamplingParam", "RtreemixSim",
## function(object, value) {object@SamplingParam <- value; object})
## if(!isGeneric("WaitingTimes<-"))
## setGeneric("WaitingTimes<-", function(object, value) standardGeneric("WaitingTimes<-"))
## setReplaceMethod("WaitingTimes", "RtreemixSim",
## function(object, value) {object@WaitingTimes <- value; object})
## if(!isGeneric("SamplingTimes<-"))
## setGeneric("SamplingTimes<-", function(object, value) standardGeneric("SamplingTimes<-"))
## setReplaceMethod("SamplingTimes", "RtreemixSim",
## function(object, value) {object@SamplingTimes <- value; object})
## A method for getting the number of draws in the simulation (The size of the drawn (simulated) sample).
if(!isGeneric("noDraws"))
setGeneric("noDraws", function(object) standardGeneric("noDraws"))
setMethod("noDraws", signature = signature(object = "RtreemixSim"),
definition = function(object)
return(sampleSize(object@SimPatterns))
)
## A method for getting the mixture model.
if(!isGeneric("getModel"))
setGeneric("getModel", function(object) standardGeneric("getModel"))
setMethod("getModel", signature = signature(object = "RtreemixSim"),
definition = function(object) {
if(length(Resp(object)) != 0) {
return(new("RtreemixModel",
ParentData = getData(object),
Weights = Weights(object),
WeightsCI = WeightsCI(object),
Resp = Resp(object),
CompleteMat = CompleteMat(object),
Star = Star(object),
Trees = Trees(object)))
} else {
return(new("RtreemixModel",
Weights = Weights(object),
WeightsCI = WeightsCI(object),
Star = Star(object),
Trees = Trees(object)))
}
})
## Printing function for the class RtreemixSim.
setMethod("print", "RtreemixSim", function(x, ...) .printRtreemixSim(x))
setMethod("show", "RtreemixSim", function(object) .printRtreemixSim(x = object))
.printRtreemixSim <- function(x) {
if(sampleSize(SimPatterns(x)) == 0)
return(cat("Empty object!\n"))
cat("RtreemixSim object with", noDraws(x), "patterns.\n\n")
cat("The sample data is given by: \n\n")
print(SimPatterns(x))
if(!identical(SamplingMode(x), character(0))) {
if(SamplingMode(x) == "exponential")
cat("\nExponential sampling times are used in the simulation of the waiting process.\n")
else
cat("\nConstant sampling times (in days) are used in the simulation of the waiting process.\n")
}
if(!identical(SamplingParam(x), numeric(0))) {
cat("The sampling parameter is:\n")
print(SamplingParam(x))
}
if(length(WaitingTimes(x)) != 0) {
cat("\nThe waiting times of the first 10 patterns are:\n\n")
if(length(WaitingTimes(x)) > 10) {
a <- WaitingTimes(x)[1:10]
names(a) <- Patients(SimPatterns(x))[1:10]
} else {
a <- WaitingTimes(x)
names(a) <- Patients(SimPatterns(x))
}
print(a)
}
if(length(SamplingTimes(x)) != 0) {
cat("\nThe sampling times of the first 10 patterns are:\n\n")
if(length(SamplingTimes(x)) > 10) {
a <- SamplingTimes(x)[1:10]
names(a) <- Patients(SimPatterns(x))[1:10]
} else {
a <- SamplingTimes(x)
names(a) <- Patients(SimPatterns(x))
}
print(a)
}
}
################################################################################
## Constructor for creating a new object of the class RtreemixStats.
setMethod("initialize", "RtreemixStats",
definition = function(.Object, Data, Model, LogLikelihoods,
WLikelihoods) {
if(missing(Data) || (class(Data) != "RtreemixData"))
stop("Please specify the data for the likelihood calculation!")
else {
## Initializing the slots inherited from the parent class (RtreemixData)
.Object@Sample <- Sample(Data)
.Object@Patients <- Patients(Data)
.Object@Events <- Events(Data)
.Object@Description <- Description(Data)
}
## Initializing the slots from RtreemixStats
if(missing(Model))
stop("Please provide the underlying model for calculating the likelihoods.")
if(class(Model) != "RtreemixModel")
stop("The specified model should be an object of type RtreemixModel.")
.Object@Model <- Model
if(missing(WLikelihoods) || !is.matrix(WLikelihoods))
stop("Please specify the weighted likelihoods of the provided data as a matrix!")
else {
if ((nrow(WLikelihoods) != sampleSize(Data)) || (ncol(WLikelihoods) != numTrees(Model)))
stop("The dimensions of the weighted likelihoods matrix are not correct!")
.Object@WLikelihoods <- WLikelihoods
if(ncol(.Object@WLikelihoods) != 0)
colnames(.Object@WLikelihoods) <- paste("T", 1:ncol(.Object@WLikelihoods), sep = "")
}
if(missing(LogLikelihoods) || !is.numeric(LogLikelihoods))
stop("Please specify the log-likelihoods of the provided data as a numeric vector!")
else {
if (length(LogLikelihoods) != sampleSize(Data))
stop("The log-likelihoods are missing for some patterns!")
.Object@LogLikelihoods <- LogLikelihoods
}
.Object
})
## Accessor functions for the class RtreemixStats.
if(!isGeneric("Model"))
setGeneric("Model", function(object) standardGeneric("Model"))
setMethod("Model", "RtreemixStats", function(object) object@Model)
if(!isGeneric("LogLikelihoods"))
setGeneric("LogLikelihoods", function(object) standardGeneric("LogLikelihoods"))
setMethod("LogLikelihoods", "RtreemixStats", function(object) object@LogLikelihoods)
if(!isGeneric("WLikelihoods"))
setGeneric("WLikelihoods", function(object) standardGeneric("WLikelihoods"))
setMethod("WLikelihoods", "RtreemixStats", function(object) object@WLikelihoods)
## Replacement of the slots of this class is not allowed.
## Replacement functions for the class RtreemixStats.
## if(!isGeneric("Model<-"))
## setGeneric("Model<-", function(object, value) standardGeneric("Model<-"))
## setReplaceMethod("Model", "RtreemixStats",
## function(object, value) {object@Model <- value; object})
## if(!isGeneric("LogLikelihoods<-"))
## setGeneric("LogLikelihoods<-", function(object, value) standardGeneric("LogLikelihoods<-"))
## setReplaceMethod("LogLikelihoods", "RtreemixStats",
## function(object, value) {object@LogLikelihoods <- value; object})
## if(!isGeneric("WLikelihoods<-"))
## setGeneric("WLikelihoods<-", function(object, value) standardGeneric("WLikelihoods<-"))
## setReplaceMethod("WLikelihoods", "RtreemixStats",
## function(object, value) {object@WLikelihoods <- value; object})
## A method for getting the data.
if(!isGeneric("getData"))
setGeneric("getData", function(object) standardGeneric("getData"))
setMethod("getData", signature = signature(object = "RtreemixStats"),
definition = function(object)
return(new("RtreemixData",
Sample = Sample(object),
Patients = Patients(object),
Events = Events(object)))
)
## A method for getting the responsibilities as KxN matrix.
## (resp[k][i] == responsibility of tree k for pattern i)
if(!isGeneric("getResp"))
setGeneric("getResp", function(object) standardGeneric("getResp"))
setMethod("getResp", signature = signature(object = "RtreemixStats"),
definition = function(object)
return(as.matrix(t(object@WLikelihoods/apply(object@WLikelihoods, 1, sum))))
)
## Printing function for the class RtreemixStats.
setMethod("print", "RtreemixStats", function(x, ...) .printRtreemixStats(x))
setMethod("show", "RtreemixStats", function(object) .printRtreemixStats(x = object))
.printRtreemixStats <- function(x) {
cat("RtreemixStats object with", sampleSize(x), "samples.\n\n")
if(sampleSize(x) != 0) {
cat("The first 10 samples from the dataset: \n\n")
a <- cbind(rep(1, sampleSize(x)), Sample(x))
rownames(a) <- Patients(x)
colnames(a) <- Events(x)
if(nrow(a) > 10) {
a <- a[1:10, ]
}
print(a)
}
if(length(LogLikelihoods(x)) != 0) {
cat("\nThe log-likelihoods of the first 10 samples:\n\n")
a <- LogLikelihoods(x)
names(a) <- Patients(x)
if(length(LogLikelihoods(x)) > 10) {
a <- LogLikelihoods(x)[1:10]
names(a) <- Patients(x)[1:10]
}
print(a)
}
if(length(WLikelihoods(x)) != 0) {
cat("\nThe weighted likelihoods of the first 10 samples:\n\n")
a <- WLikelihoods(x)
rownames(a) <- Patients(x)
if(nrow(WLikelihoods(x)) > 10) {
a <- WLikelihoods(x)[1:10, ]
rownames(a) <- Patients(x)[1:10]
}
print(a)
}
}
################################################################################
## Constructor for creating a new object of the class RtreemixGPS.
setMethod("initialize", "RtreemixGPS",
definition = function(.Object, Data, Model,
SamplingMode, SamplingParam, GPS, gpsCI) {
if(missing(Data) || (class(Data) != "RtreemixData"))
stop("Please specify the data for the GPS calculation!")
else {
## Initializing the slots inherited from the parent classes (RtreemixData and RtreemixModel)
## callNextMethod(.......)
.Object@Sample <- Sample(Data)
.Object@Patients <- Patients(Data)
.Object@Events <- Events(Data)
.Object@Description <- Description(Data)
}
## Initializing the slots from RtreemixGPS
if(class(Model) != "RtreemixModel")
stop("The model has to be given as an RtreemixModel object!")
if(missing(Model))
stop("Please specify the underlying model!")
else
.Object@Model <- Model
if(missing(SamplingMode))
.Object@SamplingMode <- character(0)
else {
if ((SamplingMode != "exponential") && (SamplingMode != "constant"))
stop("The sampling mode has to be exponential or constant!")
.Object@SamplingMode <- SamplingMode
}
if(missing(SamplingParam))
.Object@SamplingParam <- numeric(0)
else {
.Object@SamplingParam <- SamplingParam
}
if(missing(GPS))
.Object@GPS <- numeric(0)
else {
if (length(GPS) != sampleSize(Data))
stop("The GPS values are missing for some patterns!")
.Object@GPS <- GPS
names(.Object@GPS) <- Patients(Data)
}
if(missing(gpsCI))
.Object@gpsCI <- matrix(numeric(0), 0, 0)
else {
if(missing(GPS))
stop("Confidence intervals for the GPS values cannot be specified when the GPS values are missing!")
if (length(GPS) != nrow(gpsCI))
stop("The GPS confidence intervals are missing for some GPS values!")
.Object@gpsCI <- gpsCI
if (nrow(.Object@gpsCI) != 0)
rownames(.Object@gpsCI) <- paste("GPS", 1:nrow(.Object@gpsCI), sep = "")
if(ncol(.Object@gpsCI) != 2)
stop("The confidence intervals for the GPS values are not correctly specified!")
else
colnames(.Object@gpsCI) <- c("lower", "upper")
}
.Object
})
## Accessor functions for the slots of the class RtreemixGPS.
if(!isGeneric("Model"))
setGeneric("Model", function(object) standardGeneric("Model"))
setMethod("Model", "RtreemixGPS", function(object) object@Model)
if(!isGeneric("SamplingMode"))
setGeneric("SamplingMode", function(object) standardGeneric("SamplingMode"))
setMethod("SamplingMode", "RtreemixGPS", function(object) object@SamplingMode)
if(!isGeneric("SamplingParam"))
setGeneric("SamplingParam", function(object) standardGeneric("SamplingParam"))
setMethod("SamplingParam", "RtreemixGPS", function(object) object@SamplingParam)
if(!isGeneric("GPS"))
setGeneric("GPS", function(object) standardGeneric("GPS"))
setMethod("GPS", "RtreemixGPS", function(object) object@GPS)
if(!isGeneric("gpsCI"))
setGeneric("gpsCI", function(object) standardGeneric("gpsCI"))
setMethod("gpsCI", "RtreemixGPS", function(object) object@gpsCI)
## Replacement of the slots of this class is not allowed.
## Replacement functions for the slots of the class RtreemixGPS.
## if(!isGeneric("Model<-"))
## setGeneric("Model<-", function(object, value) standardGeneric("Model<-"))
## setReplaceMethod("Model", "RtreemixGPS",
## function(object, value) {object@Model <- value; object})
## if(!isGeneric("SamplingMode<-"))
## setGeneric("SamplingMode<-", function(object, value) standardGeneric("SamplingMode<-"))
## setReplaceMethod("SamplingMode", "RtreemixGPS",
## function(object, value) {object@SamplingMode <- value; object})
## if(!isGeneric("SamplingParam<-"))
## setGeneric("SamplingParam<-", function(object, value) standardGeneric("SamplingParam<-"))
## setReplaceMethod("SamplingParam", "RtreemixGPS",
## function(object, value) {object@SamplingParam <- value; object})
## if(!isGeneric("GPS<-"))
## setGeneric("GPS<-", function(object, value) standardGeneric("GPS<-"))
## setReplaceMethod("GPS", "RtreemixGPS",
## function(object, value) {object@GPS <- value; object})
## if(!isGeneric("gpsCI<-"))
## setGeneric("gpsCI<-", function(object, value) standardGeneric("gpsCI<-"))
## setReplaceMethod("gpsCI", "RtreemixGPS",
## function(object, value) {object@gpsCI <- value; object})
## A method for getting the data.
if(!isGeneric("getData"))
setGeneric("getData", function(object) standardGeneric("getData"))
setMethod("getData", signature = signature(object = "RtreemixGPS"),
definition = function(object)
return(new("RtreemixData",
Sample = Sample(object),
Patients = Patients(object),
Events = Events(object)))
)
## Printing function for the class RtreemixGPS.
setMethod("print", "RtreemixGPS", function(x, ...) .printRtreemixGPS(x))
setMethod("show", "RtreemixGPS", function(object) .printRtreemixGPS(x = object))
.printRtreemixGPS <- function(x) {
if((sampleSize(x) == 0) || (length(GPS(x)) == 0))
return(cat("Empty object!\n"))
cat("RtreemixGPS object with", sampleSize(x), "patterns.\n")
if(!identical(SamplingMode(x), character(0))) {
if(SamplingMode(x) == "exponential")
cat("\nExponential sampling times are used in the simulation of the waiting process.\n")
else
cat("\nConstant sampling times (in days) are used in the simulation of the waiting process.\n")
}
if(!identical(SamplingParam(x), numeric(0))) {
cat("The sampling parameter is:\n")
print(SamplingParam(x))
}
if(length(GPS(x)) != 0) {
if(length(gpsCI(x)) != 0) {
cat("\n\nThe GPS values and their confidence intervals of the first 10 patterns are:\n\n")
if(length(GPS(x)) > 10) {
g <- GPS(x)[1:10]
ci <- gpsCI(x)[1:10, ]
} else {
g <- GPS(x)
ci <- gpsCI(x)
}
a <- cbind(rep(1, sampleSize(x)), Sample(x))
rownames(a) <- Patients(x)
if(nrow(a) > 10) {
a <- a[1:10, ]
rownames(a) <- Patients(x)[1:10]
}
df <- data.frame(a, g, ci)
colnames(df) <- c(Events(x), "GPS", "lower", "upper")
rownames(df) <- rownames(a)
print(df)
} else {
cat("\n\nThe GPS values of the first 10 patterns are:\n\n")
if(length(GPS(x)) > 10)
g <- GPS(x)[1:10]
else
g <- GPS(x)
a <- cbind(rep(1, sampleSize(x)), Sample(x))
rownames(a) <- Patients(x)
if(nrow(a) > 10) {
a <- a[1:10, ]
rownames(a) <- Patients(x)[1:10]
}
a <- data.frame(a, g)
colnames(a) <- c(Events(x), "GPS")
print(a)
}
}
}
################################################################################
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.