当u()为指数时,通过模拟估算E [u(X)]时出现问题

时间:2013-12-01 23:00:50

标签: r statistics numerical-methods

我正在尝试使用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

0 个答案:

没有答案