【问题标题】:How does the probability argument work in the sample() function in R概率参数如何在 R 中的 sample() 函数中工作
【发布时间】:2022-02-14 00:34:45
【问题描述】:

我试图了解 R 中 sample() 函数中的称重是如何工作的(概率参数)。

# seed
set.seed(123)

# some numbers
x = c(1:100)

# some probabilties
p = seq(from = 0, to = 1, length.out = 100)

# sample size
n = 10000

# sample 10000 times from x with probability p
x1 <- sample(x, size = n, replace = TRUE, prob = p)

# plot
hist(x1)
plot(density(x1))

现在这大概是概率论证的作用吗?

# adding weights manually
weight = rep(x, n * p)
# now sample from the weighted vector
x2 <- sample(weight, n, replace = TRUE) 

# plot
hist(x2)
plot(density(x2))

情节看起来非常相似,所以看起来可能是这种情况。

编辑

我认为我在手动添加权重时犯了一个错误,即我使用了n*p,但我认为我应该使用x*p。然后结果确实有点变化:

# adding weights manually
weight = rep(x, x * p)
# now sample from the weighted vector
x2 <- sample(weight, n, replace = TRUE) 

【问题讨论】:

  • “现在这大概就是概率论证的作用了吗?” - 取决于您所说的“大约”是什么意思。如果你的意思是如果它在功能上是等效的,那么答案是“是”。另一方面——如果你问代码是否做了类似的事情——答案几乎肯定是“不”。复制元素并不是一种非常有效的加权选择方式。
  • 谢谢@JohnColeman - 这就是我一直在寻找的,即它是否在概念上相似。虽然我现在意识到我的称重尝试很糟糕。
  • 了解 sample() 在幕后所做的非常有用的答案:stackoverflow.com/a/59921493/4308815

标签: r


【解决方案1】:

您得到的结果是预期的,因为通过将p 定义为一系列均匀间隔的数字,x 的值越大,其被采样的概率就越大。正如你所说,这是一个加权抽样程序。

请看以下两种情况。

在第一种情况下,采样元素2 的概率大 4 倍,结果大致显示了这一点。

set.seed(2022)

# sample size
n <- 10000

v <- 1:2
x <- sample(v, n, replace = TRUE, prob = c(1, 4)/5)
proportions(table(x))
#> x
#>      1      2 
#> 0.1976 0.8024
barplot(table(x))

在下面的例子中,对10 进行采样的概率是对向量1:100 中任何其他数字进行采样的概率的 600 倍以上。

s <- 1:100
p <- rep(1, 100)
p[10] <- 400
p <- p/sum(p)
y <- sample(s, n, replace = TRUE, prob = p)
proportions(table(y))
hist(y)

reprex package (v2.0.1) 于 2022-02-13 创建

【讨论】:

  • 谢谢!这进一步说明了概率论点的作用。在我的示例中,我尝试手动权衡向量,然后使用 sample() 函数没有概率参数来查看结果是否相似。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多