Simulation-计算统计——Monte Carlo
Monte Carlo Integration
- 找到原函数,再计算
- 无法找到原函数,MC积分
Assume that we can generate \(U_1, . . . , U_n \sim Uniform (0, 1)\), and define \(\hat \theta_n = \frac{1}{n} \sum_{i=1}^{n} g(U_i)\)
By law of large numbers, if \(\int_{0}^{1}|g(u)|du < \infty\), we have \(\hat \theta_n \rightarrow \theta := \mathbb{E}g(U) = \int_0^1 g(u)du \quad a.s. \quad n \rightarrow \infty\)
a.s. means almost surely:the set of possible exceptions may be non-empty, but it has probability 0.
bounded interval
Eg. Calculate \(\theta = \int_0^1 x^2 dx\)
n <- 100
set.seed(1)
x <- runif(n)
theta.hat <- mean(x^2)
theta.hat
求:\(\theta = \int_a^{b} g(t) dt\)
利用\(\int_a^bg(t)dt = (b-a)\int_a^b g(t)\frac{1}{b-a}dt = (b-a)\mathbb{E}g(Y)\), where Y~ Uniform(a,b)
所以我们可以:
- 先生成\(Y_1,...,Y_n \sim Uniform(a,b)\)
- \(\hat \theta_n = (b-a) * \frac{1}{n} \sum_{i=1}^n g(Y_i)\)
Eg. Calculate \(\theta = \int_1^4 x^2dx\)
n <- 100
set.seed(1)
x <- runif(n, min = 1, max = 4)
theta.hat <- (4 - 1) * mean(x^2)
theta.hat
Unbounded Interval
\]
Note that $$\Phi(x) = \mathbb{P}(Z \le x) = \mathbb{E}[I_{Z \le x}], \text{where } Z \sim N(0,1)$$
Therefore, we can estimate
\]
事件发生的概率等于它的示性函数的期望。
Eg. Calculate \(\Phi(x) = \int_{-\infty}^x \frac{1}{\sqrt{2\pi}}e^\frac{t^2}{2}dt\) (1) when x = 0.3. (2) when \(x = (x_1, ..., x_T)\)
#(1)
x <- 0.3
n <- 100
set.seed(1)
z <- rnorm(n)
mean(z < x) # estimate
pnorm(x) # true value by pnorm()
#(2)
Phi.hat <- function(x, n = 1000){
z <- rnorm(n)
return(mean(z < x))
}
x <- seq(0, 2.5, len = 5)
Phi.hat(x) #但是这样有问题,输出只有一个值
##原因是当向量和数进行比较的时候,向量的每一个元素会分别跟数比较;而向量和向量比较时,是对应元素进行比较。Be Careful!
round(pnorm(x), digits = 3) # true value
#(2)解决方法
probab <- numeric(5)
for(i in 1:5){
probab[i] <- Phi.hat(x[i])
}
probab
For General Distributions
Calculate \(\theta = \int_A g(x)f(x) dx\)
- 先选一个满意的\(f(x)\)
- 生成一组\(X_1,...,X_n\) 服从\(f(x)\) (上节课的知识)
- 计算\(\hat \theta_n = \frac{1}{n} \sum{i=1}^n g(X_i)\)
Eg. Calculate \(\int_0^{\infty} \frac{e^{-x}}{1+x^2}dx\)
可以把\(e^{-x}\)视作均值为1的指数分布的密度函数,由此可以生成X。
Law of Large Numbers
Let\(\xi_1,\xi_2...\) be a sequence of i.i.d. random variables with finite expected value,by \(\mu\). Let
\]
Then,
- Weak law of large numbers
\]
- Strong law of large numbers)
\]
Weak law of large numbers
Definition (Convergence in probability)
- Let \(\left(\bar{\xi}_n\right)_{n \geq 1}\) be a sequence of real-valued random variables defined on a probability space \((\Omega, \mathcal{F}, P)\).
- For any positive number \(\varepsilon\),
\]
- Then, we say \(\bar{\xi}_n\) converges in probability to \(\mu\), denoted by
\]
证明见老师ppt。
M <- 100000
n <- 100
eps <- 0.1
xi.bar <- numeric(M) # xi.bar[i] will record the sample mean of trial i
for (i in 1:M){
set.seed(i)
xi.vec <- sample(1:6, size = n, replace = TRUE)
xi.bar[i] <- mean(xi.vec)
}
mu <- 3.5
mean(abs(xi.bar - mu) > eps)
注意这里只跟n有关,m是试验数量。
如何从
Standard Error
估计这种积分形式的标准差。
如果能用数值解,就用数值解法。不知道分布的时候,可以用MC来估计。
\]
where \(f(x)\)is a p.d.f.
\]
, where \(X_i \sim f(x)\)
\]
现求\(Var(\hat\theta_n)\)
standard error:标准误差
- The variance can be calculated by
\]
where
\]
- However, \(\sigma^2\) is not known in general.
- We can use the estimated variance:
\]
- The estimated variance of \(\hat{\theta}_n\) is
\]
f(x) 是自己取的,{\(X_i\)}是根据f(x)生成的。n是MC取的样本数。
由前面的内容,
\]
Eg. Calculate \(\int_0^1 xdx\)
Choose f(x)=1, then g(x) = x, 然后可以代入公式计算。
Central limit theorems
重复生成如10000次\(\hat \theta_n\)(每一次都要投100次骰子,总的会投很多很多次骰子), 当n足够大时,$$P(\frac{\theta_n-\theta}{\sigma/\sqrt{n}}) \rightarrow \Phi(x)$$
Eg. Variance of Dice Rolling
sigma <- sqrt(35/12)
xi.bar.standardized <- (xi.bar - mu)/(sigma/sqrt(n))
hist(xi.bar.standardized, probability = TRUE)
By CLT(Central Limit Theorem) $$ P(-1.96 \le \frac{\hat \theta_n - \theta}{\sigma/\sqrt{n}}) \le 1.96 \sim 0.95 $$, So,$$ \hat{\theta}_n \in\left[\theta-1.96 \times \frac{\sigma^{\prime}}{\sqrt{n}}, \theta+1.96 \times \frac{\sigma}{\sqrt{n}}\right] . $$
但是\(\sigma\)不一定知道,可以用估计值代替,于是就有了t-分布。
- As \(\sigma^2\) is unknown in general, people usually use \(\hat{\sigma}^2\) to replace it in practice. In this case,
\]
So, by limit distribution,
\]
Eg. Dice Rolling
# student's t-distribution
M <- 100
xi.student <- numeric(M)
for (i in 1:M){
set.seed(i)
xi.vec <- sample(1:6, size = n, replace = TRUE)
xi.student[i] <- (mean(xi.vec) - 3.5) / (sd(xi.vec) / sqrt(n))
}
Note在n越来越大的时候,t分布会和normal越来越像。
M<-100
n<-200
u<-runif(n)
set.seed(1)
g <- numeric(M)
for (i in 1:M){
g[i]<-sin(u[i])^4*exp(-u[i])
theta<-g[i]
}
theta<-theta/M
theta
Variance and Efficiency
Definition (Efficiency)
Let \(\hat{\theta}_1\) and \(\hat{\theta}_2\) be two estimators of \(\theta\). We say \(\hat{\theta}_1\) is more efficient (in a statistical sense) than \(\hat{\theta}_2\) if
\]
Remark.
If the variances of estimators \(\hat{\theta}_1\) and \(\hat{\theta}_2\) are unknown, we can estimate efficiency by substituting a sample estimate of the variance for each estimator.
Antithetic variables (对照变量)
如果自己生成两个负相关的变量,然后就可以生成一个variance更小的变量。
- We can also use
\]
to estimate \(\theta\).
- Note that
\]
- If \(\hat{\theta}_1\) and \(\hat{\theta}_2\) are negatively correlated, then
\]
and hence,
\]
想要构造\(\hat\theta_1, \hat\theta_2\)
使得他们负相关。下面构造的\(X_i\)和\(\tilde X_i\)就是负相关的。
- If $$ \hat{\theta}1=\frac{1}{n} \sum^n g\left(X_i\right) $$
where
\]
- Assume that \(X_i\) is generated from the inverse transform method, then
\]
- If the function \(g\) is a monotone function, then
\]
- Therefore,
\]
is also an estimator of \(\theta\)
Eg.\(\int_0^1x^2dx\)
u<-runif(100)
theta1 <-mean(u^2)
theta2<-mean((1-u)^2)
theta<-mean(theta1,theta2)
theta
Eg. Normal distribution function
x <- 1
pnorm(1)
n <- 100
V <- runif(100, 0, 1)
V.tilde <- 1 - V
theta1 <- mean(exp(-V^2/2)*(1/sqrt(2*pi)))
theta2 <- mean(exp(-V.tilde^2/2)*(1/sqrt(2*pi)))
theta <- mean(theta1, theta2)
theta
控制方差的程度和g(x)有关,也就是和f(x)的选择有关,好的时候能控制到90%以下
Control variates
- Choose $$ c^*=-\frac{\operatorname{Cov}(g(X), f(X))}{\operatorname{Var}(f(X))} $$
- Therefore, the improved estimator is defined as
\]
where
\]
Eg. \(\theta = \int_0^1 e^u du\)
u <- runif(100)
gu <- exp(u)
theta.hat <- mean(gu)
fu <- u
mu <- 1/2
sample.cov <- cov(gu,fu)
sample.var <- var(fu)
c.star <- -sample.cov / sample.var
theta.star <- mean(gu) + c.star*mean(fu-1/2)
print(theta.hat)
print(theta.star)
这里取f(u)=u
Simulation-计算统计——Monte Carlo的更多相关文章
- 利用蒙特卡洛(Monte Carlo)方法计算π值[ 转载]
部分转载自:https://blog.csdn.net/daniel960601/article/details/79121055 圆周率π是一个无理数,没有任何一个精确公式能够计算π值,π的计算只能 ...
- Monte Carlo计算Pi,python实现
Monte Carlo import random import matplotlib.pyplot as plt import numpy as np 6 # 函数模拟点的随机掉落,并分为两组 de ...
- Markov Chain Monte Carlo Simulation using C# and MathNet
Math.Net Numerics has capability to conduct Markov Chair Monte Carlo simulations, yet the document i ...
- 蒙特卡罗(Monte Carlo)方法简介
蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法. 二 解决问题的基本思路 Monte Carlo方法的基本思想很早以前就被人们所发 ...
- Monte carlo
转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数 ...
- 蒙特卡罗方法、蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)初探
1. 蒙特卡罗方法(Monte Carlo method) 0x1:从布丰投针实验说起 - 只要实验次数够多,我就能直到上帝的意图 18世纪,布丰提出以下问题:设我们有一个以平行且等距木纹铺成的地板( ...
- Monte Carlo方法简介(转载)
Monte Carlo方法简介(转载) 今天向大家介绍一下我现在主要做的这个东东. Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代 ...
- 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)
1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...
- Monte Carlo Approximations
准备总结几篇关于 Markov Chain Monte Carlo 的笔记. 本系列笔记主要译自A Gentle Introduction to Markov Chain Monte Carlo (M ...
- (转)Monte Carlo method 蒙特卡洛方法
转载自:维基百科 蒙特卡洛方法 https://zh.wikipedia.org/wiki/%E8%92%99%E5%9C%B0%E5%8D%A1%E7%BE%85%E6%96%B9%E6%B3%9 ...
随机推荐
- Mysql的驱动表 被驱动表 join buffer
1.为什么小表驱动大表: for(int i=5;.......){ for(int j=1000;......) {}} 1.1如果小的循环在外层,对于数据库连接来说就只连接5次,进 ...
- 正向代理和反向代理和spring的动态代理模式有几种?默认是那种?如何切换?
spring的动态代理模式有几种?默认是那种?如何切换? spring的动态的代理模式有两种 JDK动态代理,基于接口(默认代理模式),CGLIB动态代理(若要使用需要进行配置) JDK动态代理是由j ...
- 采用4-20mA电流的模拟量传输
工业上常用的总线协议RS232,RS485等,都是传输数字信号的方式.工业上普遍需要测量各类非电物理量,例如温度.压力.速度.角度等,这些都需要转换成模拟量电信号才能传输到几百米外的控制室或显示设备上 ...
- Python - XSS-href
参考资料: https://owasp-skf.gitbook.io/asvs-write-ups/cross-site-scripting-href-xss-href/kbid-3-cross-si ...
- 代理模式_v1
代理模式 概念: 1.真实对象:要被代理的对象 2.代理对象 3.代理模式 : 代理对象代理真实对象,达到增强真实对象功能的作用 实现方式: 1.静态代理:有一个类文件描述代理模式 2.动态代理:在内 ...
- CGAL5.0.2 CMake过程记录
Zlib的INCLUDE_DIR 找到了,但是release_LIBRARY没有找到.不过没有影响generate. 打开build文件夹的CGAL.sln 文件,ALL_BUILD 生成,成功. 最 ...
- 2020/5/26-笔记:Oracle数据库表空间的管理
1新建表空间 (1)普通(本地管理)表空间: create tablespace 表空间名 datafile'OS系统文件路径\文件名.dbf' size nM; 或 create tablespac ...
- TCP粘包和拆包
假设客户端分别发送了两个数据包D1和D2给服务器,由于服务器一次读取的字节数是不确定的,故可能存在以下4中情况: 服务端分两次读到了两个独立的数据包D1和D2,没有粘包和拆包 服务端分一次收到两个数据 ...
- 学习记录--C++作业3
1.类是一个模板吗? 是:类模板是一个抽象的类,代表类的一般特性,可以用类模板来创建类,所有的类都有共有的特性. 4.函数模板的实例化是什么? 模板函数,即函数 3.关于cin和cout说法正确的: ...
- Mongodb between 时间范围
db.getCollection("Order").find({ "Supplier.ServiceCode": "CNI", " ...