使用随机数种子逆向计算平均值

问题描述 投票:0回答:2

R
语言版本
4.4.1
(版本应该不重要,只是为了讨论),我们编写代码:

set.seed(1234)

x <- 5
y <- rnorm(1, mean = x, sd = 0.1)

我们将能够打印号码

y
。假设有第二个人,他知道数字
y
,我们正在使用种子
1234
并且他知道该数字是使用此代码生成的。他唯一不知道的是数字
x
。他能解决这个问题吗
x=5

r random numbers generator
2个回答
1
投票

看起来 rnorm() 的源代码大致将其定义为:

rnorm(1, mean, sd) = mean + sd * norm_rand()

或使用你的变量名称

y = x + 0.1*norm_rand()

因此,要扭转它,我认为以下方法会起作用:

set.seed(1234)
x <- y - 0.1*norm_rand()

如果norm_rand()不是公开函数,我认为你可以将其替换为

rnorm(1,0,1)

我不是“R”编码员,也没有亲自尝试过,但它看起来很简单。


1
投票

如果我们知道 x 是一个整数,我们可以尝试通过从 y 中减去平均值为 0 和相同 sd 的正态分布来估计正态分布的偏移量,看看它偏移了多少。

> set.seed(1234)
> x <- 5
> y <- rnorm(1, mean=x, sd=0.1)
> f <- \(y, sd) {y - rnorm(1L, 0, sd)}
> est <- replicate(10, f(y, 0.1))
> summary(est)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  4.771   4.840   4.930   4.910   4.937   5.114 

这强烈建议

x == 5

问题是,这仅适用于 x 整数,或者当 SD 非常低时,如果它更高,则会显着失败:

> set.seed(1234)
> x <- 5
> y <- rnorm(1, mean=x, sd=2)
> f <- \(y, sd) {y - rnorm(1L, 0, 2)}
> est <- replicate(1e3, f(y, 2))
> summary(est)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -3.806   1.354   2.665   2.639   3.932   9.378 

当您进行思想实验时,您的心中可能有一个较低的SD

© www.soinside.com 2019 - 2024. All rights reserved.