当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


R modeldata sim_classification 模拟数据集

这些函数可用于生成监督(分类和回归)和无监督建模应用程序的模拟数据。

用法

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

仅涉及用于计算线性预测变量的变量 AB 的 R 表达式或(单边)公式。外部物体不应用作符号;请参阅下面的示例,了解如何在方程中使用外部对象。

correlation

变量 AB 之间相关性的单个数值。

细节

具体回归和分类方法

这些函数提供了几种有监督的模拟方法(和一种无监督的)。通过 method 了解更多信息:

method = "caret"

这是一个具有两个类的模拟分类问题,最初是在 caret::twoClassSim() 中使用所有数字预测变量实现的。预测变量在不同的集合中进行模拟。首先,创建相关性约为 0.65 的两个多元正态预测变量(此处表示为 two_factor_1two_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_2non_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() 提供了一个灵活的接口,用于模拟具有两个多元正态变量 AB 的逻辑回归模型(均值为零、单位方差和相关性由 correlation 参数确定)。

例如,使用 eqn = A + B 将指定事件的真实概率为


   prob = 1 / (1 + exp(A + B))

结果列的类级别为 "one""two"

多项式模拟

sim_multinomial() 可以根据参数 eqn_1eqn_2eqn_3 中的值分别生成类 "one""two""three" 的数据。与 sim_logistic() 一样,这些方程使用预测变量 AB

对各个方程进行求值和求幂。此后,对于每行数据,它们的值将被归一化以加起来为 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/simulations.R

相关用法


注:本文由纯净天空筛选整理自Max Kuhn等大神的英文原创作品 Simulate datasets。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。