逐行从均匀分布中抽样

huangapple go评论58阅读模式
英文:

Sampling from uniform distribution row wise

问题

考虑以下数据:

df <- data.frame(id=1:5,
                 x_min = c(0.1,0.2,0.3,0.4,0.5),
                 x_max = c(0.15,0.23,0.38,0.44,0.57))

我打算从每一行抽取一个来自均匀分布的随机样本。为什么我对列 y 获取相同的值?以下是我的操作:

set.seed(12)
df$y <- runif(1, min=df$x_min, max=df$x_max)

输出:

> df
  id x_min x_max        y
1  1   0.1  0.15 0.103468
2  2   0.2  0.23 0.103468
3  3   0.3  0.38 0.103468
4  4   0.4  0.44 0.103468
5  5   0.5  0.57 0.103468
英文:

Consider the following data:

df &lt;- data.frame(id=1:5,
                 x_min = c(0.1,0.2,0.3,0.4,0.5),
                 x_max = c(0.15,0.23,0.38,0.44,0.57))

I intend to draw a random sample from a uniform distribution for each row. Why I'm getting the same values for column y? Here is what I did:

set.seed(12)
df$y &lt;- runif(1, min=df$x_min, max=df$x_max)

Output:

&gt; df
  id x_min x_max        y
1  1   0.1  0.15 0.103468
2  2   0.2  0.23 0.103468
3  3   0.3  0.38 0.103468
4  4   0.4  0.44 0.103468
5  5   0.5  0.57 0.103468

答案1

得分: 2

这是因为 runif(1, min=df$x_min, max=df$x_max) 计算得到一个单独的数字。将 1 替换为 nrow(df) 以确保模拟均匀值的正确数量。

df &lt;- data.frame(id=1:5,
                 x_min = c(0.1,0.2,0.3,0.4,0.5),
                 x_max = c(0.15,0.23,0.38,0.44,0.57))

set.seed(12)
df$y &lt;- runif(1, min=df$x_min, max=df$x_max)

df
#&gt;   id x_min x_max        y
#&gt; 1  1   0.1  0.15 0.103468
#&gt; 2  2   0.2  0.23 0.103468
#&gt; 3  3   0.3  0.38 0.103468
#&gt; 4  4   0.4  0.44 0.103468
#&gt; 5  5   0.5  0.57 0.103468

set.seed(12)
df$y &lt;- runif(nrow(df), min=df$x_min, max=df$x_max)

df
#&gt;   id x_min x_max         y
#&gt; 1  1   0.1  0.15 0.1034680
#&gt; 2  2   0.2  0.23 0.2245333
#&gt; 3  3   0.3  0.38 0.3754097
#&gt; 4  4   0.4  0.44 0.4107753
#&gt; 5  5   0.5  0.57 0.5118544

<sup>2023-02-26 创建,使用 reprex v2.0.2</sup>

英文:

That is because runif(1, min=df$x_min, max=df$x_max) evaluates to a single number. Replace 1 with nrow(df) to ensure the correct number of simulated uniform values.

df &lt;- data.frame(id=1:5,
                 x_min = c(0.1,0.2,0.3,0.4,0.5),
                 x_max = c(0.15,0.23,0.38,0.44,0.57))

set.seed(12)
df$y &lt;- runif(1, min=df$x_min, max=df$x_max)

df
#&gt;   id x_min x_max        y
#&gt; 1  1   0.1  0.15 0.103468
#&gt; 2  2   0.2  0.23 0.103468
#&gt; 3  3   0.3  0.38 0.103468
#&gt; 4  4   0.4  0.44 0.103468
#&gt; 5  5   0.5  0.57 0.103468

set.seed(12)
df$y &lt;- runif(nrow(df), min=df$x_min, max=df$x_max)

df
#&gt;   id x_min x_max         y
#&gt; 1  1   0.1  0.15 0.1034680
#&gt; 2  2   0.2  0.23 0.2245333
#&gt; 3  3   0.3  0.38 0.3754097
#&gt; 4  4   0.4  0.44 0.4107753
#&gt; 5  5   0.5  0.57 0.5118544

<sup>Created on 2023-02-26 with reprex v2.0.2</sup>

huangapple
  • 本文由 发表于 2023年2月26日 19:02:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/75571526.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定