【问题标题】:r - random sampling- small change in probabilities, similar order of resultsr - 随机抽样 - 概率的微小变化,结果的相似顺序
【发布时间】:2021-03-04 15:55:20
【问题描述】:

在 R 中使用 sample.int 我正在为两个群体(在示例中为 10 个人)抽取随机样本。如果概率有很小的变化,比如从 c(0.5,0.5) 到 c(0.51, 0.49) 的变化,我希望抽样或多或少保持不变,即大多数人将被分配相同的抽签(例如,如果我们有 100 个人口,也许 1 个人会改变他们的分配)。如何做到这一点?

set.seed(123)
probs.1<-c(0.51,0.49)
sample.int(n=2,
           replace = TRUE,
           size=10,
           prob=probs.1)
#[1] 1 1 2 2 2 2 1 1 2 1

set.seed(123)
probs.2<-c(0.5,0.5)
sample.int(n=2,
           replace = TRUE,
           size=10,
           prob=probs.2)
#[1] 2 2 1 1 1 1 2 2 1 2

【问题讨论】:

  • 您为什么要这样做?如果你想要相同的平局,你应该使用相同的种子和相同的概率。否则,您只是从不同的分布中进行两次单独的随机抽取(即使它们相似),因此设置种子实际上并没有做任何事情。话虽如此,我怀疑如果您将 probs 更改为 (0.1,0.9) 和 (0.11,0.89) 之类的东西,您可能会看到您想要的东西。
  • 所以我们的想法是,我们有 100 人接受治疗 A 的微观模拟,然后我们重新运行模拟,让这 100 人接受治疗 B。治疗 B 对概率的影响很小,因此我们预计对于大多数人来说,他们的结果不会改变,但在另一种情况下,少数人会产生不同的结果
  • 在这种情况下,您需要产品分发。所以 sample1 * sample2 like rbinom(100, 1, 0.5) * rbinom(100, 1, 0.01) 那么你可以更好地控制种子。所以set.seed(1); s1 &lt;- rbinom(100,1,0.5); set.seed(2); s2 &lt;- rbinom(100,1,0.1); s1 * s2.

标签: r random simulation seed


【解决方案1】:

我认为最好的方法是让你的第二个样本以你的第一个样本为基础,但只需让每个主题都有一个小概率改变组:

set.seed(123)
probs.1 <- c(0.5, 0.5)
sample1 <- sample.int(2,  100, TRUE, probs.1)
sample2 <- ifelse(sample1 == 1, 1 + rbinom(length(sample1), 1, 0.02), 2)

这意味着样本几乎相同:

head(sample1)
#> [1] 2 1 2 1 1 2

head(sample2)
#> [1] 2 1 2 1 1 2

但是一个主题(在这个例子中)已经切换了组:

table(sample1)
#> sample1
#>  1  2 
#> 47 53

table(sample2)
#> sample2
#>  1  2 
#> 46 54

reprex package (v0.3.0) 于 2020 年 11 月 21 日创建

【讨论】:

    猜你喜欢
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多