R 模拟中的参数估计
Parameter Estimation in R Simulation
我对 R 还很陌生,正在探索模拟来估计参数 n(整数)
1) Z是从N(0,1)
中抽取的n个向量
2) max(Z)>4 的概率等于 0.25
R 中估计参数 n 以满足这两个条件的最佳方法是什么?当我试图避免代码中的循环或穷举搜索时,我被卡住了。谢谢!
编辑:假设一个完全基于模拟的结果,没有尝试分析,
我会创建一个这样的函数:
prob <- function(n) {
sum(replicate(10000, max(rnorm(n))) > 4)/10000
}
稍微解释一下,max(rnorm(n))) > 4
将return一个TRUE
或FALSE
。对 replicate
的调用执行该操作 10000 次。然后我平均得到一个概率估计。
然后我会检查 ?optimise
函数,尝试估算 n
。您需要创建另一个在 prob(n) = 0.25
时具有最小值的函数,例如:
result <- function(n) abs(prob(n) - 0.25)
.
请注意,根据您选择参数的方式,这可能需要很长时间 运行。先测试一下,看看 n
的值可能是合理的。
这是另一种(相关)方法,它利用 pnorm
为您提供 N(0,1) 的 CDF。所以 pnorm(4)
告诉你 N(0,1) <= 4
平局的概率,因此 1 - pnorm(4)
会告诉我们平局大于 4 的概率。如果任何平局大于 4,显然比最大值大于4,所以我们只需要关注一些观察值大于4的概率。
由于抽奖是独立的,我们可以拿产品,所以在 n 次抽奖中抽奖大于 4 的概率是 1 - (pnorm(4)^n)
。基于此我们可以创建 on objective 函数并求解:
# Minimize squared deviations
fopt <- function(n){(1 - pnorm(4)^n - .25)^2}
# or .75 - pnorm(4)^n, but this is clearer
# I specify start and end points. We guess really wide
optimise(fopt, interval = c(100, 100000))
#> $minimum
#> [1] 9083.241
#>
#> $objective
#> [1] 2.262374e-20
# Now check the result
(1 - pnorm(4)^9083.241)
#> [1] 0.25
我们看到我们得到了 9083.241 的结果,其计算结果恰好为 .25。如果我们只取整数结果 (9083),它的计算结果为 .2499943
我对 R 还很陌生,正在探索模拟来估计参数 n(整数)
1) Z是从N(0,1)
中抽取的n个向量2) max(Z)>4 的概率等于 0.25
R 中估计参数 n 以满足这两个条件的最佳方法是什么?当我试图避免代码中的循环或穷举搜索时,我被卡住了。谢谢!
编辑:假设一个完全基于模拟的结果,没有尝试分析,
我会创建一个这样的函数:
prob <- function(n) {
sum(replicate(10000, max(rnorm(n))) > 4)/10000
}
稍微解释一下,max(rnorm(n))) > 4
将return一个TRUE
或FALSE
。对 replicate
的调用执行该操作 10000 次。然后我平均得到一个概率估计。
然后我会检查 ?optimise
函数,尝试估算 n
。您需要创建另一个在 prob(n) = 0.25
时具有最小值的函数,例如:
result <- function(n) abs(prob(n) - 0.25)
.
请注意,根据您选择参数的方式,这可能需要很长时间 运行。先测试一下,看看 n
的值可能是合理的。
这是另一种(相关)方法,它利用 pnorm
为您提供 N(0,1) 的 CDF。所以 pnorm(4)
告诉你 N(0,1) <= 4
平局的概率,因此 1 - pnorm(4)
会告诉我们平局大于 4 的概率。如果任何平局大于 4,显然比最大值大于4,所以我们只需要关注一些观察值大于4的概率。
由于抽奖是独立的,我们可以拿产品,所以在 n 次抽奖中抽奖大于 4 的概率是 1 - (pnorm(4)^n)
。基于此我们可以创建 on objective 函数并求解:
# Minimize squared deviations
fopt <- function(n){(1 - pnorm(4)^n - .25)^2}
# or .75 - pnorm(4)^n, but this is clearer
# I specify start and end points. We guess really wide
optimise(fopt, interval = c(100, 100000))
#> $minimum
#> [1] 9083.241
#>
#> $objective
#> [1] 2.262374e-20
# Now check the result
(1 - pnorm(4)^9083.241)
#> [1] 0.25
我们看到我们得到了 9083.241 的结果,其计算结果恰好为 .25。如果我们只取整数结果 (9083),它的计算结果为 .2499943