在
R
语言版本4.4.1
(版本应该不重要,只是为了讨论),我们编写代码:
set.seed(1234)
x <- 5
y <- rnorm(1, mean = x, sd = 0.1)
我们将能够打印号码
y
。假设有第二个人,他知道数字 y
,我们正在使用种子 1234
并且他知道该数字是使用此代码生成的。他唯一不知道的是数字x
。他能解决这个问题吗x=5
?
看起来 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”编码员,也没有亲自尝试过,但它看起来很简单。
如果我们知道 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?