From 548ec6a21e14de1f5c82136948aab9395e0be939 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20G=C3=A4rber?= <florian.gaerber@uni-hamburg.de>
Date: Thu, 20 Jul 2023 11:48:34 +0200
Subject: [PATCH] Import v0.3.1 from GitHub

---
 .Rbuildignore               |   2 +
 .gitignore                  |  37 +----
 DESCRIPTION                 |  19 +++
 LICENCE.txt                 |   7 +
 LICENSE.md                  |  22 ---
 NAMESPACE                   |  17 ++
 R/SMD_example_data.R        |  18 +++
 R/addLayer.R                |  38 +++++
 R/addSurrogates.R           | 146 +++++++++++++++++
 R/build_clusters.R          |  48 ++++++
 R/count.surrogates.R        |  50 ++++++
 R/getTreeranger.R           |  51 ++++++
 R/meanAdjAgree.R            | 151 ++++++++++++++++++
 R/mindep.R                  |  90 +++++++++++
 R/reduce.surrogates.R       |  62 ++++++++
 R/surrmindep.R              | 128 +++++++++++++++
 R/var.relations.R           | 166 ++++++++++++++++++++
 R/var.relations.mfi.R       | 298 +++++++++++++++++++++++++++++++++++
 R/variable_selection_md.R   |  73 +++++++++
 R/variable_selection_mir.R  | 291 ++++++++++++++++++++++++++++++++++
 R/variable_selection_smd.R  | 160 +++++++++++++++++++
 README.md                   | 192 ++++++++++++++++++++++-
 SurrogateMinimalDepth.Rproj |  20 +++
 Version_info.txt            |  43 ++++++
 data/SMD_example_data.RData | Bin 0 -> 155664 bytes
 man/SMD_example_data.Rd     |  23 +++
 man/SurrTree.Rd             |  12 ++
 man/addLayer.Rd             |  26 ++++
 man/addSurrogates.Rd        |  36 +++++
 man/adj.mean.Rd             |  12 ++
 man/adj.mean.trees.Rd       |  12 ++
 man/adj.node.Rd             |  12 ++
 man/build.clusters.Rd       |  42 +++++
 man/calculate.mir.perm.Rd   |  12 ++
 man/count.surrogates.Rd     |  22 +++
 man/getSurrogate.Rd         |  12 ++
 man/getTreeranger.Rd        |  27 ++++
 man/getsingletree.Rd        |  12 ++
 man/mean.adj.node.Rd        |  12 ++
 man/mean.index.Rd           |  12 ++
 man/meanAdjAgree.Rd         |  46 ++++++
 man/mindep.Rd               |  24 +++
 man/name.adj.Rd             |  12 ++
 man/name.surr.Rd            |  12 ++
 man/p.relation.Rd           |  12 ++
 man/permute.variable.Rd     |  12 ++
 man/reduce.surrogates.Rd    |  39 +++++
 man/scount.Rd               |  12 ++
 man/select.related.Rd       |  12 ++
 man/surr.tree.Rd            |  12 ++
 man/surrmindep.Rd           |  24 +++
 man/var.relations.Rd        |  95 ++++++++++++
 man/var.relations.mfi.Rd    | 103 ++++++++++++
 man/var.select.md.Rd        |  93 +++++++++++
 man/var.select.mir.Rd       | 115 ++++++++++++++
 man/var.select.smd.Rd       | 100 ++++++++++++
 src/.gitignore              |   4 +
 src/choose_surg.c           | 301 ++++++++++++++++++++++++++++++++++++
 src/free_tree.c             |  29 ++++
 src/get_surg.c              | 261 +++++++++++++++++++++++++++++++
 src/get_surg.h              | 103 ++++++++++++
 src/init.c                  |  23 +++
 src/insert_split.c          |  87 +++++++++++
 src/node.h                  |  76 +++++++++
 src/rpartproto.h            |  23 +++
 src/rpcountup.c             |  27 ++++
 src/rpmatrix.c              |  64 ++++++++
 src/sort_vec.c              | 131 ++++++++++++++++
 src/surrogate.c             | 162 +++++++++++++++++++
 69 files changed, 4371 insertions(+), 56 deletions(-)
 create mode 100644 .Rbuildignore
 create mode 100644 DESCRIPTION
 create mode 100644 LICENCE.txt
 delete mode 100644 LICENSE.md
 create mode 100644 NAMESPACE
 create mode 100644 R/SMD_example_data.R
 create mode 100644 R/addLayer.R
 create mode 100644 R/addSurrogates.R
 create mode 100644 R/build_clusters.R
 create mode 100644 R/count.surrogates.R
 create mode 100644 R/getTreeranger.R
 create mode 100644 R/meanAdjAgree.R
 create mode 100644 R/mindep.R
 create mode 100644 R/reduce.surrogates.R
 create mode 100644 R/surrmindep.R
 create mode 100644 R/var.relations.R
 create mode 100644 R/var.relations.mfi.R
 create mode 100644 R/variable_selection_md.R
 create mode 100644 R/variable_selection_mir.R
 create mode 100644 R/variable_selection_smd.R
 create mode 100644 SurrogateMinimalDepth.Rproj
 create mode 100644 Version_info.txt
 create mode 100644 data/SMD_example_data.RData
 create mode 100644 man/SMD_example_data.Rd
 create mode 100644 man/SurrTree.Rd
 create mode 100644 man/addLayer.Rd
 create mode 100644 man/addSurrogates.Rd
 create mode 100644 man/adj.mean.Rd
 create mode 100644 man/adj.mean.trees.Rd
 create mode 100644 man/adj.node.Rd
 create mode 100644 man/build.clusters.Rd
 create mode 100644 man/calculate.mir.perm.Rd
 create mode 100644 man/count.surrogates.Rd
 create mode 100644 man/getSurrogate.Rd
 create mode 100644 man/getTreeranger.Rd
 create mode 100644 man/getsingletree.Rd
 create mode 100644 man/mean.adj.node.Rd
 create mode 100644 man/mean.index.Rd
 create mode 100644 man/meanAdjAgree.Rd
 create mode 100644 man/mindep.Rd
 create mode 100644 man/name.adj.Rd
 create mode 100644 man/name.surr.Rd
 create mode 100644 man/p.relation.Rd
 create mode 100644 man/permute.variable.Rd
 create mode 100644 man/reduce.surrogates.Rd
 create mode 100644 man/scount.Rd
 create mode 100644 man/select.related.Rd
 create mode 100644 man/surr.tree.Rd
 create mode 100644 man/surrmindep.Rd
 create mode 100644 man/var.relations.Rd
 create mode 100644 man/var.relations.mfi.Rd
 create mode 100644 man/var.select.md.Rd
 create mode 100644 man/var.select.mir.Rd
 create mode 100644 man/var.select.smd.Rd
 create mode 100644 src/.gitignore
 create mode 100644 src/choose_surg.c
 create mode 100644 src/free_tree.c
 create mode 100644 src/get_surg.c
 create mode 100644 src/get_surg.h
 create mode 100644 src/init.c
 create mode 100644 src/insert_split.c
 create mode 100644 src/node.h
 create mode 100644 src/rpartproto.h
 create mode 100644 src/rpcountup.c
 create mode 100644 src/rpmatrix.c
 create mode 100644 src/sort_vec.c
 create mode 100644 src/surrogate.c

diff --git a/.Rbuildignore b/.Rbuildignore
new file mode 100644
index 0000000..91114bf
--- /dev/null
+++ b/.Rbuildignore
@@ -0,0 +1,2 @@
+^.*\.Rproj$
+^\.Rproj\.user$
diff --git a/.gitignore b/.gitignore
index f5b98bb..56843bc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,36 +1,7 @@
-# History files
+.Rproj.user
 .Rhistory
-.Rapp.history
-
-# Session Data files
 .RData
-
-# User-specific files
 .Ruserdata
-
-# Example code in package build process
-*-Ex.R
-
-# Output files from R CMD build
-/*.tar.gz
-
-# Output files from R CMD check
-/*.Rcheck/
-
-# RStudio files
-.Rproj.user/
-
-# produced vignettes
-vignettes/*.html
-vignettes/*.pdf
-
-# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3
-.httr-oauth
-
-# knitr and R markdown default cache directories
-*_cache/
-/cache/
-
-# Temporary files created by R markdown
-*.utf8.md
-*.knit.md
+src/*.o
+src/*.so
+src/*.dll
diff --git a/DESCRIPTION b/DESCRIPTION
new file mode 100644
index 0000000..bec91b9
--- /dev/null
+++ b/DESCRIPTION
@@ -0,0 +1,19 @@
+Package: RFSurrogates
+Type: Package
+Title: Surrogate minimal depth variable importance 
+Version: 0.3.1
+Author: Stephan Seifert, Sven Gundlach, Silke Szymczak
+Maintainer: Stephan Seifert <seifert@medinfo.uni-kiel.de>
+Description: This package provides functions to obtain surrogate splits applying ranger for random forests generation and using modified functions from the package rpart. Surrogate variables and corresponding adjusted agreement values are used for surrogate minimal depth variable importance and to investigate variable relations.  
+License: use_mit_license()
+Encoding: UTF-8
+LazyData: true
+Imports:
+	ranger (>= 0.12.1),
+	Rcpp,
+	randomForestSRC,
+	linkcomm,
+    parallel,
+    rlist
+RoxygenNote: 7.1.2
+LinkingTo: Rcpp
diff --git a/LICENCE.txt b/LICENCE.txt
new file mode 100644
index 0000000..f628819
--- /dev/null
+++ b/LICENCE.txt
@@ -0,0 +1,7 @@
+Copyright 2023 Stephan Seifert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/LICENSE.md b/LICENSE.md
deleted file mode 100644
index 3123099..0000000
--- a/LICENSE.md
+++ /dev/null
@@ -1,22 +0,0 @@
-
-The MIT License (MIT)
-
-Copyright (c) 2023 Florian Gärber
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/NAMESPACE b/NAMESPACE
new file mode 100644
index 0000000..c2238d2
--- /dev/null
+++ b/NAMESPACE
@@ -0,0 +1,17 @@
+# Generated by roxygen2: do not edit by hand
+
+export(addLayer)
+export(addSurrogates)
+export(build.clusters)
+export(count.surrogates)
+export(getTreeranger)
+export(meanAdjAgree)
+export(mindep)
+export(reduce.surrogates)
+export(surrmindep)
+export(var.relations)
+export(var.relations.mfi)
+export(var.select.md)
+export(var.select.mir)
+export(var.select.smd)
+useDynLib(SurrogateMinimalDepth, .registration = TRUE, .fixes = "C_")
diff --git a/R/SMD_example_data.R b/R/SMD_example_data.R
new file mode 100644
index 0000000..ec046b1
--- /dev/null
+++ b/R/SMD_example_data.R
@@ -0,0 +1,18 @@
+#' Example data set for the package SurrogateMinimalDepth
+#'
+#' A dataset containing 100 individuals (rows), 1 dependent variable (first column, y), and 200 additional variables (columns 2 to 201):
+#' For the simulation of the 200 additional variables nine variables X1,…,X9 called basic variables were simulated. X1 to X6 are causal
+#' with constant effect sizes of 1 and X7 to X9 are noncausal with effect size of 0. The outcome y is a linear combination of the causal
+#' predictor variables and a normally distributed error term. All basic variables were sampled from a normal distribution
+#' (N(0,1)) just like the noise (N(0,0.2)). For each of the six basic variables X1, X2, X3, X7, X8, and X9 ten variables
+#' with predefined correlations of 0.9 for X1 and X7, 0.6 for X2 and X8, and 0.3 for X3 and X9 were obtained by \link[WGCNA]{simulateModule} function of
+#' the R package WGCNA. The ten variables of each basis variable are labeled: Cp_basicvariable_number. Additional non-correlated and
+#' independent predictor variables (cgn) were simulated using the standard normal distribution to reach a total number of 200 variables.
+#'
+#'
+#' @docType data
+#' @keywords datasets
+#' @name SMD_example_data
+#' @usage data(SMD_example_data)
+#' @format A matrix with 100 rows and 1001 columns
+NULL
diff --git a/R/addLayer.R b/R/addLayer.R
new file mode 100644
index 0000000..91be0b1
--- /dev/null
+++ b/R/addLayer.R
@@ -0,0 +1,38 @@
+#'Add layer information to a forest that was created by getTreeranger
+#'
+#'This functions adds the layer information to each node in a list with trees that was obtained by getTreeranger.
+#'
+#' @param trees list of trees created by getTreeranger
+#' @return a list with trees. Each row of the list elements corresponds to a node of the respective tree and the columns correspond to:
+#' \itemize{
+#' \item nodeID: ID of the respective node (important for left and right daughters in the next columns)
+#' \item leftdaughter: ID of the left daughter of this node
+#' \item rightdaughter: ID of the right daughter of this node
+#' \item splitvariable: ID of the split variable
+#' \item splitpoint: splitpoint of the split variable
+#' \item status: "0" for terminal and "1" for non-terminal
+#' \item layer: layer information (0 means root node, 1 means 1 layer below root, etc)
+#' }
+#' @export
+
+addLayer=function(trees){
+  #This function adds the respective layer to the different nodes in a tree. The tree has to be prepared by getTree function
+  tree.layer=list()
+  num.trees= length(trees)
+  for (i in 1:num.trees){
+    tree=trees[[i]]
+    layer=rep(NA,nrow(tree))
+    layer[1]=0
+    t=1
+    while (anyNA(layer)){
+      r=unlist(tree[which(layer==(t-1)),2:3])
+      layer[r]=t
+      t=t+1
+    }
+    tree=cbind(tree,layer)
+    tree=tree[order(as.numeric(tree[,"layer"])),]
+    tree.layer[[i]]=tree
+  }
+  return(tree.layer)
+}
+
diff --git a/R/addSurrogates.R b/R/addSurrogates.R
new file mode 100644
index 0000000..97ec16c
--- /dev/null
+++ b/R/addSurrogates.R
@@ -0,0 +1,146 @@
+#' Add surrogate information that was created by getTreeranger
+#'
+#' This function adds surrogate variables and adjusted agreement values to a forest that was created by getTreeranger.
+#'
+#' @useDynLib SurrogateMinimalDepth, .registration = TRUE, .fixes = "C_"
+#'
+#' @param RF random forest object created by ranger (with keep.inbag=TRUE).
+#' @param trees list of trees created by getTreeranger.
+#' @param s Predefined number of surrogate splits (it may happen that the actual number of surrogate splits differes in individual nodes). Default is 1 \% of no. of variables.
+#' @param Xdata data without the dependent variable.
+#' @param num.threads number of threads used for parallel execution. Default is number of CPUs available.
+#' @return a list with trees containing of lists of nodes with the elements:
+#' \itemize{
+#' \item nodeID: ID of the respective node (important for left and right daughters in the next columns)
+#' \item leftdaughter: ID of the left daughter of this node
+#' \item rightdaughter: ID of the right daughter of this node
+#' \item splitvariable: ID of the split variable
+#' \item splitpoint: splitpoint of the split variable
+#' \item status: "0" for terminal and "1" for non-terminal
+#' \item layer: layer information (0 means root node, 1 means 1 layer below root, etc)
+#' \item surrogate_i: numbered surrogate variables (number depending on s)
+#' \item adj_i: adjusted agreement of variable i
+#' }
+#' @export
+
+addSurrogates = function(RF,trees,s,Xdata,num.threads) {
+
+  num.trees = length(trees)
+  ncat = sapply(sapply(Xdata,levels),length)     # determine number of categories (o for continuous variables)
+  names(ncat) = colnames(Xdata)
+
+  if (is.null(num.threads)) {
+    num.threads = parallel::detectCores()
+  }
+
+  if (any(ncat) > 0) {
+  Xdata[,which(ncat > 0)] = sapply(Xdata[,which(ncat > 0)],unclass)
+  }
+
+  #variables to find surrogates (control file similar as in rpart)
+  controls = list(maxsurrogate = as.integer(s), sur_agree = 0)
+
+  trees.surr = parallel::mclapply(1:num.trees,
+                                  getSurrogate,
+                                  mc.cores = num.threads,
+                                  maxsurr = s,
+                                  surr.par = list(inbag.counts = RF$inbag.counts,
+                                                         Xdata = Xdata,
+                                                      controls = controls,
+                                                         trees = trees,
+                                                          ncat = ncat))
+  return(trees.surr)
+}
+
+#' getSurrogate
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+getSurrogate = function(surr.par, k = 1, maxsurr) {
+  #weights and trees are extracted
+ tree = surr.par$trees[[k]]
+ column.names = colnames(tree)
+ n.nodes = nrow(tree)
+ wt = surr.par$inbag.counts[[k]]
+ tree.surr = lapply(1:n.nodes,
+                    SurrTree,
+                    wt = wt,
+                    Xdata = surr.par$Xdata,
+                    controls = surr.par$controls,
+                    column.names, tree,maxsurr,
+                    ncat = surr.par$ncat)
+}
+#' SurrTree
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+SurrTree = function(j,wt,Xdata,controls,column.names,tree,maxsurr,ncat) {
+  node = tree[j,]
+  # for non-terminal nodes get surrogates
+  if (node["status"] == 1) {
+  #Handover to C
+  var = as.numeric(node[4]) # extract split variable
+
+  if (ncat[var] == 0) { # extract split information: split point for continuous variables and directions for qualitative variables
+    split = as.numeric(node[5])
+  } else {
+    right = as.numeric(strsplit(as.character(node[5]), ",")[[1]])
+    directions = rep(-1,ncat[var])
+    directions[right] = 1
+    split = as.numeric(c(ncat[var],directions))
+  }
+
+
+  surrogate.parameters = .Call(C_getSurrogates,
+                               ncat = as.integer(ncat),
+                               wt = as.numeric(wt),
+                               X = as.matrix(Xdata),
+                               controls = as.integer(unlist(controls)),
+                               var = as.integer(var),                      # node variables
+                               split = as.numeric(split))                    # split info
+
+  if (nrow(surrogate.parameters$isplit) > 1) {
+    surrogates = surrogate.parameters$isplit[2:nrow(surrogate.parameters$isplit),1]
+    surr.adj = round(surrogate.parameters$dsplit[2:nrow(surrogate.parameters$dsplit),1],2)
+    node.new = data.frame(matrix(nrow = 1, ncol = 7 + length(surrogates) + length(surr.adj)))
+    node.new[,1:7] = node[1:7]
+    node.new[,8:(7 + length(surrogates) + length(surr.adj))] = c(surrogates,surr.adj)
+    surrogate.names = NULL
+    adj.names = NULL
+    surrogate.names = sapply(1:length(surrogates),name.surr,surrogate.names)
+    adj.names = sapply(1:length(surrogates),name.adj,adj.names)
+    names(node.new) = c(column.names,surrogate.names,adj.names)
+  }
+
+  if (nrow(surrogate.parameters$isplit) == 1) {
+    node.new = node
+  }
+  }
+  if (node["status"] == 0) {
+    node.new = node
+  }
+return(node.new)
+}
+
+#' name.surr
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+name.surr = function(i,surrogate.names){
+surrogate.names = c(surrogate.names,paste0("surrogate_",i))
+return(surrogate.names)
+}
+
+#' name.adj
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+name.adj = function(i,adj.names){
+  adj.names = c(adj.names,paste0("adj_",i))
+  return(adj.names)
+}
+
diff --git a/R/build_clusters.R b/R/build_clusters.R
new file mode 100644
index 0000000..af66275
--- /dev/null
+++ b/R/build_clusters.R
@@ -0,0 +1,48 @@
+#' Apply cluster analysis to build variable groups
+#'
+#'This function generates variables groups of relation information that was obtained by \link[SurrogateMinimalDepth]{var.relations} function applying
+#'\link[linkcomm]{getLinkCommunities}.
+#'
+#' @param rel a list containing variables, surr.res, threshold, and var. This is the output of \link[SurrogateMinimalDepth]{var.relations} function.
+#' @param hcmethod the hierarchical clustering method that is used. (see \link[linkcomm]{getLinkCommunities})
+#'
+#' @return a data frame containing the variable names and their associated clusters.
+#'
+#' @examples
+#' # read data
+#' data("SMD_example_data")
+#'
+#' \donttest{
+#'  # get trees and variable names
+#'  x = SMD_example_data[,2:ncol(SMD_example_data)]
+#'  y = SMD_example_data[,1]
+#'  allvariables = colnames(x)# extract variables names
+#'  nvar = length(allvariables)   # count number of variables
+#'  set.seed(42)
+#'  RF = ranger::ranger(data = SMD_example_data, dependent.variable.name = "y", num.trees = 10, keep.inbag = TRUE,mtry = floor(nvar^(3/4)), min.node.size = 1)
+#'  trees = getTreeranger(RF = RF, num.trees = 10)
+#'  trees.lay = addLayer(trees)
+#'  trees.surr = addSurrogates(RF = RF, trees = trees.lay, s = 10, Xdata = x, num.threads = NULL)
+#'
+#'  # investigate variable relations
+#'  rel=var.relations(forest = list(trees = trees.surr, allvariables = allvariables), variables = allvariables, candidates = allvariables, t = 10)
+#'  groups = build.clusters(rel)
+#' }
+#'
+#' @export
+
+
+build.clusters = function(rel,hcmethod = "ward.D") {
+
+  # create links matrix
+  links = matrix(nrow = length(unlist(rel$var)) ,ncol = 2)
+  links[,1] = unlist(sapply(1:length(rel$variables), function(x) {rep(rel$variables[x],length(rel$var[[x]]))}))
+  links[,2] = unlist(rel$var)
+
+  # cluster analysis to identify clusters
+  link.comm = linkcomm::getLinkCommunities(links,
+                                 hcmethod = hcmethod,
+                                 plot = FALSE)
+  cluster.info = link.comm$nodeclusters
+  return(cluster.info)
+}
diff --git a/R/count.surrogates.R b/R/count.surrogates.R
new file mode 100644
index 0000000..670c461
--- /dev/null
+++ b/R/count.surrogates.R
@@ -0,0 +1,50 @@
+#'Count surrogate variables
+#'
+#'This function counts surrogate variables and returns the total average number of surrogate variables and the average number of surrogate variables of the respective layers.
+#'This is necessary since the actual number of surrogate splits can be lower than the predefined number (when less surrogate splits outperform the majority rule).
+#'
+#'@param trees list of trees that was generated by getTreeranger function and layers, surrogate variables, and adjusted agreement values were added by addLayer and getSurrogates functions
+#' @return List with the following components:
+#' \itemize{
+#' \item s.a: total average number of surrogate variables
+#' \item s.l: average number of surrogate variables in the respective layers
+#' }
+#' @export
+count.surrogates=function(trees){
+  num.trees=length(trees)
+  surrogates.trees=lapply(1:num.trees,scount,trees)
+
+  s.a=mean(sapply(surrogates.trees,"[[","s.a"))
+  s.l.list=lapply(surrogates.trees,"[[","s.l")
+  s.l.all <- matrix(NA, nrow = 1000, ncol = num.trees)
+  for (u in 1:num.trees){
+   s.l.tree=s.l.list[[u]][,2]
+   s.l.all[1:length(s.l.tree),u]=s.l.tree
+  }
+  s.l=rowMeans(s.l.all,na.rm = TRUE)
+  names(s.l)=c(0:999)
+
+  return(list(s.a=s.a,s.l=s.l))
+}
+
+#' scount
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+scount=function(i=1,trees){
+  tree=trees[[i]]
+  nonterminal.nodes=tree[which(sapply(tree,"[[","status")==1)]
+  s.a=(mean(sapply((lapply(nonterminal.nodes,"[",-c(1:7))),length)))/2
+  maxlayer=as.numeric(unlist(nonterminal.nodes[length(nonterminal.nodes)])["layer"])
+  s.l=matrix(NA,maxlayer+1,2)
+  colnames(s.l)=c("layer","No. Surrogates")
+  s.l[,1]=0:maxlayer
+  for (u in 0:maxlayer){
+  nodes.at.layer=nonterminal.nodes[which(sapply(nonterminal.nodes,"[[","layer")==u)]
+  surr=lapply(nodes.at.layer,"[",-c(1:7))
+  s.u=(mean(sapply(surr,length)))/2
+  s.l[u+1,2]=s.u
+  }
+  return(list(s.a=s.a,s.l=s.l))
+}
diff --git a/R/getTreeranger.R b/R/getTreeranger.R
new file mode 100644
index 0000000..e190c64
--- /dev/null
+++ b/R/getTreeranger.R
@@ -0,0 +1,51 @@
+#'Get a list of structured trees for ranger
+#'
+#'This functions creates a list of trees for ranger objects similar as getTree function does for random Forest objects.
+#'
+#' @param RF random forest object created by ranger (with keep.inbag=TRUE)
+#' @param num.trees number of trees
+#' @return a list with trees. Each row of the list elements corresponds to a node of the respective tree and the columns correspond to:
+#' \itemize{
+#' \item nodeID: ID of the respective node (important for left and right daughters in the next columns)
+#' \item leftdaughter: ID of the left daughter of this node
+#' \item rightdaughter: ID of the right daughter of this node
+#' \item splitvariable: ID of the split variable
+#' \item splitpoint: splitpoint of the split variable (for categorical variables this is a comma separated lists of values, representing the factor levels (in the original order) going to the right)
+#' \item status: "0" for terminal and "1" for non-terminal
+#' }
+#' @export
+
+
+
+getTreeranger=function(RF,num.trees) {
+  trees=lapply(1:num.trees,getsingletree,RF=RF)
+
+  return(trees)
+}
+
+
+#' getsingletree
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+getsingletree=function(RF,k=1){
+  # here we use the treeInfo function of the ranger package to create extract the trees, in an earlier version this was done with a self implemented function
+  tree.ranger = ranger::treeInfo(RF,tree = k)
+  ktree=data.frame(as.numeric(tree.ranger$nodeID+1),
+              as.numeric(tree.ranger$leftChild+1),
+              as.numeric(tree.ranger$rightChild+1),
+              as.numeric(tree.ranger$splitvarID+1),
+              tree.ranger$splitval,
+              tree.ranger$terminal)
+  if (is.factor(ktree[,5])) {
+  ktree[,5] = as.character(levels(ktree[,5] ))[ktree[,5]]
+  }
+  ktree[,6] = as.numeric(ktree[,6] == FALSE)
+
+ for (i in 2:4) {
+   ktree[,i][is.na(ktree[,i])] = 0
+ }
+  colnames(ktree)=c("nodeID","leftdaughter","rightdaughter","splitvariable","splitpoint","status")
+  return(ktree)
+}
diff --git a/R/meanAdjAgree.R b/R/meanAdjAgree.R
new file mode 100644
index 0000000..fd14fb4
--- /dev/null
+++ b/R/meanAdjAgree.R
@@ -0,0 +1,151 @@
+#'Calculate mean adjusted agreement to investigate variables relations
+#'
+#'This is the main function of var.relations function.
+#'
+#' @param trees list of trees created by getTreeranger, addLayer and addSurrogate.
+#' @param variables vector of variable names.
+#' @param allvariables vector of all variable names (strings)
+#' @param candidates vector of variable names (strings) that are candidates to be related to the variables (has to be contained in allvariables)
+#' @param t variable to calculate threshold. Default is 3.
+#' @param s.a average number of surrogate variables (ideally calculated by count.surrogates function).
+#' @param select.var set False if only relations should be calculated and no related variables should be selected.
+#' @param num.threads number of threads used for parallel execution. Default is number of CPUs available.
+#' @return a list containing:
+#' \itemize{
+#' \item variables: the variables to which relations are investigated
+#' \item surr.res: matrix with mean adjusted agreement values and variables investigated in rows and candidate variables in columns
+#' \item threshold: the threshold used to create surr.var from surr.res
+#' \item surr.var: binary matrix showing if the variables are related (1) or non-related (0) with variables in rows and candidates in columns.
+#' }
+#' @export
+
+
+meanAdjAgree=function(trees,variables,allvariables,candidates,t,s.a,select.var,num.threads = NULL){
+  num.trees=length(trees)
+  index.variables=match(variables,allvariables)
+  index.candidates = match(candidates,allvariables)
+  if (is.null(num.threads)) {
+    num.threads = parallel::detectCores()
+  }
+  list.res = rlist::list.flatten(parallel::mclapply(trees,
+                                                    surr.tree,
+                                                    mc.cores = num.threads,
+                                                    variables,
+                                                    index.variables,
+                                                    allvariables,
+                                                    index.candidates))
+
+  results.allvar = matrix(unlist(lapply(1:length(index.variables),
+                                        mean.index,
+                                        list.res,
+                                        index.variables)),
+                          ncol=length(candidates),nrow=length(variables),byrow = TRUE)
+  colnames(results.allvar)=candidates
+  rownames(results.allvar)=variables
+
+  if(select.var) {
+    # calculate threshold and select variables according to it
+    adj.mean=mean(unlist(lapply((1:num.trees),adj.mean.trees,trees)),na.rm = TRUE)
+    threshold=((s.a*adj.mean)/(length(allvariables)-1))*t
+    SurrVar=ifelse(results.allvar>threshold, 1, 0)
+    result=list(surr.res=results.allvar,threshold=threshold,surr.var=SurrVar,variables=variables)
+  } else {
+    result=list(surr.res=results.allvar,variables=variables)
+  }
+  return(result)
+}
+
+#' mean.index
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+mean.index=function(i, list.res,index.variables){
+  list = list.res[which(names(list.res) == index.variables[i])]
+  mean.list = round(Reduce("+",list)/length(list),2)
+  if (length(mean.list) > 0) {
+  mean.list[index.variables[i]] = NA
+  return(mean.list)
+  } else {
+  return(rep(NA,length(index.variables)))
+  }
+}
+
+#' surr.tree
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+surr.tree=function(tree,variables,index.variables,allvariables,index.candidates){
+  allvar.num = length(allvariables)
+  nonterminal.nodes = tree[which(sapply(tree,"[[","status")==1)]
+  relevant.nodes = nonterminal.nodes[sapply(nonterminal.nodes,"[[","splitvariable") %in% index.variables]
+  if (length(relevant.nodes) > 0) {
+    list.nodes = lapply(1:length(relevant.nodes),adj.node,allvar.num,relevant.nodes,index.candidates)
+    splitvar = sapply(relevant.nodes,"[[","splitvariable")
+    names(list.nodes) = splitvar
+    return(list.nodes)
+  }
+}
+
+
+#' adj.node
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+adj.node = function(i,allvar.num,relevant.nodes,index.candidates) {
+  node = relevant.nodes[i]
+  adjnode = rep(0,allvar.num)
+  surr=unlist(sapply(node,"[",-c(1:7))) # extract surrogates
+  if ((length(node[[1]]))>7){
+    s=(length(surr))/2
+    adjnode[surr[1:s]]=surr[(s+1):(2*s)]
+  }
+  return(adjnode[index.candidates])
+}
+
+
+
+#' adj.mean
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+adj.mean=function(trees){
+  adj.trees=sapply(1:length(trees),adj.mean.trees,trees)
+
+}
+
+#' adj.mean.trees
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+adj.mean.trees=function(t,trees){
+  tree=trees[[t]]
+  nonterminal.nodes=tree[which(sapply(tree,"[[","status")==1)]
+  surr.nonterminal=lapply(nonterminal.nodes,"[",-c(1:7))
+  adj.tree=mean(unlist(lapply(1:length(surr.nonterminal),mean.adj.node,surr.nonterminal)),na.rm = TRUE)
+  if (adj.tree == "NaN") {
+    adj.tree = NA
+  }
+  return(adj.tree)
+}
+
+#' adj.node
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+mean.adj.node=function(m,surr.nonterminal){
+  surr=surr.nonterminal[[m]]
+  if (length(surr)!=0){
+    num.surr=length(surr)/2
+    adj=surr[(num.surr+1):(2*num.surr)]
+  }
+  if (length(surr)==0){
+    adj=NA
+  }
+  return(adj)
+}
diff --git a/R/mindep.R b/R/mindep.R
new file mode 100644
index 0000000..45eed49
--- /dev/null
+++ b/R/mindep.R
@@ -0,0 +1,90 @@
+#'Execute minimal depth variable importance
+#'
+#'This function determines the minimal depth of variables from a forest that is created by getTreeranger, and addLayer functions.
+#'
+#' @param variables vector of variable names
+#' @param trees list of trees that was generated by getTreeranger and layers functions
+#' @return List with the following components:
+#' \itemize{
+#' \item depth: mean minimal depth for each variable
+#' \item selected: variables has been selected (1) or not (0),
+#' \item threshold: the threshold that is used for the selection
+#' }
+#' @export
+
+mindep=function(variables,trees){
+
+  num.trees= length(trees)
+# This function determines the minimal depth of variables from a tree with layers that is created by getTree and addLayer functions.
+# It is based on this paper: Ishwaran et. al. Journal of the American Statistical Accociation 2010 and used the conservative marginal
+# approximation to the minimal depth distribution
+
+var.num=length(variables)
+
+#prepare matrix for mindepth
+mindepth=matrix(NA,nrow=num.trees,ncol=var.num)
+colnames(mindepth)=variables
+
+MAX.DEPTH=10000
+#maximal Depth of trees and the number of nodes in every layer is saved to calculate treshold in a following step
+maxdepth=rep(NA,num.trees)
+nodesAtDepthMatrix <- matrix(NA, nrow = MAX.DEPTH, ncol = num.trees)
+# get mindepth for every variable in every tree
+for (i in 1:num.trees){
+nodesAtDepth <- rep(NA, MAX.DEPTH)
+tree=trees[[i]]
+tree=tree[order(as.numeric(tree[,"layer"])),]
+# get layer information of the variables and save it in minimal depth file
+depth.tree=rep(NA,length(variables))
+  o=1
+  while (anyNA(depth.tree) && o<=nrow(tree)){
+    if (tree[o,"status"]==1){
+    if (is.na(depth.tree[tree[o,"splitvariable"]])) {
+      depth.tree[tree[o,"splitvariable"]]=tree[o,"layer"]
+      }
+  }
+  o=o+1
+  }
+  #variables with no split in the tree get maxdepth+1 as minimal depth
+  depth.tree[which(is.na(depth.tree))]=tree[nrow(tree),"layer"]
+  #save min and max depth information for every tree
+  mindepth[i,]=depth.tree
+  maxdepth[i]=tree[nrow(tree),"layer"]
+  #find the number of nodes in every layer
+
+  for (u in 1:(maxdepth[i])){
+
+    nodesAtDepth[u]=nrow(subset(tree, tree[,"layer"] == u & tree[,"status"] == 1 ))
+  }
+  nodesAtDepthMatrix[,i]=nodesAtDepth
+}
+
+# create mean values for the minimal depth of different variables
+mean.depth=colMeans(mindepth)
+
+# determine the mean depth of an uninformative variable called D star in Ishwaran et. al. Journal of the American Statistical
+# Accociation 2010 (treshhold for important variables)
+
+#the following determination of the treshold is taken from max.subtree of the randomForestSRC package
+treeHeight =maxdepth
+avgTreeHeight = mean(treeHeight, na.rm=TRUE)
+maxTreeHeight = max(treeHeight, na.rm=TRUE)
+nodes.at.depth.avg = apply(nodesAtDepthMatrix, 1, mean, na.rm = TRUE)
+l = nodes.at.depth.avg[1:avgTreeHeight]
+minDepthStatObj = randomForestSRC:::minDepthStat(var.num, l = l)
+threshold <- minDepthStatObj$first.moment
+
+
+# Decide if variables are important or unimportant
+Importances=rep(NA,var.num)
+for (p in 1:var.num){
+if (mean.depth[p]<threshold) {
+ Importances[p]=1}
+  else {
+    Importances[p]=0}
+}
+names(Importances)=variables
+results=list(depth=mean.depth,selected=Importances,threshold=threshold)
+return(results)
+}
+
diff --git a/R/reduce.surrogates.R b/R/reduce.surrogates.R
new file mode 100644
index 0000000..a5745eb
--- /dev/null
+++ b/R/reduce.surrogates.R
@@ -0,0 +1,62 @@
+#' Reduce surrogate variables in a random forest.
+#'
+#'This function can be applied to reduce the surrogate variables in a forest that is created by getTreeranger, addLayer
+#'and getSurrogates functions. Hence, it can be applied to the forests that were used for surrogate minimal depth variable importance.
+#'
+#' @param forest a list containing allvariables and trees. Allvariables is a vector of all variable names in the original data set (strings). Trees is a list of trees that was generated by getTreeranger, addLayer, and getSurrogates functions.
+#' @param s number of surrogate variables in the new forest (have to be less than in the RF in trees)
+#'
+#' @return
+#' forest with s surrogate variables.
+#'
+#' @examples
+#' # read data
+#' data("SMD_example_data")
+#' \donttest{
+#' ###### use result of SMD variable importance and reduce surrogate variables to 10
+#' # select variables with smd variable importance (usually more trees are needed)
+#' set.seed(42)
+#' res = var.select.smd(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1], s = 100, num.trees = 10)
+#' forest.new = reduce.surrogates(forest = res$forest, s = 10)
+#'
+#' # execute SMD on tree with reduced number of surrogates
+#' res.new = var.select.smd(create.forest = FALSE, forest = forest.new)
+#' res.new$var
+#'
+#' #' # investigate variable relations
+#' rel = var.relations(forest = forest.new, variables=c("X1","X7"), candidates = res$forest[["allvariables"]][1:100], t = 5)
+#' rel$var
+#'}
+#' @export
+
+
+reduce.surrogates = function(forest, s = 10){
+
+  trees = forest[["trees"]]
+  num.trees = length(trees)
+  trees.new = lapply(1:num.trees, less.surrogates.trees, trees,s)
+  forest.new = list(trees = trees.new, allvariables = forest[["allvariables"]])
+return(forest.new)
+}
+
+less.surrogates.trees = function(i = 1, trees,s){
+  tree = trees[[i]]
+  n.nodes = length(tree)
+  surr.now = sapply((lapply(tree,"[",-c(1:7))),length)/2
+  surr.next = surr.now
+  surr.next[which(surr.now >= s)] = s
+  tree.new = lapply(1:n.nodes, less.surrogates.node, tree, surr.next,surr.now)
+  return(tree.new)
+}
+
+
+less.surrogates.node = function(j=1, tree,surr.next, surr.now){
+  node = tree[[j]]
+  if (length(node) == 7) {
+    node.new = node
+  }
+  if (length(node) > 7) {
+node.new = node[c(1:(7 + surr.next[j]), (8 + surr.now[j]):(7 + surr.now[j] + surr.next[j]))]
+}
+return(node.new)
+}
diff --git a/R/surrmindep.R b/R/surrmindep.R
new file mode 100644
index 0000000..3dd2ac7
--- /dev/null
+++ b/R/surrmindep.R
@@ -0,0 +1,128 @@
+#'Execute surrogate minimal depth variable importance
+#'
+#'This function determines the surrogate minimal depth of variables from a forest that is created by getTreeranger, addLayer and getSurrogates functions.
+#'
+#' @param forest a list containing allvariables and trees. Allvariables is a vector of all variable names in the original data set (strings). Trees is a list of trees that was generated by getTreeranger, addLayer, and getSurrogates functions.
+#' @param s.l Number of average surrogate variables in the respective layers. (use count.surrogate function to get it)
+#' @return List with the following components:
+#' \itemize{
+#' \item depth: mean surrogate minimal depth for each variable
+#' \item selected: variables has been selected (1) or not (0),
+#' \item threshold: the threshold that is used for the selection
+#' }
+#' @export
+
+surrmindep = function(forest, s.l){
+
+variables = forest[["allvariables"]]
+trees = forest[["trees"]]
+
+num.trees = length(trees)
+var.num = length(variables)
+
+#prepare matrix for mindepth
+mindepth = matrix(NA, nrow = num.trees, ncol = var.num)
+colnames(mindepth) = variables
+
+MAX.DEPTH = 10000
+#maximal Depth of trees and the number of nodes in every layer is saved to calculate treshold in a following step
+maxdepth = rep(NA,num.trees)
+nodesAtDepthMatrix <- matrix(NA, nrow = MAX.DEPTH, ncol = num.trees)
+# get mindepth for every variable in every tree
+for (i in 1:num.trees) {
+nodesAtDepth <- rep(NA, MAX.DEPTH)
+tree = trees[[i]]
+# get layer information of the variables and save it in minimal depth file
+depth.tree = rep(NA,length(variables))
+  o = 1
+  while (anyNA(depth.tree) && o <= length(tree)) {
+    node = unlist(tree[o])
+    if (node["status"] == 1) {
+    if (is.na(depth.tree[node["splitvariable"]])) {
+      depth.tree[as.numeric(node["splitvariable"])] = as.numeric(node["layer"])
+    }
+      if (length(node) > 7) {
+      for (r in 8:(7 + (length(node) - 7)/2)) {
+        if (is.na(depth.tree[as.numeric(node[r])])) {
+      depth.tree[as.numeric(node[r])] = as.numeric(node["layer"])
+      }
+      }
+      }
+    }
+  o = o + 1
+  }
+  #variables with no split in the tree get maxdepth as minimal depth
+  depth.tree[which(is.na(depth.tree))] = as.numeric(unlist(tree[length(tree)])["layer"])
+  #save min and max depth information for every tree
+  mindepth[i,] = depth.tree
+  maxdepth[i] = as.numeric(unlist(tree[length(tree)])["layer"])
+  #find the number of nodes in every layer
+
+  laystat = cbind(sapply(tree,"[[","layer"),sapply(tree,"[[","status"))
+  colnames(laystat) = c("layer","status")
+  for (u in 1:(maxdepth[i])) {
+
+    nodesAtDepth[u] = nrow(subset(laystat, laystat[,"layer"] == u & laystat[,"status"] == 1 ))
+  }
+  nodesAtDepthMatrix[,i] = nodesAtDepth
+}
+
+# create mean values for the minimal depth of different variables
+mean.depth = colMeans(mindepth)
+
+# determine the mean depth of an uninformative variable similarly as in Ishwaran et. al. Journal of the American Statistical
+# Accociation 2010
+
+treeHeight = maxdepth
+avgTreeHeight = mean(treeHeight, na.rm = TRUE)
+maxTreeHeight = max(treeHeight, na.rm = TRUE)
+
+# threshold has to be calculated different when trees are small
+if ((avgTreeHeight) < 2) {
+  s.l.root = s.l[1]
+  p.root = (s.l.root + 1)/var.num
+  p.1 = 1 - p.root
+  threshold = p.root*0 + p.1*1
+  warning("Trees are very small! Threshold is defined based on trees with only root nodes.")
+}
+
+
+
+if ((avgTreeHeight) >= 2) {
+nodes.at.depth.avg = apply(nodesAtDepthMatrix, 1, mean, na.rm = TRUE)
+s.l.noroot = s.l[-1]
+s.l.root = s.l[1]
+p.root = (s.l.root + 1)/var.num
+var.at.depth = nodes.at.depth.avg[1:(avgTreeHeight - 1)]*(s.l.noroot[1:(avgTreeHeight - 1)] + 1)  # 1 time for the original tree and s-times for
+                                                                                                              # the surrogates
+                                                                                                              #-1 since the last layer will be added later
+p.depth = var.at.depth/var.num
+p.all = c(p.root,p.depth)
+prob.sum = 0
+probs.used = NULL
+for (u in 1:length(p.all)) {
+  p.u = p.all[u]
+  prob.sum = prob.sum + p.u
+  if (prob.sum >= 1) break
+  probs.used[u] = p.u
+}
+prob.last = 1 - sum(probs.used)   # the last layer (that was excluded before) is now used as minimal depth when the variable doesnt appear before
+probs.used = c(probs.used,prob.last)
+layers = c(0:(length(probs.used) - 1))
+threshold = sum(layers*probs.used)
+}
+
+
+# Decide if variables are important or unimportant
+Importances = rep(NA,var.num)
+for (p in 1:var.num) {
+if (mean.depth[p] < threshold) {
+ Importances[p] = 1}
+  else {
+    Importances[p] = 0}
+}
+names(Importances) = variables
+results = list(depth = mean.depth,selected = Importances,threshold = threshold)
+return(results)
+}
+
diff --git a/R/var.relations.R b/R/var.relations.R
new file mode 100644
index 0000000..75fee16
--- /dev/null
+++ b/R/var.relations.R
@@ -0,0 +1,166 @@
+#' Investigate variable relations of a specific variable with mean adjusted agreement
+#'
+#'This function uses the mean adjusted agreement to select variables that are related to a defined variable using a threshold T.
+#'The parameter t is used to calculate T: t=1 means that every variable with higher probability than "by chance" is identified
+#'as "important". t=2 means the probability has to be twice, etc.
+#'Based on the threshold a vector is created containing the related variables.
+#'
+#' @param variables variable names (string) for which related variables should be searched for (has to be contained in allvariables)
+#' @param candidates vector of variable names (strings) that are candidates to be related to the variables (has to be contained in allvariables)
+#' @param t variable to calculate threshold. Default is 5.
+#' @param select.rel set False if only relations should be calculated and no related variables should be selected.
+#' @param num.threads number of threads used for determination of relations. Default is number of CPUs available.
+#' @inheritParams var.select.smd
+#'
+#' @return a list containing:
+#' \itemize{
+#' \item variables: the variables to which relations are investigated.
+#' \item surr.res: a matrix with mean adjusted agreement values with variables in rows and candidates in columns.
+#' \item threshold: the threshold used to select related variables.
+#' \item var: a list with one vector for each variable containing related variables.
+#' \item ranger: ranger object.
+#' }
+#' @examples
+#' # read data
+#' data("SMD_example_data")
+#' x = SMD_example_data[,2:ncol(SMD_example_data)]
+#' y = SMD_example_data[,1]
+#' \donttest{
+#' # calculate variable relations
+#' set.seed(42)
+#' res = var.relations(x = x, y = y, s = 10, num.trees = 100, variables = c("X1","X7"), candidates = colnames(x)[1:100], t = 5)
+#' res$var
+#' }
+#'
+#' @export
+
+var.relations = function(x = NULL, y = NULL, num.trees = 500, type = "regression", s = NULL, mtry = NULL, min.node.size = 1,
+                         num.threads = NULL, status = NULL, save.ranger = FALSE, create.forest = TRUE, forest = NULL,
+                         save.memory = FALSE, case.weights = NULL,
+                         variables, candidates, t = 5, select.rel = TRUE) {
+  if(!is.data.frame(x)){
+    stop("x has to be a data frame")
+  }
+  if (create.forest) {
+    ## check data
+    if (length(y) != nrow(x)) {
+      stop("length of y and number of rows in x are different")
+    }
+
+    if (any(is.na(x))) {
+      stop("missing values are not allowed")
+    }
+
+    allvariables = colnames(x)# extract variables names
+    nvar = length(allvariables)   # count number of variables
+    ## set global parameters
+    if (is.null(mtry)) {
+      mtry = floor((nvar)^(3/4))
+    }
+    if (mtry == "sqrt") {
+      mtry = floor(sqrt(nvar))
+    }
+    if (mtry == "0.5") {
+      mtry = floor(0.5*(nvar))
+    }
+    if (mtry == "^3/4") {
+      mtry = floor((nvar)^(3/4))
+    }
+
+
+    if (is.null(s)) {
+      s = ceiling(nvar*0.01)
+    }
+
+    if (s > (nvar - 2)) {
+      s = nvar - 1
+      warning("s was set to the maximum number that is reasonable (variables-1) ")
+    }
+
+    if (type == "classification") {
+      y = as.factor(y)
+      if (length(levels(y)) > 15) {
+        stop("Too much classes defined, classification might be the wrong choice")
+      }
+    }
+    if (type == "regression" && class(y) == "factor") {
+      stop("use factor variable for y only for classification! ")
+    }
+
+    data = data.frame(y, x)
+
+    if (type == "survival") {
+      if (is.null(status)) {
+        stop("a status variable named status has to be given for survival analysis")
+      }
+      data$status = status
+      RF = ranger::ranger(data = data,dependent.variable.name = "y",num.trees = num.trees,mtry = mtry,min.node.size = min.node.size,
+                          keep.inbag = TRUE, num.threads = num.threads, status.variable.name = "status", save.memory = save.memory,
+                          case.weights = case.weights)
+    }
+    if (type == "classification" | type == "regression") {
+      RF = ranger::ranger(data = data,dependent.variable.name = "y",num.trees = num.trees,mtry = mtry,min.node.size = min.node.size,
+                          keep.inbag = TRUE, num.threads = num.threads, case.weights = case.weights)
+
+    }
+
+    trees = getTreeranger(RF = RF,num.trees = num.trees)
+    trees.lay = addLayer(trees)
+    rm(trees)
+    ###AddSurrogates###
+    trees.surr = addSurrogates(RF = RF,trees = trees.lay,s = s,Xdata = data[,-1], num.threads = num.threads)
+    rm(trees.lay)
+    forest = list(trees = trees.surr, allvariables = colnames(data[,-1]))
+
+  }
+
+  if (!create.forest) {
+    if (is.null(forest)) {
+      stop("set create.forest to TRUE or analyze an existing random forest specified by parameter forest")
+    }
+  }
+  trees = forest[["trees"]]
+  allvariables = forest[["allvariables"]]
+
+  if (all(candidates %in% allvariables)) {
+  if (all(variables %in% allvariables)) {
+  # count surrogates
+  s = count.surrogates(trees)
+  results.meanAdjAgree = meanAdjAgree(trees, variables, allvariables, candidates, t = t, s$s.a, select.var = select.rel,num.threads = num.threads)
+  } else {
+    stop("allvariables do not contain the chosen variables")
+  }
+  } else {
+    stop("allvariables do not contain the candidate variables")
+  }
+  if(select.rel) {
+  surr.var = results.meanAdjAgree$surr.var
+  varlist = list()
+  for (i in 1:nrow(surr.var)) {
+    surr.var.var = surr.var[i,]
+    if (anyNA(surr.var.var)) {
+    surr.var.var = surr.var.var[-which(is.na(surr.var.var))]
+    }
+    var = names(surr.var.var[surr.var.var == 1])
+    name = variables[i]
+    varlist[[name]] = var
+  }
+
+  var = names(surr.var[surr.var == 1])
+  if (save.ranger) {
+ return(list(variables = results.meanAdjAgree$variables, surr.res = results.meanAdjAgree$surr.res,
+              threshold = results.meanAdjAgree$threshold, var = varlist, ranger = RF))
+  } else {
+    return(list(variables = results.meanAdjAgree$variables, surr.res = results.meanAdjAgree$surr.res,
+                threshold = results.meanAdjAgree$threshold, var = varlist))
+  }
+
+  } else {
+    if (save.ranger) {
+    return(list(variables = results.meanAdjAgree$variables, surr.res = results.meanAdjAgree$surr.res,ranger = RF))
+
+  } else {
+    return(list(variables = results.meanAdjAgree$variables, surr.res = results.meanAdjAgree$surr.res))
+  }
+  }
+}
diff --git a/R/var.relations.mfi.R b/R/var.relations.mfi.R
new file mode 100644
index 0000000..bab78e8
--- /dev/null
+++ b/R/var.relations.mfi.R
@@ -0,0 +1,298 @@
+#' Investigate variable relations of a specific variable with mutual forest impact (corrected mean adjusted agreement).
+#'
+#'This function corrects the mean adjusted agreement by a permutation approach and generates the relation parameter mutual forest impact. Subsequently p-values are determined and related variables are selected.
+#'
+#' @param variables variable names (string) for which related variables should be searched for (has to be contained in allvariables)
+#' @param candidates vector of variable names (strings) that are candidates to be related to the variables (has to be contained in allvariables)
+#' @param p.t p.value threshold for selection of related variables. Default is 0.01.
+#' @param select.rel set False if only relations should be calculated and no related variables should be selected.
+#' @param method Method  to  compute  p-values.   Use  "janitza"  for  the  method  by  Janitza  et  al. (2016) or "permutation" to utilize permuted relations.
+#' @param num.threads number of threads used for determination of relations. Default is number of CPUs available.
+#' @inheritParams var.select.smd
+#'
+#' @return a list containing:
+#' \itemize{
+#' \item variables: the variables to which relations are investigated.
+#' \item surr.res: a matrix with the mutual forest impact values with variables in rows and candidates in columns.
+#' \item surr.perm: a matrix with the mutual forest impact values of the permuted variables with variables in rows and candidates in columns.
+#' \item p.rel: a list with the obtained p-values for the relation analysis of each variable.
+#' \item var.rel: a list with vectors of related variables for each variable.
+#' \item ranger: ranger objects.
+#' \item method: Method  to  compute  p-values: "janitza" or "permutation".
+#' \item p.t: p.value threshold for selection of related variables
+#'
+#'
+#' }
+#' @examples
+#' # read data
+#' data("SMD_example_data")
+#' x = SMD_example_data[,2:ncol(SMD_example_data)]
+#' y = SMD_example_data[,1]
+#' \donttest{
+#' # calculate variable relations
+#' set.seed(42)
+#' res = var.relations.mfi(x = x, y = y, s = 10, num.trees = 100, variables = c("X1","X7"), candidates = colnames(x)[1:100])
+#' res$var.rel[[1]]
+#' }
+#'
+#' @export
+
+var.relations.mfi = function(x = NULL, y = NULL, num.trees = 500, type = "regression", s = NULL, mtry = NULL, min.node.size = 1,
+                         num.threads = NULL, status = NULL, save.ranger = FALSE, create.forest = TRUE, forest = NULL,
+                         save.memory = FALSE, case.weights = NULL,
+                         variables, candidates, p.t = 0.01, select.rel = TRUE, method = "janitza") {
+  if(!is.data.frame(x)){
+    stop("x has to be a data frame")
+  }
+  if (create.forest) {
+    ## check data
+    if (length(y) != nrow(x)) {
+      stop("length of y and number of rows in x are different")
+    }
+
+    if (any(is.na(x))) {
+      stop("missing values are not allowed")
+    }
+
+    allvariables = colnames(x)# extract variables names
+    nvar = length(allvariables)   # count number of variables
+    ## set global parameters
+    if (is.null(mtry)) {
+      mtry = floor((nvar)^(3/4))
+    }
+    if (mtry == "sqrt") {
+      mtry = floor(sqrt(nvar))
+    }
+    if (mtry == "0.5") {
+      mtry = floor(0.5*(nvar))
+    }
+    if (mtry == "^3/4") {
+      mtry = floor((nvar)^(3/4))
+    }
+
+
+    if (is.null(s)) {
+      s = ceiling(nvar*0.01)
+    }
+
+    if (s > (nvar - 2)) {
+      s = nvar - 1
+      warning("s was set to the maximum number that is reasonable (variables-1) ")
+    }
+
+    if (type == "classification") {
+      y = as.factor(y)
+      if (length(levels(y)) > 15) {
+        stop("Too much classes defined, classification might be the wrong choice")
+      }
+    }
+    if (type == "regression" && class(y) == "factor") {
+      stop("use factor variable for y only for classification! ")
+    }
+
+    # create shadow variables to correct the relation
+    x_perm = data.frame(lapply(1:ncol(x),permute.variable,x=x))
+    colnames(x_perm) = paste(allvariables,"_perm", sep = "")
+
+    data = data.frame(y, x)
+    data_perm = data.frame(y, x_perm)
+
+    if (type == "survival") {
+      if (is.null(status)) {
+        stop("a status variable named status has to be given for survival analysis")
+      }
+      data$status = status
+      RF = ranger::ranger(data = data,dependent.variable.name = "y",num.trees = num.trees,mtry = mtry, min.node.size = min.node.size,
+                          keep.inbag = TRUE, num.threads = num.threads, status.variable.name = "status", save.memory = save.memory,
+                          case.weights = case.weights, respect.unordered.factors = "partition")
+      data_perm$status = status
+      RF_perm = ranger::ranger(data = data_perm,dependent.variable.name = "y",num.trees = num.trees,mtry = mtry,min.node.size = min.node.size,
+                          keep.inbag = TRUE, num.threads = num.threads, status.variable.name = "status", save.memory = save.memory,
+                          case.weights = case.weights, respect.unordered.factors = "partition")
+    }
+    if (type == "classification" | type == "regression") {
+      RF = ranger::ranger(data = data,dependent.variable.name = "y",num.trees = num.trees,mtry = mtry,min.node.size = min.node.size,
+                          keep.inbag = TRUE, num.threads = num.threads, case.weights = case.weights, respect.unordered.factors = "partition")
+
+      RF_perm = ranger::ranger(data = data_perm,dependent.variable.name = "y",num.trees = num.trees,mtry = mtry,min.node.size = min.node.size,
+                          keep.inbag = TRUE, num.threads = num.threads, case.weights = case.weights, respect.unordered.factors = "partition")
+
+    }
+    trees = getTreeranger(RF = RF,num.trees = num.trees)
+    trees.lay = addLayer(trees)
+    rm(trees)
+    ###AddSurrogates###
+    trees.surr = addSurrogates(RF = RF,trees = trees.lay,s = s,Xdata = data[,-1], num.threads = num.threads)
+    rm(trees.lay)
+    forest = list(trees = trees.surr, allvariables = colnames(data[,-1]))
+
+    # do the same for the permutation forrest
+    trees_perm = getTreeranger(RF = RF_perm,num.trees = num.trees)
+    trees.lay_perm = addLayer(trees_perm)
+    rm(trees_perm)
+    ###AddSurrogates###
+    trees.surr_perm = addSurrogates(RF = RF_perm,trees = trees.lay_perm,s = s,Xdata = data_perm[,-1], num.threads = num.threads)
+    rm(trees.lay_perm)
+    forest_perm = list(trees = trees.surr_perm, allvariables = colnames(data_perm[,-1]))
+  }
+
+  if (!create.forest) {
+    if (is.null(forest)) {
+      stop("set create.forest to TRUE or analyze an existing random forest specified by parameter forest")
+    }
+  }
+
+  if (all(candidates %in% allvariables)) {
+  if (all(variables %in% allvariables)) {
+  # count surrogates
+  s = count.surrogates(forest$trees)
+  rel = meanAdjAgree(forest$trees, variables = allvariables, allvariables = allvariables, candidates = allvariables,
+                     t = t, s$s.a, select.var = FALSE, num.threads = num.threads)
+
+  allvariables_perm = colnames(x_perm)
+
+  rel_perm = meanAdjAgree(forest_perm$trees, variables = allvariables_perm , allvariables = allvariables_perm , candidates = allvariables_perm,
+                          t = t, s$s.a, select.var = FALSE, num.threads = num.threads)
+
+  } else {
+    stop("allvariables do not contain the chosen variables")
+  }
+  } else {
+    stop("allvariables do not contain the candidate variables")
+  }
+
+  adj.agree = rel$surr.res
+  adj.agree.perm = rel_perm$surr.res
+  diag(adj.agree) = diag(adj.agree.perm) = 1
+
+  if(anyNA(adj.agree)) {
+    no.na = length(which(rowSums(is.na(adj.agree)) != 0 ))
+    warning(paste0("Relations for ", no.na, " original variables were not calculated because they were never used as a primary split.
+            Affected relations are set to 0. "))
+    adj.agree[which(is.na(adj.agree))] = 0
+  }
+
+  if(anyNA(adj.agree.perm)) {
+    no.na = length(which(rowSums(is.na(adj.agree.perm)) != 0 ))
+    warning(paste0("Relations for ", no.na, " permuted variables were not calculated because they were not used as a primary split.
+            Affected relations are set to 0. "))
+    adj.agree.perm[which(is.na(adj.agree.perm))] = 0
+  }
+  adj.agree.corr = adj.agree - adj.agree.perm[1:nvar,1:nvar]
+  diag(adj.agree.corr) =  diag(adj.agree) = diag(adj.agree.perm) =  NA
+
+  adj.agree.corr.var = adj.agree.corr[variables,candidates]
+
+  if (select.rel) {
+
+    if (method == "janitza") {
+
+      adj.agree.1 = adj.agree.corr
+      diag(adj.agree.1) = 1
+      ## Mirrored VIMP (# This part is taken from ranger function)
+      m1 = adj.agree.1[adj.agree.1 < 0]
+      m2 = adj.agree.1[adj.agree.1 == 0]
+      null.rel = c(m1, -m1, m2)
+
+      if (length(m1) == 0) {
+        stop("No negative importance values found for selection of related variables. Consider the 'permutation' approach.")
+      }
+      if (length(m1) < 100) {
+        warning("Only few negative importance values found for selection of related variables, inaccurate p-values. Consider the 'permutation' approach.")
+      }
+
+      rel.p = lapply(1:length(variables),p.relation,
+                     null.rel = null.rel,
+                     adj.agree.corr = adj.agree.corr.var,
+                     candidates = candidates,
+                     variables = variables)
+      sel.rel = lapply(1:length(variables),select.related,
+                       rel.p,
+                       p.t)
+
+      names(rel.p) = names(sel.rel) = variables
+
+    }
+
+    if (method == "permutation") {
+
+    null.rel.plus = as.vector(adj.agree.perm)
+    null.rel.plus = null.rel.plus[!is.na(null.rel.plus)]
+
+    m1 = null.rel.plus[null.rel.plus > 0]
+    m2 = null.rel.plus[null.rel.plus == 0]
+    null.rel = c(m1, -m1, m2)
+
+
+    if (length(null.rel) < 100) {
+      warning("Only few null relations used. P-values could be inaccurate.")
+    }
+
+    rel.p = lapply(1:length(variables),p.relation,
+                   null.rel = null.rel,
+                   adj.agree.corr = adj.agree.corr.var,
+                   candidates = candidates,
+                   variables = variables)
+
+    sel.rel = lapply(1:length(variables),select.related,
+                     rel.p,
+                     p.t)
+
+    names(rel.p) = names(sel.rel) = variables
+  }
+
+  if (save.ranger) {
+ return(list(variables = variables, surr.res = adj.agree.corr.var, surr.perm = adj.agree.perm,
+              p.rel = rel.p, var.rel = sel.rel, ranger = list(RF = RF,RF_perm = RF_perm), method = method, p.t = p.t))
+  } else {
+    return(list(variables = variables, surr.res = adj.agree.corr.var, surr.perm = adj.agree.perm, p.rel = rel.p, var.rel = sel.rel, method = method, p.t = p.t))
+  }
+  } else {
+    if (save.ranger) {
+    return(list(variables = variables, surr.res = adj.agree.corr.var, surr.perm = adj.agree.perm, ranger = list(RF = RF,RF_perm = RF_perm)))
+  } else {
+    return(list(variables = variables, surr.res = adj.agree.corr.var, surr.perm = adj.agree.perm))
+  }
+  }
+}
+
+
+
+#' permute.variable
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+permute.variable=function(i=1,x){
+  var.perm = sample(x[,i],nrow(x))
+  return(var.perm)
+}
+
+#' p.relation
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+p.relation = function(l = 1,
+                      null.rel,
+                      adj.agree.corr,
+                      candidates,
+                      variables) {
+  relations = adj.agree.corr[l,]
+  pval <- 1 - ranger:::numSmaller(relations, null.rel) / length(null.rel)
+  names(pval) = candidates
+  pval[variables[l]] = NA
+  return(pval)
+}
+
+#' select.related
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+select.related = function(m=1,
+                          rel.p,
+                          p.t) {
+  rel.var = rel.p[[m]]
+  names(which(rel.var <= p.t))
+}
diff --git a/R/variable_selection_md.R b/R/variable_selection_md.R
new file mode 100644
index 0000000..42ec1fd
--- /dev/null
+++ b/R/variable_selection_md.R
@@ -0,0 +1,73 @@
+#' Variable selection with Minimal Depth (MD)
+#'
+#' This function executes MD applying \link[ranger]{ranger} for random forests generation and is a reimplementation of \link[randomForestSRC]{var.select} from randomForestSRC package.
+#'
+#' @param x data.frame of predictor variables with variables in
+#'   columns and samples in rows. (Note: missing values are not allowed)
+#' @param y vector with values of phenotype variable (Note: will be converted to factor if
+#'   classification mode is used). For survival forests this is the time variable.
+#' @param num.trees Number of trees. Default is 500.
+#' @param mtry Number of variables to possibly split at in each node. Default is no. of variables^(3/4) as recommended by Ishwaran.
+#' @param type Mode of prediction ("regression","classification" or "survival"). Default is regression.
+#' @param min.node.size Minimal node size. Default is 1.
+#' @param num.threads number of threads used for parallel execution. Default is number of CPUs available.
+#' @param status status variable, only applicable to survival data. Use 1 for event and 0 for censoring.
+#' @param save.ranger Set TRUE if ranger object should be saved. Default is that ranger object is not saved (FALSE).
+#' @param create.forest set FALSE if you want to analyze an existing forest. Default is TRUE.
+#' @param forest the random forest that should be analyzed if create.forest is set to FALSE. (x and y still have to be given to obtain variable names)
+#' @param save.memory Use memory saving (but slower) splitting mode. No effect for survival and GWAS data. Warning: This option slows down the tree growing, use only if you encounter memory problems. (This parameter is transfered to ranger)
+#' @param case.weights Weights for sampling of training observations. Observations with larger weights will be selected with higher probability in the bootstrap (or subsampled) samples for the trees.
+#'
+#' @return List with the following components:
+#' \itemize{
+#' \item info: list with results from mindep function:
+#' \itemize{
+#' \item depth: mean minimal depth for each variable.
+#' \item selected: variables has been selected (1) or not (0).
+#' \item threshold: the threshold that is used for the selection. (deviates slightly from the original implimentation)
+#' }
+#' \item var: vector of selected variables.
+#'
+#' \item forest: a list containing:
+#' #'\itemize{
+#' \item trees: list of trees that was created by getTreeranger, addLayer, and addSurrogates functions and that was used for surrogate minimal depth variable importance.
+#' \item allvariables: all variable names of the predictor variables that are present in x.
+#' }
+#'
+#' \item ranger: ranger object
+#'
+#'}
+#' @examples
+#' # read data
+#' data("SMD_example_data")
+#'
+#' \donttest{
+#' # select variables (usually more trees are needed)
+#' set.seed(42)
+#' res = var.select.md(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1], num.trees = 10)
+#' res$var
+#' }
+#'
+#'@references
+##' \itemize{
+##'   \item Ishwaran, H. et al. (2011) Random survival forests for high-dimensional data. Stat Anal Data Min, 4, 115–132. \url{https://onlinelibrary.wiley.com/doi/abs/10.1002/sam.10103}
+##'   \item Ishwaran, H. et al. (2010) High-Dimensional Variable Selection for Survival Data. J. Am. Stat. Assoc., 105, 205–217. \url{http://www.ccs.miami.edu/~hishwaran/papers/IKGML.JASA.2010.pdf}
+##'   }
+#'
+#' @export
+
+var.select.md = function(x = NULL, y = NULL, num.trees = 500, type = "regression", mtry = NULL, min.node.size = 1, num.threads = NULL,
+                         status = NULL, save.ranger = FALSE, create.forest = TRUE, forest = NULL, save.memory = FALSE, case.weights = NULL) {
+
+  results.smd = var.select.smd(x = x, y = y ,num.trees = num.trees,type = type, mtry = mtry,min.node.size = min.node.size, num.threads = num.threads
+                               ,status = status, save.ranger = save.ranger, s = 0, create.forest = create.forest, forest = forest,
+                               save.memory = save.memory, case.weights = case.weights)
+  if (save.ranger) {
+    results = list(info = results.smd$info, var = results.smd$var, forest = results.smd$forest, ranger = results.smd$ranger)
+  }
+  else {
+    results = list(info = results.smd$info, var = results.smd$var, forest = results.smd$forest)
+  }
+  return(results)
+
+}
diff --git a/R/variable_selection_mir.R b/R/variable_selection_mir.R
new file mode 100644
index 0000000..93d65ae
--- /dev/null
+++ b/R/variable_selection_mir.R
@@ -0,0 +1,291 @@
+#' Variable selection with mutual impurity reduction (MIR)
+#'
+#' This function executes MIR applying \link[ranger]{ranger} for random forests generation and actual impurity reduction and a modified version of \link[rpart]{rpart} to find surrogate variables.
+#'
+#' @param x data.frame of predictor variables with variables in
+#'   columns and samples in rows (Note: missing values are not allowed)
+#' @param y vector with values of phenotype variable (Note: will be converted to factor if
+#'   classification mode is used). For survival forests this is the time variable.
+#' @param num.trees number of trees. Default is 500.
+#' @param mtry number of variables to possibly split at in each node. Default is no. of variables^(3/4) ("^3/4") as recommended by (Ishwaran 2011). Also possible is "sqrt" and "0.5" to use the square root or half of the no. of variables.
+#' @param type mode of prediction ("regression", "classification" or "survival"). Default is regression.
+#' @param min.node.size minimal node size. Default is 1.
+#' @param num.threads number of threads used for parallel execution. Default is number of CPUs available.
+#' @param s predefined number of surrogate splits (it may happen that the actual number of surrogate splits differs in individual nodes). Default is 1 \% of no. of variables.
+#' @param p.t.sel p.value threshold for selection of important variables. Default is 0.01.
+#' @param p.t.rel p.value threshold for selection of related variables. Default is 0.01.
+#' @param num.permutations number of permutations to determine p-values. Default is 100. (the relations are determined once based on the permuted X data and the utilized AIR values are permuted again for each permutation )
+#' @param status status variable, only applicable to survival data. Use 1 for event and 0 for censoring.
+#' @param save.ranger set TRUE if ranger object should be saved. Default is that ranger object is not saved (FALSE).
+#' @param save.memory Use memory saving (but slower) splitting mode. No effect for survival and GWAS data. Warning: This option slows down the tree growing, use only if you encounter memory problems. (This parameter is transfered to ranger)
+#' @param select.var set False if only importance should be calculated and no variables should be selected.
+#' @param select.rel set False if only relations should be calculated and no variables should be selected.
+#' @param case.weights Weights for sampling of training observations. Observations with larger weights will be selected with higher probability in the bootstrap (or subsampled) samples for the trees.
+#' @param method.rel Method  to  compute  p-values for selection of related variables with var.relations.corr. Use  "janitza"  for  the  method  by  Janitza  et  al. (2016) or "permutation" to utilize permuted variables.
+#' @param method.sel Method  to  compute  p-values for selection of important variables. Use  "janitza"  for  the  method  by  Janitza  et  al. (2016) (can only be used when corrected variable relations are utilized) or "permutation" to utilize permuted variables.
+#' @param corr.rel set FALSE if non-corrected variable relations should be used for calculation of MIR. In this case the method "janitza" should not be used for selection of important variables
+#' @param t variable to calculate threshold for non-corrected relation analysis. Default is 5.
+#' @param save.rel set FALSE if relation information should not bet saved (default is TRUE)
+#'
+#'
+#' @return list with the following components:
+#' \itemize{
+#' \item info: list with results containing:
+#' \itemize{
+#' \item MIR: the calculated variable importance for each variable based on mutual impurity reduction.
+#' \item pvalue: the obtained p-values for each variable.
+#' \item selected: variables has been selected (1) or not (0).
+#' \item relations: a list containing the results of variable relation analysis.
+#' \item parameters: a list that contains the parameters s, type, mtry, p.t.sel, p.t.rel and method.sel that were used.
+#' }
+#' \item var: vector of selected variables.
+#'
+#'\item ranger: ranger object.
+#'
+#' }
+#' @examples
+#' # read data
+#' data("SMD_example_data")
+#'
+#' \donttest{
+#' # select variables (usually more trees are needed)
+#' set.seed(42)
+#' res = var.select.mir(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1],s = 10, num.trees = 10)
+#' res$var
+#' }
+#'@references
+##' \itemize{
+##'   \item Nembrini, S. et al. (2018) The revival of the Gini importance? Bioinformatics, 34, 3711–3718. \url{https://academic.oup.com/bioinformatics/article/34/21/3711/4994791}
+##'   \item Seifert, S. et al. (2019) Surrogate minimal depth as an importance measure for variables in random forests. Bioinformatics, 35, 3663–3671. \url{https://academic.oup.com/bioinformatics/article/35/19/3663/5368013}
+##'   }
+#' @export
+
+var.select.mir = function(x = NULL, y = NULL, num.trees = 500, type = "regression", s = NULL, mtry = NULL, min.node.size = 1,
+                          num.threads = NULL, status = NULL, save.ranger = FALSE,
+                          save.memory = FALSE, num.permutations = 100, p.t.sel = 0.01, p.t.rel = 0.01, select.var = TRUE, select.rel = FALSE,
+                          case.weights = NULL, corr.rel = TRUE, t = 5, method.rel = "permutation", method.sel = "janitza", save.rel = TRUE) {
+  if(!is.data.frame(x)){
+    stop("x has to be a data frame")
+  }
+    ## check data
+    if (length(y) != nrow(x)) {
+      stop("length of y and number of rows in x are different")
+    }
+
+    if (any(is.na(x))) {
+      stop("missing values are not allowed")
+    }
+
+    allvariables = colnames(x)# extract variables names
+    nvar = length(allvariables)   # count number of variables
+    ## set global parameters
+    if (is.null(mtry)) {
+      mtry = floor((nvar)^(3/4))
+    }
+    if (mtry == "sqrt") {
+      mtry = floor(sqrt(nvar))
+    }
+    if (mtry == "0.5") {
+      mtry = floor(0.5*(nvar))
+    }
+    if (mtry == "^3/4") {
+      mtry = floor((nvar)^(3/4))
+    }
+
+
+    if (is.null(s)) {
+      s = ceiling(nvar*0.01)
+    }
+
+    if (s > (nvar - 2)) {
+      s = nvar - 1
+      warning("s was set to the maximum number that is reasonable (variables-1) ")
+    }
+
+    if (type == "classification") {
+      y = as.factor(y)
+      if (length(levels(y)) > 15) {
+        stop("Too much classes defined, classification might be the wrong choice")
+      }
+    }
+    if (type == "regression" && class(y) == "factor") {
+      stop("use factor variable for y only for classification! ")
+    }
+
+    data = data.frame(y, x)
+
+    if (type == "survival") {
+      if (is.null(status)) {
+        stop("a status variable named status has to be given for survival analysis")
+      }
+      data$status = status
+      RF = ranger::ranger(data = data,dependent.variable.name = "y",num.trees = num.trees,mtry = mtry,min.node.size = min.node.size,
+                          num.threads = num.threads, status.variable.name = "status", save.memory = save.memory,
+                          importance ="impurity_corrected", case.weights = case.weights, respect.unordered.factors = "partition")
+      if (corr.rel) {
+        rel = var.relations.mfi(x = x, y = y, num.trees = num.trees, type = type, s = s, mtry = mtry, min.node.size = min.node.size,
+                                 num.threads = num.threads, status = status, case.weights = case.weights, variables = allvariables,
+                                 candidates = allvariables, p.t = p.t.rel, method = method.rel,select.rel = select.rel)
+      } else {
+        rel = var.relations(x = x, y = y, num.trees = num.trees, type = type, s = s, mtry = mtry, min.node.size = min.node.size,
+                            num.threads = num.threads, status = status, case.weights = case.weights, variables = allvariables,
+                            candidates = allvariables, t = t, select.rel = select.rel)
+      }
+    }
+    if (type == "classification" | type == "regression") {
+      RF = ranger::ranger(data = data,dependent.variable.name = "y",num.trees = num.trees,mtry = mtry,min.node.size = min.node.size,
+                          num.threads = num.threads, importance ="impurity_corrected", case.weights = case.weights, respect.unordered.factors = "partition")
+
+      if (corr.rel) {
+        rel = var.relations.mfi(x = x, y = y, num.trees = num.trees, type = type, s = s, mtry = mtry, min.node.size = min.node.size,
+                                 num.threads = num.threads, case.weights = case.weights, variables = allvariables,
+                                 candidates = allvariables, p.t = p.t.rel, method = method.rel,select.rel = select.rel)
+      } else {
+        rel = var.relations(x = x, y = y, num.trees = num.trees, type = type, s = s, mtry = mtry, min.node.size = min.node.size,
+                            num.threads = num.threads, case.weights = case.weights, variables = allvariables,
+                            candidates = allvariables, t = t,select.rel = select.rel)
+      }
+
+    }
+
+
+
+adj.agree = rel$surr.res
+diag(adj.agree) = 1
+
+  mir = colSums(adj.agree * RF$variable.importance)
+
+  if (select.var) {
+    if (method.sel == "janitza") {
+      if (corr.rel) {
+      ## Mirrored VIMP (# This part is taken from ranger function)
+      m1 = mir[mir< 0]
+      m2 = mir[mir == 0]
+      null.rel = c(m1, -m1, m2)
+
+      pval <- 1 - ranger:::numSmaller(mir, null.rel) / length(null.rel)
+      names(pval) = allvariables
+      selected = as.numeric(pval <= p.t.sel)
+      names(selected) = names(pval)
+
+      if (length(m1) == 0) {
+        stop("No negative importance values found for selection of important variables. Consider the 'permutation' approach.")
+      }
+      if (length(m1) < 100) {
+        warning("Only few negative importance values found for selection of important variables, inaccurate p-values. Consider the 'permutation' approach.")
+      }
+      } else {
+        stop("Janitza approach should only be conducted with corrected relations")
+}
+    }
+
+    if (method.sel == "permutation") {
+
+      if (corr.rel){
+        adj.agree_perm = rel$surr.perm
+      } else {
+      x_perm = sapply(1:ncol(x),permute.variable,x=x)
+      colnames(x_perm) = paste(allvariables,"_perm", sep = "")
+      data_perm = data.frame(y, x_perm)
+      allvariables_perm = colnames(x_perm)
+
+      if (type == "survival") {
+        if (is.null(status)) {
+          stop("a status variables has to be given for survival analysis")
+        }
+
+        if (corr.rel) {
+          rel_perm = var.relations.mfi(x = data.frame(x_perm), y = y, num.trees = num.trees, type = type, s = s, mtry = mtry, min.node.size = min.node.size,
+                                   num.threads = num.threads, status = status, case.weights = case.weights, variables = allvariables,
+                                   candidates = allvariables, p.t = p.t.rel, method = method.rel, select.rel = select.rel)
+        } else {
+          rel_perm = var.relations(x = data.frame(x_perm), y = y, num.trees = num.trees, type = type, s = s, mtry = mtry, min.node.size = min.node.size,
+                              num.threads = num.threads, status = status, case.weights = case.weights, variables = allvariables,
+                              candidates = allvariables, t = t, select.rel = select.rel)
+        }
+
+      }
+      if (type == "classification" | type == "regression") {
+
+        if (corr.rel) {
+          rel_perm = var.relations.mfi(x = data.frame(x_perm), y = y, num.trees = num.trees, type = type, s = s, mtry = mtry, min.node.size = min.node.size,
+                                   num.threads = num.threads, case.weights = case.weights, variables = allvariables_perm,
+                                   candidates = allvariables_perm, p.t = p.t.rel, method = method.rel,select.rel = select.rel)
+        } else {
+          rel_perm = var.relations(x = data.frame(x_perm), y = y, num.trees = num.trees, type = type, s = s, mtry = mtry, min.node.size = min.node.size,
+                              num.threads = num.threads, case.weights = case.weights, variables = allvariables_perm,
+                              candidates = allvariables_perm, t = t,select.rel = select.rel)
+        }
+        }
+
+      adj.agree_perm = rel_perm$surr.res
+      }
+
+      diag(adj.agree_perm) = 0
+
+      null.rel = unlist(lapply(1:num.permutations,calculate.mir.perm,
+                               adj.agree_perm = adj.agree_perm,
+                               air = RF$variable.importance,
+                               allvariables = allvariables))
+
+
+
+      pval <- 1 - ranger:::numSmaller(mir, null.rel) / length(null.rel)
+      names(pval) = allvariables
+      selected = as.numeric(pval <= p.t.sel)
+      names(selected) = names(pval)
+
+      }
+if(save.rel) {
+  info = list(MIR = mir,
+              pvalue = pval,
+              selected = selected,
+              relations = rel,
+              AIR = RF$variable.importance,
+              parameters = list(s = s, type = type, mtry = mtry, p.t.sel = p.t.sel, p.t.rel = p.t.rel, method.sel = method.sel))
+} else {
+  info = list(MIR = mir,
+              pvalue = pval,
+              selected = selected,
+              AIR = RF$variable.importance,
+              parameters = list(s = s, type = type, mtry = mtry, p.t.sel = p.t.sel, p.t.rel = p.t.rel, method.sel = method.sel))
+}
+  } else {
+    if(save.rel) {
+    info = list(MIR = mir,
+                relations = rel,
+                AIR = RF$variable.importance,
+                parameters = list(s = s, type = type, mtry = mtry))
+    } else {
+      info = list(MIR = mir,
+                  AIR = RF$variable.importance,
+                  parameters = list(s = s, type = type, mtry = mtry))
+    }
+  }
+
+  if (save.ranger) {
+    results = list(info = info,
+                   var = names(info$selected[info$selected == 1]),
+                   ranger = RF)
+  } else {
+    if (select.var) {
+    results = list(info = info,
+                   var = names(info$selected[info$selected == 1]))
+  } else {
+    results = list(info = info)
+  }
+  }
+  return(results)
+}
+
+
+#'
+#' This is an internal function
+#'
+#' @keywords internal
+calculate.mir.perm = function(r=1, adj.agree_perm, air, allvariables) {
+mir.perm = colSums(adj.agree_perm * sample(air,length(air)))
+return(mir.perm)
+}
+
+
diff --git a/R/variable_selection_smd.R b/R/variable_selection_smd.R
new file mode 100644
index 0000000..e8c3ad4
--- /dev/null
+++ b/R/variable_selection_smd.R
@@ -0,0 +1,160 @@
+#' Variable selection with Surrogate Minimal Depth (SMD) (MAIN FUNCTION)
+#'
+#' This function executes SMD applying \link[ranger]{ranger} for random forests generation and a modified version of \link[rpart]{rpart} to find surrogate variables.
+#'
+#' @param x data.frame of predictor variables with variables in
+#'   columns and samples in rows (Note: missing values are not allowed)
+#' @param y vector with values of phenotype variable (Note: will be converted to factor if
+#'   classification mode is used). For survival forests this is the time variable.
+#' @param num.trees number of trees. Default is 500.
+#' @param mtry number of variables to possibly split at in each node. Default is no. of variables^(3/4) ("^3/4") as recommended by (Ishwaran 2011). Also possible is "sqrt" and "0.5" to use the square root or half of the no. of variables.
+#' @param type mode of prediction ("regression", "classification" or "survival"). Default is regression.
+#' @param min.node.size minimal node size. Default is 1.
+#' @param num.threads number of threads used for parallel execution. Default is number of CPUs available.
+#' @param s predefined number of surrogate splits (it may happen that the actual number of surrogate splits differs in individual nodes). Default is 1 \% of no. of variables.
+#' @param status status variable, only applicable to survival data. Use 1 for event and 0 for censoring.
+#' @param save.ranger set TRUE if ranger object should be saved. Default is that ranger object is not saved (FALSE).
+#' @param create.forest set FALSE if you want to analyze an existing forest. Default is TRUE.
+#' @param forest the random forest that should be analyzed if create.forest is set to FALSE. (x and y still have to be given to obtain variable names)
+#' @param save.memory Use memory saving (but slower) splitting mode. No effect for survival and GWAS data. Warning: This option slows down the tree growing, use only if you encounter memory problems. (This parameter is transfered to ranger)
+#' @param case.weights Weights for sampling of training observations. Observations with larger weights will be selected with higher probability in the bootstrap (or subsampled) samples for the trees.
+#'
+#' @return list with the following components:
+#' \itemize{
+#' \item info: list with results from surrmindep function:
+#' \itemize{
+#' \item depth: mean surrogate minimal depth for each variable.
+#' \item selected: variables has been selected (1) or not (0).
+#' \item threshold: the threshold that is used for the selection.
+#' }
+#' \item var: vector of selected variables.
+#'
+#'\item s: list with the results of count.surrogate function:
+#'\itemize{
+#' \item s.a: total average number of surrogate variables.
+#' \item s.l: average number of surrogate variables in the respective layers.
+#'}
+#' \item forest: a list containing:
+#' #'\itemize{
+#' \item trees: list of trees that was created by getTreeranger, addLayer, and addSurrogates functions and that was used for surrogate minimal depth variable importance.
+#' \item allvariables: all variable names of the predictor variables that are present in x.
+#' }
+#'\item ranger: ranger object.
+#'
+#' }
+#' @examples
+#' # read data
+#' data("SMD_example_data")
+#'
+#' \donttest{
+#' # select variables (usually more trees are needed)
+#' set.seed(42)
+#' res = var.select.smd(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1],s = 10, num.trees = 10)
+#' res$var
+#' }
+#'@references
+##' \itemize{
+##'   \item Seifert, S. et al. (2019) Surrogate minimal depth as an importance measure for variables in random forests. Bioinformatics, 35, 3663–3671. \url{https://academic.oup.com/bioinformatics/article/35/19/3663/5368013}
+##'   \item Ishwaran, H. et al. (2011) Random survival forests for high-dimensional data. Stat Anal Data Min, 4, 115–132. \url{https://onlinelibrary.wiley.com/doi/abs/10.1002/sam.10103}
+##'   \item Ishwaran, H. et al. (2010) High-Dimensional Variable Selection for Survival Data. J. Am. Stat. Assoc., 105, 205–217. \url{http://www.ccs.miami.edu/~hishwaran/papers/IKGML.JASA.2010.pdf}
+##'   }
+#' @export
+
+var.select.smd = function(x = NULL, y = NULL, num.trees = 500, type = "regression", s = NULL, mtry = NULL, min.node.size = 1,
+                          num.threads = NULL, status = NULL, save.ranger = FALSE, create.forest = TRUE, forest = NULL,
+                          save.memory = FALSE, case.weights = NULL) {
+  if(!is.data.frame(x)){
+    stop("x has to be a data frame")
+  }
+  if (create.forest) {
+  ## check data
+  if (length(y) != nrow(x)) {
+    stop("length of y and number of rows in x are different")
+  }
+
+  if (any(is.na(x))) {
+    stop("missing values are not allowed")
+  }
+
+  variables = colnames(x)    # extract variables names
+  nvar = length(variables)   # count number of variables
+
+  ## set global parameters
+  if (is.null(mtry)) {
+    mtry = floor((nvar)^(3/4))
+  }
+  if (mtry == "sqrt") {
+    mtry = floor(sqrt(nvar))
+  }
+  if (mtry == "0.5") {
+    mtry = floor(0.5*nvar)
+  }
+  if (mtry == "^3/4") {
+    mtry = floor((nvar)^(3/4))
+  }
+
+
+
+  if (is.null(s)) {
+    s = ceiling(nvar*0.01)
+  }
+
+  if (s > (nvar - 1)) {
+    s = nvar - 1
+    warning("s was set to the maximum number that is reasonable (variables-1) ")
+  }
+
+  if (type == "classification") {
+    y = as.factor(y)
+    if (length(levels(y)) > 15) {
+      stop("Too much classes defined, classification might be the wrong choice")
+    }
+  }
+  if (type == "regression" && class(y) == "factor") {
+    stop("use factor variable for y only for classification! ")
+  }
+  data = data.frame(y, x)
+  if (type == "survival") {
+    if (is.null(status)) {
+      stop("a status variable named status has to be given for survival analysis")
+    }
+    data$status = status
+    RF = ranger::ranger(data = data, dependent.variable.name = "y",num.trees = num.trees,mtry = mtry,min.node.size = min.node.size,
+                        keep.inbag = TRUE, num.threads = num.threads, status.variable.name = "status", save.memory = save.memory,
+                        case.weights = case.weights, respect.unordered.factors = "partition")
+  }
+  if (type == "classification" | type == "regression") {
+  RF = ranger::ranger(data = data,dependent.variable.name = "y",num.trees = num.trees,mtry = mtry,min.node.size = min.node.size,
+                      keep.inbag = TRUE, num.threads = num.threads, case.weights = case.weights, respect.unordered.factors = "partition")
+  }
+  trees = getTreeranger(RF = RF,num.trees = num.trees)
+  trees.lay = addLayer(trees)
+  rm(trees)
+  ###AddSurrogates###
+  trees.surr = addSurrogates(RF = RF,trees = trees.lay,s = s,Xdata = x, num.threads = num.threads)
+  rm(trees.lay)
+  # count surrogates
+  s = count.surrogates(trees.surr)
+  surrminimaldepth.s = surrmindep(forest = list(trees = trees.surr, allvariables = variables), s.l = s$s.l)
+  }
+  if (!create.forest) {
+  if (is.null(forest)) {
+    stop("set create.forest to TRUE or analyze an existing random forest specified by parameter forest")
+  }
+    allvariables = forest[["allvariables"]]
+    trees = forest[["trees"]]
+    s = count.surrogates(trees)
+    surrminimaldepth.s = surrmindep(forest, s.l = s$s.l)
+    trees.surr = forest[["trees"]]
+    variables = forest[["variables"]]
+  }
+  if (save.ranger) {
+  results = list(info = surrminimaldepth.s,var = names(surrminimaldepth.s$selected[surrminimaldepth.s$selected == 1]),s = s,
+                 forest = list(trees = trees.surr, allvariables = variables), ranger = RF)
+  }
+  else {
+    results = list(info = surrminimaldepth.s,var = names(surrminimaldepth.s$selected[surrminimaldepth.s$selected == 1]),s = s,
+                   forest = list(trees = trees.surr, allvariables = variables))
+  }
+  return(results)
+}
diff --git a/README.md b/README.md
index 76accea..557a10d 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,191 @@
-rfsur
+# RFSurrogates
+In this R package, several functions are provided for applying approaches based on random forest. Minimal depth (MD), Surrogate minimal depth (SMD) and mutual impurity reduction (MIR), which is a corrected approach of SMD, can be applied to assess the importance of variables and to select important variables. In addition, the parameters mean adjusted agreement and mutual forest impact (MFI), a corrected approach of the previous, can be applied to investigate variable relations based on surrogate variables. 
+
+Please cite the following manuscripts if you use the package:  
+
+[1] S. Seifert, S. Gundlach, S. Szymczak, Surrogate minimal depth as an importance measure for variables in random forests, Bioinformatics 2019, 35, 3663-3671.
+
+[2] publication about MFI/MIR under preparation
+
+# Install
+```
+library(devtools)
+install_github("StephanSeifert/RFSurrogates")
+```
+
+# Example data
+The package contains an example data set which consists of a single replicate of the simulation study 1 in our manuscript. Please refer to the paper and the documentation of the SMD_example_data for further details on the simulation scenario.
+
+# Usage
+First the package and the example data are loaded:
+```
+library(RFSurrogates
+data("SMD_example_data")
+dim(SMD_example_data)
+[1] 100 201
+
+head(SMD_example_data[, 1:5])
+           y          X1         X2         X3           X4
+1  1.8222421 -0.02768266 -1.1019154  2.2659401  0.008021516
+2 -1.0401813  0.73258486 -0.4107975  0.7587792 -0.718752746
+3  2.7139607 -0.05399936  1.1851261  0.9743160 -2.563176970
+4 -0.7081372 -0.84838121 -0.8975802  0.5247899  1.180683275
+5 -1.0264429 -0.42219003  0.5439467 -0.1626504  0.682333020
+6  3.1871209  0.91722598  0.1974106  0.9571554  0.351634641
+
+```
+The data set has 100 observations in the rows and the columns contain the continuous outcome variable y and 200 continuous predictor variables in the columns.
+
+## Minimal depth
+
+First, we perform variable selection based on minimal depth using 1000 trees in the random forest. To make the analysis reproducible we set the seed first.
+```
+set.seed(42)
+res.md = var.select.md(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1], ntree=1000)
+res.md$var
+[1] "X2"     "X3"     "X4"     "X5"     "X6"     "cp1_8"  "cp2_6"  "cp2_7"  "cp3_4"  "cp3_6"  "cp8_10" "cgn_68" "cgn_72" "cgn_81"
+```
+
+The selected variables are stored in res.md$var. In this analysis the relevant basic variables X2 to X6, as well as the relevant variables cp2_6, cp2_7, cp3_4, and cp3_6, and the non-relevant variables cp8_10, cgn_68, cgn_72, and cgn_81 are selected.
+
+The MD values for each predictor variable and the threshold to select variables can be extracted as follows:
+```
+md = res.md$info$depth
+head(md)
+   X1    X2    X3    X4    X5    X6 
+9.823 7.848 6.164 6.662 6.442 6.390 
+
+res.md$info$threshold
+[1] 9.23097
+```
+We can see that variables X2, …, X6 have MD values smaller than the threshold in contrast to X1.
+
+## Surrogate Minimal depth (SMD)
+
+Now we would like to analyze the example data with surrogate minimal depth which works similarly. However, we need to specify an additional parameter s, i.e. the number of surrogate variables that should be considered. In this analysis we use s = 10. Based on our simulation studies we recommend to set this parameter to approximately 1% of the predictor variables in larger datasets. 
+
+Variable selection with var.select.smd is conducted:
+```
+set.seed(42)
+res.smd = var.select.smd(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1], s = 10, ntree = 1000)
+res.smd$var
+ [1] "X1"     "X2"     "X3"     "X4"     "X5"     "X6"     "cp1_1"  "cp1_2"  "cp1_3"  "cp1_4"  "cp1_5"  "cp1_6"  "cp1_7"  "cp1_8"  "cp1_9" 
+[16] "cp1_10" "cp2_4"  "cp2_6" 
+```
+
+
+The selected variables are stored in res.smd$var. In this analysis the relevant basic variables X1 to X6, as well as the relevant variables cp1_1 to cp1_10, cp2_4, and cp2_6 are selected. Compared to MD more of the relevant variables and none of the non-relevant variables are selected.
+
+
+The SMD values for each predictor variable and the threshold to select variables can be extracted as follows:
+
+```
+smd = res.smd$info$depth
+head(smd)
+  X1    X2    X3    X4    X5    X6 
+2.344 2.287 2.095 2.576 2.509 2.276 
+
+res.smd$info$threshold
+[1] 2.690082
+```
+
+We can see that variables X1, …, X6 have SMD values smaller than the threshold.
+
+
+
+## Variable relations based on the mean adjusted agreement of surrogate variables
+
+Now we want to investigate the relations of variables. We would like to identify which of the first 100 predictor variables are related to X1 and X7. We simulated 10 correlated predictor variables for each of these two basic variables.
+One possibility to investigate variable relations is to use the results from var.select.smd. Hence, first SMD is conducted like in the previous section:
+
+```
+res.smd = var.select.smd(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1], s = 10, ntree = 1000)
+```
+Subsequently, variable relations are analyzed with var.relations. The parameter t can be adapted to either focus on strongly related variables only (high numbers) or to include also moderately related variables (low numbers):
+
+```
+candidates = colnames(SMD_example_data )[2:101]
+rel = var.relations(forest = res.smd$forest, variables = c("X1","X7"), candidates = candidates, t = 5)
+rel$var
+$X1
+ [1] "cp1_1"  "cp1_2"  "cp1_3"  "cp1_4"  "cp1_5"  "cp1_6"  "cp1_7"  "cp1_8"  "cp1_9"  "cp1_10"
+
+$X7
+ [1] "cp7_1"  "cp7_2"  "cp7_3"  "cp7_4"  "cp7_5"  "cp7_6"  "cp7_7"  "cp7_8"  "cp7_9"  "cp7_10"
+  
+```
+
+All of the variables that are correlated to X1 are correctly identified as related to X1 and all of the variables that are correlated to X7 are correcly identified as related to X7. 
+
+
+## Variable relations based on mutual forest impact (MFI)
+
+MFI is a corrected relation parameter calculated by the mean adjusted agreement of the variables and permuted versions of them. Related variables are selected by p-values obtained from a null distribution either determined by negative relation scores (based on the Janitza approach) or by permuted relations. 
+We use the default parameters for the selection here, which is a p-values threshold of 0.01 and the Janitza approach. 
+
+```
+set.seed(42)
+rel.mfi = var.relations.mfi(x = x, y = y, s = 10, ntree = 1000, variables = c("X1","X7"), candidates = colnames(x)[1:100], p.t = 0.01, method = "janitza" )
+rel.mfi$var.rel
+$X1
+ [1] "cp1_1"  "cp1_2"  "cp1_3"  "cp1_4"  "cp1_5"  "cp1_6"  "cp1_7"  "cp1_8"  "cp1_9"  "cp1_10"
+
+$X7
+ [1] "cp7_1"  "cp7_2"  "cp7_3"  "cp7_4"  "cp7_5"  "cp7_6"  "cp7_7"  "cp7_8"  "cp7_9"  "cp7_10"
+```
+
+Also by MFI, all of the variables that are correlated to X1 are correctly identified as related to X1 and all of the variables that are correlated to X7 are correcly identified as related to X7. 
+Also the matrix of determined relation (surr.res), permuted relations (surr.perm) and determined p-values (p.rel) can be extracted as followes: 
+
+```
+MFI = rel.mfi$surr.res
+surr.perm = rel.mfi$surr.perm
+p.rel = rel.mfi$p.rel
+```
+
+## Mutual impurity reduction (MIR)
+
+Now we would like to analyze the example data with MIR, which determines the variable importance by the actual impurity reduction combined with the relations determined by MFI. Different to MD and SMD, this approach calculates p-values for the selection of important variables. For this, the null distribution is obtained in a similar way as for MFI, either by negative importance scores called the Janitza approach or by permutation. Since this example dataset is comparatively small, we use the permutation approach. As a threshold for selection a value of 0.01 is applied (p.t.sel = 0.01).
+
+```
+set.seed(42)
+res.mir = var.select.mir(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1], s = 10, ntree = 1000, method.sel = "permutation", p.t.sel = 0.01)
+res.mir$var
+ [1] "X1"     "X2"     "X3"     "X4"     "X5"     "X6"     "cp1_1"  "cp1_2"  "cp1_3"  "cp1_4"  "cp1_5"  "cp1_6" 
+[13] "cp1_7"  "cp1_8"  "cp1_9"  "cp1_10" "cp2_1"  "cp2_3"  "cp2_4"  "cp2_6"  "cp2_7"  "cp2_10" "cp3_1"  "cp3_4" 
+[25] "cp3_5"  "cgn_72" "cgn_81"
+```
+The selected variables are stored in res.mir$var. Here, the relevant variables cp1_1 to cp1_10, cp2_1, cp2_3, cp2_4, cp2_6, cp2_7, cp2_10, cp3_1, cp3_4, cp3_5, as well as the non-relevant variables cgn_72 and cgn_81 are selected. 
+
+The MIR values and p-values can be extracted as follows:
+
+```
+mir = res.mir$info$MIR
+head(mir)
+      X1       X2       X3       X4       X5       X6 
+10.68243 15.95674 27.09036 20.50233 23.16293 21.15731 
+
+pvalues = res.mir$info$pvalue
+head(pvalues)
+X1 X2 X3 X4 X5 X6 
+ 0  0  0  0  0  0 
+ 
+```
+
+ We can see that variables X1, …, X6 have a p-value of 0 and are selected.
+ 
+ Since this approach is based on the actual impurity reduction combined with the relations determined by MFI, both of these can also be extracted from the results:
+ 
+ 
+```
+air = res.mir$info$AIR
+head(air)
+       X1        X2        X3        X4        X5        X6 
+ 1.072849 13.133904 26.444900 19.155187 22.718355 20.782305 
+ 
+ res.mfi = res.mir$info$relations
+
+```
+res.mfi contains the results of var.relations.mfi conducted in MIR. 
+ 
+ 
diff --git a/SurrogateMinimalDepth.Rproj b/SurrogateMinimalDepth.Rproj
new file mode 100644
index 0000000..398aa14
--- /dev/null
+++ b/SurrogateMinimalDepth.Rproj
@@ -0,0 +1,20 @@
+Version: 1.0
+
+RestoreWorkspace: Default
+SaveWorkspace: Default
+AlwaysSaveHistory: Default
+
+EnableCodeIndexing: Yes
+UseSpacesForTab: Yes
+NumSpacesForTab: 2
+Encoding: UTF-8
+
+RnwWeave: knitr
+LaTeX: pdfLaTeX
+
+AutoAppendNewline: Yes
+StripTrailingWhitespace: Yes
+
+BuildType: Package
+PackageUseDevtools: Yes
+PackageInstallArgs: --no-multiarch --with-keep.source
diff --git a/Version_info.txt b/Version_info.txt
new file mode 100644
index 0000000..953d35e
--- /dev/null
+++ b/Version_info.txt
@@ -0,0 +1,43 @@
+Version 0.3.1 - changed the name of the parameter ntree to num.trees
+
+
+Version 0.3.0 - round adjusted agreement and mean adjusted agreement to 2 digits
+              - speed up meanAdjAgree function 
+              - changed that relations to variables not used as primary plit are set as NA (before it was 0)
+              - renamed var.relations.corr to var.relations.mfi (as named in the paper)
+              - bugfix for MFI and MIR
+              - permutation approach to determine p-values was optimized for the selection of important and related variables
+              - default approach for p-value calculation was set to "permutation"
+
+Version 0.2.1 - included possibility to analyze categorical variables 
+
+Version 0.2.0 - added function var.sel.mir to select important variables based on mutual impurity reduction
+              - added function var.relations.corr to calculate unbiased relations
+              - added multicore calculation of variable relations 
+              - expand function inputs for var.relations 
+              - included possibility to only calculate relations and not select related variables for var.relations function 
+              - included the possibility to set case weights
+
+Version 0.1.10 - fixed bug not including first and last surrogate
+	       - added random selection of surrogates when adj_agree are the same
+	       - fixed bug in var.relation example
+	       - added build.clusters function to obtain variable groups  
+
+Version 0.1.9	- some specifics to set s in var.select.smd were adapted
+		- added save.memory parameter (to build the forest with ranger) to 	var.select.smd and var.select.md  
+
+Version 0.1.8	- MD now executes var.select.smd with s = 0 instead of using a separate function
+		- The function reduce.surrogates is included. 
+		- Included parameters create.forest and forest to use var.select.smd for 			  existing forests (e.g. created by reduce.surrogates)
+		- Changed the value "trees" to "forest" containing trees and variable names 
+		- The C-code is updated to enable multicore analysis
+
+Version 0.1.7	- Included parameter save.ranger in var.select.md and var.select.smd to save 			  ranger object
+
+Version 0.1.6	- Adapted threshold for low depth trees in var.select.smd
+
+Version 0.1.5 	- Added s as value in var.select.smd 
+		- Implemented survival function for var.select.smd and var.select.md
+
+Version 0.1.4 	- All errors and comments from coauthors implemented: first version uploaded on 		  github
+
diff --git a/data/SMD_example_data.RData b/data/SMD_example_data.RData
new file mode 100644
index 0000000000000000000000000000000000000000..9d00d0fb02b60d93a31861cf8c8eeb949e36fde4
GIT binary patch
literal 155664
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%0AKeJjU)*Sn5`uOHrnG+w^
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
DKU%ko

literal 0
HcmV?d00001

diff --git a/man/SMD_example_data.Rd b/man/SMD_example_data.Rd
new file mode 100644
index 0000000..f982040
--- /dev/null
+++ b/man/SMD_example_data.Rd
@@ -0,0 +1,23 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/SMD_example_data.R
+\docType{data}
+\name{SMD_example_data}
+\alias{SMD_example_data}
+\title{Example data set for the package SurrogateMinimalDepth}
+\format{
+A matrix with 100 rows and 1001 columns
+}
+\usage{
+data(SMD_example_data)
+}
+\description{
+A dataset containing 100 individuals (rows), 1 dependent variable (first column, y), and 200 additional variables (columns 2 to 201):
+For the simulation of the 200 additional variables nine variables X1,…,X9 called basic variables were simulated. X1 to X6 are causal
+with constant effect sizes of 1 and X7 to X9 are noncausal with effect size of 0. The outcome y is a linear combination of the causal
+predictor variables and a normally distributed error term. All basic variables were sampled from a normal distribution
+(N(0,1)) just like the noise (N(0,0.2)). For each of the six basic variables X1, X2, X3, X7, X8, and X9 ten variables
+with predefined correlations of 0.9 for X1 and X7, 0.6 for X2 and X8, and 0.3 for X3 and X9 were obtained by \link[WGCNA]{simulateModule} function of
+the R package WGCNA. The ten variables of each basis variable are labeled: Cp_basicvariable_number. Additional non-correlated and
+independent predictor variables (cgn) were simulated using the standard normal distribution to reach a total number of 200 variables.
+}
+\keyword{datasets}
diff --git a/man/SurrTree.Rd b/man/SurrTree.Rd
new file mode 100644
index 0000000..33b8dfb
--- /dev/null
+++ b/man/SurrTree.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/addSurrogates.R
+\name{SurrTree}
+\alias{SurrTree}
+\title{SurrTree}
+\usage{
+SurrTree(j, wt, Xdata, controls, column.names, tree, maxsurr, ncat)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/addLayer.Rd b/man/addLayer.Rd
new file mode 100644
index 0000000..2ff2043
--- /dev/null
+++ b/man/addLayer.Rd
@@ -0,0 +1,26 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/addLayer.R
+\name{addLayer}
+\alias{addLayer}
+\title{Add layer information to a forest that was created by getTreeranger}
+\usage{
+addLayer(trees)
+}
+\arguments{
+\item{trees}{list of trees created by getTreeranger}
+}
+\value{
+a list with trees. Each row of the list elements corresponds to a node of the respective tree and the columns correspond to:
+\itemize{
+\item nodeID: ID of the respective node (important for left and right daughters in the next columns)
+\item leftdaughter: ID of the left daughter of this node
+\item rightdaughter: ID of the right daughter of this node
+\item splitvariable: ID of the split variable
+\item splitpoint: splitpoint of the split variable
+\item status: "0" for terminal and "1" for non-terminal
+\item layer: layer information (0 means root node, 1 means 1 layer below root, etc)
+}
+}
+\description{
+This functions adds the layer information to each node in a list with trees that was obtained by getTreeranger.
+}
diff --git a/man/addSurrogates.Rd b/man/addSurrogates.Rd
new file mode 100644
index 0000000..95af49c
--- /dev/null
+++ b/man/addSurrogates.Rd
@@ -0,0 +1,36 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/addSurrogates.R
+\name{addSurrogates}
+\alias{addSurrogates}
+\title{Add surrogate information that was created by getTreeranger}
+\usage{
+addSurrogates(RF, trees, s, Xdata, num.threads)
+}
+\arguments{
+\item{RF}{random forest object created by ranger (with keep.inbag=TRUE).}
+
+\item{trees}{list of trees created by getTreeranger.}
+
+\item{s}{Predefined number of surrogate splits (it may happen that the actual number of surrogate splits differes in individual nodes). Default is 1 \% of no. of variables.}
+
+\item{Xdata}{data without the dependent variable.}
+
+\item{num.threads}{number of threads used for parallel execution. Default is number of CPUs available.}
+}
+\value{
+a list with trees containing of lists of nodes with the elements:
+\itemize{
+\item nodeID: ID of the respective node (important for left and right daughters in the next columns)
+\item leftdaughter: ID of the left daughter of this node
+\item rightdaughter: ID of the right daughter of this node
+\item splitvariable: ID of the split variable
+\item splitpoint: splitpoint of the split variable
+\item status: "0" for terminal and "1" for non-terminal
+\item layer: layer information (0 means root node, 1 means 1 layer below root, etc)
+\item surrogate_i: numbered surrogate variables (number depending on s)
+\item adj_i: adjusted agreement of variable i
+}
+}
+\description{
+This function adds surrogate variables and adjusted agreement values to a forest that was created by getTreeranger.
+}
diff --git a/man/adj.mean.Rd b/man/adj.mean.Rd
new file mode 100644
index 0000000..03aa379
--- /dev/null
+++ b/man/adj.mean.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/meanAdjAgree.R
+\name{adj.mean}
+\alias{adj.mean}
+\title{adj.mean}
+\usage{
+adj.mean(trees)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/adj.mean.trees.Rd b/man/adj.mean.trees.Rd
new file mode 100644
index 0000000..7a16134
--- /dev/null
+++ b/man/adj.mean.trees.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/meanAdjAgree.R
+\name{adj.mean.trees}
+\alias{adj.mean.trees}
+\title{adj.mean.trees}
+\usage{
+adj.mean.trees(t, trees)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/adj.node.Rd b/man/adj.node.Rd
new file mode 100644
index 0000000..b750c54
--- /dev/null
+++ b/man/adj.node.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/meanAdjAgree.R
+\name{adj.node}
+\alias{adj.node}
+\title{adj.node}
+\usage{
+adj.node(i, allvar.num, relevant.nodes, index.candidates)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/build.clusters.Rd b/man/build.clusters.Rd
new file mode 100644
index 0000000..965c0c1
--- /dev/null
+++ b/man/build.clusters.Rd
@@ -0,0 +1,42 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/build_clusters.R
+\name{build.clusters}
+\alias{build.clusters}
+\title{Apply cluster analysis to build variable groups}
+\usage{
+build.clusters(rel, hcmethod = "ward.D")
+}
+\arguments{
+\item{rel}{a list containing variables, surr.res, threshold, and var. This is the output of \link[SurrogateMinimalDepth]{var.relations} function.}
+
+\item{hcmethod}{the hierarchical clustering method that is used. (see \link[linkcomm]{getLinkCommunities})}
+}
+\value{
+a data frame containing the variable names and their associated clusters.
+}
+\description{
+This function generates variables groups of relation information that was obtained by \link[SurrogateMinimalDepth]{var.relations} function applying
+\link[linkcomm]{getLinkCommunities}.
+}
+\examples{
+# read data
+data("SMD_example_data")
+
+\donttest{
+ # get trees and variable names
+ x = SMD_example_data[,2:ncol(SMD_example_data)]
+ y = SMD_example_data[,1]
+ allvariables = colnames(x)# extract variables names
+ nvar = length(allvariables)   # count number of variables
+ set.seed(42)
+ RF = ranger::ranger(data = SMD_example_data, dependent.variable.name = "y", num.trees = 10, keep.inbag = TRUE,mtry = floor(nvar^(3/4)), min.node.size = 1)
+ trees = getTreeranger(RF = RF, num.trees = 10)
+ trees.lay = addLayer(trees)
+ trees.surr = addSurrogates(RF = RF, trees = trees.lay, s = 10, Xdata = x, num.threads = NULL)
+
+ # investigate variable relations
+ rel=var.relations(forest = list(trees = trees.surr, allvariables = allvariables), variables = allvariables, candidates = allvariables, t = 10)
+ groups = build.clusters(rel)
+}
+
+}
diff --git a/man/calculate.mir.perm.Rd b/man/calculate.mir.perm.Rd
new file mode 100644
index 0000000..8001ca0
--- /dev/null
+++ b/man/calculate.mir.perm.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/variable_selection_mir.R
+\name{calculate.mir.perm}
+\alias{calculate.mir.perm}
+\title{This is an internal function}
+\usage{
+calculate.mir.perm(r = 1, adj.agree_perm, air, allvariables)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/count.surrogates.Rd b/man/count.surrogates.Rd
new file mode 100644
index 0000000..50d91b0
--- /dev/null
+++ b/man/count.surrogates.Rd
@@ -0,0 +1,22 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/count.surrogates.R
+\name{count.surrogates}
+\alias{count.surrogates}
+\title{Count surrogate variables}
+\usage{
+count.surrogates(trees)
+}
+\arguments{
+\item{trees}{list of trees that was generated by getTreeranger function and layers, surrogate variables, and adjusted agreement values were added by addLayer and getSurrogates functions}
+}
+\value{
+List with the following components:
+\itemize{
+\item s.a: total average number of surrogate variables
+\item s.l: average number of surrogate variables in the respective layers
+}
+}
+\description{
+This function counts surrogate variables and returns the total average number of surrogate variables and the average number of surrogate variables of the respective layers.
+This is necessary since the actual number of surrogate splits can be lower than the predefined number (when less surrogate splits outperform the majority rule).
+}
diff --git a/man/getSurrogate.Rd b/man/getSurrogate.Rd
new file mode 100644
index 0000000..83f310f
--- /dev/null
+++ b/man/getSurrogate.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/addSurrogates.R
+\name{getSurrogate}
+\alias{getSurrogate}
+\title{getSurrogate}
+\usage{
+getSurrogate(surr.par, k = 1, maxsurr)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/getTreeranger.Rd b/man/getTreeranger.Rd
new file mode 100644
index 0000000..bb103e8
--- /dev/null
+++ b/man/getTreeranger.Rd
@@ -0,0 +1,27 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/getTreeranger.R
+\name{getTreeranger}
+\alias{getTreeranger}
+\title{Get a list of structured trees for ranger}
+\usage{
+getTreeranger(RF, num.trees)
+}
+\arguments{
+\item{RF}{random forest object created by ranger (with keep.inbag=TRUE)}
+
+\item{num.trees}{number of trees}
+}
+\value{
+a list with trees. Each row of the list elements corresponds to a node of the respective tree and the columns correspond to:
+\itemize{
+\item nodeID: ID of the respective node (important for left and right daughters in the next columns)
+\item leftdaughter: ID of the left daughter of this node
+\item rightdaughter: ID of the right daughter of this node
+\item splitvariable: ID of the split variable
+\item splitpoint: splitpoint of the split variable (for categorical variables this is a comma separated lists of values, representing the factor levels (in the original order) going to the right)
+\item status: "0" for terminal and "1" for non-terminal
+}
+}
+\description{
+This functions creates a list of trees for ranger objects similar as getTree function does for random Forest objects.
+}
diff --git a/man/getsingletree.Rd b/man/getsingletree.Rd
new file mode 100644
index 0000000..1cf262f
--- /dev/null
+++ b/man/getsingletree.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/getTreeranger.R
+\name{getsingletree}
+\alias{getsingletree}
+\title{getsingletree}
+\usage{
+getsingletree(RF, k = 1)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/mean.adj.node.Rd b/man/mean.adj.node.Rd
new file mode 100644
index 0000000..7f2759f
--- /dev/null
+++ b/man/mean.adj.node.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/meanAdjAgree.R
+\name{mean.adj.node}
+\alias{mean.adj.node}
+\title{adj.node}
+\usage{
+\method{mean}{adj.node}(m, surr.nonterminal)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/mean.index.Rd b/man/mean.index.Rd
new file mode 100644
index 0000000..098eaf1
--- /dev/null
+++ b/man/mean.index.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/meanAdjAgree.R
+\name{mean.index}
+\alias{mean.index}
+\title{mean.index}
+\usage{
+\method{mean}{index}(i, list.res, index.variables)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/meanAdjAgree.Rd b/man/meanAdjAgree.Rd
new file mode 100644
index 0000000..86fea4d
--- /dev/null
+++ b/man/meanAdjAgree.Rd
@@ -0,0 +1,46 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/meanAdjAgree.R
+\name{meanAdjAgree}
+\alias{meanAdjAgree}
+\title{Calculate mean adjusted agreement to investigate variables relations}
+\usage{
+meanAdjAgree(
+  trees,
+  variables,
+  allvariables,
+  candidates,
+  t,
+  s.a,
+  select.var,
+  num.threads = NULL
+)
+}
+\arguments{
+\item{trees}{list of trees created by getTreeranger, addLayer and addSurrogate.}
+
+\item{variables}{vector of variable names.}
+
+\item{allvariables}{vector of all variable names (strings)}
+
+\item{candidates}{vector of variable names (strings) that are candidates to be related to the variables (has to be contained in allvariables)}
+
+\item{t}{variable to calculate threshold. Default is 3.}
+
+\item{s.a}{average number of surrogate variables (ideally calculated by count.surrogates function).}
+
+\item{select.var}{set False if only relations should be calculated and no related variables should be selected.}
+
+\item{num.threads}{number of threads used for parallel execution. Default is number of CPUs available.}
+}
+\value{
+a list containing:
+\itemize{
+\item variables: the variables to which relations are investigated
+\item surr.res: matrix with mean adjusted agreement values and variables investigated in rows and candidate variables in columns
+\item threshold: the threshold used to create surr.var from surr.res
+\item surr.var: binary matrix showing if the variables are related (1) or non-related (0) with variables in rows and candidates in columns.
+}
+}
+\description{
+This is the main function of var.relations function.
+}
diff --git a/man/mindep.Rd b/man/mindep.Rd
new file mode 100644
index 0000000..44f05d5
--- /dev/null
+++ b/man/mindep.Rd
@@ -0,0 +1,24 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/mindep.R
+\name{mindep}
+\alias{mindep}
+\title{Execute minimal depth variable importance}
+\usage{
+mindep(variables, trees)
+}
+\arguments{
+\item{variables}{vector of variable names}
+
+\item{trees}{list of trees that was generated by getTreeranger and layers functions}
+}
+\value{
+List with the following components:
+\itemize{
+\item depth: mean minimal depth for each variable
+\item selected: variables has been selected (1) or not (0),
+\item threshold: the threshold that is used for the selection
+}
+}
+\description{
+This function determines the minimal depth of variables from a forest that is created by getTreeranger, and addLayer functions.
+}
diff --git a/man/name.adj.Rd b/man/name.adj.Rd
new file mode 100644
index 0000000..11c5628
--- /dev/null
+++ b/man/name.adj.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/addSurrogates.R
+\name{name.adj}
+\alias{name.adj}
+\title{name.adj}
+\usage{
+name.adj(i, adj.names)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/name.surr.Rd b/man/name.surr.Rd
new file mode 100644
index 0000000..c7295bd
--- /dev/null
+++ b/man/name.surr.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/addSurrogates.R
+\name{name.surr}
+\alias{name.surr}
+\title{name.surr}
+\usage{
+name.surr(i, surrogate.names)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/p.relation.Rd b/man/p.relation.Rd
new file mode 100644
index 0000000..e123f01
--- /dev/null
+++ b/man/p.relation.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/var.relations.mfi.R
+\name{p.relation}
+\alias{p.relation}
+\title{p.relation}
+\usage{
+p.relation(l = 1, null.rel, adj.agree.corr, candidates, variables)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/permute.variable.Rd b/man/permute.variable.Rd
new file mode 100644
index 0000000..427d6b9
--- /dev/null
+++ b/man/permute.variable.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/var.relations.mfi.R
+\name{permute.variable}
+\alias{permute.variable}
+\title{permute.variable}
+\usage{
+permute.variable(i = 1, x)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/reduce.surrogates.Rd b/man/reduce.surrogates.Rd
new file mode 100644
index 0000000..b21ab58
--- /dev/null
+++ b/man/reduce.surrogates.Rd
@@ -0,0 +1,39 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/reduce.surrogates.R
+\name{reduce.surrogates}
+\alias{reduce.surrogates}
+\title{Reduce surrogate variables in a random forest.}
+\usage{
+reduce.surrogates(forest, s = 10)
+}
+\arguments{
+\item{forest}{a list containing allvariables and trees. Allvariables is a vector of all variable names in the original data set (strings). Trees is a list of trees that was generated by getTreeranger, addLayer, and getSurrogates functions.}
+
+\item{s}{number of surrogate variables in the new forest (have to be less than in the RF in trees)}
+}
+\value{
+forest with s surrogate variables.
+}
+\description{
+This function can be applied to reduce the surrogate variables in a forest that is created by getTreeranger, addLayer
+and getSurrogates functions. Hence, it can be applied to the forests that were used for surrogate minimal depth variable importance.
+}
+\examples{
+# read data
+data("SMD_example_data")
+\donttest{
+###### use result of SMD variable importance and reduce surrogate variables to 10
+# select variables with smd variable importance (usually more trees are needed)
+set.seed(42)
+res = var.select.smd(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1], s = 100, num.trees = 10)
+forest.new = reduce.surrogates(forest = res$forest, s = 10)
+
+# execute SMD on tree with reduced number of surrogates
+res.new = var.select.smd(create.forest = FALSE, forest = forest.new)
+res.new$var
+
+#' # investigate variable relations
+rel = var.relations(forest = forest.new, variables=c("X1","X7"), candidates = res$forest[["allvariables"]][1:100], t = 5)
+rel$var
+}
+}
diff --git a/man/scount.Rd b/man/scount.Rd
new file mode 100644
index 0000000..40760d3
--- /dev/null
+++ b/man/scount.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/count.surrogates.R
+\name{scount}
+\alias{scount}
+\title{scount}
+\usage{
+scount(i = 1, trees)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/select.related.Rd b/man/select.related.Rd
new file mode 100644
index 0000000..a1b3151
--- /dev/null
+++ b/man/select.related.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/var.relations.mfi.R
+\name{select.related}
+\alias{select.related}
+\title{select.related}
+\usage{
+select.related(m = 1, rel.p, p.t)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/surr.tree.Rd b/man/surr.tree.Rd
new file mode 100644
index 0000000..142ae92
--- /dev/null
+++ b/man/surr.tree.Rd
@@ -0,0 +1,12 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/meanAdjAgree.R
+\name{surr.tree}
+\alias{surr.tree}
+\title{surr.tree}
+\usage{
+surr.tree(tree, variables, index.variables, allvariables, index.candidates)
+}
+\description{
+This is an internal function
+}
+\keyword{internal}
diff --git a/man/surrmindep.Rd b/man/surrmindep.Rd
new file mode 100644
index 0000000..27e6b06
--- /dev/null
+++ b/man/surrmindep.Rd
@@ -0,0 +1,24 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/surrmindep.R
+\name{surrmindep}
+\alias{surrmindep}
+\title{Execute surrogate minimal depth variable importance}
+\usage{
+surrmindep(forest, s.l)
+}
+\arguments{
+\item{forest}{a list containing allvariables and trees. Allvariables is a vector of all variable names in the original data set (strings). Trees is a list of trees that was generated by getTreeranger, addLayer, and getSurrogates functions.}
+
+\item{s.l}{Number of average surrogate variables in the respective layers. (use count.surrogate function to get it)}
+}
+\value{
+List with the following components:
+\itemize{
+\item depth: mean surrogate minimal depth for each variable
+\item selected: variables has been selected (1) or not (0),
+\item threshold: the threshold that is used for the selection
+}
+}
+\description{
+This function determines the surrogate minimal depth of variables from a forest that is created by getTreeranger, addLayer and getSurrogates functions.
+}
diff --git a/man/var.relations.Rd b/man/var.relations.Rd
new file mode 100644
index 0000000..f056eae
--- /dev/null
+++ b/man/var.relations.Rd
@@ -0,0 +1,95 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/var.relations.R
+\name{var.relations}
+\alias{var.relations}
+\title{Investigate variable relations of a specific variable with mean adjusted agreement}
+\usage{
+var.relations(
+  x = NULL,
+  y = NULL,
+  num.trees = 500,
+  type = "regression",
+  s = NULL,
+  mtry = NULL,
+  min.node.size = 1,
+  num.threads = NULL,
+  status = NULL,
+  save.ranger = FALSE,
+  create.forest = TRUE,
+  forest = NULL,
+  save.memory = FALSE,
+  case.weights = NULL,
+  variables,
+  candidates,
+  t = 5,
+  select.rel = TRUE
+)
+}
+\arguments{
+\item{x}{data.frame of predictor variables with variables in
+columns and samples in rows (Note: missing values are not allowed)}
+
+\item{y}{vector with values of phenotype variable (Note: will be converted to factor if
+classification mode is used). For survival forests this is the time variable.}
+
+\item{num.trees}{number of trees. Default is 500.}
+
+\item{type}{mode of prediction ("regression", "classification" or "survival"). Default is regression.}
+
+\item{s}{predefined number of surrogate splits (it may happen that the actual number of surrogate splits differs in individual nodes). Default is 1 \% of no. of variables.}
+
+\item{mtry}{number of variables to possibly split at in each node. Default is no. of variables^(3/4) ("^3/4") as recommended by (Ishwaran 2011). Also possible is "sqrt" and "0.5" to use the square root or half of the no. of variables.}
+
+\item{min.node.size}{minimal node size. Default is 1.}
+
+\item{num.threads}{number of threads used for determination of relations. Default is number of CPUs available.}
+
+\item{status}{status variable, only applicable to survival data. Use 1 for event and 0 for censoring.}
+
+\item{save.ranger}{set TRUE if ranger object should be saved. Default is that ranger object is not saved (FALSE).}
+
+\item{create.forest}{set FALSE if you want to analyze an existing forest. Default is TRUE.}
+
+\item{forest}{the random forest that should be analyzed if create.forest is set to FALSE. (x and y still have to be given to obtain variable names)}
+
+\item{save.memory}{Use memory saving (but slower) splitting mode. No effect for survival and GWAS data. Warning: This option slows down the tree growing, use only if you encounter memory problems. (This parameter is transfered to ranger)}
+
+\item{case.weights}{Weights for sampling of training observations. Observations with larger weights will be selected with higher probability in the bootstrap (or subsampled) samples for the trees.}
+
+\item{variables}{variable names (string) for which related variables should be searched for (has to be contained in allvariables)}
+
+\item{candidates}{vector of variable names (strings) that are candidates to be related to the variables (has to be contained in allvariables)}
+
+\item{t}{variable to calculate threshold. Default is 5.}
+
+\item{select.rel}{set False if only relations should be calculated and no related variables should be selected.}
+}
+\value{
+a list containing:
+\itemize{
+\item variables: the variables to which relations are investigated.
+\item surr.res: a matrix with mean adjusted agreement values with variables in rows and candidates in columns.
+\item threshold: the threshold used to select related variables.
+\item var: a list with one vector for each variable containing related variables.
+\item ranger: ranger object.
+}
+}
+\description{
+This function uses the mean adjusted agreement to select variables that are related to a defined variable using a threshold T.
+The parameter t is used to calculate T: t=1 means that every variable with higher probability than "by chance" is identified
+as "important". t=2 means the probability has to be twice, etc.
+Based on the threshold a vector is created containing the related variables.
+}
+\examples{
+# read data
+data("SMD_example_data")
+x = SMD_example_data[,2:ncol(SMD_example_data)]
+y = SMD_example_data[,1]
+\donttest{
+# calculate variable relations
+set.seed(42)
+res = var.relations(x = x, y = y, s = 10, num.trees = 100, variables = c("X1","X7"), candidates = colnames(x)[1:100], t = 5)
+res$var
+}
+
+}
diff --git a/man/var.relations.mfi.Rd b/man/var.relations.mfi.Rd
new file mode 100644
index 0000000..7757aa3
--- /dev/null
+++ b/man/var.relations.mfi.Rd
@@ -0,0 +1,103 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/var.relations.mfi.R
+\name{var.relations.mfi}
+\alias{var.relations.mfi}
+\title{Investigate variable relations of a specific variable with mutual forest impact (corrected mean adjusted agreement).}
+\usage{
+var.relations.mfi(
+  x = NULL,
+  y = NULL,
+  num.trees = 500,
+  type = "regression",
+  s = NULL,
+  mtry = NULL,
+  min.node.size = 1,
+  num.threads = NULL,
+  status = NULL,
+  save.ranger = FALSE,
+  create.forest = TRUE,
+  forest = NULL,
+  save.memory = FALSE,
+  case.weights = NULL,
+  min.var.p = 200,
+  variables,
+  candidates,
+  p.t = 0.01,
+  select.rel = TRUE,
+  method = "janitza"
+)
+}
+\arguments{
+\item{x}{data.frame of predictor variables with variables in
+columns and samples in rows (Note: missing values are not allowed)}
+
+\item{y}{vector with values of phenotype variable (Note: will be converted to factor if
+classification mode is used). For survival forests this is the time variable.}
+
+\item{num.trees}{number of trees. Default is 500.}
+
+\item{type}{mode of prediction ("regression", "classification" or "survival"). Default is regression.}
+
+\item{s}{predefined number of surrogate splits (it may happen that the actual number of surrogate splits differs in individual nodes). Default is 1 \% of no. of variables.}
+
+\item{mtry}{number of variables to possibly split at in each node. Default is no. of variables^(3/4) ("^3/4") as recommended by (Ishwaran 2011). Also possible is "sqrt" and "0.5" to use the square root or half of the no. of variables.}
+
+\item{min.node.size}{minimal node size. Default is 1.}
+
+\item{num.threads}{number of threads used for determination of relations. Default is number of CPUs available.}
+
+\item{status}{status variable, only applicable to survival data. Use 1 for event and 0 for censoring.}
+
+\item{save.ranger}{set TRUE if ranger object should be saved. Default is that ranger object is not saved (FALSE).}
+
+\item{create.forest}{set FALSE if you want to analyze an existing forest. Default is TRUE.}
+
+\item{forest}{the random forest that should be analyzed if create.forest is set to FALSE. (x and y still have to be given to obtain variable names)}
+
+\item{save.memory}{Use memory saving (but slower) splitting mode. No effect for survival and GWAS data. Warning: This option slows down the tree growing, use only if you encounter memory problems. (This parameter is transfered to ranger)}
+
+\item{case.weights}{Weights for sampling of training observations. Observations with larger weights will be selected with higher probability in the bootstrap (or subsampled) samples for the trees.}
+
+\item{min.var.p}{minimum number of permuted variables used to determine p-value. Default is 200.}
+
+\item{variables}{variable names (string) for which related variables should be searched for (has to be contained in allvariables)}
+
+\item{candidates}{vector of variable names (strings) that are candidates to be related to the variables (has to be contained in allvariables)}
+
+\item{p.t}{p.value threshold for selection of related variables. Default is 0.01.}
+
+\item{select.rel}{set False if only relations should be calculated and no related variables should be selected.}
+
+\item{method}{Method  to  compute  p-values.   Use  "janitza"  for  the  method  by  Janitza  et  al. (2016) or "permutation" to utilize importance values of permuted variables.}
+}
+\value{
+a list containing:
+\itemize{
+\item variables: the variables to which relations are investigated.
+\item surr.res: a matrix with the mutual forest impact values with variables in rows and candidates in columns.
+\item surr.perm: a matrix with the mutual forest impact values of the permuted variables with variables in rows and candidates in columns.
+\item p.rel: a list with the obtained p-values for the relation analysis of each variable.
+\item var.rel: a list with vectors of related variables for each variable.
+\item ranger: ranger objects.
+\item method: Method  to  compute  p-values: "janitza" or "permutation".
+\item p.t: p.value threshold for selection of related variables
+
+
+}
+}
+\description{
+This function corrects the mean adjusted agreement by a permutation approach and generates the relation parameter mutual forest impact. Subsequently p-values are determined and related variables are selected.
+}
+\examples{
+# read data
+data("SMD_example_data")
+x = SMD_example_data[,2:ncol(SMD_example_data)]
+y = SMD_example_data[,1]
+\donttest{
+# calculate variable relations
+set.seed(42)
+res = var.relations.mfi(x = x, y = y, s = 10, num.trees = 100, variables = c("X1","X7"), candidates = colnames(x)[1:100])
+res$var.rel[[1]]
+}
+
+}
diff --git a/man/var.select.md.Rd b/man/var.select.md.Rd
new file mode 100644
index 0000000..f0dcc70
--- /dev/null
+++ b/man/var.select.md.Rd
@@ -0,0 +1,93 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/variable_selection_md.R
+\name{var.select.md}
+\alias{var.select.md}
+\title{Variable selection with Minimal Depth (MD)}
+\usage{
+var.select.md(
+  x = NULL,
+  y = NULL,
+  num.trees = 500,
+  type = "regression",
+  mtry = NULL,
+  min.node.size = 1,
+  num.threads = NULL,
+  status = NULL,
+  save.ranger = FALSE,
+  create.forest = TRUE,
+  forest = NULL,
+  save.memory = FALSE,
+  case.weights = NULL
+)
+}
+\arguments{
+\item{x}{data.frame of predictor variables with variables in
+columns and samples in rows. (Note: missing values are not allowed)}
+
+\item{y}{vector with values of phenotype variable (Note: will be converted to factor if
+classification mode is used). For survival forests this is the time variable.}
+
+\item{num.trees}{Number of trees. Default is 500.}
+
+\item{type}{Mode of prediction ("regression","classification" or "survival"). Default is regression.}
+
+\item{mtry}{Number of variables to possibly split at in each node. Default is no. of variables^(3/4) as recommended by Ishwaran.}
+
+\item{min.node.size}{Minimal node size. Default is 1.}
+
+\item{num.threads}{number of threads used for parallel execution. Default is number of CPUs available.}
+
+\item{status}{status variable, only applicable to survival data. Use 1 for event and 0 for censoring.}
+
+\item{save.ranger}{Set TRUE if ranger object should be saved. Default is that ranger object is not saved (FALSE).}
+
+\item{create.forest}{set FALSE if you want to analyze an existing forest. Default is TRUE.}
+
+\item{forest}{the random forest that should be analyzed if create.forest is set to FALSE. (x and y still have to be given to obtain variable names)}
+
+\item{save.memory}{Use memory saving (but slower) splitting mode. No effect for survival and GWAS data. Warning: This option slows down the tree growing, use only if you encounter memory problems. (This parameter is transfered to ranger)}
+
+\item{case.weights}{Weights for sampling of training observations. Observations with larger weights will be selected with higher probability in the bootstrap (or subsampled) samples for the trees.}
+}
+\value{
+List with the following components:
+\itemize{
+\item info: list with results from mindep function:
+\itemize{
+\item depth: mean minimal depth for each variable.
+\item selected: variables has been selected (1) or not (0).
+\item threshold: the threshold that is used for the selection. (deviates slightly from the original implimentation)
+}
+\item var: vector of selected variables.
+
+\item forest: a list containing:
+#'\itemize{
+\item trees: list of trees that was created by getTreeranger, addLayer, and addSurrogates functions and that was used for surrogate minimal depth variable importance.
+\item allvariables: all variable names of the predictor variables that are present in x.
+}
+
+\item ranger: ranger object
+
+}
+}
+\description{
+This function executes MD applying \link[ranger]{ranger} for random forests generation and is a reimplementation of \link[randomForestSRC]{var.select} from randomForestSRC package.
+}
+\examples{
+# read data
+data("SMD_example_data")
+
+\donttest{
+# select variables (usually more trees are needed)
+set.seed(42)
+res = var.select.md(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1], num.trees = 10)
+res$var
+}
+
+}
+\references{
+\itemize{
+  \item Ishwaran, H. et al. (2011) Random survival forests for high-dimensional data. Stat Anal Data Min, 4, 115–132. \url{https://onlinelibrary.wiley.com/doi/abs/10.1002/sam.10103}
+  \item Ishwaran, H. et al. (2010) High-Dimensional Variable Selection for Survival Data. J. Am. Stat. Assoc., 105, 205–217. \url{http://www.ccs.miami.edu/~hishwaran/papers/IKGML.JASA.2010.pdf}
+  }
+}
diff --git a/man/var.select.mir.Rd b/man/var.select.mir.Rd
new file mode 100644
index 0000000..42f0406
--- /dev/null
+++ b/man/var.select.mir.Rd
@@ -0,0 +1,115 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/variable_selection_mir.R
+\name{var.select.mir}
+\alias{var.select.mir}
+\title{Variable selection with mutual impurity reduction (MIR)}
+\usage{
+var.select.mir(
+  x = NULL,
+  y = NULL,
+  num.trees = 500,
+  type = "regression",
+  s = NULL,
+  mtry = NULL,
+  min.node.size = 1,
+  num.threads = NULL,
+  status = NULL,
+  save.ranger = FALSE,
+  save.memory = FALSE,
+  num.permutations = 100,
+  p.t.sel = 0.01,
+  p.t.rel = 0.01,
+  select.var = TRUE,
+  select.rel = FALSE,
+  case.weights = NULL,
+  corr.rel = TRUE,
+  t = 5,
+  method.rel = "janitza",
+  method.sel = "janitza",
+  save.rel = TRUE
+)
+}
+\arguments{
+\item{x}{data.frame of predictor variables with variables in
+columns and samples in rows (Note: missing values are not allowed)}
+
+\item{y}{vector with values of phenotype variable (Note: will be converted to factor if
+classification mode is used). For survival forests this is the time variable.}
+
+\item{num.trees}{number of trees. Default is 500.}
+
+\item{type}{mode of prediction ("regression", "classification" or "survival"). Default is regression.}
+
+\item{s}{predefined number of surrogate splits (it may happen that the actual number of surrogate splits differs in individual nodes). Default is 1 \% of no. of variables.}
+
+\item{mtry}{number of variables to possibly split at in each node. Default is no. of variables^(3/4) ("^3/4") as recommended by (Ishwaran 2011). Also possible is "sqrt" and "0.5" to use the square root or half of the no. of variables.}
+
+\item{min.node.size}{minimal node size. Default is 1.}
+
+\item{num.threads}{number of threads used for parallel execution. Default is number of CPUs available.}
+
+\item{status}{status variable, only applicable to survival data. Use 1 for event and 0 for censoring.}
+
+\item{save.ranger}{set TRUE if ranger object should be saved. Default is that ranger object is not saved (FALSE).}
+
+\item{save.memory}{Use memory saving (but slower) splitting mode. No effect for survival and GWAS data. Warning: This option slows down the tree growing, use only if you encounter memory problems. (This parameter is transfered to ranger)}
+
+\item{num.permutations}{number of permutations to determine p-values. Default is 100. (the relations are determined once based on the permuted X data and the utilized AIR values are permuted again for each permutation )}
+
+\item{p.t.sel}{p.value threshold for selection of important variables. Default is 0.01.}
+
+\item{p.t.rel}{p.value threshold for selection of related variables. Default is 0.01.}
+
+\item{select.var}{set False if only importance should be calculated and no variables should be selected.}
+
+\item{select.rel}{set False if only relations should be calculated and no variables should be selected.}
+
+\item{case.weights}{Weights for sampling of training observations. Observations with larger weights will be selected with higher probability in the bootstrap (or subsampled) samples for the trees.}
+
+\item{corr.rel}{set FALSE if non-corrected variable relations should be used for calculation of MIR. In this case the method "janitza" should not be used for selection of important variables}
+
+\item{t}{variable to calculate threshold for non-corrected relation analysis. Default is 5.}
+
+\item{method.rel}{Method  to  compute  p-values for selection of related variables with var.relations.corr. Use  "janitza"  for  the  method  by  Janitza  et  al. (2016) or "permutation" to utilize permuted variables.}
+
+\item{method.sel}{Method  to  compute  p-values for selection of important variables. Use  "janitza"  for  the  method  by  Janitza  et  al. (2016) (can only be used when corrected variable relations are utilized) or "permutation" to utilize permuted variables.}
+
+\item{save.rel}{set FALSE if relation information should not bet saved (default is TRUE)}
+}
+\value{
+list with the following components:
+\itemize{
+\item info: list with results containing:
+\itemize{
+\item MIR: the calculated variable importance for each variable based on mutual impurity reduction.
+\item pvalue: the obtained p-values for each variable.
+\item selected: variables has been selected (1) or not (0).
+\item relations: a list containing the results of variable relation analysis.
+\item parameters: a list that contains the parameters s, type, mtry, p.t.sel, p.t.rel and method.sel that were used.
+}
+\item var: vector of selected variables.
+
+\item ranger: ranger object.
+
+}
+}
+\description{
+This function executes MIR applying \link[ranger]{ranger} for random forests generation and actual impurity reduction and a modified version of \link[rpart]{rpart} to find surrogate variables.
+}
+\examples{
+# read data
+data("SMD_example_data")
+
+\donttest{
+# select variables (usually more trees are needed)
+set.seed(42)
+res = var.select.mir(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1],s = 10, num.trees = 10)
+res$var
+}
+}
+\references{
+\itemize{
+  \item Nembrini, S. et al. (2018) The revival of the Gini importance? Bioinformatics, 34, 3711–3718. \url{https://academic.oup.com/bioinformatics/article/34/21/3711/4994791}
+  \item Seifert, S. et al. (2019) Surrogate minimal depth as an importance measure for variables in random forests. Bioinformatics, 35, 3663–3671. \url{https://academic.oup.com/bioinformatics/article/35/19/3663/5368013}
+  }
+}
diff --git a/man/var.select.smd.Rd b/man/var.select.smd.Rd
new file mode 100644
index 0000000..488d2a9
--- /dev/null
+++ b/man/var.select.smd.Rd
@@ -0,0 +1,100 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/variable_selection_smd.R
+\name{var.select.smd}
+\alias{var.select.smd}
+\title{Variable selection with Surrogate Minimal Depth (SMD) (MAIN FUNCTION)}
+\usage{
+var.select.smd(
+  x = NULL,
+  y = NULL,
+  num.trees = 500,
+  type = "regression",
+  s = NULL,
+  mtry = NULL,
+  min.node.size = 1,
+  num.threads = NULL,
+  status = NULL,
+  save.ranger = FALSE,
+  create.forest = TRUE,
+  forest = NULL,
+  save.memory = FALSE,
+  case.weights = NULL
+)
+}
+\arguments{
+\item{x}{data.frame of predictor variables with variables in
+columns and samples in rows (Note: missing values are not allowed)}
+
+\item{y}{vector with values of phenotype variable (Note: will be converted to factor if
+classification mode is used). For survival forests this is the time variable.}
+
+\item{num.trees}{number of trees. Default is 500.}
+
+\item{type}{mode of prediction ("regression", "classification" or "survival"). Default is regression.}
+
+\item{s}{predefined number of surrogate splits (it may happen that the actual number of surrogate splits differs in individual nodes). Default is 1 \% of no. of variables.}
+
+\item{mtry}{number of variables to possibly split at in each node. Default is no. of variables^(3/4) ("^3/4") as recommended by (Ishwaran 2011). Also possible is "sqrt" and "0.5" to use the square root or half of the no. of variables.}
+
+\item{min.node.size}{minimal node size. Default is 1.}
+
+\item{num.threads}{number of threads used for parallel execution. Default is number of CPUs available.}
+
+\item{status}{status variable, only applicable to survival data. Use 1 for event and 0 for censoring.}
+
+\item{save.ranger}{set TRUE if ranger object should be saved. Default is that ranger object is not saved (FALSE).}
+
+\item{create.forest}{set FALSE if you want to analyze an existing forest. Default is TRUE.}
+
+\item{forest}{the random forest that should be analyzed if create.forest is set to FALSE. (x and y still have to be given to obtain variable names)}
+
+\item{save.memory}{Use memory saving (but slower) splitting mode. No effect for survival and GWAS data. Warning: This option slows down the tree growing, use only if you encounter memory problems. (This parameter is transfered to ranger)}
+
+\item{case.weights}{Weights for sampling of training observations. Observations with larger weights will be selected with higher probability in the bootstrap (or subsampled) samples for the trees.}
+}
+\value{
+list with the following components:
+\itemize{
+\item info: list with results from surrmindep function:
+\itemize{
+\item depth: mean surrogate minimal depth for each variable.
+\item selected: variables has been selected (1) or not (0).
+\item threshold: the threshold that is used for the selection.
+}
+\item var: vector of selected variables.
+
+\item s: list with the results of count.surrogate function:
+\itemize{
+\item s.a: total average number of surrogate variables.
+\item s.l: average number of surrogate variables in the respective layers.
+}
+\item forest: a list containing:
+#'\itemize{
+\item trees: list of trees that was created by getTreeranger, addLayer, and addSurrogates functions and that was used for surrogate minimal depth variable importance.
+\item allvariables: all variable names of the predictor variables that are present in x.
+}
+\item ranger: ranger object.
+
+}
+}
+\description{
+This function executes SMD applying \link[ranger]{ranger} for random forests generation and a modified version of \link[rpart]{rpart} to find surrogate variables.
+}
+\examples{
+# read data
+data("SMD_example_data")
+
+\donttest{
+# select variables (usually more trees are needed)
+set.seed(42)
+res = var.select.smd(x = SMD_example_data[,2:ncol(SMD_example_data)], y = SMD_example_data[,1],s = 10, num.trees = 10)
+res$var
+}
+}
+\references{
+\itemize{
+  \item Seifert, S. et al. (2019) Surrogate minimal depth as an importance measure for variables in random forests. Bioinformatics, 35, 3663–3671. \url{https://academic.oup.com/bioinformatics/article/35/19/3663/5368013}
+  \item Ishwaran, H. et al. (2011) Random survival forests for high-dimensional data. Stat Anal Data Min, 4, 115–132. \url{https://onlinelibrary.wiley.com/doi/abs/10.1002/sam.10103}
+  \item Ishwaran, H. et al. (2010) High-Dimensional Variable Selection for Survival Data. J. Am. Stat. Assoc., 105, 205–217. \url{http://www.ccs.miami.edu/~hishwaran/papers/IKGML.JASA.2010.pdf}
+  }
+}
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644
index 0000000..a242c9c
--- /dev/null
+++ b/src/.gitignore
@@ -0,0 +1,4 @@
+*.o
+*.so
+*.dll
+.vscode
diff --git a/src/choose_surg.c b/src/choose_surg.c
new file mode 100644
index 0000000..3641214
--- /dev/null
+++ b/src/choose_surg.c
@@ -0,0 +1,301 @@
+/*
+ * This routine is from rpart
+ *
+ * A particular split routine, optimized for the surrogate variable
+ *  search.  The "goodness" of a split is the total weights of concordant
+ *  observations between the surrogate and the primary split.
+ *  Note that the CART folks use the %concordance, which factors missing
+ *  values into the equations somewhat differently.
+ *
+ *  y is coded as  +1=left, -1=right, 0=missing
+ *
+ */
+#include "get_surg.h"
+#include "rpartproto.h"
+
+void choose_surg(int n1, int n2, int *y, double *x, int *order, int ncat, double *agreement, double *split, int *csplit_for_cat, double tleft, double tright, double *adj) {
+	//printf("01: Hello from choose_surg()!\n");
+	//printf("i: %d\n", i);
+
+	/* sum of weights for each */
+	double llwt, lrwt, rrwt, rlwt;
+	double agree, majority, total_wt;
+
+	int *left = rp.left;
+	int *right = rp.right;
+	double *lwt = rp.lwt;
+	double *rwt = rp.rwt;
+
+
+	/* set to 1 when something worthwhile is found */
+	int success = 0;
+	/*
+	 * I enforce that at least 2 obs must go each way, to avoid having an
+	 *  uncorrelated surrogate beat the "null" surrogate too easily
+	 * Observations with 0 weight don't count in this total
+	 */
+	/* continuous case */
+	/*
+	 * ll = y's that go left that are also sent left by my split
+	 * lr = y's that go left that I send right
+	 * rl = y's that go right that I send to the left
+	 * rr = y's that go right that I send to the right
+	 *
+	 * The agreement is max(ll+rr, lr+rl), if weights were = 1;
+	 *   actually max(llwt + rrwt, lrwt + rlwt) / denominator
+	 */
+	if (ncat == 0) {
+		//printf("Hello from choose_surg() ncat == 0\n");
+
+	double lastx = 0.0;
+	int ll, lr, rr, rl;
+	ll = rl = 0;
+	llwt = 0;
+	rlwt = 0;
+	// printf("n2: %d\n", n2); -> 100
+	// printf("n1: %d\n", n1); -> 0
+	for (int i = n2 - 1; i >= n1; i--) {
+		/* start with me sending all to the left */
+		int j = order[i];
+		if (j >= 0) {
+			/* this is why I run the loop backwards */
+			lastx = x[j];
+			//printf("03:		lastx: %f\n", lastx);
+			switch (y[j]) {
+			case LEFT:
+				if (rp.wt[j] > 0)
+					ll++;
+				llwt += rp.wt[j];
+				break;
+			case RIGHT:
+				if (rp.wt[j] > 0)
+					rl++;
+				rlwt += rp.wt[j];
+				break;
+			default:
+				;
+			}
+		}
+	}
+
+	// printf("ll: %d\n", ll); -> 13
+	// printf("rl: %d\n", rl); -> 87
+
+	if (llwt > rlwt)
+		agree = llwt;
+	else
+		agree = rlwt;
+
+	/*
+	 *  Now we have the total agreement.  Calculate the %agreement and
+	 *    the adjusted agreement
+	 *  For both, do I use the total y vector as my denominator (my
+	 *    preference), or only the y's for non-missing x (CART book)?
+	 *    If the former, need to reset some totals.
+	 */
+	
+		/* worst possible agreement */
+		majority = agree;
+		total_wt = llwt + rlwt;
+	
+
+	lr = rr = 0;
+	lrwt = 0;
+	rrwt = 0;
+	/*
+	 *  March across, moving things from the right to the left
+	 *    the "lastx" code is caring for ties in the x var
+	 *    (The loop above sets it to the first unique x value).
+	 */
+	/* NB: might never set csplit or split */
+	//*csplit = LEFT;
+	csplit_for_cat[0] = LEFT; 
+	/* a valid splitting value */
+	*split = lastx;
+	for (int i = n1; (ll + rl) >= 2; i++) {
+		int j = order[i];
+		//length_of_order_i = length_of_order_i + 1;
+		//printf("order[i]: %d\n", order[i]);
+		if (j >= 0) {
+			/* not a missing value */
+			if ((lr + rr) >= 2 && x[j] != lastx) {
+				/* new x found, evaluate the split */
+				if ((llwt + rrwt) > agree) {
+					success = 1;
+					agree = llwt + rrwt;
+					/* < goes to the right */
+					//*csplit = RIGHT;
+					csplit_for_cat[0] = RIGHT;
+					*split = (x[j] + lastx) / 2;
+				} else if ((lrwt + rlwt) > agree) {
+					success = 1;
+					agree = lrwt + rlwt;
+					//*csplit = LEFT;
+					csplit_for_cat[0] = LEFT;
+					*split = (x[j] + lastx) / 2;
+				}
+			}
+
+			switch (y[j]) {
+			/* update numbers */
+			case LEFT:
+				if (rp.wt[j] > 0) {
+					ll--;
+					lr++;
+				}
+				llwt -= rp.wt[j];
+				lrwt += rp.wt[j];
+				break;
+			case RIGHT:
+				if (rp.wt[j] > 0) {
+					rl--;
+					rr++;
+				}
+				rlwt -= rp.wt[j];
+				rrwt += rp.wt[j];
+				break;
+			default:
+				/* ignore missing y's */
+				;
+			}
+			lastx = x[j];
+		}
+	}
+	} else {
+		
+		int defdir;
+		int lcount = 0;
+		int rcount = 0;
+		for (int i = 0; i < ncat; i++) {
+			left[i] = 0;
+			right[i] = 0;
+			lwt[i] = 0;
+			rwt[i] = 0;
+		}
+
+		/* First step:
+	 *  left = table(x[y goes left]), right= table(x[y goes right])
+	 *  so left[2] will be the number of x == 2's that went left,
+	 *  and lwt[2] the sum of the weights for those observations.
+	 * Only those with weight > 0 count in the totals
+	 */
+	for (int i = n1; i < n2; i++) {
+	    int j = order[i];
+	    if (j >= 0) {
+		int k = (int) x[j] - 1;
+
+		
+		
+		switch (y[j]) {
+		case LEFT:
+		    if (rp.wt[j] > 0)
+			left[k]++;
+			
+		    lwt[k] += rp.wt[j];
+		    break;
+		case RIGHT:
+		    if (rp.wt[j] > 0)
+			right[k]++;
+		    rwt[k] += rp.wt[j];
+		    break;
+		default:;
+		}
+	    }
+	}
+	
+
+	
+
+	
+	
+	
+
+	  /*
+	*  Compute which is better: everyone to the right or left
+	*/
+	llwt = 0;
+	rrwt = 0;
+	for (int i = 0; i < ncat; i++) {
+	    llwt += lwt[i];
+	    rrwt += rwt[i];
+	}
+	if (llwt > rrwt) {
+	    defdir = LEFT;
+	    majority = llwt;
+	} else {
+	    defdir = RIGHT;
+	    majority = rrwt;
+	}
+	total_wt = llwt + rrwt;
+
+	/*
+	 * We can calculate the best split category by category--- send each
+	 *  x value individually to its better direction
+	 */
+	agree = 0.0;
+	for (int i = 0; i < ncat; i++) {
+	    if (left[i] == 0 && right[i] == 0)
+		{
+			csplit_for_cat[i] = 0;
+		}
+	    else {
+		if (lwt[i] < rwt[i] || (lwt[i] == rwt[i] && defdir == RIGHT)) {
+		    agree += rwt[i];
+		    csplit_for_cat[i] = RIGHT;
+		    lcount += left[i];
+		    rcount += right[i];
+		} else {
+		    agree += lwt[i];
+		    csplit_for_cat[i] = LEFT;
+		    lcount += right[i];
+		    rcount += left[i];
+		}
+	    }
+	}
+	
+
+
+	//success = lcount > 1 && rcount > 1; /* sends at least 2 each way */
+	success = lcount > 1 || rcount > 1;
+	
+
+
+	}
+	
+
+
+	/*
+	 * success = 0 means no split was found that had at least 2 sent each
+	 *   way (not counting weights of zero), and for continuous splits also had
+	 *   an improvement in agreement.
+	 *  Due to round-off error such a split could still appear to have adj>0
+	 *  in the calculation further below; avoid this.
+	 */
+
+	if (!success) {
+		*agreement = 0.0;
+		*adj = 0.0;
+		return;
+	}
+
+
+	/*
+     *  Now we have the total agreement.  Calculate the %agreement and
+     *    the adjusted agreement
+     *  For both, do I use the total y vector as my denominator (my
+     *    preference), or only the y's for non-missing x (CART book)?
+     *    If the former, need to reset some totals.
+     */
+    if (rp.sur_agree == 0) {    /* use total table */
+	total_wt = tleft + tright;
+	if (tleft > tright)
+	    majority = tleft;
+	else
+	    majority = tright;
+    }
+
+	*agreement = agree / total_wt;
+	majority /= total_wt;
+	*adj = (*agreement - majority) / (1. - majority);
+	
+}
\ No newline at end of file
diff --git a/src/free_tree.c b/src/free_tree.c
new file mode 100644
index 0000000..d542578
--- /dev/null
+++ b/src/free_tree.c
@@ -0,0 +1,29 @@
+// This routine is from rpart
+//
+// free up all of the memory associated with a tree
+
+#include "get_surg.h"
+#include "node.h"
+#include "rpartproto.h"
+
+void free_split(pSplit spl) {
+	if (spl) {
+		free_split(spl->nextsplit);
+		free(spl);
+	}
+}
+
+// use freenode if the tree was CALLOC-ed, from xval.c
+void free_tree(pNode node, int freenode) {
+	free_split(node->surrogate);
+	free_split(node->primary);
+
+	if (freenode == 1)
+		if (node)
+			free(node);
+		else {
+			// don't point to things I just freed
+			node->primary = (pSplit) NULL;
+			node->surrogate = (pSplit) NULL;
+		}
+}
\ No newline at end of file
diff --git a/src/get_surg.c b/src/get_surg.c
new file mode 100644
index 0000000..2789523
--- /dev/null
+++ b/src/get_surg.c
@@ -0,0 +1,261 @@
+// This routine is originally from rpart.
+//
+// The main entry point for R to find surrogate variables for a node.
+//
+// Input variables:
+//      wt      = vector of case weights
+//      xmat    = matrix of continuous variables
+//      opt     = vector of options.  Same order as get_surg.control, as a vector
+//                of doubles.
+//      node    = primary node
+//
+// Returned: a list with elements
+//      dsplit = for each split, numeric variables (doubles)
+//      isplit = for each split, integer variables
+//      isplitcntSum =  for each node, integer variables
+//
+// Naming convention: ... = pointer to an integer vector, ...R = the
+// input R object (SEXP) containing that vector
+
+#define MAINRP
+#include <math.h>
+#include "get_surg.h"
+#include "node.h"
+#include "rpartproto.h"
+
+#ifdef DEBUG
+#include <unistd.h>	//for using the function sleep
+#endif
+
+SEXP getSurrogates(SEXP ncat2, SEXP wt, SEXP xmat, SEXP opt, SEXP var, SEXP split) {
+	
+
+	double *dptr;
+	int *iptr;
+	int i, j, k, n;
+	pNode tree;
+
+	// LCJ
+	int *ncat;
+	int maxcat;
+	int *cat_direction;
+
+	// return objects for R
+	// end in "3" to avoid overlap with internal names
+
+	SEXP dsplit3, isplit3;
+
+	
+	// output variables
+	int nsplit[2];
+	double *ddsplit[3];
+	int *iisplit[3];
+
+
+	//cat_direction = INTEGER(cat_direction2);
+
+	ncat = INTEGER(ncat2);
+
+	int test2 = 5;
+	int *prim_var_num;
+	prim_var_num = INTEGER(var);
+
+	double *splitpoint;
+	double *cat_dir_numeric;
+
+	int *cat_dir_int = (int *) calloc(ncat[prim_var_num[0] - 1] + 1, sizeof(int));
+
+	if (ncat[prim_var_num[0] - 1] == 0)
+	{
+		splitpoint = REAL(split);
+	} 
+	else
+		{
+			cat_dir_numeric = REAL(split);
+			for (i = 0; i < cat_dir_numeric[0] + 1; i++)
+			{
+				cat_dir_int[i] = (int) cat_dir_numeric[i];
+			}
+		}
+
+	// hand over arguments
+
+	rp.numcat = INTEGER(ncat2);
+	rp.n = nrows(xmat);
+	n = rp.n;
+	rp.nvar = ncols(xmat);
+	rp.wt = REAL(wt);
+	iptr = INTEGER(opt);
+	rp.maxsur = (int) iptr[0];
+	rp.sur_agree = (int) iptr[1];
+
+	
+
+
+
+	// create pointers to the matrix
+	// x and missmat are in column major order
+	// y is in row major order
+	dptr = REAL(xmat);
+	rp.xdata = (double **) calloc(rp.nvar, sizeof(double *));
+
+	for (i = 0; i < rp.nvar; i++) {
+		rp.xdata[i] = dptr;
+		dptr += n;
+	}
+
+	// create matrix of sort indices, for surrogate
+	// one for each continuous variable
+	// This sort is "once and for all".
+	// I don't have to sort the categories.
+
+	rp.sorts = (int **) calloc(rp.nvar, sizeof(int *));
+	rp.sorts[0] = (int *) calloc(n * rp.nvar, sizeof(int));
+
+	maxcat = 0;
+
+
+		int *tempvec = (int *) calloc(n, sizeof(int));
+		double *xtemp = (double *) calloc(n, sizeof(double));
+
+		for (i = 0; i < rp.nvar; i++) {
+			rp.sorts[i] = rp.sorts[0] + i * n;
+			for (k = 0; k < n; k++) {
+				if (!R_FINITE(rp.xdata[i][k])) {
+					// this variable is missing (NA)
+					tempvec[k] = -(k + 1);
+					xtemp[k] = 0;
+				} else {
+					tempvec[k] = k;
+					xtemp[k] = rp.xdata[i][k];
+				}
+			}
+			if(ncat[i] == 0)
+			{
+				sort_vec(0, n - 1, xtemp, tempvec, i);
+			} else if(ncat[i] > maxcat)
+			{
+				maxcat = ncat[i];
+			}
+			for (k = 0; k < n; k++)
+			{
+				rp.sorts[i][k] = tempvec[k];
+
+				if (i == 8)
+				{
+					// printf("rp.sorts[i][k]: %d, xtemp[k]: %f\n", rp.sorts[i][k], xtemp[k]);
+				}
+			}	
+			
+		}
+		//clear DMA
+		free(tempvec);
+		free(xtemp);
+
+
+	if (maxcat > 0) {
+		rp.csplit_for_cat = (int *) ALLOC(3 * maxcat, sizeof(int));
+		rp.lwt = (double *) ALLOC(2 * maxcat, sizeof(double));
+		rp.left = rp.csplit_for_cat + maxcat;
+		rp.right = rp.left + maxcat;
+		rp.rwt = rp.lwt + maxcat;
+	} else {
+		rp.csplit_for_cat = (int *) ALLOC(1, sizeof(int));
+	}
+
+	// finalize tree object
+	nodesize = sizeof(Node);
+	tree = (pNode) calloc(1, nodesize);
+
+	//dptr = REAL(node);
+	// the split structure is sized for 2 categories.
+	int splitsize = sizeof(Split);
+	tree->primary = (pSplit) calloc(1, splitsize);
+
+	
+
+	tree->primary->var_num = prim_var_num[0] - 1;
+
+
+	if (rp.numcat[tree->primary->var_num] == 0)
+	{
+		tree->primary->csplit[0] = 1;
+		tree->primary->spoint = splitpoint[0];
+	} else 
+	{
+		for (i = 1; i < cat_dir_int[0]+1; i++)
+		{
+			tree->primary->csplit[i-1] = cat_dir_int[i];
+		}
+	}
+
+	// free(cat_dir_int);
+
+	tree->primary->nextsplit = NULL;
+
+
+/*
+
+	if (rp.numcat[tree->primary->var_num] == 0)
+	{
+		tree->primary->spoint = splitpoint[0];
+	}
+*/
+
+	if (0 < rp.maxsur)
+		surrogate(tree, 0, n);
+
+
+	// Return the body of the tree
+	// For each component we first create a vector to hold the
+	// result, then a ragged array index into the vector.
+	// The rpmatrix routine then fills everything in.
+
+	rpcountup(tree, nsplit);
+	int splitcnt = nsplit[0] + nsplit[1];
+
+	dsplit3 = PROTECT(allocMatrix(REALSXP, splitcnt, 2));
+	dptr = REAL(dsplit3);
+
+	for (i = 0; i < 2; i++) {
+		ddsplit[i] = dptr;
+		dptr += splitcnt;
+		for (j = 0; j < splitcnt; j++) {
+			ddsplit[i][j] = 0.0;
+		}
+	}
+
+
+	isplit3 = PROTECT(allocMatrix(INTSXP, splitcnt, 2));
+	iptr = INTEGER(isplit3);
+
+	for (i = 0; i < 2; i++) {
+		iisplit[i] = iptr;
+		iptr += splitcnt;
+	}
+
+	rpmatrix(tree, rp.numcat, ddsplit, iisplit, nsplit);
+
+	// Create the output list
+	int nout = 2;
+	SEXP rlist = PROTECT(allocVector(VECSXP, nout));
+	SEXP rname = allocVector(STRSXP, nout);
+	setAttrib(rlist, R_NamesSymbol, rname);
+	SET_VECTOR_ELT(rlist, 0, dsplit3);
+	SET_STRING_ELT(rname, 0, mkChar("dsplit"));
+	SET_VECTOR_ELT(rlist, 1, isplit3);
+	SET_STRING_ELT(rname, 1, mkChar("isplit"));
+
+	UNPROTECT(1 + nout);
+
+	// let the memory go
+	free_tree(tree, 0);
+
+	// clear DMA
+	free(rp.xdata);
+	free(rp.sorts[0]);
+	free(rp.sorts);
+	free(tree);
+
+	return rlist;
+}
\ No newline at end of file
diff --git a/src/get_surg.h b/src/get_surg.h
new file mode 100644
index 0000000..231f15a
--- /dev/null
+++ b/src/get_surg.h
@@ -0,0 +1,103 @@
+// This routine is originally from rpart.
+//
+// common variables for the rpart routine
+//
+// Start with things that depend on R.h
+
+
+#include <R.h>
+#include <Rinternals.h>
+
+#ifdef ENABLE_NLS
+#include <libintl.h>
+#define _(String) dgettext ("SurrogateMinimalDepth", String)
+#else
+#define _(String) (String)
+#endif
+
+// Header for OpenMP
+#include <omp.h>
+
+// Most compilers with openMP support supply a
+//  pre-defined compiler macro _OPENMP. Following
+//  facilitates selective turning off (by testing
+//  value or defining multiple versions OPENMP_ON1,
+//  OPENMP_ON2...)
+//  note also that there is no actual *need* to
+//  protect #pragmas with #ifdef OPENMP_ON, since C
+//  ignores undefined pragmas, but failing to do so
+//  may produce warnings if openMP is not supported.
+//  In contrast functions from omp.h must be protected.
+
+
+// TODO DEBUG
+//#define DEBUG
+////#ifdef DEBUG
+////Rprintf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
+////#endif
+
+
+#ifdef DEBUG
+//for using the function sleep
+#include <unistd.h>
+// Header for measuring execution time
+//#include "stopwatch.h"
+#endif
+
+#if defined _OPENMP
+#define OPENMP_ON 1
+#endif
+
+
+// Memory defined with R_alloc is removed automatically
+// That with "CALLOC" I have to remove myself. Use the
+// latter for objects that need to persist between the
+// s_to_rp1 and s_to_rp2 calls
+
+#define ALLOC(a,b) R_alloc(a,b)
+#define CALLOC(a,b) R_chk_calloc((size_t)(a), b)
+
+// done with the R internals
+// used for the variable "extra" in nodes
+#define LEFT  (-1)
+#define RIGHT  1
+
+#ifdef MAINRP
+#define EXTERN
+#else
+#define EXTERN extern
+#endif
+
+
+// As a sop to S, I need to keep the total number of external symbols
+// somewhat smaller. So, pack most of them all into a structure.
+
+EXTERN struct {
+	double **xdata;
+	double *wt;
+	// matrix of sort indices
+	int **sorts;
+	// total number of subjects
+	int n;
+	// number of predictors
+	int nvar;
+	// max # of primary or surrogate splits to use
+	int maxsur;
+	// 0 = my style, 1=CART style
+	int sur_agree;
+	// to be allocated by the mainline, of length n
+	int csplit;
+	int *csplit_for_cat;
+	double *lwt;
+	double *rwt;
+	int *left;
+	int *right;
+	int nthreads;
+	int *numcat;
+} rp;
+
+EXTERN int nodesize;
+
+
+// Categorical variables must be coded as 1,2,3, ...., and there may be
+// missing categories. The upper limit is determined on the fly.
diff --git a/src/init.c b/src/init.c
new file mode 100644
index 0000000..7962977
--- /dev/null
+++ b/src/init.c
@@ -0,0 +1,23 @@
+// This routine export the c function for R
+#include "get_surg.h"
+#include "R_ext/Rdynload.h"
+#include "node.h"
+#include "rpartproto.h"
+
+SEXP getSurrogates(SEXP ncat2, SEXP wt, SEXP xmat, SEXP opt, SEXP var, SEXP split);
+
+static const R_CallMethodDef CallEntries[] = {
+	// registering native routines http://www.hep.by/gnu/r-patched/r-exts/R-exts_95.html
+	{ "getSurrogates", (DL_FUNC) & getSurrogates, 6 }, { NULL, NULL, 0 }
+};
+
+#include <Rversion.h>
+void
+// registering native routines http://www.hep.by/gnu/r-patched/r-exts/R-exts_95.html
+R_init_SurrogateMinimalDepth(DllInfo * dll) {
+	R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
+	R_useDynamicSymbols(dll, FALSE);
+#if defined(R_VERSION) && R_VERSION >= R_Version(2, 16, 0)
+	R_forceSymbols(dll, TRUE);
+#endif
+}
diff --git a/src/insert_split.c b/src/insert_split.c
new file mode 100644
index 0000000..09bca80
--- /dev/null
+++ b/src/insert_split.c
@@ -0,0 +1,87 @@
+
+// This routine is from rpart
+//
+// sort a new split into a linked list, based on its "improvement"
+//
+//  allocates new memory as needed
+//   returns 0 if the new element isn't good enough,
+//   the address of the new element otherwise
+
+#include "get_surg.h"
+#include "node.h"
+#include "rpartproto.h"
+
+pSplit insert_split(pSplit *listhead, int ncat, double improve, int max) {
+	int nlist;
+	pSplit s1, s2, s3 = NULL, s4;
+
+	if (ncat == 0) {
+		ncat = 1;
+	}
+	int splitsize = sizeof(Split) + (ncat - 20) * sizeof(int);
+
+	// The Split structure is sized for 2 categories.
+	if (*listhead == 0) {
+		// first call to a new list
+		// csplit gets used even for continuous splits.
+		s3 = (pSplit) CALLOC(1, splitsize);
+		s3->nextsplit = NULL;
+		*listhead = s3;
+		return s3;
+	}
+	if (max < 2) {
+		// user asked for only 1 to be retained!
+		s3 = *listhead;
+		if (improve <= s3->improve)
+			return NULL;
+		if (ncat > 1) {
+			Free(s3);
+			s3 = (pSplit) CALLOC(1, splitsize);
+			s3->nextsplit = NULL;
+			*listhead = s3;
+		}
+		return s3;
+	}
+	// set up --- nlist = length of list, s4=last element, s3=next to last
+	nlist = 1;
+	for (s4 = *listhead; s4->nextsplit; s4 = s4->nextsplit) {
+		s3 = s4;
+		nlist++;
+	}
+
+	// now set up so that the "to be added" is between s1 and s2
+	s1 = *listhead;
+	for (s2 = *listhead; s2; s2 = s2->nextsplit) {
+		if (improve > s2->improve)
+			break;
+		s1 = s2;
+	}
+	if (nlist == max) {
+		if (s2 == 0)
+			// not good enough
+			return NULL;
+		if (ncat > 1) {
+			Free(s4);
+			s4 = (pSplit) CALLOC(1, splitsize);
+		}
+
+		// redefine element s4 as new element
+		if (s1 == s3) {
+			s4->nextsplit = NULL;
+		}
+		else {
+			s3->nextsplit = NULL;
+			s4->nextsplit = s2;
+		}
+	} else {
+		// reuse pointer s4 for new element
+		// csplit gets used even for continuous splits.
+		s4 = (pSplit) CALLOC(1, splitsize);
+		s4->nextsplit = s2;
+	}
+	if (s2 == *listhead)
+		*listhead = s4;
+	else
+		s1->nextsplit = s4;
+	return s4;
+}
\ No newline at end of file
diff --git a/src/node.h b/src/node.h
new file mode 100644
index 0000000..1dc10d2
--- /dev/null
+++ b/src/node.h
@@ -0,0 +1,76 @@
+#ifndef RPART_NODE_H
+#define RPART_NODE_H
+
+// This routine is originally from rpart.
+//
+// definition of a node in the tree
+//
+// The actual size of these structures when allocated in insert_split.c
+// depends on the split.
+// csplit[0] gets used even for continuous splits.
+
+typedef struct split {
+	double improve;
+	// for surrogates only, adjusted agreement
+	double adj;
+	// only used if it is continuous
+	double spoint;
+	struct split *nextsplit;
+	int var_num;
+	int count;
+	// the actual length depends on splitting rule
+	int csplit[20];
+} Split, *pSplit;
+
+typedef struct node {
+	// risk for the node
+	double risk;
+	pSplit primary, surrogate;
+	int lastsurrogate;
+} Node, *pNode;
+
+//
+//  Split:
+//      variable number of the split; 0 = no more surrogates (or primaries)
+//
+//      split point: the actual split point for a continuous
+//
+//      improve:  For primary splits, the improvement index returned by the
+//                bsplit routine. This is the measure that determines the
+//                winning split.
+//                For surrogate splits, this holds the error rate, i.e., the
+//                % incorrect guesses of the primary by using this surrogate.
+//
+//      count: The number of observations split using this variable. For the
+//             first primary, this will = the number of non-missing values.
+//             For surrogates, it will be the number missing in the primary
+//             and all earlier surrogates but not missing on this one. (For
+//             all primaries but the first, the number is theoretical).
+//
+//   adj:  Let "maj" be the %agreement for going with the majority,
+//         and "agree" the %agreement for this surrogate. The
+//         adjusted value is (agree - maj)/(1-maj); the amount of
+//         the potential improvement actually realized. The denominator
+//         for both percents depends on the sur_agree option.
+//
+//      csplit[0]:   For a continuous variable, we also need to know the
+//                   direction of the split. We use this "extra" variable
+//                   as 1: <x to the left, -1: <x to the right.
+//
+//      csplit[]:    For a categorical, the labels are LEFT, RIGHT, and
+//                   0=missing. (Even if a particular category is not empty,
+//                   there may be no subjects from that category present
+//                   at a particular split further down the tree).
+//
+//
+//  Node:
+//      num_obs: Number of observations in the node.
+//
+//      risk: From the eval routine. Estimate of risk, if this node were
+//            terminal.
+//
+//      lastsurrogate: Which direction to send obs for which the primary and
+//              all the surrogates are missing. (The child with the greatest
+//             sum of weights).
+
+#endif
diff --git a/src/rpartproto.h b/src/rpartproto.h
new file mode 100644
index 0000000..f3fd1d1
--- /dev/null
+++ b/src/rpartproto.h
@@ -0,0 +1,23 @@
+// This routine is originally from rpart
+//
+// prototypes for all of the functions
+//   This helps the ansi compiler do tight checking.
+//
+
+#include "node.h"
+
+void choose_surg(int n1, int n2, int *y, double *x, int *order, int ncat, double *agreement, double *split, int *csplit_for_cat, double ltot, double rtot, double *adj);
+
+void free_split(pSplit spl);
+
+void free_tree(pNode node, int freenode);
+
+pSplit insert_split(pSplit *listhead, int ncat, double improve, int max);
+
+void sort_vec(int start, int stop, double *x, int *cvec, int var);
+
+void rpcountup(pNode me, int *nsplit);
+
+void rpmatrix(pNode me, int *numcat, double **dsplit, int **isplit,  int *splits);
+
+void surrogate(pNode me, int n1, int n2);
\ No newline at end of file
diff --git a/src/rpcountup.c b/src/rpcountup.c
new file mode 100644
index 0000000..519f218
--- /dev/null
+++ b/src/rpcountup.c
@@ -0,0 +1,27 @@
+// This routine is originally from rpart.
+//
+// count up the number of nodes and splits in the final result
+//
+
+#include "get_surg.h"
+#include "node.h"
+#include "rpartproto.h"
+
+void rpcountup(pNode me, int *nsplit) {
+	int i, j;
+	pSplit ss;
+
+	i = 0;
+	j = 0;
+
+		for (ss = me->primary; ss; ss = ss->nextsplit) {
+			i++;
+		}
+
+		for (ss = me->surrogate; ss; ss = ss->nextsplit) {
+			j++;
+		}
+
+	nsplit[0] = i;
+	nsplit[1] = j;
+}
\ No newline at end of file
diff --git a/src/rpmatrix.c b/src/rpmatrix.c
new file mode 100644
index 0000000..03a4e40
--- /dev/null
+++ b/src/rpmatrix.c
@@ -0,0 +1,64 @@
+// This routine is originally from rpart.
+//
+// For S's usage, convert the linked list data into matrix form
+
+#include "get_surg.h"
+#include "node.h"
+#include "rpartproto.h"
+
+void rpmatrix(pNode me, int *numcat, double **dsplit, int **isplit,  int *nsplit) {
+
+	// dsplit  0: improvement
+	//         1: split point for continuous
+	//         2: surrogate: adjusted agreement,  primary: nothing
+	// isplit  0: variable #
+	//         1: count
+	//         2: continuous: direction -1=left, 1=right
+
+
+	int scnt;
+	int j;
+	pSplit spl;
+
+	scnt = 0;
+
+
+			spl = me->primary;
+			for (scnt = 0; scnt < nsplit[0]; scnt++) {
+				j = spl->var_num;
+				
+				if (numcat[j] == 0)
+				{
+					dsplit[1][scnt] = spl->spoint;
+					isplit[1][scnt] = -1;
+				} else
+				{
+					isplit[1][scnt] = numcat[j];
+				}
+
+				isplit[0][scnt] = spl->var_num + 1;
+				
+
+				spl = spl->nextsplit;
+			}
+
+			spl = me->surrogate;
+			int splitcnt = nsplit[0] + nsplit[1];
+			for (scnt = nsplit[0]; scnt < splitcnt; scnt++) {
+				j = spl->var_num;
+				
+				dsplit[0][scnt] = spl->adj;
+				if (numcat[j] == 0) {
+					dsplit[1][scnt] = spl->spoint;
+					isplit[1][scnt] = -1;
+				} else {
+					isplit[1][scnt] = numcat[j];
+				}
+				isplit[0][scnt] = j + 1;
+				
+
+
+				spl = spl->nextsplit;
+			}
+
+}
\ No newline at end of file
diff --git a/src/sort_vec.c b/src/sort_vec.c
new file mode 100644
index 0000000..8307df8
--- /dev/null
+++ b/src/sort_vec.c
@@ -0,0 +1,131 @@
+/*
+ * This routine is from rpart
+ *
+ * quick sort routine : sort a vector of floats, and carry along an int
+ *
+ *  x:     vector to sort on
+ *  start: first element of x to sort
+ *  stop:  last element of x to sort
+ *  cvec:  a vector to carry along
+ */
+#include "get_surg.h"
+#include "rpartproto.h"
+
+void sort_vec(int start, int stop, double *x, int *cvec, int var) {
+	int i, j, k;
+	double temp, median;
+	int tempd;
+	while (start < stop) {
+		/*
+		 * first-- if the list is short, do an ordinary insertion sort
+		 */
+		if ((stop - start) < 11) {
+			for (i = start + 1; i <= stop; i++) {
+				temp = x[i];
+				tempd = cvec[i];
+				j = i - 1;
+
+				while (j >= start && x[j] > temp) {
+					x[j + 1] = x[j];
+					cvec[j + 1] = cvec[j];
+					j--;
+				}
+				x[j + 1] = temp;
+				cvec[j + 1] = tempd;
+			}
+			return;
+		}
+		/*
+		 * list is longer -- split it into two
+		 * I use the median of 3 values as the split point
+		 */
+		i = start;
+		j = stop;
+		k = (start + stop) / 2;
+
+		median = x[k];
+		if (x[i] >= x[k]) {
+			/* one of j or k is smallest */
+			if (x[j] > x[k]) {
+				/* k is smallest */
+				if (x[i] > x[j])
+					median = x[j];
+				else
+					median = x[i];
+			}
+		} else {
+			if (x[j] < x[k]) {
+				if (x[i] > x[j])
+					median = x[i];
+				else
+					median = x[j];
+			}
+		}
+
+		/*
+		 *  Now actually do the partitioning
+		 *   Because we must have at least one element >= median, "i"
+		 *   will never run over the end of the array.  Similar logic
+		 *   applies to j.
+		 * A note on the use of "<" rather than "<=".  If a list has lots
+		 *   of identical elements, e.g. 80/100 are "3.5", then we will
+		 *   often go to the swap step with x[i]=x[j]=median.  But we will
+		 *   get the pointers i and j to meet approximately in the middle of
+		 *   the list, and that is THE important condition for speed in a
+		 *   quicksort.
+		 *
+		 */
+		while (i < j) {
+			/* top pointer down till it points at something too large */
+			while (x[i] < median)
+				i++;
+
+			/* bottom pointer up until it points at something too small */
+			while (x[j] > median)
+				j--;
+
+			if (i < j) {
+				if (x[i] > x[j]) {
+					/* swap */
+					temp = x[i];
+					x[i] = x[j];
+					x[j] = temp;
+					tempd = cvec[i];
+					cvec[i] = cvec[j];
+					cvec[j] = tempd;
+
+				}
+				i++;
+				j--;
+			}
+		}
+
+		/*
+		 * The while() step helps if there are lots of ties.  It will break
+		 *  the list into 3 parts: < median, ==median, >=median, of which only
+		 *  the top and bottom ones need further attention.
+		 * The ">=" is needed because i may be  == to j
+		 */
+		while (x[i] >= median && i > start)
+			i--;
+		while (x[j] <= median && j < stop)
+			j++;
+
+		/*
+		 * list has been split, now do a recursive call
+		 *   always recur on the shorter list, as this keeps the total
+		 *       depth of nested calls to less than log_base2(n).
+		 */
+		if ((i - start) < (stop - j)) {
+			/* top list is shorter */
+			if ((i - start) > 0)
+				sort_vec(start, i, x, cvec, var);
+			start = j;
+		} else {
+			/* bottom list is shorter */
+			if ((stop - j) > 0)
+				sort_vec(j, stop, x, cvec, var);
+			stop = i;
+		}
+	}
+}
diff --git a/src/surrogate.c b/src/surrogate.c
new file mode 100644
index 0000000..db2b4ca
--- /dev/null
+++ b/src/surrogate.c
@@ -0,0 +1,162 @@
+// This routine is from rpart
+//
+// Calculate the surrogate splits for a node and its primary
+//    (This routine is an awful lot like bsplit)
+//
+// Input :      node
+//              start and stop indices for the arrays (which obs apply)
+//
+// Output:      Fills in the node's
+//                      surrogate splits
+//                      lastsurrogate value
+//
+// Uses:        The global vector tempvec (integer) as a temporary, assumed
+//                to be of length n.
+
+#include "get_surg.h"
+#include "node.h"
+#include "rpartproto.h"
+
+void surrogate(pNode me, int n1, int n2) {
+	int i, j, k;
+	// the primary split variable
+	int var;
+	double split;
+	double improve;
+	// weight sent left and right by primary
+	double lcount, rcount;
+	int extra;
+	pSplit ss;
+	pSplit *ss_list;
+	int *index;
+	int *tempy;
+	int **sorts;
+	double **xdata;
+	double adj_agree;
+	int ncat;
+
+	// DMA 
+	tempy = (int *) calloc(rp.n, sizeof(int));
+	sorts = rp.sorts;
+	xdata = rp.xdata;
+
+	// First construct, in tempy, the "y" variable for this calculation.
+	// It will be LEFT:goes left, 0:missing, RIGHT:goes right.
+	// Count up the number of obs the primary sends to the left, as my
+	// last surrogate (or to the right, if larger).
+
+	var = (me->primary)->var_num;
+
+	// LCJ
+	// continuous variable
+	if (rp.numcat[var] == 0)
+	{
+		split = (me->primary)->spoint;
+		extra = (me->primary)->csplit[0];
+		for (i = n1; i < n2; i++)
+		{	
+			// lcj: j is the variable num out of the sorted matrix of variables "sorts", whereby "sorts" is sorted in ascending order
+			j = sorts[var][i];
+			// printf("j (von primvar == 8): %d\n", j);
+			// -> vgl. j mit logfile branch_2_sorts.txt: variable numbers stimmen überein
+			if (j < 0)
+			{
+				tempy[-(j + 1)] = 0;
+			} else
+			{
+				tempy[j] = (xdata[var][j] < split) ? extra : -extra;
+			}
+		}
+	} else
+	{ /* categorial variable */
+	// lcj: index is a list of directions for the cats, whereby the index of "index" represents the categorial and the corresponding value the direction
+	// example: index = [1, -1, -1, 1]: cat 0 goes 1 (right), cat 1 goes -1 (left), cat 2 goes -1 (left), cat 3 goes 1 (right)
+	index = (me->primary)->csplit;
+	
+	for (i = n1; i < n2; i++) {
+		j = sorts[var][i];
+	    if (j < 0) {
+		tempy[-(j + 1)] = 0;
+		}
+	    else {
+		tempy[j] = index[(int) xdata[var][j] - 1];
+		}
+	
+	}
+	
+	}
+
+
+	lcount = 0;
+	rcount = 0;
+	// lcj: var: PrimVar (see line 48)
+	for (i = n1; i < n2; i++) {
+		j = sorts[var][i];
+		//if (j < 0)
+		//	j = -(j + 1);
+		j = j < 0 ? -(j + 1) : j;
+		switch (tempy[j]) {
+		case LEFT:
+			lcount += rp.wt[j];
+			break;
+		case RIGHT:
+			rcount += rp.wt[j];
+			break;
+		default:
+			break;
+		}
+	}
+	// end parallel section
+
+	if (lcount < rcount)
+		me->lastsurrogate = RIGHT;
+	else {
+		if (lcount > rcount)
+			me->lastsurrogate = LEFT;
+		else
+			// no default
+			me->lastsurrogate = 0;
+	}
+
+	// Now walk through the variables
+	me->surrogate = (pSplit) NULL;
+	//int splitLR = rp.csplit;
+	int nthreads;
+
+		for (i = 0; i < rp.nvar; i++) {
+			if (var == i)
+				continue;
+			ncat = rp.numcat[i];
+
+			
+
+			choose_surg(n1, n2, tempy, xdata[i], sorts[i], ncat, &improve, &split, rp.csplit_for_cat, lcount, rcount, &adj_agree);
+
+			// org comment: was 0
+			if (adj_agree <= 1e-10)
+				// no better than default
+				continue;
+			
+
+			// sort it onto the list of surrogates
+
+			ss = insert_split(&(me->surrogate), ncat, improve, rp.maxsur);
+			if (ss) {
+				ss->improve = improve;
+				ss->var_num = i;
+				// corrected by nodesplit()
+				ss->count = 0;
+				ss->adj = adj_agree;
+				if ( rp.numcat[i] == 0) {
+					ss->spoint = split;
+					ss->csplit[0] = rp.csplit_for_cat[0];
+				} else {
+					for (k = 0; k < rp.numcat[i]; k++) {
+						ss->csplit[k] = rp.csplit_for_cat[k];
+					}
+				}
+				
+			}
+
+		}
+}
-- 
GitLab