我正在尝试使用R来估计E [u(X)],其中u是效用函数,X是随机变量。更具体地说,我希望能够为两个随机变量X和Y排序E [u(X)]和E [u(Y)] - 只有排名很重要。
我的问题是某些sigma的u(x)= - exp(-sigma * x)> 0,这很快收敛到零。所以我有很多我期望的案例,例如E [u(X)]> E [u(Y)],但由于它们非常接近零,我的模拟无法区分它们。
有人对我有任何建议吗?
我只对两个预期的实用程序进行排名感兴趣,因此u(x)可以被任何u.tilde(x)= a * u(x)+ b替换,其中a> 0和b可以是任何数字。
下面是一个例子,其中X和Y都是正常的(在这种情况下,我认为有一个封闭的形式解决方案,但假装X和Y有复杂的分布,我只能模拟)。
get.u <- function(sigma=1) {
stopifnot(sigma > 0)
utility <- function(x) {
return(-exp(-sigma * x))
}
return(utility)
}
u <- get.u(sigma=1)
curve(u, from=0, to=10) # Converges very rapidly to zero
n <- 10^4
x <- rnorm(n, 10^4, sd=10)
y <- rnorm(n, 10^4, sd=10^3)
mean(u(x)) == mean(u(y)) # Returns True (they're both 0), but I expect E[u(x)] > E[u(y)]
## An example of replacing u with a*u + b
get.scaled.u <- function(sigma=1) {
stopifnot(sigma > 0) # Risk averse
utility <- function(x) {
return(-exp(-sigma * x + sigma * 10^4))
}
return(utility)
}
u <- get.scaled.u(sigma=1)
mean(u(x)) > mean(u(y)) # True as desired
x <- rnorm(n, 10^4, sd=10^3)
y <- rnorm(n, 10^4, sd=2*10^3)
mean(u(x)) > mean(u(y)) # False again -- they're both -Inf
找到一种聪明的方法来扩展你正确处理这个问题的方法吗?例如,假设X和Y都有界限支持 - 如果我知道边界,我如何缩放你以保证a * u + b既不会太接近-Inf,也不会太接近于零?
编辑:我不知道多个精密包。 Rmpfr很有帮助:
library(Rmpfr)
x.precise <- mpfr(x, 100)
y.precise <- mpfr(y, 100)
mean(u(x.precise)) > mean(u(y.precise)) # True