【问题标题】:Sample function with prob applied to a multivariable matrix将概率应用于多变量矩阵的样本函数
【发布时间】:2017-02-24 16:08:59
【问题描述】:

目前,我正在尝试引导一个包含 114 个 obs 和 16 个变量的数据集。

我使用的示例函数如下:

x[sample(nrow(x),size=114,replace=TRUE),] where x is my dataset. 

但是,我想使用分配给特定列的概率进行采样,因为示例函数包含这种可能性。例如,我想以 1-5 0.1 和 5-200 0.9 之间的数字概率对第 5 列进行采样。

我该怎么做?

【问题讨论】:

  • 在寻求帮助时,您应该在reproducible example 中包含示例输入和所需的输出。您究竟是如何“存储”这些需求的?
  • @MrFlick 感谢您的帮助,我目前正在按天对这些列进行排序,因为它是不列颠之战数据。因此,我的专栏是当前的个别日子和坠毁的飞机,以及他们袭击的位置。因此,我有效地寻求重新采样数据以创建反事实历史。例如,如果德国只攻击伦敦,它将如何影响英国的损失。

标签: r statistics-bootstrap


【解决方案1】:

如果我了解您在寻找什么,这可能是 mapply 的工作。

# fake data
x <- as.data.frame(matrix(1:10,nrow=2))
x
  V1 V2
1  1  6
2  2  7
3  3  8
4  4  9
5  5 10

# fake probabilities of each row, for each column
probs <- as.data.frame(matrix(c(.1,.1,.1,.2,.5,.5,.2,.1,.1,.1),ncol=2))
probs
   V1  V2
1 0.1 0.5
2 0.1 0.2
3 0.1 0.1
4 0.2 0.1
5 0.5 0.1

# then a little mapply magic - change size as needed
mapply(sample, x=x, prob=probs, replace=T, size=10)
      V1 V2
 [1,]  5  7
 [2,]  5  7
 [3,]  2  6
 [4,]  5  6
 [5,]  1  6
 [6,]  5  9
 [7,]  1  9
 [8,]  5  9
 [9,]  5  6
[10,]  4  7

【讨论】:

  • 感谢您的回复马特,是否可以对一列数据执行此操作并将行(实例)保持在一起。
  • 我认为不可能将行(实例)保持在一起,同时与每列相关联的行概率不同。如果您只想要不同的行概率,那么解决方案实际上比上面介绍的更简单。使用你原来的概率,你可以做p &lt;- c(rep(0.1,5),rep(0.9,195)),然后x[sample(nrow(x),size=114,replace=TRUE,prob=p),]
  • 谢谢马特,这是合乎逻辑的。但是,我的问题更多是是否可以将您所说的概率 c(rep(0.1,5),rep(0.9,195)) 与特定列对齐并将行保持在一起。例如,您能否将此概率分配给样本函数的第 4 列?感谢您的帮助
猜你喜欢
  • 2015-04-23
  • 2022-12-08
  • 2021-01-10
  • 2021-06-20
  • 2021-05-11
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多