首页 > 解决方案 > r中的重要性抽样以计算平均值

问题描述

我得到以下分布: f(x) = e^{-x*erf(x)}/1.14

我被要求计算 f(x) 的标准差;我在计算 E(x^2) 时遇到了麻烦,它应该等于大约 1.80,但我得到了 1.70。一旦我知道了,我就可以使用 E(x^2)-E(x)^2 来获得方差和标准差。

library(extraDistr)
library(vgam)
set.seed(50)
N = 1000
x = rhnorm(N,sigma=2.5) # Sample x samples from the proposal distribution h(x)
#plot(x)
h = dhnorm(x,sigma=2.5) # Evaluate h(x)
g = rep(0,N)
g[x>=0] = x[x>=0]    # Evaluate g(x)
f = function(x) {        # Evaluate f(x)
  f.x = rep(0,length(x))
  f.x[x>=0] =  exp((-x[x>=0])*erf(x[x>=0]))/1.140741
  return(f.x)
} 
mean((g*f(x)/h))^2 #E(X)^2
mean((g*f(x)/h)^2) #E(x^2)

如果我改变我的 h=dnorm(x^2,...) 平均值会变得很大。我不确定我做错了什么。

标签: rdistributionsamplenormal-distributionmontecarlo

解决方案


推荐阅读