英文:
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 <- 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 <- runif(1, min=df$x_min, max=df$x_max)
Output:
> 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 <- 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 <- 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
set.seed(12)
df$y <- runif(nrow(df), min=df$x_min, max=df$x_max)
df
#> id x_min x_max y
#> 1 1 0.1 0.15 0.1034680
#> 2 2 0.2 0.23 0.2245333
#> 3 3 0.3 0.38 0.3754097
#> 4 4 0.4 0.44 0.4107753
#> 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 <- 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 <- 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
set.seed(12)
df$y <- runif(nrow(df), min=df$x_min, max=df$x_max)
df
#> id x_min x_max y
#> 1 1 0.1 0.15 0.1034680
#> 2 2 0.2 0.23 0.2245333
#> 3 3 0.3 0.38 0.3754097
#> 4 4 0.4 0.44 0.4107753
#> 5 5 0.5 0.57 0.5118544
<sup>Created on 2023-02-26 with reprex v2.0.2</sup>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论