R语言randomForestSRC包 rfsrc函数使用说明 您所在的位置:网站首页 r语言month函数 R语言randomForestSRC包 rfsrc函数使用说明

R语言randomForestSRC包 rfsrc函数使用说明

2024-03-01 11:22| 来源: 网络整理| 查看: 265

返回R语言randomForestSRC包函数列表

功能\作用概述:

Breiman随机森林(Breiman2001)的快速OpenMP并行计算,用于各种数据设置,包括回归和分类以及右删失生存和竞争风险(Ishwaran et al.2008,2012)。其他关键应用包括多变量回归/分类、无监督森林、分位数回归(参见quantreg)和类不平衡数据的新解决方案(参见不平衡)。在确定性或随机分割下调用的不同分割规则适用于所有族。变量重要性(VIMP),参见VIMP和坚持.vimp以及置信域(见子样本),可以计算单个和分组变量。缺失的数据可以在培训和测试数据上进行插补(但是请参见插补)。

语法\用法:

rfsrc(formula, data, ntree = 1000, mtry = NULL, ytry = NULL, nodesize = NULL, nodedepth = NULL, splitrule = NULL, nsplit = 10, importance = c(FALSE, TRUE, "none", "permute", "random", "anti"), block.size = if (any(is.element(as.character(importance), c("none", "FALSE")))) NULL else 10, ensemble = c("all", "oob", "inbag"), bootstrap = c("by.root", "by.node", "none", "by.user"), samptype = c("swor", "swr"), samp = NULL, membership = FALSE, sampsize = if (samptype == "swor") function(x){x * .632} else function(x){x}, na.action = c("na.omit", "na.impute"), nimpute = 1, ntime, cause, proximity = FALSE, distance = FALSE, forest.wt = FALSE, xvar.wt = NULL, yvar.wt = NULL, split.wt = NULL, case.wt = NULL, forest = TRUE, var.used = c(FALSE, "all.trees", "by.tree"), split.depth = c(FALSE, "all.trees", "by.tree"), seed = NULL, do.trace = FALSE, statistics = FALSE, ...)

## convenient interface for growing a CART treerfsrc.cart(formula, data, ntree = 1, mtry = ncol(data), bootstrap = "none", ...)

参数说明:

formula : 模型的符号描述。如果缺少,则实现无监督拆分。

data : 包含y-结果和x-变量的数据框。

ntree : 树的数量。

mtry : 随机选择作为节点分裂候选变量的变量数。对于回归,默认值是p/3,其中p等于变量数。对于其他族(包括非监督设置),默认值为issqrt(p)。值总是向上舍入。

ytry : 对于无监督的林,设置随机选择的伪响应数(有关详细信息,请参见下文)。默认值是ytry=1,它选择一个伪响应。

nodesize : 林终端节点中唯一案例(数据点)的平均数。默认值是:生存(15),竞争风险(15),回归(5),分类(1),混合结果(3),无监督(3)。建议使用不同的节点值进行试验。

nodedepth : 树木生长的最大深度。默认行为是忽略此参数。

splitrule : 拆分规则(见下文)。

nsplit : 为每个候选拆分变量考虑的随机拆分数的非负整数值。这大大提高了速度。当为零或空时,在考虑所有可能的拆分的情况下,使用更慢的确定性拆分。

importance : 计算变量重要性(VIMP)的方法;见下文。默认操作是codemantity=“none”,但是稍后可以使用VIMP或predict恢复VIMP通道。

block.size : 累积错误率应该每一次计算一次吗树&5当为空时,它将只在最后一棵树上计算,并且累积错误率的绘图将导致aflat行。要查看每n棵树上的累积错误率,请将该值设置为1和ntree之间的整数。作为一种倾向性的副作用,如果需要重要性,VIMP是以大小等于的“块”计算的块大小,从而在系综和置换VIMP之间达成了一个有用的折衷。默认操作是使用10棵树。

ensemble : 指定集合的类型。默认情况下,将同时返回“不带包”(OOB)和“带包内”集合。始终使用oob值来干扰训练数据。

bootstrap : 引导协议。默认值为谁说的通过带替换或不带替换的采样引导数据(默认情况下,采样是不带替换的;请参阅下面的选项samptype)。如果按节点如果选择,则数据将在每个节点上以替换方式引导,同时增加树。如果如果未选择none,则根本不引导数据。Ifby.user用户如果选择,则使用samp指定的引导。不可能返回OOB集合或预测错误,如果按节点或者没有一个是有效的。

samptype : 启动类型根目录在效果。选择分别为SWR(不更换取样)和SWR(更换取样)。与Breiman的randomforests不同的是,这里的默认操作是采样,而不是替换。因此出袋(OOB)技术上是指样品外,但由于遗留的原因,我们保留了OOB这个术语。

samp : 启动规范按用户是无效的。dim n x ntree数组,指定每个记录在每个树的引导数据库中出现在包中的次数。

membership : 终端节点成员资格和inbaginformation是否应返回&5

sampsize : 指定引导数据大小的函数白头翁已生效。对于不替换的采样,它是请求的样本大小,默认情况下是样本大小的.632倍。对于替换取样,则为样品大小。可以也可以使用数字指定。

na.action : 如果数据包含NA,则采取的操作。可能的值为不,省略或者归罪违约不,省略删除整个记录,即使其中一个条目是NA(对于x变量,这只适用于“公式”中特别列出的那些)。选择NA.impute估算数据。有关快速直接插补,请参见函数插补。

nimpute : 缺失数据的迭代次数算法性能如果nimpute大于1,则诸如out-of-bag(OOB)错误率之类的度量往往会变得乐观。

ntime : 用于生存的整数值,用于将集合计算约束到n个时间点的网格。或者,如果提供长度大于1的值向量,则假定这些是用于约束计算的时间点(注意,使用的约束时间点将是最接近用户提供的时间点的观测事件时间)。如果未指定值,则默认操作是使用所有observedevent时间。

cause : 介于1和J之间的整数值,表示用于拆分节点以获取竞争风险的事件,其中Jis是事件类型的数量。如果未指定,则默认使用对所有事件进行平均的复合拆分规则类型。可以也可以是长度为js的非负权重向量,为每个事件指定权重(例如,传递一个one的向量将恢复为默认的复合分割统计)。最后,不管如何指定原因,返回的forestobject总是为所有事件类型提供估计值。

proximity : 通过共享同一终端节点的频率测量的案例的接近度。这是一个nxnmatrix,可以很大。选项有inbag、oob、all、TRUE或FALSE。设置proximity=TRUE相当于proximity=“inbag”。

distance : 实例之间的距离,由每个实例到其直接共同祖先节点的边数之和与每个实例到根节点的边数之和的比值来度量。如果案例是树的共终端,那么这个度量值为零,并减少到1—这些案例在atree中的邻近度量值。这是一个nxn矩阵,可以大。选择是inbag、oob、all、TRUE还是FALSE。设置distance=TRUE相当于distance=“inbag”。

forest.wt : 森林权重矩阵计算# 5创建一个nxn矩阵,用于预测和构造定制的估计器。选项类似于邻近:inbag、oob、all、TRUE或FALSE。默认值为TRUE,相当于inbag。

xvar.wt : 非负权重向量(不必求和为1),表示选择变量进行分裂的概率。默认设置是使用统一权重。

yvar.wt : 尚未实现:非负权重向量(不必求和为1),表示在非监督设置中选择响应作为分裂统计候选的概率。默认设置是使用统一权重。

split.wt : 非负权重向量,用于将变量的分裂统计量相乘。较大的值会鼓励节点在特定变量上拆分。默认值是使用统一权重。

case.wt : 抽样情况下的非负权重向量(不必求和为1)。在自举(或子抽样)样本中,选择权重较大的观测值的概率较高。一般来说,使用实数权重比使用整数要好。请参见下面的乳房数据集示例,以说明其对类不平衡数据的使用。

forest : 林对象应该是返回&5用于对新数据进行预测,是许多PackageFunction所需要的。

var.used : 返回用于拆分# 5默认值为false。可能的值为所有的树返回一个变量发生分裂的次数,安德比树它返回一个矩阵,记录特定树中某个变量发生拆分的次数。

split.depth : 记录每个孔的最小深度变量。默认值是假的。可能的值为所有的树返回特定情况下变量(列)的平均最小深度矩阵(行),以及按树它返回一个三维数组,记录特定树(第三维)的变量(第二维)的特定情况(第一维)的最小深度。

seed : 指定随机数字生成器种子的负整数。

do.trace : 在大约完成时间内向用户更新之间的秒数。

statistics : 是否应该使用拆分统计返回&5可以使用统计拆分.

... : 传递给其他方法或从其他方法传递的其他参数。

示例\实例:

##------------------------------------------------------------## survival analysis##------------------------------------------------------------

## veteran data## randomized trial of two treatment regimens for lung cancerdata(veteran, package = "randomForestSRC")v.obj < - rfsrc(Surv(time, status) ~ ., data = veteran, ntree = 100, block.size = 1)

## print and plot the grow objectprint(v.obj)plot(v.obj)

## plot survival curves for first 10 individuals -- direct waymatplot(v.obj$time.interest, 100 * t(v.obj$survival.oob[1:10, ]), xlab = "Time", ylab = "Survival", type = "l", lty = 1)

## plot survival curves for first 10 individuals## using function "plot.survival" plot.survival(v.obj, subset = 1:10)

## fast nodesize optimization for veteran data## optimal nodesize in survival is larger than other families## see the function "tune" for more examplestune.nodesize(Surv(time,status) ~ ., veteran)

## Primary biliary cirrhosis (PBC) of the liverdata(pbc, package = "randomForestSRC")pbc.obj < - rfsrc(Surv(days, status) ~ ., pbc)print(pbc.obj)

##------------------------------------------------------------## example of imputation in survival analysis##------------------------------------------------------------

data(pbc, package = "randomForestSRC")pbc.obj2 < - rfsrc(Surv(days, status) ~ ., pbc, nsplit = 10, na.action = "na.impute")

## same as above but we iterate the missing data algorithmpbc.obj3 < - rfsrc(Surv(days, status) ~ ., pbc, na.action = "na.impute", nimpute = 3)

## fast way to impute the data (no inference is done)## see impute for more detailspbc.imp < - impute(Surv(days, status) ~ ., pbc, splitrule = "random")

##------------------------------------------------------------## compare RF-SRC to Cox regression## Illustrates C-index and Brier score measures of performance## assumes "pec" and "survival" libraries are loaded##------------------------------------------------------------

if (library("survival", logical.return = TRUE) & library("pec", logical.return = TRUE) & library("prodlim", logical.return = TRUE))

{ ##prediction function required for pec predictSurvProb.rfsrc < - function(object, newdata, times, ...){ ptemp < - predict(object,newdata=newdata,...)$survival pos < - sindex(jump.times = object$time.interest, eval.times = times) p < - cbind(1,ptemp)[, pos + 1] if (NROW(p) != NROW(newdata) || NCOL(p) != length(times)) stop("Prediction failed") p }

## data, formula specifications data(pbc, package = "randomForestSRC") pbc.na < - na.omit(pbc) ##remove NA's surv.f < - as.formula(Surv(days, status) ~ .) pec.f < - as.formula(Hist(days,status) ~ 1)

## run cox/rfsrc models ## for illustration we use a small number of trees cox.obj < - coxph(surv.f, data = pbc.na, x = TRUE) rfsrc.obj < - rfsrc(surv.f, pbc.na, ntree = 150)

## compute bootstrap cross-validation estimate of expected Brier score ## see Mogensen, Ishwaran and Gerds (2012) Journal of Statistical Software set.seed(17743) prederror.pbc < - pec(list(cox.obj,rfsrc.obj), data = pbc.na, formula = pec.f, splitMethod = "bootcv", B = 50) print(prederror.pbc) plot(prederror.pbc)

## compute out-of-bag C-index for cox regression and compare to rfsrc rfsrc.obj < - rfsrc(surv.f, pbc.na) cat("out-of-bag Cox Analysis ...", "\n") cox.err < - sapply(1:100, function(b) { if (b%%10 == 0) cat("cox bootstrap:", b, "\n") train < - sample(1:nrow(pbc.na), nrow(pbc.na), replace = TRUE) cox.obj < - tryCatch({coxph(surv.f, pbc.na[train, ])}, error=function(ex){NULL}) if (!is.null(cox.obj)) { get.cindex(pbc.na$days[-train], pbc.na$status[-train], predict(cox.obj, pbc.na[-train, ])) } else NA }) cat("\n\tOOB error rates\n\n") cat("\tRSF : ", rfsrc.obj$err.rate[rfsrc.obj$ntree], "\n") cat("\tCox regression : ", mean(cox.err, na.rm = TRUE), "\n")}

##------------------------------------------------------------## competing risks##------------------------------------------------------------

## WIHS analysis## cumulative incidence function (CIF) for HAART and AIDS stratified by IDU

data(wihs, package = "randomForestSRC")wihs.obj < - rfsrc(Surv(time, status) ~ ., wihs, nsplit = 3, ntree = 100)plot.competing.risk(wihs.obj)cif < - wihs.obj$cif.oobTime < - wihs.obj$time.interestidu < - wihs$iducif.haart < - cbind(apply(cif[,,1][idu == 0,], 2, mean), apply(cif[,,1][idu == 1,], 2, mean))cif.aids < - cbind(apply(cif[,,2][idu == 0,], 2, mean), apply(cif[,,2][idu == 1,], 2, mean))matplot(Time, cbind(cif.haart, cif.aids), type = "l", lty = c(1,2,1,2), col = c(4, 4, 2, 2), lwd = 3, ylab = "Cumulative Incidence")legend("topleft", legend = c("HAART (Non-IDU)", "HAART (IDU)", "AIDS (Non-IDU)", "AIDS (IDU)"), lty = c(1,2,1,2), col = c(4, 4, 2, 2), lwd = 3, cex = 1.5)

## illustrates the various splitting rules## illustrates event specific and non-event specific variable selectionif (library("survival", logical.return = TRUE)) {

## use the pbc data from the survival package ## events are transplant (1) and death (2) data(pbc, package = "survival") pbc$id < - NULL

## modified Gray's weighted log-rank splitting pbc.cr < - rfsrc(Surv(time, status) ~ ., pbc)

## log-rank event-one specific splitting pbc.log1 < - rfsrc(Surv(time, status) ~ ., pbc, splitrule = "logrank", cause = c(1,0), importance = TRUE)

## log-rank event-two specific splitting pbc.log2 < - rfsrc(Surv(time, status) ~ ., pbc, splitrule = "logrank", cause = c(0,1), importance = TRUE)

## extract VIMP from the log-rank forests: event-specific ## extract minimal depth from the Gray log-rank forest: non-event specific var.perf < - data.frame(md = max.subtree(pbc.cr)$order[, 1], vimp1 = 100 * pbc.log1$importance[ ,1], vimp2 = 100 * pbc.log2$importance[ ,2]) print(var.perf[order(var.perf$md), ])

}

## ------------------------------------------------------------## regression analysis## ------------------------------------------------------------

## new York air quality measurementsairq.obj < - rfsrc(Ozone ~ ., data = airquality, na.action = "na.impute")

# partial plot of variables (see plot.variable for more details)plot.variable(airq.obj, partial = TRUE, smooth.lines = TRUE)

## motor trend carsmtcars.obj < - rfsrc(mpg ~ ., data = mtcars)

## ------------------------------------------------------------## regression with custom bootstrap## ------------------------------------------------------------

ntree < - 25n < - nrow(mtcars)s.size < - n / 2swr < - TRUEsamp < - randomForestSRC:::make.sample(ntree, n, s.size, swr)o < - rfsrc(mpg ~ ., mtcars, bootstrap = "by.user", samp = samp)

## ------------------------------------------------------------## classification analysis## ------------------------------------------------------------

## iris datairis.obj < - rfsrc(Species ~., data = iris)

## wisconsin prognostic breast cancer datadata(breast, package = "randomForestSRC")breast.obj < - rfsrc(status ~ ., data = breast, block.size=1)plot(breast.obj)

## ------------------------------------------------------------## unsupervised analysis## ------------------------------------------------------------

# two equivalent ways to implement unsupervised forestsmtcars.unspv < - rfsrc(Unsupervised() ~., data = mtcars)mtcars2.unspv < - rfsrc(data = mtcars)

## ------------------------------------------------------------## multivariate regression analysis## ------------------------------------------------------------

mtcars.mreg < - rfsrc(Multivar(mpg, cyl) ~., data = mtcars, block.size=1, importance = TRUE)

## extract error rates, vimp, and OOB predicted values for all targetserr < - get.mv.error(mtcars.mreg)vmp < - get.mv.vimp(mtcars.mreg)pred < - get.mv.predicted(mtcars.mreg)

## standardized error and vimperr.std < - get.mv.error(mtcars.mreg, standardize = TRUE)vmp.std < - get.mv.vimp(mtcars.mreg, standardize = TRUE)

## ------------------------------------------------------------## mixed outcomes analysis## ------------------------------------------------------------

mtcars.new < - mtcarsmtcars.new$cyl < - factor(mtcars.new$cyl)mtcars.new$carb < - factor(mtcars.new$carb, ordered = TRUE)mtcars.mix < - rfsrc(cbind(carb, mpg, cyl) ~., data = mtcars.new, block.size=1)print(mtcars.mix, outcome.target = "mpg")print(mtcars.mix, outcome.target = "cyl")plot(mtcars.mix, outcome.target = "mpg")plot(mtcars.mix, outcome.target = "cyl")

## ------------------------------------------------------------## custom splitting using the pre-coded examples## ------------------------------------------------------------

## motor trend carsmtcars.obj < - rfsrc(mpg ~ ., data = mtcars, splitrule = "custom")

## iris analysisiris.obj < - rfsrc(Species ~., data = iris, splitrule = "custom1")

## WIHS analysiswihs.obj < - rfsrc(Surv(time, status) ~ ., wihs, nsplit = 3, ntree = 100, splitrule = "custom1")



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有