Nothing
###########################
## disstree main function
###########################
as.seqtree <- function(object, seqdata, diss, weighted = TRUE, ...) {
UseMethod("as.seqtree")
}
as.seqtree.twins <- function(object, seqdata, diss, weighted = TRUE, ncluster, ...) {
return(as.seqtree.hclust(object, seqdata = seqdata, diss = diss, weighted = weighted, ncluster = ncluster, ...))
}
as.seqtree.hclust <- function(object, seqdata, diss, weighted = TRUE, ncluster, ...) {
pred <- data.frame(Split2 = factor(cutree(object, 2)))
for (p in 3:ncluster) {
pred[, paste("Split", p, sep = "")] <- factor(cutree(object, p))
}
object <- pred
return(as.seqtree.default(object, seqdata = seqdata, diss = diss, weighted = weighted, ...))
}
as.seqtree.default <- function(object, seqdata, diss, weighted = TRUE, ...) {
predictor <- object
ncluster <- ncol(object) + 1
if (ncluster < 2) {
stop(" [!] ncluster should be bigger than 2")
}
if (inherits(diss, "dist")) {
diss <- as.matrix(diss)
}
## Model matrix from forumla
nobs <- nrow(diss)
## Allow integer weights for replicates
if (weighted & !is.null(attr(seqdata, "weights"))) {
weights <- attr(seqdata, "weights")
} else {
weights <- as.double(rep(1, nobs))
}
pop <- sum(weights)
# TraMineR:::.localstuffDissTree$DTNnodeCounter <- as.integer(1)
vardis <- dissvar(diss, weights = weights)
as.seqtreeDTNBuildNode <- function(ind, vardis, depth, current) {
node <- TraMineRInternalNodeInit(ind = ind, vardis = vardis, depth = depth, dmat = diss, weights = weights)
node$info$splitschedule <- depth
SCtot <- vardis * node$info$n
SCres <- SCtot
if (current > ncluster || length(ind) == 1) {
return(node)
}
## print(SCtot)
# varnames <- colnames(pred)
for (p in current:ncluster) {
clust <- predictor[ind, p - 1]
SplitLabels <- unique(clust)
if (length(SplitLabels) == 2) {
# print(p)
# print(ncluster)
bestSpl <- list()
bestSpl$variable <- clust == SplitLabels[1]
# print(ind)
# print(as.integer(ind[bestSpl$variable]))
# print(diss)
lSCres <- TraMineRInternalWeightedInertiaDist(
diss, as.integer(nrow(diss)),
as.integer(FALSE), as.integer(ind[bestSpl$variable]), as.double(weights),
as.integer(FALSE)
)
rSCres <- TraMineRInternalWeightedInertiaDist(
diss, as.integer(nrow(diss)),
as.integer(FALSE), as.integer(ind[!bestSpl$variable]), as.double(weights),
as.integer(FALSE)
)
info <- list(
lpop = sum(weights[ind[bestSpl$variable]]),
rpop = sum(weights[ind[!bestSpl$variable]]),
SCres = lSCres + rSCres
)
info$lvar <- lSCres / info$lpop
info$rvar <- rSCres / info$rpop
bestSpl$spl <- TraMineRInternalSplitInit(p - 1,
index = 1:2,
prob = c(info$lpop, info$rpop) / node$info$n, info = info, labels = SplitLabels
)
SCres <- bestSpl$spl$info$SCres
node$split <- bestSpl$spl
node$split$info$R2 <- 1 - (SCres / SCtot)
node$surrogates <- bestSpl$sur
# print(bestSpl)
left <- as.seqtreeDTNBuildNode(ind = ind[bestSpl$variable], vardis = bestSpl$spl$info$lvar, depth = p, current = p + 1)
right <- as.seqtreeDTNBuildNode(ind = ind[!bestSpl$variable], vardis = bestSpl$spl$info$rvar, depth = p, current = p + 1)
node$kids <- list(left, right)
## We have found the split, so leave the loop
return(node)
}
}
## Maximum depth reached
return(node)
}
root <- as.seqtreeDTNBuildNode(ind = 1:nobs, vardis = vardis, depth = 1, current = 2)
# print(root)
tree <- list()
tree$fitted <- data.frame(disstreeleaf(root))
names(tree$fitted) <- "(fitted)"
tree$info <- list(method = "disstree", n = pop, parameters = list(minSize = 1, maxdepth = ncluster, R = 0, pval = 1), object = seqdata, weight.permutation = "diss")
if (!weighted) {
tree$info$adjustment <- dissassoc(diss, tree$fitted[, 1], R = 0, weights = NULL)
} else {
tree$info$adjustment <- dissassoc(diss, tree$fitted[, 1], R = 0, weights = weights, weight.permutation = "diss")
}
tree$data <- predictor
tree$terms <- NULL
tree$weights <- weights
## tree <- party(root, data=predictor, fitted =fitted, terms = terms(formula.call), info = info)
tree$root <- root
class(tree) <- c("seqtree", "disstree", class(tree))
return(tree)
}
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.