kaRma
是一个用于因果推断分析的 R 包,提供多种方法来分析数据中的因果关系,并支持使用 MICE 进行缺失数据插补
为什么要叫 kaRma(因果报应)呢?因为学医是每个人应得的报应😭
因果推断是统计学和数据科学中的一个重要概念,旨在确定一个变量(因变量)是否受到另一个变量(自变量)的影响
简单来说,因果推断的目标是回答“如果我改变某个因素,结果会发生怎样的变化?”
下面举个简单的🌰
假设我们想研究嚼槟榔是否会导致口腔癌(弗兰特色),我们可以收集一组数据,包括嚼槟榔的习惯和口腔癌病例
在因果推断中,我们希望确定嚼槟榔是否是导致口腔癌的原因,还是存在其他混杂因素(如爱不爱嗦不嗦粉、出行坐不坐摩的等)影响了结果
通过因果推断的方法(如倾向评分匹配、回归不连续设计等),我们可以更清晰地了解嚼槟榔与口腔癌之间的关系
以下是 kaRma 包中提供的因果推断方法及其介绍:
-
普通最小二乘法 (OLS)
- 原理:通过最小化平方误差来估计因变量与自变量之间的线性关系
- 优点:简单易懂,适用于线性关系
- 缺点:对异常值敏感,假设误差项独立同分布
-
工具变量法 (IV)
- 原理:使用一个或多个工具变量来解决因果关系中的内生性问题
- 优点:能有效处理内生性
- 缺点:工具变量的选择非常重要,错误的选择会导致偏差
-
广义线性模型 (GLM)
- 原理:扩展 OLS,用于处理非正态分布的因变量
- 优点:灵活,适用于多种数据类型
- 缺点:模型复杂度增加,可能导致过拟合
-
倾向评分匹配 (PSM)
- 原理:通过匹配相似特征的样本来减少选择偏差
- 优点:能够控制多种混杂变量
- 缺点:未能观察到的变量仍可能导致偏差
-
双重差分 (DID)
- 原理:通过比较处理组和控制组在不同时间点的变化来估计因果效应
- 优点:控制固定效应,适合自然实验
- 缺点:需要平行趋势假设
-
断点回归 (RDD)
- 原理:在一个阈值附近比较处理组与控制组的结果
- 优点:能够提供局部的因果推断
- 缺点:仅在阈值附近有效,外推性差
-
因果图模型
- 原理:使用图形表示变量之间的因果关系
- 优点:直观且易于理解因果结构
- 缺点:构建图形需要领域知识
-
逆概率加权 (IPW)
- 原理:通过为每个观测值分配权重来控制混杂变量
- 优点:能够处理缺失数据
- 缺点:模型依赖于准确的倾向评分估计
-
因果森林
- 原理:通过随机森林方法进行因果推断
- 优点:适用于复杂的高维数据
- 缺点:模型解释性较差
-
贝叶斯因果推断
- 原理:使用贝叶斯统计方法进行因果推断
- 优点:能够处理不确定性
- 缺点:计算复杂且对先验分布敏感
-
合成控制方法 (SCM)
- 原理:通过构建一个合成控制组来评估政策或干预的影响
- 优点:提供明确的比较基准
- 缺点:对数据的要求较高,实施复杂
- data:输入数据集,要求是一个数据框(data.frame)
- outcome_var:因变量的列名,表示要分析的结果
- method:选择的因果推断方法,支持以下选项:
- OLS:普通最小二乘法
- IV:工具变量法
- GLM:广义线性模型
- PSM:倾向评分匹配
- DID:双重差分
- RDD:断点回归
- Causal Graph:因果图模型
- IPW:逆概率加权
- Causal Forest:因果森林
- Bayesian:贝叶斯因果推断
- SCM:合成控制方法
- treatment_var:处理变量的列名,表示施加影响的因素
- covariates:协变量的列名,用于控制其他混杂因素
- threshold:针对某些方法的阈值设定,默认值为
NULL
- use_mice:是否使用 MICE 处理缺失数据,默认为
TRUE
- m:指定插补次数,默认为 5
- mice_methods:插补方法的列表,可自定义不同变量的插补方法
- save_excel:是否将结果保存为 Excel 文件,默认为
TRUE
- file_name:保存文件的名称,默认为 "results.xlsx"
# 安装和加载 kaRma 包
install.packages("devtools")
devtools::install_github("andrelau0622/kaRma")
library(kaRma)
# 示例调用
result <- karma(data = your_data,
outcome_var = "口腔癌",
method = "OLS",
treatment_var = "嚼槟榔",
covariates = c("爱嗦粉", "坐摩的"),
threshold = NULL,
use_mice = TRUE,
m = 5,
mice_methods = list("var1" = "pmm", "var2" = "cart"),
save_excel = TRUE,
file_name = "results.xlsx")
# 查看结果
print(result)