温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装命令如下:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
⛳ Stata 系列推文:
作者:吕卓阳 (厦门大学)
邮箱:lvzy20@163.com
目录
R 是统计和数据分析应用中的一件利器,它具有免费开源、语言易懂、大量成熟的库与工具等优点。在「Stata 与 R 的无缝对接」一文中,我们已经介绍了如何通过 Rcall
在 Stata 中运行 R 语言。在本文中,我们将继续为大家介绍新的在 Stata 中调用 R 的包 MLRtime
。该包允许在 Stata 中使用 R 的 grf
包与 ranger
包,从而实现随机森林的因果推断与预测功能。
我们需要配置环境以方便在 Stata 中调用 R 以实现机器学习。首先,需要通过以下命令安装 MLRtime
包:
*方法一
cnssc install lxhget, replace
lxhget mlrtime.pkg, install replace
*方法二
net install MLRtime, from("https://raw.githubusercontent.com/NickCH-K/MLRtime/master/")
其次,我们需要在 Stata 中配置 rcall
环境,主要步骤如下:
net install github, from("https://haghish.github.io/github/")
github install haghish/rcall, stable
最后,需要在 Stata 命令框中输入 MLRtimesetup, go
,以确保 Stata 所需的包与 rcall
(Haghish, 2019) 都已正确下载安装。完成以上设置后,就可以在 Stata 中调用 R 了!我们每次只需要在 Stata 的命令框中输入 rcall
,就可以开始在 Stata 中运行 R 代码。由于 rcall
的基本功能已在「Stata 与 R 的无缝对接」中有详细介绍,本文将着重介绍使用 MLRtime
来进行机器学习建模。
rcall clear
sysuse auto.dta, clear
causal_forest price foreign mpg rep78 headroom trunk weight length turn, ///
clearR replace seed(1002) pred(effect) opts(num.trees=50) ///
varreturn(effectSE = sqrt(predict(CF, X, estimate.variance = TRUE)@@variance.estimates)) ///
return(ate = average_treatment_effect(CF)[1];ateSE = average_treatment_effect(CF)[2])
MLRtime 的两个主要函数是 causal_forest
与 ranger
,本质是调用 R 中的 causal_forest
函数进行随机森林因果推断与 ranger
函数进行随机森林预测。首先,我们先介绍一下R中的这两个函数。
R 的 causal_forest
是 grf
包中用于随机森林因果推断的一个函数,本质是使用随机森林的算法来进行回归,估计得到平均处理效应。grf
包是基于随机森林进行统计估计与推断的一个集成包,它为最小二乘回归、分位数回归、生存分析与处理效应估计提供非参数方法。R 的 ranger
是 ranger
包中用于随机森林因果预测的一个函数。ranger
包是 Wright 和 Ziegler (2017) 开发的高维数据随机森林的一个 R 包,可以高效的实现随机森林预测,支持分类、回归、生存森林的实现。
我们可以在 R document 的「官网」搜索 causal_forest
,点击进入函数介绍页面,causal_forest
因果森林可以用于估计平均处理效应 grf
包中 causal_forest
函数的主要参数,其余参数详见「R document」。
causal_forest(
X,
Y,
W,
Y.hat = NULL,
W.hat = NULL,
num.trees = 2000,
sample.weights = NULL,
clusters = NULL
)
X
:用于估计因果森林的协变量;Y
:结果变量,必须是无 NA 的数值型变量;W
:处理变量,必须是无 NA 的二元或数值型变量;Y.hat
:处理效应的边际影响 W.hat
:处理效应的倾向匹配,默认值为 NULL;num.trees
:随机森林数量,默认值为 2000;sample.weights
:给予每个样本的权重,默认值为 NULL;clusters
:标准误集聚,默认值为 NULL。R 的 ranger
包中的ranger
函数可以用于随机森林的快速实现,尤其适用于高维数据,主要参数介绍如下,其余参数可以详见「R document」。
ranger(
formula = NULL,
data = NULL,
num.trees = 500,
mtry = NULL,
importance = "none"
)
formula
:随机森林拟合模型,仅适用于数值型变量;data
:训练数据集,一般为 dataframe、matrix、dgCMatrix、gwaa.data;num.trees
:随机森林数量;mtry
:每个节点中可能拆分的变量数,默认值为平方根;importance
:变量重要性,可选 none、impurity、impurity_corrected、permutation。随机森林是基于树模型的一种分类方法,Susan 等 (2019) 基于 Breiman (2001) 的随机森林方法提出了一种广义随机森林方法。该方法可以用于估计局部矩条件识别的任意 grf
包中causal_forest
就是用于估计随机森林的平均处理效应
当
我们可以在 Stata 中调用 MLRtime 包的 causal_forest
函数,来调用 R 的 grf
包中的 causal_forest
以实现随机森林因果推断。函数及参数含义如下:
causal_forest depvar indvar varlist [if] [in] [weight], [options]
clearR
:运行前启动一个新的 R 环境;replace
:替换内存中同名变量;seed(integer)
:在 R 中设置随机数种子;pred(string)
:存储预测效果的变量名,需要满足 R 和 Stata 的命名条件;predopts(string)
:一系列预测命令的选项,用逗号分割,主要参数如下,可以使用 rcall:help(predict.causal_forest,package='grf')
命令来进一步查看:predict(object,newdata = NULL,linear.correction.variables = NULL,
ll.lambda = NULL,ll.weight.penalty = FALSE,
num.threads = NULL,estimate.variance = FALSE)
opts(string)
:一系列参数,用逗号连接,使用 @@
代替 $
,否则 Stata 将返回全局变量;varreturn(string)
:返回新变量,以 @@
代替 $
,否则 Stata 将返回全局变量;return(string)
:返回变量,以 (ate = average_treatment_effect(CF)[1]; ateSE = average_treatment_effect(CF)[2])
varsend(varlist)
:发送到R中到变量列表precedes
:其他参数,详见rcall:help(grf::causal_forest)
follows
:希望在R中运行并返回Stata前执行到操作,详见 rcall:help(grf::causal_forest)
Wright 和 Ziegler (2017) 提出了高维数据随机森林,提高了随机森林的运算效率,并开发了 R 的 ranger
包。ranger
函数可以高效率的实现随机森林算法,并支持分类和回归森林 (Breiman 2001)、生存森林 (Ishwaran 等 2008)。除了在 R 中直接调用 ranger
函数,我们还可以在 Stata 中通过 MLRtime 来调用这一函数,Stata 中 ranger
函数命令介绍如下:
ranger depvar varlist [if] [in] [weight], [options]
clearR
:运行前启动一个新的 R 环境;replace
:替换内存中同名变量;seed(integer)
:在 R 中设置随机数种子;pred(string)
:存储预测效果的变量名,需要满足 R 和 Stata 的命名条件;predopts(string)
:一系列预测命令的选项,用逗号分割,主要参数如下,可以使用 rcall:help(predict.ranger,package='ranger')
命令来进一步查看:predict(object,data = NULL,predict.all = FALSE,num.trees = object$num.trees,
type = "response",se.method = "infjack",
quantiles = c(0.1, 0.5, 0.9),what = NULL,seed = NULL,
num.threads = NULL,verbose = TRUE)
opts(string)
传递给 R 一系列参数,用逗号连接,使用 @@
代替 $
,否则 Stata 将返回全局变量;varreturn(string)
:返回新变量,以 @@
代替 $
,否则 Stata 将返回全局变量;return(string)
:返回变量,以 (ate = average_treatment_effect(CF)[1]; ateSE = average_treatment_effect(CF)[2])
varsend(varlist)
:发送到R中到变量列表;precedes
:其他参数,详见 rcall:help(grf::causal_forest)
;follows
:希望在 R 中运行并返回 Stata 前执行到操作,详见 rcall:help(grf::causal_forest)
。可以看到 ranger
函数在 MLRtime 的形式与 causal_forest
完全相同,但两个函数的目的不同。前者是用于因果森林,后者是用于随机森林预测,尤其是对于高维数据。通过这两个函数,就可以实现在 Stata 中调用 R 进行随机森林算法的估计,其本质是调用 R 的 ranger
包和 grf
包。
我们使用 titanic 数据集进行因果森林与随机森林预测估计:
*使用 titanic 数据集样本内估计 ate
lxhget titanic.csv, replace
import delimited using titanic.csv, clear
sum
tabstat age pclass sibsp parch,by(survived)
gen female = 0
replace female = 1 if sex == "female"
gen name_length = strlen(name)
rcall clear
causal_forest survived age pclass sibsp female name_length, ///
clearR replace seed(1002) pred(effect) opts(num.trees=50) ///
varreturn(effectSE = sqrt(predict(CF, X, estimate.variance = TRUE)@@variance.estimates)) ///
return(ate = average_treatment_effect(CF)[1];ateSE = average_treatment_effect(CF)[2])
di r(ate)
di r(ateSE)
*使用 titanic 数据集样本内预测生存概率
lxhget titanic.csv, replace
import delimited using titanic.csv, clear
sum
tabstat age pclass sibsp parch,by(survived)
gen female = 0
replace female = 1 if sex == "female"
gen name_length = strlen(name)
rcall clear
ranger survived age pclass sibsp female name_length, clearR replace ///
seed(1002) pred(pred_survived) predopts(data=rangerdata) ///
opts(num.trees=50, importance = 'permutation') ///
return(importance = as.matrix(importance(RF)))
pwcorr survived pred_survived
MLRtime 是使用 Stata 调用 R 机器学习包的一个途径。尽管目前能实现的只有因果森林与随机森林预测,并且无法像 R 与 Python 一样可以方便的划分训练集与测试集,但是我们相信在未来的发展中,Stata 与 R 或其他软件的交互会越来越深入,可以实现的功能也越来越强大。
Note:产生如下推文列表的 Stata 命令为:
lianxh 随机森林 机器学习 交互, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh