这些函数可用于生成监督(分类和回归)和无监督建模应用程序的模拟数据。
用法
sim_classification(
num_samples = 100,
method = "caret",
intercept = -5,
num_linear = 10,
keep_truth = FALSE
)
sim_regression(
num_samples = 100,
method = "sapp_2014_1",
std_dev = NULL,
factors = FALSE,
keep_truth = FALSE
)
sim_noise(
num_samples,
num_vars,
cov_type = "exchangeable",
outcome = "none",
num_classes = 2,
cov_param = 0
)
sim_logistic(num_samples, eqn, correlation = 0, keep_truth = FALSE)
sim_multinomial(
num_samples,
eqn_1,
eqn_2,
eqn_3,
correlation = 0,
keep_truth = FALSE
)
参数
- num_samples
-
要模拟的数据点的数量。
- method
-
模拟方法的字符串。对于分类,当前的单个选项是"caret"。对于回归,值可以是 "sapp_2014_1"、"sapp_2014_2"、"van_der_laan_2007_1" 或 "van_der_laan_2007_2"。请参阅下面的详细信息。
- intercept
-
线性预测器的截距。
- num_linear
-
线性递减效应的数量。
- keep_truth
-
逻辑:是否应该保留数据的真实结果值?如果是这样,则列名称为
.truth
。 - std_dev
-
残差的高斯分布标准差。默认值显示在下面的详细信息中。
- factors
-
用于确定二进制指标是否应编码为因子的单一逻辑。
- num_vars
-
要创建的噪声预测器的数量。
- cov_type
-
预测变量的多元正态相关结构。可能的值为"exchangeable" 和"toeplitz"。
- outcome
-
应模拟什么类型的独立结果(如果有)的单个字符串。 "none" 的默认值不会产生额外的列。使用"classification" 将生成一个
class
列,其中包含均匀分布的num_classes
值。 "regression" 值会生成包含独立标准正常值的outcome
列。 - num_classes
-
当
outcome = "classification"
时,要模拟的类的数量。 - cov_param
-
可交换相关值或托普利茨结构的基础的单个数值。请参阅下面的详细信息。
- eqn, eqn_1, eqn_2, eqn_3
-
仅涉及用于计算线性预测变量的变量
A
和B
的 R 表达式或(单边)公式。外部物体不应用作符号;请参阅下面的示例,了解如何在方程中使用外部对象。 - correlation
-
变量
A
和B
之间相关性的单个数值。
细节
具体回归和分类方法
这些函数提供了几种有监督的模拟方法(和一种无监督的)。通过 method
了解更多信息:
method = "caret"
这是一个具有两个类的模拟分类问题,最初是在 caret::twoClassSim()
中使用所有数字预测变量实现的。预测变量在不同的集合中进行模拟。首先,创建相关性约为 0.65 的两个多元正态预测变量(此处表示为 two_factor_1
和 two_factor_2
)。他们使用主效应和交互来改变log-odds:
intercept - 4 * two_factor_1 + 4 * two_factor_2 + 2 * two_factor_1 * two_factor_2
截距是模拟的一个参数,可用于控制类不平衡量。
第二组效应与交替符号的系数呈线性关系,并且具有 2.5 和 0.25 之间的一系列值。例如,如果该集合中有四个预测变量,则它们对 log-odds 的贡献将为
-2.5 * linear_1 + 1.75 * linear_2 -1.00 * linear_3 + 0.25 * linear_4
(请注意,这些列名称可能会根据 num_linear
的值而更改)。
第三组是单个预测器的非线性函数,范围在[0, 1]
之间,此处称为non_linear_1
:
(non_linear_1^3) + 2 * exp(-6 * (non_linear_1 - 0.3)^2)
第四组信息预测变量是从 Friedman 的一个系统复制的,并使用另外两个预测变量( non_linear_2
和 non_linear_3
):
2 * sin(non_linear_2 * non_linear_3)
所有这些效果相加后就形成了 log-odds 模型。
method = "sapp_2014_1"
该回归模拟来自 Sapp 等人。 (2014)。有 20 个独立的高斯随机预测变量,均值为零,方差为 9。预测方程为:
predictor_01 + sin(predictor_02) + log(abs(predictor_03)) +
predictor_04^2 + predictor_05 * predictor_06 +
ifelse(predictor_07 * predictor_08 * predictor_09 < 0, 1, 0) +
ifelse(predictor_10 > 0, 1, 0) + predictor_11 * ifelse(predictor_11 > 0, 1, 0) +
sqrt(abs(predictor_12)) + cos(predictor_13) + 2 * predictor_14 + abs(predictor_15) +
ifelse(predictor_16 < -1, 1, 0) + predictor_17 * ifelse(predictor_17 < -1, 1, 0) -
2 * predictor_18 - predictor_19 * predictor_20
误差为高斯分布,均值为零,方差为 9。
method = "sapp_2014_2"
该回归模拟也来自 Sapp 等人。 (2014)。有 200 个独立的高斯预测变量,均值为零,方差为 16。预测方程的截距为 1,且线性效应与 log(abs(predictor))
相同。
误差为高斯分布,均值为零,方差为 25。
method = "van_der_laan_2007_1"
这是 van der Laan 等人的回归模拟。 (2007) 有 10 个随机伯努利变量,其值为 1 的概率为 40%。真实的回归方程为:
2 * predictor_01 * predictor_10 + 4 * predictor_02 * predictor_07 +
3 * predictor_04 * predictor_05 - 5 * predictor_06 * predictor_10 +
3 * predictor_08 * predictor_09 + predictor_01 * predictor_02 * predictor_04 -
2 * predictor_07 * (1 - predictor_06) * predictor_02 * predictor_09 -
4 * (1 - predictor_10) * predictor_01 * (1 - predictor_04)
误差项为标准正态。
method = "van_der_laan_2007_2"
这是 van der Laan 等人的另一个回归模拟。 (2007),二十个高斯分布,均值为零,方差为 16。预测方程为:
predictor_01 * predictor_02 + predictor_10^2 - predictor_03 * predictor_17 -
predictor_15 * predictor_04 + predictor_09 * predictor_05 + predictor_19 -
predictor_20^2 + predictor_09 * predictor_08
误差项也是高斯分布,均值为零,方差为 16。
method = "hooker_2004"
Hooker (2004) 和 Sorokina at al (2008) 使用了以下内容:
pi ^ (predictor_01 * predictor_02) * sqrt( 2 * predictor_03 ) -
asin(predictor_04) + log(predictor_03 + predictor_05) -
(predictor_09 / predictor_10) * sqrt (predictor_07 / predictor_08) -
predictor_02 * predictor_07
预测变量 1、2、3、6、7 和 9 是标准统一的,而其他预测变量在 [0.6, 1.0]
上是统一的。误差是正常的,平均值为零,默认标准差为 0.25。
sim_noise()
该函数模拟多个均值为零的随机正态变量。如果 cov_param = 0
,这些值可以是独立的。否则,这些值是具有非对角协方差矩阵的多元正态分布。对于 cov_type = "exchangeable"
,该结构具有 cov_param
的单位方差和协方差。对于 cov_type = "toeplitz"
,协方差具有指数模式(请参见下面的示例)。
物流模拟
sim_logistic()
提供了一个灵活的接口,用于模拟具有两个多元正态变量 A
和 B
的逻辑回归模型(均值为零、单位方差和相关性由 correlation
参数确定)。
例如,使用 eqn = A + B
将指定事件的真实概率为
prob = 1 / (1 + exp(A + B))
结果列的类级别为 "one"
和 "two"
。
多项式模拟
sim_multinomial()
可以根据参数 eqn_1
、 eqn_2
和 eqn_3
中的值分别生成类 "one"
、 "two"
和 "three"
的数据。与 sim_logistic()
一样,这些方程使用预测变量 A
和 B
。
对各个方程进行求值和求幂。此后,对于每行数据,它们的值将被归一化以加起来为 1。这些概率被传递给 stats::rmultinom()
以生成结果值。
参考
Van der Laan, M. J.、Polley, E. C. 和 Hubbard, A. E. (2007)。超级学习者。遗传学和分子生物学中的统计应用,6(1)。 DOI:10.2202/1544-6115.1309。
Sapp, S.、van der Laan, M. J. 和 Canny, J. (2014)。 Subsemble:一种结合subset-specific算法拟合的集成方法。应用统计学杂志,41(6), 1247-1259。 DOI:10.1080/02664763.2013.864263
胡克,G.(2004 年 8 月)。发现黑盒函数中的加性结构。第十届 ACM SIGKDD 知识发现和数据挖掘国际会议论文集(第 575-580 页)。数字编号:10.1145/1014052.1014122
Sorokina, D.、Caruana, R.、Riedewald, M. 和 Fink, D.(2008 年 7 月)。检测与附加树林的统计相互作用。第 25 届国际机器学习会议论文集(第 1000-1007 页)。数字编号:10.1145/1390156.1390282
例子
set.seed(1)
sim_regression(100)
#> # A tibble: 100 × 21
#> outcome predictor_01 predictor_02 predictor_03 predictor_04
#> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 8.49 -1.88 -1.86 1.23 2.68
#> 2 19.3 0.551 0.126 5.07 -3.14
#> 3 57.7 -2.51 -2.73 4.76 5.91
#> 4 -8.41 4.79 0.474 -0.993 -1.15
#> 5 43.0 0.989 -1.96 -6.86 4.96
#> 6 72.3 -2.46 5.30 7.49 4.54
#> 7 -3.36 1.46 2.15 2.00 0.249
#> 8 -3.82 2.21 2.73 1.62 1.70
#> 9 22.7 1.73 1.15 -0.0402 -3.07
#> 10 25.7 -0.916 5.05 1.53 0.969
#> # ℹ 90 more rows
#> # ℹ 16 more variables: predictor_05 <dbl>, predictor_06 <dbl>,
#> # predictor_07 <dbl>, predictor_08 <dbl>, predictor_09 <dbl>,
#> # predictor_10 <dbl>, predictor_11 <dbl>, predictor_12 <dbl>,
#> # predictor_13 <dbl>, predictor_14 <dbl>, predictor_15 <dbl>,
#> # predictor_16 <dbl>, predictor_17 <dbl>, predictor_18 <dbl>,
#> # predictor_19 <dbl>, predictor_20 <dbl>
sim_classification(100)
#> # A tibble: 100 × 16
#> class two_factor_1 two_factor_2 non_linear_1 non_linear_2 non_linear_3
#> <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 class… -2.27 -1.18 -0.245 0.888 0.354
#> 2 class… -0.537 0.420 0.621 0.170 0.374
#> 3 class… 3.23 2.39 0.163 0.957 0.840
#> 4 class… 3.42 0.236 0.110 0.788 0.134
#> 5 class… 0.571 -0.100 -0.487 0.377 0.541
#> 6 class… -1.61 -0.0701 0.393 0.789 0.515
#> 7 class… 2.74 2.51 -0.751 0.459 0.931
#> 8 class… 0.0763 -0.679 0.307 0.220 0.771
#> 9 class… 0.0591 -2.35 0.402 0.566 0.712
#> 10 class… -1.39 -2.10 -0.887 0.0154 0.0784
#> # ℹ 90 more rows
#> # ℹ 10 more variables: linear_01 <dbl>, linear_02 <dbl>, linear_03 <dbl>,
#> # linear_04 <dbl>, linear_05 <dbl>, linear_06 <dbl>, linear_07 <dbl>,
#> # linear_08 <dbl>, linear_09 <dbl>, linear_10 <dbl>
# Flexible logistic regression simulation
if (rlang::is_installed("ggplot2")) {
library(dplyr)
library(ggplot2)
sim_logistic(1000, ~ .1 + 2 * A - 3 * B + 1 * A *B, corr = .7) %>%
ggplot(aes(A, B, col = class)) +
geom_point(alpha = 1/2) +
coord_equal()
f_xor <- ~ 10 * xor(A > 0, B < 0)
# or
f_xor <- rlang::expr(10 * xor(A > 0, B < 0))
sim_logistic(1000, f_xor, keep_truth = TRUE) %>%
ggplot(aes(A, B, col = class)) +
geom_point(alpha = 1/2) +
coord_equal() +
theme_bw()
}
#>
#> Attaching package: ‘dplyr’
#> The following objects are masked from ‘package:stats’:
#>
#> filter, lag
#> The following objects are masked from ‘package:base’:
#>
#> intersect, setdiff, setequal, union
## How to use external symbols:
a_coef <- 2
# splice the value in using rlang's !! operator
lp_eqn <- rlang::expr(!!a_coef * A+B)
lp_eqn
#> 2 * A + B
sim_logistic(5, lp_eqn)
#> # A tibble: 5 × 3
#> A B class
#> <dbl> <dbl> <fct>
#> 1 -0.315 0.990 one
#> 2 0.964 -0.0664 one
#> 3 1.16 0.258 one
#> 4 1.09 -0.621 one
#> 5 2.65 -0.776 one
# Flexible multinomial regression simulation
if (rlang::is_installed("ggplot2")) {
}
#> NULL
相关用法
- R modelr typical 求典型值
- R modelr resample “惰性”重采样。
- R modelr crossv_mc 生成测试训练对以进行交叉验证
- R modelr model_matrix 构建设计矩阵
- R modelr model-quality 计算给定数据集的模型质量
- R modelr permute 生成 n 个排列重复。
- R modelr fit_with 拟合公式列表
- R modelr add_residuals 将残差添加到 DataFrame
- R modelr data_grid 生成数据网格。
- R modelr formulas 创建公式列表
- R modelr add_predictions 将预测添加到 DataFrame
- R modelr seq_range 生成向量范围内的序列
- R modelr resample_partition 生成数据帧的独占分区
- R modelr add_predictors 将预测变量添加到公式中
- R modelr na.warn 处理缺失值并发出警告
- R modelr bootstrap 生成 n 个引导程序重复。
- R modelr resample_bootstrap 生成 boostrap 复制
- R vcov.gam 从 GAM 拟合中提取参数(估计器)协方差矩阵
- R gam.check 拟合 gam 模型的一些诊断
- R matrix转list用法及代码示例
- R as 强制对象属于某个类
- R null.space.dimension TPRS 未惩罚函数空间的基础
- R language-class 表示未评估语言对象的类
- R gam.reparam 寻找平方根惩罚的稳定正交重新参数化。
- R className 类名包含对应的包
注:本文由纯净天空筛选整理自Max Kuhn等大神的英文原创作品 Simulate datasets。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。