Skip to content

Commit 78cf900

Browse files
committedFeb 23, 2018
Issue #133, moved kernel.dist() to treekernel.R
Deleted deprecated config parsing code from smcConfig.R Eliminated caching of "self" kernel scores to trees in treekernel.R
1 parent 426f2be commit 78cf900

File tree

4 files changed

+70
-81
lines changed

4 files changed

+70
-81
lines changed
 

‎pkg/R/processtree.R

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ parse.newick <- function(tree) {
5555
stop(".preprocess.tree() requires phylo or character (Newick) object for tree")
5656
}
5757
tree <- ladderize(tree)
58-
tree <- .rescale.tree(tree, config$rescale.mode)
58+
#tree <- .rescale.tree(tree, config$rescale.mode)
5959

6060
return(tree)
6161
}

‎pkg/R/smcABC.R

-38
Original file line numberDiff line numberDiff line change
@@ -48,44 +48,6 @@ simulate.trees <- function(workspace, theta, model, seed=NA, ...) {
4848
}
4949

5050

51-
# formally 'distance'
52-
kernel.dist <- function(t1, t2, decay.factor, rbf.variance, sst.control, rescale.mode, labelPattern, labelReplacement, gamma) {
53-
if (is.null(t1$kernel)) {
54-
stop("t1 missing self kernel in distance()")
55-
}
56-
if (is.null(t2$kernel)) {
57-
stop("t2 missing self kernel in distance()")
58-
}
59-
60-
k <- tree.kernel(
61-
t1,
62-
t2,
63-
lambda=decay.factor,
64-
sigma=rbf.variance,
65-
rho=sst.control,
66-
regexPattern = labelPattern,
67-
regexReplacement = labelReplacement,
68-
gamma=gamma
69-
)
70-
71-
result <- 1. - k / sqrt(t1$kernel * t2$kernel)
72-
if (result < 0 || result > 1) {
73-
stop(
74-
cat("ERROR: kernel.dist() value outside range [0,1].\n",
75-
"k: ", k, "\n",
76-
"t1$kernel: ", t1$kernel, "\n",
77-
"t2$kernel: ", t2$kernel, "\n"
78-
)
79-
)
80-
}
81-
if (is.nan(result)) {
82-
cat("t1$kernel:", t1$kernel, "\n")
83-
cat("t2$kernel:", t2$kernel, "\n")
84-
}
85-
return (result)
86-
}
87-
88-
8951
# Applies config$dist expression to trees x and y
9052
distance <- function(x, y, config) {
9153

‎pkg/R/smcConfig.R

+1-42
Original file line numberDiff line numberDiff line change
@@ -113,51 +113,10 @@ load.config <- function(file) {
113113

114114
# Parse & validate distance expression
115115
config$dist <- parse.distance(settings$distances)
116-
117-
# Parse Kernel Settings
118-
if (is.list(settings$distances)) {
119-
if (is.element('kernel.dist', names(settings$distances))) {
120-
kernel.settings <- settings$distances[['kernel.dist']]
121-
config$decay.factor <- kernel.settings$decay.factor
122-
config$rbf.variance <- kernel.settings$rbf.variance
123-
config$sst.control <- kernel.settings$sst.control
124-
config$rescale.mode <- kernel.settings$rescale.mode
125-
config$labelPattern <- kernel.settings$labelPattern
126-
config$labelReplacement <- kernel.settings$labelReplacement
127-
config$gamma <- kernel.settings$gamma
128-
}
129-
} else if (is.character(settings$distances)) {
130-
# parse kernel settings from string
131-
dist.list <- strsplit(settings$distances, "+", fixed=TRUE)[[1]]
132-
for (dist in dist.list) {
133-
if (grepl("kernel.dist", dist)) {
134-
match <- regexpr("\\(.+\\)", dist, perl=TRUE)
135-
args <- regmatches(dist, match)
136-
args <- gsub("[( )]", "", args)
137-
kernel.settings <- strsplit(args, ",", fixed=TRUE)[[1]]
138-
names <- c()
139-
values <- c()
140-
for (parm in kernel.settings) {
141-
split <- strsplit(parm, "=", fixed=TRUE)[[1]]
142-
name <- split[1]
143-
value <- split[2]
144-
names <- c(names, name)
145-
values <- c(values, value)
146-
}
147-
names(values) <- names
148-
config$decay.factor <- as.numeric(values["decay.factor"])
149-
config$rbf.variance <- as.numeric(values["rbf.variance"])
150-
config$sst.control <- as.numeric(values["sst.control"])
151-
config$rescale.mode <- values["rescale.mode"]
152-
config$labelPattern <- values["labelPattern"]
153-
config$labelReplacement <- values["labelReplacement"]
154-
config$gamma <- as.numeric(values["gamma"])
155-
}
156-
}
157-
}
158116
return (config)
159117
}
160118

119+
161120
parse.distance <- function(distance) {
162121
# generate matrix of accepted tree statistic functions from 'metrics' list which can be added to over time without altering the rest of the function
163122
# if value of 1, only one variable required in distance function call (ie. sackin(x) - sackin(y))

‎pkg/R/treekernel.R

+68
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,74 @@
2525
# return(result)
2626
# }
2727

28+
29+
# formally 'distance'
30+
kernel.dist <- function(t1, t2, decay.factor, rbf.variance, sst.control, rescale.mode, labelPattern, labelReplacement, gamma) {
31+
if (is.null(t1$kernel)) {
32+
stop("t1 missing self kernel in distance()")
33+
}
34+
if (is.null(t2$kernel)) {
35+
stop("t2 missing self kernel in distance()")
36+
}
37+
38+
# rescale branch lengths
39+
nt1 <- .rescale.tree(t1, rescale.mode)
40+
nt2 <- .rescale.tree(t2, rescale.mode)
41+
42+
k12 <- tree.kernel(
43+
nt1,
44+
nt2,
45+
lambda=decay.factor,
46+
sigma=rbf.variance,
47+
rho=sst.control,
48+
regexPattern = labelPattern,
49+
regexReplacement = labelReplacement,
50+
gamma=gamma
51+
)
52+
53+
# we can no longer cache a tree's kernel score to itself because a distance may potentially
54+
# comprise more than one kernel
55+
k11 <- tree.kernel(
56+
nt1,
57+
nt1,
58+
lambda=decay.factor,
59+
sigma=rbf.variance,
60+
rho=sst.control,
61+
regexPattern = labelPattern,
62+
regexReplacement = labelReplacement,
63+
gamma=gamma
64+
)
65+
66+
k22 <- tree.kernel(
67+
nt2,
68+
nt2,
69+
lambda=decay.factor,
70+
sigma=rbf.variance,
71+
rho=sst.control,
72+
regexPattern = labelPattern,
73+
regexReplacement = labelReplacement,
74+
gamma=gamma
75+
)
76+
77+
#result <- 1. - k / sqrt(t1$kernel * t2$kernel)
78+
result <- 1. - k12 / sqrt(k11 * k22)
79+
if (result < 0 || result > 1) {
80+
stop(
81+
cat("ERROR: kernel.dist() value outside range [0,1].\n",
82+
"k12: ", k12, "\n",
83+
"k11: ", k11, "\n",
84+
"k22: ", k22, "\n"
85+
)
86+
)
87+
}
88+
if (is.nan(result)) {
89+
cat("k11:", k11, "\n")
90+
cat("k22:", k22, "\n")
91+
}
92+
return (result)
93+
}
94+
95+
2896
tree.kernel <- function(tree1, tree2,
2997
lambda, # decay factor
3098
sigma, # RBF variance parameter

0 commit comments

Comments
 (0)
Please sign in to comment.