<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>统计之都</title>
	<atom:link href="http://cos.name/feed/" rel="self" type="application/rss+xml" />
	<link>http://cos.name</link>
	<description>中国统计学门户网站，免费统计学服务平台</description>
	<lastBuildDate>Mon, 30 Aug 2010 10:34:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>泊松低方差计数数据建模问题</title>
		<link>http://cos.name/2010/08/poisson-count-data-modeling-problem-of-low-variance/</link>
		<comments>http://cos.name/2010/08/poisson-count-data-modeling-problem-of-low-variance/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 13:08:34 +0000</pubDate>
		<dc:creator>COS编辑部</dc:creator>
				<category><![CDATA[基础统计]]></category>
		<category><![CDATA[数据分析]]></category>
		<category><![CDATA[概率论与数理统计]]></category>
		<category><![CDATA[生物与医学统计]]></category>
		<category><![CDATA[分布拟合]]></category>
		<category><![CDATA[加权泊松分布]]></category>
		<category><![CDATA[泊松低方差]]></category>
		<category><![CDATA[纯生过程模型]]></category>

		<guid isPermaLink="false">http://cos.name/?p=2317</guid>
		<description><![CDATA[本文作者为中国人民大学统计学院饶燕芳同学，由COS编辑部审核发表，略有修改。点击此处下载/阅读本文PDF版本 一、问题的引出 在数据分析和数据建模的过程中，我们通常需要假定数据变量服从某种分布，以便于建立与分布参数有关的模型或方程，之后利用观测值对参数进行估计，从而达到研究和分析的目的。由于变量是随机的，我们无法确定变量在某个情况下的具体取值，因此通过假定它服从某个分布，然而感兴趣的只是它们的平均水平，即各变量之间的关系都建立在均值的基础上，方差则用于计算估计的精度和假设检验。而大多数情况下，一旦分布的假定确定，随之确定的也就是数据必须符合该分布的均值和方差特征。对于许多单参数分布，均值和方差均有一一对应的关系，如果均值确定，方差由于是均值的函数也就自然地确定下来，例如伯努利分布具有单参数，均值，方差，即有。在这种单参数的情况下，如果观测数据的均值符合假定（即认为），数据的方差和均值就必须满足一定条件（即例如假定服从两点分布，认为，则方差应该有），此时若观测到方差系统地大于分布假设下（此时常被观测均值决定）的方差，就出现了所谓的“超散布性”(overdispersion)，类似地，若出现方差偏小的情况，也就相应出现了“超聚集性”(underdispersion)。 具体到本文需要讨论的泊松分布：现实中常常出现方差不满足假定的情况。由于参数为 的泊松分布具有均值和方差相等的特点，如果假定服从泊松分布的数据的样本方差大于模型估计的方差——即样本均值，就出现了“超散布性”，本文称之为泊松分布高方差(extra-Poisson variation )，而当样本方差低于样本均值时，称此时的“超聚集性”为泊松分布低方差，后文出现的泊松低方差都符合该定义。 正如之前所说，通常建立模型如线性回归都基于均值，因此方差违反假定分布并不影响参数估计效率，但在区间估计和假设检验时就会出现问题。当“超聚集性”出现时，真实的方差会被低估，这将会错误的表现出数据中原本不显著的差异，相反地，“超聚集性”出现时，真实的方差会被高估，这样可能无法检验出组间分布的真实差异，参数的置信区间也会给得过大。因此对于方差超扩散或超聚集的数据，方差问题的处理显得尤为重要，针对此的模型建立是该类问题分析的关键。 泊松分布的超散布性数据在现实中较为常见，简单的序列正相关和非齐次性都可能引起超散布性的出现。泊松低方差的情况则较为少见，但在医学和社会领域中却经常出现。本文的目标就在于探讨针对泊松低方差数据的分布模型。 二 两种泊松低方差问题的处理方法 泊松分布为模拟计数数据提供了良好的模型，但均值和方差相等的要求在现实中却显得太为苛刻。因此处理泊松低方差的方法探究就集中在合适的修正分布的寻找上。能够描述计数数据且具有泊松低方差特点（即均值大于方差）的分布选择并不太多，其中包括两种典型的泊松低方差模型：加权泊松分布模型和 CBR 分布模型。 1. 加权泊松分布 Rao CR (1965)提出，若随机变量Y服从加权泊松分布，其密度函数为                                                      (a) 它是保证求和为1的标准化因子。 本文讨论一种较为简单的权重（Martin S R and P Besbeas，2004），即 对于，它的分布类似将概率密度图线向均值“挤压”(见图1)，分布更加集中，相对于标准的泊松分布就有更小的方差，称该分布为三参数指数加权泊松分布，记为 EWP3 [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-2396" href="http://cos.name/2010/08/poisson-count-data-modeling-problem-of-low-variance/photo3-2/" rel='nofollow'><img class="size-thumbnail wp-image-2396 alignleft" title="EWP2 、EWP3和CBR的分布拟合图" src="http://cos.name/wp-content/uploads/2010/08/photo31-150x150.png" alt="" width="150" height="150" /></a></p>
<p><strong>本文作者为中国人民大学统计学院饶燕芳同学，由COS编辑部审核发表，略有修改。<a href="http://cos.name/wp-content/uploads/2010/08/poisson.pdf" target="_blank" rel='nofollow'>点击此处下载/阅读本文PDF版本</a></strong></p>
<h2>一、问题的引出</h2>
<p>在数据分析和数据建模的过程中，我们通常需要假定数据变量服从某种分布，以便于建立与分布参数有关的模型或方程，之后利用观测值对参数进行估计，从而达到研究和分析的目的。由于变量是随机的，我们无法确定变量在某个情况下的具体取值，因此通过假定它服从某个分布，然而感兴趣的只是它们的平均水平，即各变量之间的关系都建立在均值的基础上，方差则用于计算估计的精度和假设检验。而大多数情况下，一旦分布的假定确定，随之确定的也就是数据必须符合该分布的均值和方差特征。对于许多单参数分布，均值和方差均有一一对应的关系，如果均值确定，方差由于是均值的函数也就自然地确定下来，例如伯努利分布具有单参数<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize p" title="p" alt="p" align="absmiddle" />，均值<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cmu%3Dp" title="\mu=p" alt="\mu=p" align="absmiddle" />，方差<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize v%3Dp%281-p%29" title="v=p(1-p)" alt="v=p(1-p)" align="absmiddle" />，即有<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize v%3Dv%28%5Cmu%29%3D%5Cmu%281-%5Cmu%29" title="v=v(\mu)=\mu(1-\mu)" alt="v=v(\mu)=\mu(1-\mu)" align="absmiddle" />。在这种单参数的情况下，如果观测数据的均值符合假定（即认为<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize p%5Capprox%5Cbar%7BY%7D" title="p\approx\bar{Y}" alt="p\approx\bar{Y}" align="absmiddle" />），数据的方差和均值就必须满足一定条件（即例如假定<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize Y" title="Y" alt="Y" align="absmiddle" />服从两点分布，认为<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize p%5Capprox%5Cbar%7BY%7D" title="p\approx\bar{Y}" alt="p\approx\bar{Y}" align="absmiddle" />，则方差应该有<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize Var%28Y%29%3Dp%281-p%29%5Capprox%5Cbar%7BY%7D%281-%5Cbar%7BY%7D%29" title="Var(Y)=p(1-p)\approx\bar{Y}(1-\bar{Y})" alt="Var(Y)=p(1-p)\approx\bar{Y}(1-\bar{Y})" align="absmiddle" />），此时若观测到方差系统地大于分布假设下（此时常被观测均值决定）的方差，就出现了所谓的“超散布性”(overdispersion)，类似地，若出现方差偏小的情况，也就相应出现了“超聚集性”(underdispersion)。</p>
<p>具体到本文需要讨论的泊松分布：现实中常常出现方差不满足假定的情况。由于参数为 的泊松分布具有均值和方差相等的特点，如果假定服从泊松分布的数据的样本方差大于模型估计的方差——即样本均值，就出现了“超散布性”，本文称之为泊松分布高方差(extra-Poisson variation<br />
)，而当样本方差低于样本均值时，称此时的“超聚集性”为泊松分布低方差，后文出现的泊松低方差都符合该定义。</p>
<p>正如之前所说，通常建立模型如线性回归都基于均值，因此方差违反假定分布并不影响参数估计效率，但在区间估计和假设检验时就会出现问题。当“超聚集性”出现时，真实的方差会被低估，这将会错误的表现出数据中原本不显著的差异，相反地，“超聚集性”出现时，真实的方差会被高估，这样可能无法检验出组间分布的真实差异，参数的置信区间也会给得过大。因此对于方差超扩散或超聚集的数据，方差问题的处理显得尤为重要，针对此的模型建立是该类问题分析的关键。</p>
<p>泊松分布的超散布性数据在现实中较为常见，简单的序列正相关和非齐次性都可能引起超散布性的出现。泊松低方差的情况则较为少见，但在医学和社会领域中却经常出现。本文的目标就在于探讨针对泊松低方差数据的分布模型。</p>
<h2>二 两种泊松低方差问题的处理方法</h2>
<p>泊松分布为模拟计数数据提供了良好的模型，但均值和方差相等的要求在现实中却显得太为苛刻。因此处理泊松低方差的方法探究就集中在合适的修正分布的寻找上。能够描述计数数据且具有泊松低方差特点（即均值大于方差）的分布选择并不太多，其中包括两种典型的泊松低方差模型：加权泊松分布模型和 CBR 分布模型。</p>
<h3>1. 加权泊松分布</h3>
<p>Rao CR (1965)提出，若随机变量Y服从加权泊松分布，其密度函数为</p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize P%28Y%3Dk%29%3D%5Cfrac%7Be%5E%7B-%5Clambda%7D%5Clambda%5Ek%5Comega_k%20%7D%7BWk%21%7D%2C%20k%3D0%2C1%2C%20%5Cldots%20%3B%20%5Clambda%26gt%3B0" title="P(Y=k)=\frac{e^{-\lambda}\lambda^k\omega_k }{Wk!}, k=0,1, \ldots ; \lambda&amp;gt;0" alt="P(Y=k)=\frac{e^{-\lambda}\lambda^k\omega_k }{Wk!}, k=0,1, \ldots ; \lambda&amp;gt;0" align="absmiddle" /></p>
<p style="text-align: right;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize W%3D%5Csum%5E%7B%5Cinfty%7D_%7Bk%3D1%7D%5Cfrac%7Be%5E%7B-%5Clambda%7D%5Clambda%5Ek%5Comega_k%20%7D%7Bk%21%7D" title="W=\sum^{\infty}_{k=1}\frac{e^{-\lambda}\lambda^k\omega_k }{k!}" alt="W=\sum^{\infty}_{k=1}\frac{e^{-\lambda}\lambda^k\omega_k }{k!}" align="absmiddle" />                                                      (a)</p>
<p>它是保证求和为1的标准化因子。</p>
<p>本文讨论一种较为简单的权重（Martin S R and P Besbeas，2004），即</p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Comega_k%3D%5Cleft%7B%20%5Cbegin%7Barray%7D%7Bll%7D%20e%5E%7B%5Cbeta_1%28%5Clambda-k%29%7D%20%26amp%3B%20%2Ck%5Cleq%20%5Clambda%5C%5Ce%5E%7B%5Cbeta_2%28%5Clambda-k%29%7D%20%26amp%3B%20%2Ck%5Cleq%20%5Clambda%5C%5C%5Cend%7Barray%7D" title="\omega_k=\left{ \begin{array}{ll} e^{\beta_1(\lambda-k)} &amp;amp; ,k\leq \lambda\\e^{\beta_2(\lambda-k)} &amp;amp; ,k\leq \lambda\\\end{array}" alt="\omega_k=\left{ \begin{array}{ll} e^{\beta_1(\lambda-k)} &amp;amp; ,k\leq \lambda\\e^{\beta_2(\lambda-k)} &amp;amp; ,k\leq \lambda\\\end{array}" align="absmiddle" /></p>
<p>对于<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cbeta_1%2C%5Cbeta_2%26gt%3B0" title="\beta_1,\beta_2&amp;gt;0" alt="\beta_1,\beta_2&amp;gt;0" align="absmiddle" />，它的分布类似将概率密度图线向均值“挤压”(见图1)，分布更加集中，相对于标准的泊松分布就有更小的方差，称该分布为三参数指数加权泊松分布，记为 EWP3 。特殊地，当<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cbeta_1%3D%5Cbeta_2%3D%5Cbeta" title="\beta_1=\beta_2=\beta" alt="\beta_1=\beta_2=\beta" align="absmiddle" />时，称为两参数指数加权泊松分布，记为 EWP2 分布，当<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cbeta%3D0" title="\beta=0" alt="\beta=0" align="absmiddle" />时退化为标准泊松分布。对于EWP2 和 EWP3 ，它们拥有更高的峰值，标准化因子 W 可以由式 (a) 导出。尽管矩的表达没有显式，但可以确定分布的方差随着<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cbeta_1%2C%5Cbeta_2" title="\beta_1,\beta_2" alt="\beta_1,\beta_2" align="absmiddle" />或<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cbeta" title="\beta" alt="\beta" align="absmiddle" />的增大而降低。</p>
<div id="attachment_2360" class="wp-caption aligncenter" style="width: 309px"><a href="http://cos.name/wp-content/uploads/2010/08/photo1.png" rel='nofollow'><img class="size-medium wp-image-2360" title="lambda=10,beta1=0.1,beta2=0.2的EWP分布" src="http://cos.name/wp-content/uploads/2010/08/photo1-299x299.png" alt="" width="299" height="299" /></a><p class="wp-caption-text">图1 lambda=10,beta1=0.1,beta2=0.2的EWP分布</p></div>
<p>对于加权泊松分布的探究使得权重还有一些别的形式，如 Castillo and Pe´rez-Casany (1998) 提出的幂加权泊松分布(PLWP)，Cameron 和 Johansson (1997) 使用的泊松多元加权分布 PPp 等。</p>
<h3>2. 纯生过程模型（CBR）</h3>
<p>不得不提的是，在处理泊松低方差数据的问题中还有一类较为有效的方法。由Faddy(1997)在随机过程的基础上提出这种变出生概率(CBR)分布。这个分布是建立在广义泊松分布的基础上：Faddy 认为，任何关于 {0,1,2,…}的离散分布都有广义泊松特性，即纯生过程。考虑一个 Markov 计数过程，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize X%28t%29" title="X(t)" alt="X(t)" align="absmiddle" />为<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %280%2Ct%29" title="(0,t)" alt="(0,t)" align="absmiddle" />内的事件发生数，在<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %28t%2Ct%2B%5Csigma%20t%29" title="(t,t+\sigma t)" alt="(t,t+\sigma t)" align="absmiddle" />内有转移概率：</p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize P%5Cleft%7BX%28t%2B%5Csigma%29%3Dn%2B1%7CX%28t%29%3Dn%5Cright%7D%3D%5Clambda_n%5Csigma%2Bo%28%5Csigma%29" title="P\left{X(t+\sigma)=n+1|X(t)=n\right}=\lambda_n\sigma+o(\sigma)" alt="P\left{X(t+\sigma)=n+1|X(t)=n\right}=\lambda_n\sigma+o(\sigma)" align="absmiddle" /></p>
<p>其中<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Clambda_n" title="\lambda_n" alt="\lambda_n" align="absmiddle" />为事件数为n时的事件发生率，我们感兴趣的只是某一时刻<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize X%28t%29" title="X(t)" alt="X(t)" align="absmiddle" />的分布，这里t可以不失一般性地取1，在此模型中，时刻1时的事件数<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize X" title="X" alt="X" align="absmiddle" />的分布具有如下形式：</p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %28p_1%281%29%2Cp_2%281%29%2C%5Cldots%2Cp_n%281%29%29%3D%281%2C0%2C0%2C%5Ccdots%2C0%29exp%28Q%29" title="(p_1(1),p_2(1),\ldots,p_n(1))=(1,0,0,\cdots,0)exp(Q)" alt="(p_1(1),p_2(1),\ldots,p_n(1))=(1,0,0,\cdots,0)exp(Q)" align="absmiddle" /></p>
<p>其中</p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize p_i%281%29%3DP%5Cleft%7BX%281%29%3Di%5Cright%7D" title="p_i(1)=P\left{X(1)=i\right}" alt="p_i(1)=P\left{X(1)=i\right}" align="absmiddle" /></p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize exp%28Q%29%3De%5EQ%3DE%2B%5Cfrac%7BQ%7D%7B1%7D%2B%5Cfrac%7BQ%5E2%7D%7B2%21%7D%2B%5Cfrac%7BQ%5E3%7D%7B3%21%7D%2B%5Ccdots" title="exp(Q)=e^Q=E+\frac{Q}{1}+\frac{Q^2}{2!}+\frac{Q^3}{3!}+\cdots" alt="exp(Q)=e^Q=E+\frac{Q}{1}+\frac{Q^2}{2!}+\frac{Q^3}{3!}+\cdots" align="absmiddle" /></p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize Q%3D%5Cleft%28%20%5Cbegin%7Barray%7D%7Bccc%7D%20-%5Clambda_1%20%26amp%3B%20%5Clambda_1%20%26amp%3B%200%20%26amp%3B%20%5Cldots%20%26amp%3B%200%5C%5C0%20%26amp%3B-%5Clambda_2%20%26amp%3B%20%5Clambda_2%20%26amp%3B%20%5Cldots%20%26amp%3B%200%5C%5C0%20%26amp%3B%200%20%26amp%3B%20-%5Clambda_3%20%26amp%3B%20%5Cldots%20%26amp%3B%20%5Cvdots%5C%5C%20%5Cvdots%20%26amp%3B%20%5Cvdots%20%26amp%3B%20%5Cvdots%20%26amp%3B%20%5Cddots%20%26amp%3B%20%5Clambda_%7Bn-1%7D%5C%5C%200%20%26amp%3B%200%20%26amp%3B%200%20%26amp%3B%20%5Cldots%20%26amp%3B%20-%5Clambda_n%5C%5C%5Cend%7Barray%7D%20%5Cright%29%20" title="Q=\left( \begin{array}{ccc} -\lambda_1 &amp;amp; \lambda_1 &amp;amp; 0 &amp;amp; \ldots &amp;amp; 0\\0 &amp;amp;-\lambda_2 &amp;amp; \lambda_2 &amp;amp; \ldots &amp;amp; 0\\0 &amp;amp; 0 &amp;amp; -\lambda_3 &amp;amp; \ldots &amp;amp; \vdots\\ \vdots &amp;amp; \vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \lambda_{n-1}\\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; \ldots &amp;amp; -\lambda_n\\\end{array} \right) " alt="Q=\left( \begin{array}{ccc} -\lambda_1 &amp;amp; \lambda_1 &amp;amp; 0 &amp;amp; \ldots &amp;amp; 0\\0 &amp;amp;-\lambda_2 &amp;amp; \lambda_2 &amp;amp; \ldots &amp;amp; 0\\0 &amp;amp; 0 &amp;amp; -\lambda_3 &amp;amp; \ldots &amp;amp; \vdots\\ \vdots &amp;amp; \vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \lambda_{n-1}\\ 0 &amp;amp; 0 &amp;amp; 0 &amp;amp; \ldots &amp;amp; -\lambda_n\\\end{array} \right) " align="absmiddle" /></p>
<p>而上式的成立可由 Kolmogorov 微分方程简单推导而来：</p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize p%27%28t%29%3DQp%28t%29%3B%20p%28t%29%3Dce%5E%7BQt%7D%3B%20p%281%29%3Dce%5EQ%3B" title="p&#039;(t)=Qp(t); p(t)=ce^{Qt}; p(1)=ce^Q;" alt="p&#039;(t)=Qp(t); p(t)=ce^{Qt}; p(1)=ce^Q;" align="absmiddle" /></p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize p%280%29%3Dc%3B%20p%281%29%3Dp_0e%5EQ%3B%20p%280%29%3D%281%2C0%2C0%2C%5Cldots%2C0%29" title="p(0)=c; p(1)=p_0e^Q; p(0)=(1,0,0,\ldots,0)" alt="p(0)=c; p(1)=p_0e^Q; p(0)=(1,0,0,\ldots,0)" align="absmiddle" /></p>
<p>这里认为初始时刻的事件数是从1开始的。因此，CBR 分布是由一系列不同的事件发生率参数<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cleft%7B%5Clambda_1%2C%5Clambda_2%2C%5Cldots%2C%5Clambda_k%2C%5Cldots%5Cright%7D" title="\left{\lambda_1,\lambda_2,\ldots,\lambda_k,\ldots\right}" alt="\left{\lambda_1,\lambda_2,\ldots,\lambda_k,\ldots\right}" align="absmiddle" />决定的。通常可以认为<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Clambda_k" title="\lambda_k" alt="\lambda_k" align="absmiddle" />是k的函数。Faddy 在1997年已经证明，对于递增的<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cleft%7B%5Clambda_1%26lt%3B%5Clambda_2%26lt%3B%5Ccdots%26lt%3B%5Clambda_n%26lt%3B%5Ccdots%5Cright%7D" title="\left{\lambda_1&amp;lt;\lambda_2&amp;lt;\cdots&amp;lt;\lambda_n&amp;lt;\cdots\right}" alt="\left{\lambda_1&amp;lt;\lambda_2&amp;lt;\cdots&amp;lt;\lambda_n&amp;lt;\cdots\right}" align="absmiddle" />,<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize X%28t%29" title="X(t)" alt="X(t)" align="absmiddle" />将表现出泊松高方差特征，而当<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Clambda_1%26gt%3B%5Clambda_2%26gt%3B%5Ccdots%26gt%3B%5Clambda_n%26gt%3B%5Ccdots" title="\lambda_1&amp;gt;\lambda_2&amp;gt;\cdots&amp;gt;\lambda_n&amp;gt;\cdots" alt="\lambda_1&amp;gt;\lambda_2&amp;gt;\cdots&amp;gt;\lambda_n&amp;gt;\cdots" align="absmiddle" />递减时，也就表现出泊松低方差特征。</p>
<h2>三、参数估计</h2>
<p>上述两种分布的参数估计都可通过极大似然法求出。记<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize x_i" title="x_i" alt="x_i" align="absmiddle" />为第i个样本的事件发生数，观测数据中中事件数k的频数<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize f_k" title="f_k" alt="f_k" align="absmiddle" />(k=1,2,3,…)，则 EWP2 和  EWP3 分布的负对数似然方程为（已去除与参数无关的项<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize lnk%21" title="lnk!" alt="lnk!" align="absmiddle" />）：</p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize -LnL%28%5Clambda%2C%5Cbeta_1%2C%5Cbeta_2%29%3Dn%5B%5Clambda-%5Cbar%7Bx%7Dln%5Clambda%2BlnW%5D%2B%5Cbeta_1%5Csum%5E%7B%5B%5Clambda%5D%7D_%7Bk%3Dx_%7Bmin%7D%7D%28%5Clambda-k%29f_k%2B%0D%0A%5Cbeta_2%5Csum%5E%7Bx_%7Bmax%7D%7D_%7Bk%3D%5B%5Clambda%5D%2B1%7D%28k-%5Clambda%29f_k" title="-LnL(\lambda,\beta_1,\beta_2)=n[\lambda-\bar{x}ln\lambda+lnW]+\beta_1\sum^{[\lambda]}_{k=x_{min}}(\lambda-k)f_k+&#13;&#10;\beta_2\sum^{x_{max}}_{k=[\lambda]+1}(k-\lambda)f_k" alt="-LnL(\lambda,\beta_1,\beta_2)=n[\lambda-\bar{x}ln\lambda+lnW]+\beta_1\sum^{[\lambda]}_{k=x_{min}}(\lambda-k)f_k+&#13;&#10;\beta_2\sum^{x_{max}}_{k=[\lambda]+1}(k-\lambda)f_k" align="absmiddle" /> (b)</p>
<p>通过求使（b）式达到最小值的<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Chat%7B%5Clambda%7D%2C%5Chat%7B%5Cbeta%7D_1%2C%5Chat%7B%5Cbeta%7D_2" title="\hat{\lambda},\hat{\beta}_1,\hat{\beta}_2" alt="\hat{\lambda},\hat{\beta}_1,\hat{\beta}_2" align="absmiddle" />得到估计参数。</p>
<p>对于纯生过程模型，概率分布向量<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %28p_1%281%29%2Cp_2%281%29%2C%5Cldots%2Cp_N%281%29%29" title="(p_1(1),p_2(1),\ldots,p_N(1))" alt="(p_1(1),p_2(1),\ldots,p_N(1))" align="absmiddle" />就是矩阵<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize exp%28Q%29" title="exp(Q)" alt="exp(Q)" align="absmiddle" />的第一行，若<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize N%3Dx_%7Bmax%7D" title="N=x_{max}" alt="N=x_{max}" align="absmiddle" />，其负对数似然函数为：</p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize -LnL%28%5Clambda_1%2C%5Clambda_2%2C%5Cldots%2C%5Clambda_N%29%3D%5Csum%5EN_%7Bk%3D1%7Df_klnp_k%281%29" title="-LnL(\lambda_1,\lambda_2,\ldots,\lambda_N)=\sum^N_{k=1}f_klnp_k(1)" alt="-LnL(\lambda_1,\lambda_2,\ldots,\lambda_N)=\sum^N_{k=1}f_klnp_k(1)" align="absmiddle" /></p>
<p>通过最小化上式即可得到<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %28%5Clambda_1%2C%5Clambda_2%2C%5Cldots%2C%5Clambda_N%29" title="(\lambda_1,\lambda_2,\ldots,\lambda_N)" alt="(\lambda_1,\lambda_2,\ldots,\lambda_N)" align="absmiddle" />的极大似然估计。而参数估计的方差可以通过数值计算时产生的 Hessian 矩阵得到。</p>
<h2>四、数据实例</h2>
<p>我们引用 Faddy（2001）的小鼠胚胎数据，作者已对该数据用 CBR 方法做了较好的分析。在产生该数据的实验中，对已经怀孕的小鼠用药（除草剂2,4,5-T），同时记录小鼠子宫上的胚胎着床数。数据给出了7种剂量水平下胚胎着床数的频率分布。在交配后的6-14天内，往怀孕的雌鼠体内注射某种剂量水平的2,4,5-T。在分娩之前，将雌鼠杀死，确定其体内的活胎数目。0剂量组的频数分布便具有泊松低方差特征。0剂量组数据的均值为11.55，方差为9.92，方差均值比为0.859。</p>
<div id="attachment_2404" class="wp-caption aligncenter" style="width: 310px"><a href="http://cos.name/wp-content/uploads/2010/08/photo21.png" rel='nofollow'><img class="size-medium wp-image-2404" title="lambda=10,beta1=0.1,beta2=0.2的EWP分布" src="http://cos.name/wp-content/uploads/2010/08/photo21-300x300.png" alt="" width="300" height="300" /></a><p class="wp-caption-text">图2</p></div>
<p>使用泊松分布对参数进行估计，参数 的最大似然估计为样本均值11.55，图2显示了估计的泊松分布和样本观测频率的差异。尽管拥有相同的均值，但由于数据具有泊松低方差特点，其经验分布的比泊松分布集中得多，可以说此时使用泊松分布模型的效果是差强人意的，显然不是一个合适的模型。</p>
<h3>1. 加权泊松分布</h3>
<p>分别使用 EWP2 和 EWP3 分布对0剂量组数据进行参数的最大似然估计。其中EWP2分布中，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Chat%7B%5Clambda%7D" title="\hat{\lambda}" alt="\hat{\lambda}" align="absmiddle" />= 11.79， <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Chat%7B%5Cbeta%7D" title="\hat{\beta}" alt="\hat{\beta}" align="absmiddle" />=0.11，EWP3中，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Chat%7B%5Clambda%7D" title="\hat{\lambda}" alt="\hat{\lambda}" align="absmiddle" />=14.56，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Chat%7B%5Cbeta%7D_1" title="\hat{\beta}_1" alt="\hat{\beta}_1" align="absmiddle" />=-0.15，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Chat%7B%5Cbeta%7D_2" title="\hat{\beta}_2" alt="\hat{\beta}_2" align="absmiddle" />=0.68，估计的 EWP2 、EWP3 分布如图3。由于分布具有了泊松低方差特征，通过权重参数<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cbeta%28%5Cbeta_1%2C%5Cbeta_2%29" title="\beta(\beta_1,\beta_2)" alt="\beta(\beta_1,\beta_2)" align="absmiddle" />将分布向中部“挤压”，分布更加集中且峰值更高，估计的效果相比之下比泊松分布好很多。EWP2 由于在 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Clambda" title="\lambda" alt="\lambda" align="absmiddle" /> 的左右都赋予相等的权重，因此对称的“压缩”模式不如 EWP3 的非对称“压缩”有弹性，从观测数据经验分布的轻微左偏也暗示了允许<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cbeta_1%2C%5Cbeta_2" title="\beta_1,\beta_2" alt="\beta_1,\beta_2" align="absmiddle" />取不同值的 EWP3 分布在分布的拟合上更具优势。</p>
<div id="attachment_2362" class="wp-caption aligncenter" style="width: 309px"><a href="http://cos.name/wp-content/uploads/2010/08/photo3.png" rel='nofollow'><img class="size-medium wp-image-2362" title="EWP2 、EWP3和CBR的分布拟合图" src="http://cos.name/wp-content/uploads/2010/08/photo3-299x299.png" alt="" width="299" height="299" /></a><p class="wp-caption-text">图3 EWP2 、EWP3和CBR的分布拟合图</p></div>
<h3>2. CBR分布</h3>
<p>CBR参数的极大似然估计<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Chat%7B%5Clambda%7D_1%2C%5Chat%7B%5Clambda%7D_2%2C%5Cldots%2C%5Chat%7B%5Clambda%7D_%7B21%7D" title="\hat{\lambda}_1,\hat{\lambda}_2,\ldots,\hat{\lambda}_{21}" alt="\hat{\lambda}_1,\hat{\lambda}_2,\ldots,\hat{\lambda}_{21}" align="absmiddle" />={4.66,7.90,22.97,15.02,18.23,19.18,16.49,14.40,13.15,<br />
10.01,9.33,6.90,6.32,6.26,5.40,6.28,3.27,0.00,2.00,2.00,1.00}，图3中显示的 CBR 拟合效果非常好，几乎与经验分布重合。但模型中含有过多的参数使得估计精度大大降低，其中<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Chat%7B%5Clambda%7D_3" title="\hat{\lambda}_3" alt="\hat{\lambda}_3" align="absmiddle" />的估计标准误为12.59，置信区间宽近50。虽然对于拥有多个事件发生率<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Chat%7B%5Clambda%7D_k" title="\hat{\lambda}_k" alt="\hat{\lambda}_k" align="absmiddle" />的 CBR 分布能够灵活地刻画事件发生数之间的任何概率变化，但参数时过多模型的过度拟合是没有太大意义的，也不易于控制和分析。如前所述，可以利用该模型的<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Clambda" title="\lambda" alt="\lambda" align="absmiddle" />建立关于k的函数，从而减少模型中的参数个数，在该例子中事件数分类较多时这种做法就显得十分必要。Faddy(2001) 就从众多函数形式中找到了一种能很好地模拟事件数发生概率在最初增长较快而后缓慢下降特点的四参数模型：</p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Clambda_k%3Da%28k%5Ebe%5E%7B-ck%7D%2Bd%29%2C%20k%5Cgeq1" title="\lambda_k=a(k^be^{-ck}+d), k\geq1" alt="\lambda_k=a(k^be^{-ck}+d), k\geq1" align="absmiddle" /></p>
<p>对于0剂量组数据，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cleft%7Ba%2Cb%2Cc%2Cd%5Cright%7D" title="\left{a,b,c,d\right}" alt="\left{a,b,c,d\right}" align="absmiddle" />的估计值为 {1.360, 3.507, 0.648, 2.953}，估计的分布与经验分布的对比如图4，尽管模型中减少了17个参数，但由于函数形式的合理，该分布仍旧保持较好的拟合效果，拟合优度<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cchi%5E2%2813%29" title="\chi^2(13)" alt="\chi^2(13)" align="absmiddle" />=6.755，p值为0.914。</p>
<div id="attachment_2363" class="wp-caption aligncenter" style="width: 309px"><a href="http://cos.name/wp-content/uploads/2010/08/photo4.png" rel='nofollow'><img class="size-medium wp-image-2363" title="图4" src="http://cos.name/wp-content/uploads/2010/08/photo4-299x299.png" alt="" width="299" height="299" /></a><p class="wp-caption-text">图4</p></div>
<p>针对 2-4-5T 对小鼠胚胎着床影响的实验数据的泊松低方差特性，相对于标准泊松，加权泊松 EWP2、EWP3 和 CBR 在分布上的修正都使模型有许多改进，能够更好地表现出数据中蕴含的现实含义，其生物学意义的解释也更加清晰：在发育毒性的研究中，药物会影响早期的繁殖过程，阻止胚胎的形成。对于多胎的动物（如老鼠），参数起初的增长表示了受精胚胎着床过程可以进一步刺激排卵，之后的下降说明受精卵着床过程的减慢，这段平缓的过程也就使得方差有所降低。</p>
<h3>3. 组别分析</h3>
<p>之所以选择一个足够合适的分布的重要的意义不仅在于它能较合适地刻画观测数据，更在于它能够精确地刻画不同组别之间的差异。Faddy(2001)表明75剂量组和90剂量组的频数分布相似，并不存在显著性的差异，文章这部分就将比较标准泊松、EWP2、EWP3 和 CBR 这四种分布在检验0剂量组和75/90剂量组之间差异的能力。过程中使用似然比检验。</p>
<p>似然比检验在大样本时具有渐进性。似然比统计量为</p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize Lambda%28x%29%3D%5Cfrac%7Bsup%7BL%28%5Ctheta%7Cx%29%3A%5Ctheta%5Cin%5CTheta_o%7D%7D%7Bsup%7BL%28%5Ctheta%7Cx%29%3A%5Ctheta%5Cin%5CTheta%7D%7D" title="Lambda(x)=\frac{sup{L(\theta|x):\theta\in\Theta_o}}{sup{L(\theta|x):\theta\in\Theta}}" alt="Lambda(x)=\frac{sup{L(\theta|x):\theta\in\Theta_o}}{sup{L(\theta|x):\theta\in\Theta}}" align="absmiddle" /></p>
<p>当样本量n趋于无穷，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize -2log%28%5CLambda%29" title="-2log(\Lambda)" alt="-2log(\Lambda)" align="absmiddle" />将渐进服从<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cchi%5E2%28r%29" title="\chi^2(r)" alt="\chi^2(r)" align="absmiddle" />分布，r为参数空间<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5CTheta" title="\Theta" alt="\Theta" align="absmiddle" /> and <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5CTheta_o" title="\Theta_o" alt="\Theta_o" align="absmiddle" />的维数之差。</p>
<table frame="hsides" align="center">
<caption>表1  四种分布检验效果比较</p>
</caption>
<tbody>
<tr>
<th></th>
<th><strong><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize -2log%28%5CLambda%29" title="-2log(\Lambda)" alt="-2log(\Lambda)" align="absmiddle" /></strong></th>
<th>自由度r</th>
<th>p值</th>
</tr>
<tr>
<th><strong>标准泊松</strong></th>
<th><span style="font-weight: normal;">2.690</span></th>
<th><span style="font-weight: normal;">1</span></th>
<th><span style="font-weight: normal;">0.1000</span></th>
</tr>
<tr>
<th><strong>EWP2</strong></th>
<th><span style="font-weight: normal;">4.789</span></th>
<th><span style="font-weight: normal;">2</span></th>
<th><span style="font-weight: normal;">0.0912</span></th>
</tr>
<tr>
<th><strong>EWP3</strong></th>
<th><span style="font-weight: normal;">11.980</span></th>
<th><span style="font-weight: normal;">3</span></th>
<th><span style="font-weight: normal;">0.0075</span></th>
</tr>
<tr>
<th><strong>CBR</strong></th>
<th><span style="font-weight: normal;">10.764</span></th>
<th><span style="font-weight: normal;">4</span></th>
<th><span style="font-weight: normal;">0.0294</span></th>
</tr>
</tbody>
</table>
<p>标准泊松分布的0剂量组和75/90剂量组的极大对数似然函数值分别为-1837.763和-318.618 ，即负两倍似然比为2.691（自由度为1），p值为0.10（实际值大于0.1），即使在10%的显著性水平上都无法认为0剂量和75/90剂量对小鼠胚胎着床的影响是显著的。EWP2 的负两倍似然比为4.789，p值比标准泊松略小，为0.0912，在10%的显著性水平下可以认为0剂量组和75/90剂量组小鼠胚胎着床的显著差异，但如果显著性水平在5%则无法拒绝原假设。相比之下，CBR和EWP3的负两倍似然比统计量的p值都小得多，在通常5%的显著性水平下能够有力地表明0剂量组和75/90剂量组之间的差异是显著的，且其中 EWP3 的检验效率甚至明显高于 CBR，p值0.0075达到高度显著。</p>
<p>以上检验至少说明在0剂量组和75/90剂量组的比较上 EWP2、EWP3 和 CBR 都优于标准泊松，能够有效地检测出不同组别之间的分布差异，从而证明了本文之初的观点：标准泊松无法准确刻画该实验数据具有泊松低方差的特性，因此将高估剂量组内的方差，在检验上无法有效地识别组间真实存在的差异。如果轻易地使用泊松分布进行分析，将得出0剂量组和75/90剂量组无显著差异的错误结论。而加权泊松分布和 CBR 都在某种程度上克服了标准泊松的缺点，其中 EWP3 和 CBR 则“灵敏”地发现了组间的显著性不同。且 EWP3 能够表现地比 EWP3 出色，还因为剂量组下的频数分布略微左偏，2个加权参数容许 EWP3 更贴切地拟合原始数据的真实分布。</p>
<h2>五、结论</h2>
<p>当数据出现“超散布性”和“超聚集性”时可能出现的问题，分布假定的错误将分别低估和高估真实数据的方差，从而影响模型的合理性，有时甚至导致得出错误的结论。本文着眼于一类典型的“超聚集性”问题——泊松低方差特性，并针对该类问题的解决归纳了两种方法：泊松加权分布模型和纯生过程分布模型。前者通过对标准泊松分布进行加权修正，克服了泊松分布均值和方差必须相等的局限性，其中 EWP2 和 EWP3 具有形式简单且适用性强的特点，而 EWP3 在很多情况下会优于 EWP2，多一个参数能够较好地模拟较普遍的不对称的单峰经验分布。而纯生过程分布模型在思路上则有很大不同，它基于随机过程中的事件发生机制，对于分类的事件计数数据在理论上有很强的适用性。CBR 能够用足够多的参数<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Clambda_k" title="\lambda_k" alt="\lambda_k" align="absmiddle" />模拟不同事件数间频率的变化特征，通过建立<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Clambda_k" title="\lambda_k" alt="\lambda_k" align="absmiddle" />与k的合适的函数形式，可以构造出任何离散分布，尤其适和分析分类较多的数据。此外，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Clambda_k" title="\lambda_k" alt="\lambda_k" align="absmiddle" />的函数变化还有利于结合数据在真实世界中的内在的形成原理，对基于不同事件数时刻的时间发生率<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Clambda_k" title="\lambda_k" alt="\lambda_k" align="absmiddle" />有比较完整的描述，能够赋予参数合理的解释。但 CBR 不适用于分类较少的计数数据，会由于缺少事件产生过程信息它无法表现出其优势。</p>
<h3  class="related_post_title">这个……好像没有相关文章，客官看点儿别的吧</h3><ul class="related_post"><li><a href="http://cos.name/2008/12/cos-navigation-2/" title="统计之都《本周导读》第二辑">统计之都《本周导读》第二辑</a> (15)</li><li><a href="http://cos.name/2008/12/decision-and-risk/" title="决策与风险">决策与风险</a> (8)</li><li><a href="http://cos.name/2009/05/how-to-design-an-experiment/" title="如何设计一个试验">如何设计一个试验</a> (7)</li><li><a href="http://cos.name/2009/06/why-ratio-estimation-is-more-accurate-in-sampling/" title="比率估计为什么精确">比率估计为什么精确</a> (5)</li><li><a href="http://cos.name/2009/04/from-proportion-to-conclusion/" title="从调查报告中的比例数字说统计人如何甄别统计假象">从调查报告中的比例数字说统计人如何甄别统计假象</a> (18)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="" >kimboo</a> : <a class="comment_content" href="http://cos.name/2010/08/poisson-count-data-modeling-problem-of-low-variance/#comment-1612" title="View the entire comment by kimboo" >华丽前十哈~
有几个问题...
1.加权泊松分布的W是从0开始求和还是1开始求和。
2.在组别...</a></li>
<li><a class="commentor" href="" >rryfly</a> : <a class="comment_content" href="http://cos.name/2010/08/poisson-count-data-modeling-problem-of-low-variance/#comment-1611" title="View the entire comment by rryfly" >解决这类问题的关键在于选择合适的分布进行参数估计，文章中已经列举了相应的几种分布，之后需要判断检验的...</a></li>
<li><a class="commentor" href="http://liuxin-blog.appspot.com" >liuxin9023</a> : <a class="comment_content" href="http://cos.name/2010/08/poisson-count-data-modeling-problem-of-low-variance/#comment-1609" title="View the entire comment by liuxin9023" >占位 飘过

文章写的很好 看完很受启发 能不能把超散布性的处理方法也写出来啊</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2010/08/poisson-count-data-modeling-problem-of-low-variance/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>第三届中国R语言会议（北京会场）纪要</title>
		<link>http://cos.name/2010/06/3rd-china-r-beijing-summary/</link>
		<comments>http://cos.name/2010/06/3rd-china-r-beijing-summary/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 05:32:26 +0000</pubDate>
		<dc:creator>邱怡轩</dc:creator>
				<category><![CDATA[统计之都]]></category>
		<category><![CDATA[R语言]]></category>
		<category><![CDATA[会议]]></category>
		<category><![CDATA[北京会场]]></category>
		<category><![CDATA[培训]]></category>
		<category><![CDATA[演讲]]></category>

		<guid isPermaLink="false">http://cos.name/?p=2266</guid>
		<description><![CDATA[第三届中国R语言会议（北京会场）于2010年6月14日~15日在中国人民大学明德法学楼0101成功召开。会议由中国人民大学应用统计科学研究中心与中国人民大学统计学院主办、统计之都网站(cos.name)协办。在两天的会议时间里，来自各行各业的R用户齐聚北京，共同探讨和交流R软件的使用经验，取得了丰厚的成果。  会议概况 参会单位 本次会议吸引了70余家单位近170人参加，参会人员所在单位包括： 大学：爱荷华州立大学、北京大学、北京大学医学部、北京工商大学、北京工业大学、北京航空航天大学、北京化工大学、北京交通大学、北京理工大学、北京联合大学、北京林业大学、北京师范大学、东北农业大学、复旦大学、桂林理工大学、南开大学、山东大学、首都经济贸易大学、首都师范大学、天津大学、武汉大学、西北师范大学、西藏民族学院财经学院、厦门大学、云南师范大学、浙江大学、浙江嘉兴学院、芝加哥大学、中国地质大学（北京）、中国科学院研究生院、中国矿业大学（北京）、中国农业大学、中国人民大学、中国石油大学、中央财经大学、中央民族大学等； 科研所：北京荣昌药物研究院、南京地理与湖泊研究所、天津市第一中心医院、中国科学院北京基因组研究所、中国科学院大气物理研究所、中国科学院地理科学与资源研究所、中国科学院计算机网络信息中心、中国科学院青藏所、中国科学院生物物理所、中国科学院微生物研究所、中国科学院心理所、中国科学院遗传与发育生物学研究所、中国科学院植物研究所、中国农业科学院农业资源与农业区划研究所、中国社会科学院、中国水产科学研究院、中国医学科学院阜外心血管病医院、中国有色金属工业信息中心； 企业：Gfk、IMS Health、Mango Solutions、北京迪美斯科技发展有限公司、北京国政通、北京首航财务管理顾问有限公司、博奥生物有限公司、博纳集团、定谊科技、豆瓣、汇言群知计算机有限公司、其明信息、上海源略数据、同方知网、完美时空、文思创新、现代国际市场研究有限公司、新华信国际信息咨询(北京)有限公司、亚信科技等； 政府部门及事业单位：北京市统计局、北京质量协会、国家减灾中心、国家知识产权局专利局等。 参会人员 用R对收集到的参会者年龄信息进行汇总，得到年龄分布的茎叶图如下：  2nd China-R Beijing 3rd China-R Beijing 18 &#124; 0 0 &#124; 18 19 &#124; 0 00000 &#124; 19 20 &#124; 0000000 000000000 &#124; 20 21 &#124; 000000000000 00000000000000 &#124; 21 22 &#124; 0000000000000000000 0000000000 &#124; 22 23 &#124; 000000000000000 00000000000 &#124; 23 24 [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 510px"><a href="http://cos.name/wp-content/uploads/2010/06/3rd-China-R-BJ.jpg" rel='nofollow'><img class="aligncenter size-large wp-image-1821" title="第三届中国R语言会议北京会场合影" src="http://cos.name/wp-content/uploads/2010/06/3rd-China-R-BJ-500x229.jpg" alt="第三届中国R语言会议北京会场合影" width="500" height="229" /></a><p class="wp-caption-text">第三届中国R语言会议北京会场合影（右键另存为看大图）</p></div>
<p><a href="http://cos.name/wp-content/uploads/2010/06/China-R-Logo.png" rel='nofollow'><img class="aligncenter size-medium wp-image-2276" title="中国R语言会议标识" src="http://cos.name/wp-content/uploads/2010/06/China-R-Logo-300x199.png" alt="" width="300" height="199" /></a></p>
<p>第三届中国R语言会议（北京会场）于2010年6月14日~15日在中国人民大学明德法学楼0101成功召开。会议由中国人民大学应用统计科学研究中心与中国人民大学统计学院主办、统计之都网站(<a href="http://cos.name" target="_blank" rel='nofollow'>cos.name</a>)协办。在两天的会议时间里，来自各行各业的R用户齐聚北京，共同探讨和交流R软件的使用经验，取得了丰厚的成果。 </p>
<h1>会议概况</h1>
<h2>参会单位</h2>
<p>本次会议吸引了70余家单位近170人参加，参会人员所在单位包括：</p>
<ul>
<li>大学：爱荷华州立大学、北京大学、北京大学医学部、北京工商大学、北京工业大学、北京航空航天大学、北京化工大学、北京交通大学、北京理工大学、北京联合大学、北京林业大学、北京师范大学、东北农业大学、复旦大学、桂林理工大学、南开大学、山东大学、首都经济贸易大学、首都师范大学、天津大学、武汉大学、西北师范大学、西藏民族学院财经学院、厦门大学、云南师范大学、浙江大学、浙江嘉兴学院、芝加哥大学、中国地质大学（北京）、中国科学院研究生院、中国矿业大学（北京）、中国农业大学、中国人民大学、中国石油大学、中央财经大学、中央民族大学等；</li>
<li>科研所：北京荣昌药物研究院、南京地理与湖泊研究所、天津市第一中心医院、中国科学院北京基因组研究所、中国科学院大气物理研究所、中国科学院地理科学与资源研究所、中国科学院计算机网络信息中心、中国科学院青藏所、中国科学院生物物理所、中国科学院微生物研究所、中国科学院心理所、中国科学院遗传与发育生物学研究所、中国科学院植物研究所、中国农业科学院农业资源与农业区划研究所、中国社会科学院、中国水产科学研究院、中国医学科学院阜外心血管病医院、中国有色金属工业信息中心；</li>
<li>企业：Gfk、IMS Health、Mango Solutions、北京迪美斯科技发展有限公司、<span>北京国政通<em>、</em></span>北京首航财务管理顾问有限公司、博奥生物有限公司、博纳集团、定谊科技、豆瓣、汇言群知计算机有限公司、其明信息、上海源略数据、同方知网、完美时空、文思创新、现代国际市场研究有限公司、新华信国际信息咨询(北京)有限公司、亚信科技等；</li>
<li>政府部门及事业单位：北京市统计局、北京质量协会、国家减灾中心、国家知识产权局专利局等。</li>
</ul>
<h2>参会人员</h2>
<p>用R对收集到的参会者年龄信息进行汇总，得到年龄分布的茎叶图如下： </p>
<pre>2nd China-R Beijing              3rd China-R Beijing

18 | 0                                        0 | 18
19 | 0                                    00000 | 19
20 | 0000000                          000000000 | 20
21 | 000000000000                00000000000000 | 21
22 | 0000000000000000000             0000000000 | 22
23 | 000000000000000                00000000000 | 23
24 | 0000000                       000000000000 | 24
25 | 000000000000             00000000000000000 | 25
26 | 000000000000000              0000000000000 | 26
27 | 000000000000                   00000000000 | 27
28 | 000                             0000000000 | 28
29 | 000000                               00000 | 29
30 | 000000                             0000000 | 30
31 | 0                                     0000 | 31
32 | 0                                      000 | 32
33 | 0                                     0000 | 33
34 | 0                                       00 | 34
35 |                                        000 | 35
36 | 0                                        0 | 36
37 |                                          0 | 37
38 | 0                                          | 38

45 | 0                                          | 45</pre>
<p>可以看出，与<a href="http://cos.name/2009/12/2nd-chinese-r-conference-summary/" target="_blank" rel='nofollow'>上届会议</a>相比，本届会议一个显著的变化是参会者的年龄结构更加丰富，这从一个侧面说明了R的用户范围正在逐步扩大，不同年龄层的人都开始对R软件产生了兴趣。</p>
<p>与上届会议类似，本届会议的参会人员大都来自高校和科研机构，包括在校学生、高校老师、科研所研究员等；而本届会议同样得到了企业界和政府部门朋友的大力支持，其中有行业分析师、市场研究员、咨询师、政府服务人员、公务员、医药统计分析师、算法工程师、软件工程师等等。 </p>
<h1>会议内容</h1>
<p>本次会议由两部分组成，其中第一天为R语言基础培训，第二天为演讲报告。</p>
<p>6月14日上午，<a href="http://cos.name/cn/forum/15" target="_blank" rel='nofollow'>统计之都论坛R版</a>版主、亚信科技有限公司研究员<a href="http://www.bjt.name/" target="_blank" rel='nofollow'>刘思喆</a>为参会者讲解了R软件的历史及其基本的统计计算功能；下午，统计之都创始人、中国R语言会议发起人、美国爱荷华州立大学在读博士<a href="http://yihui.name/" target="_blank" rel='nofollow'>谢益辉</a>讲解了R软件的作图功能。本次培训是三届会议以来北京会场举行的首次正式R语言基础培训，取得了良好的反响，同时为国内R软件的推广提供了新的动力。</p>
<p>培训讲稿下载：</p>
<ul>
<li><a href="http://cos.name/wp-content/uploads/2010/06/China-R-2010-Rintro.pdf" target="_blank" rel='nofollow'>R语言基础</a></li>
<li><a href="http://cos.name/wp-content/uploads/2010/06/China-R-2010-Graphics.zip" target="_blank" rel='nofollow'>R作图</a></li>
</ul>
<p>6月15日为会议的演讲报告部分，本次会议共进行了九场正式报告，在此要特别感谢各位演讲者热情的参与和支持。以下演讲资料都遵守<a href="http://creativecommons.org/licenses/by/3.0/deed.zh" target="_blank" rel='nofollow'>CC协议</a>：</p>
<ul>
<li>谢益辉：傻瓜软件是怎样炼成的：<a href="http://yihui.name/cn/wp-content/uploads/2010/06/3rd-ChinaR-gWidgets-Yihui-Xie.pdf" target="_blank" rel='nofollow'>用gWidgets包创建图形用户界面</a>（<a href="http://yihui.name/cn/wp-content/uploads/2010/06/3rd-ChinaR-gWidgets-Yihui-Xie.txt" target="_blank" rel='nofollow'>相关程序代码</a>）</li>
<li>江麒：<a href="http://cos.name/wp-content/uploads/2010/06/China-R-2010-Nlme-Package.pdf" target="_blank" rel='nofollow'>Nlme包</a>及<a href="http://cos.name/wp-content/uploads/2010/06/China-R-2010-MCM-with-R.pdf" target="_blank" rel='nofollow'>数学建模中的R</a></li>
<li>李舰：<a href="http://cos.name/wp-content/uploads/2010/06/China-R-2010-Text-Mining.pdf" target="_blank" rel='nofollow'>R与文本挖掘</a></li>
<li>杨仁东：<a href="http://cos.name/wp-content/uploads/2010/06/China-R-2010-R-Python.pdf" target="_blank" rel='nofollow'>R与Python在昼夜节律分析中的应用</a></li>
<li>陈堰平：<a href="http://cos.name/wp-content/uploads/2010/06/China-R-2010-Nonparametric-Regression-with-R.pdf" target="_blank" rel='nofollow'>非参数回归的R语言实现</a></li>
<li>稳国柱：<a href="http://cos.name/wp-content/uploads/2010/06/China-R-2010-Vectorization.ppt" target="_blank" rel='nofollow'>加速R，矢量化运算与并行运算</a>（更详细的介绍请参见<a href="http://www.wentrue.net/blog/?p=945" target="_blank" rel='nofollow'>这里</a>）</li>
<li>祝迎春：<a href="http://cos.name/wp-content/uploads/2010/06/China-R-2010-Factor-Analysis.pdf" target="_blank" rel='nofollow'>R与因子分析的新发展</a></li>
<li>甄一松：<a href="http://cos.name/wp-content/uploads/2010/06/China-R-2010-R-Bioconductor.pdf" target="_blank" rel='nofollow'>R/BioConductor在斑马鱼心脏再生领域的应用</a></li>
<li>胡一睿：<a href="http://cos.name/wp-content/uploads/2010/06/China-R-2010-Time-Series-TAR-Model.pdf" target="_blank" rel='nofollow'>R在处理门限自回归模型中的应用</a></li>
</ul>
<div class="wp-caption aligncenter" style="width: 510px"><a href="http://cos.name/wp-content/uploads/2010/06/3rd-China-R-BJ-2.jpg" rel='nofollow'><img class="aligncenter size-large wp-image-1821" title="第三届中国R语言会议北京会场演讲者与组织人员合影" src="http://cos.name/wp-content/uploads/2010/06/3rd-China-R-BJ-2-500x281.jpg" alt="第三届中国R语言会议北京会场演讲者与组织人员合影" width="500" height="281" /></a><p class="wp-caption-text">第三届中国R语言会议北京会场演讲者与组织人员合影（右键另存为看大图）</p></div>
<h1> </h1>
<h1>会议展望</h1>
<p>在会议结束后的综合讨论中，会议的参会者与会议的组织人员共同交流了中国R语言会议的长期发展问题，就形成会议常务的核心委员会和责任机制达成了共识，并决定要在正式的R会议之外举办经常性的交流活动。如果您对于中国R语言会议有何意见或建议，也请在此提出，谢谢！</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2009/12/2nd-chinese-r-conference-summary/" title="第二届中国R语言会议纪要">第二届中国R语言会议纪要</a> (24)</li><li><a href="http://cos.name/2008/12/1st-chinese-r-conference-summary/" title="第一届中国R语言会议纪要">第一届中国R语言会议纪要</a> (38)</li><li><a href="http://cos.name/2008/11/r-conference-notice/" title="第一届中国R语言会议将于12月中旬在中国人民大学召开">第一届中国R语言会议将于12月中旬在中国人民大学召开</a> (3)</li><li><a href="http://cos.name/2010/05/from-clt-simulation-to-normal-distribution/" title="从中心极限定理的模拟到正态分布">从中心极限定理的模拟到正态分布</a> (35)</li><li><a href="http://cos.name/2009/12/improve-r-computation-efficiency/" title="也谈提高R语言的运算效率">也谈提高R语言的运算效率</a> (15)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="" >McGrady</a> : <a class="comment_content" href="http://cos.name/2010/06/3rd-china-r-beijing-summary/#comment-1597" title="View the entire comment by McGrady" >还记的吃饭时那个帮你拿筷子的人么？</a></li>
<li><a class="commentor" href="http://gossipcoder.com" >Oldbeggar</a> : <a class="comment_content" href="http://cos.name/2010/06/3rd-china-r-beijing-summary/#comment-1589" title="View the entire comment by Oldbeggar" >哈哈，看到仁东兄了～</a></li>
<li><a class="commentor" href="http://blog496.org" >王晓伟</a> : <a class="comment_content" href="http://cos.name/2010/06/3rd-china-r-beijing-summary/#comment-1558" title="View the entire comment by 王晓伟" >呵呵，终于看到后续报道了~</a></li>
<li><a class="commentor" href="" >wuzhaoyi</a> : <a class="comment_content" href="http://cos.name/2010/06/3rd-china-r-beijing-summary/#comment-1557" title="View the entire comment by wuzhaoyi" >总算等到了，Cong~</a></li>
<li><a class="commentor" href="" >邱怡轩</a> : <a class="comment_content" href="http://cos.name/2010/06/3rd-china-r-beijing-summary/#comment-1556" title="View the entire comment by 邱怡轩" >算的是报名时的信息。</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2010/06/3rd-china-r-beijing-summary/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>从中心极限定理的模拟到正态分布</title>
		<link>http://cos.name/2010/05/from-clt-simulation-to-normal-distribution/</link>
		<comments>http://cos.name/2010/05/from-clt-simulation-to-normal-distribution/#comments</comments>
		<pubDate>Sun, 09 May 2010 04:24:58 +0000</pubDate>
		<dc:creator>谢益辉</dc:creator>
				<category><![CDATA[概率论与数理统计]]></category>
		<category><![CDATA[统计图形]]></category>
		<category><![CDATA[统计计算]]></category>
		<category><![CDATA[R语言]]></category>
		<category><![CDATA[SAS]]></category>
		<category><![CDATA[Shapiro检验]]></category>
		<category><![CDATA[中心极限定理]]></category>
		<category><![CDATA[动画]]></category>
		<category><![CDATA[密度曲线]]></category>
		<category><![CDATA[数学假设条件]]></category>
		<category><![CDATA[样本均值]]></category>
		<category><![CDATA[样本量]]></category>
		<category><![CDATA[正态分布]]></category>
		<category><![CDATA[泰勒展开]]></category>
		<category><![CDATA[直方图]]></category>
		<category><![CDATA[统计模拟]]></category>
		<category><![CDATA[钟形曲线]]></category>
		<category><![CDATA[随机变量]]></category>

		<guid isPermaLink="false">http://cos.name/?p=2186</guid>
		<description><![CDATA[昨日翻看朱世武老师的《金融计算与建模》幻灯片（来源，幻灯片“13随机模拟基础”），其中提到了中心极限定理（Central Limit Theorem，下文简称CLT）及其SAS模拟实现。由于我一直觉得我们看到的大多数对CLT的模拟都有共同的误导性，因此在此撰文讲述我的观点，希望能说清楚CLT的真实面目，让读者对它有更深刻的理解。 一、中心极限定理说了什么 从广义的角度来讲，CLT说的是一些随机变量之和（在n趋于无穷的时候）趋于正态分布，条件是这些随机变量之间相关性不要太严重，每个随机变量自身的方差相对来说不要太大。我们平时看到的都是CLT的最简单的形式：随机变量独立同分布，方差有限。实际上独立同分布不是必要的条件。要理解这段话，我们就得去思考一下Lindeberg条件或Liapounov条件的含义，以及非独立情况下的CLT。而CLT为什么偏偏选中了正态分布呢？这主要是泰勒展开的功劳（注1），加上特征函数作为“催化剂”，捣鼓半天，最后一看，特征函数的极限形式正是正态分布。本文不打算走到这样偏僻的数学角落，只是先介绍一下CLT的前世今生，当我们在统计理论上犯迷糊的时候，回溯到事情的最原始状态，往往能让头脑更清醒（注2）。 即使是最简单的CLT，我觉得几乎所有做模拟的人都走入了一个误区，就是把钟形密度曲线解释为正态分布。给一个非正态的总体分布，重复计算若干次样本均值，把密度以直方图或密度曲线的形式画出来，给观众们说，看：钟形曲线！群众们一看，哇，原本是左偏/右偏/水平的密度，现在真的变成了对称的钟形曲线。于是乎不得不信服CLT的魔力。 二、中心极限定理的模拟 我们缺的不是钟形曲线，而是样本均值的分布和正态分布差多少的指标。这一点在下面第3小节中再谈，先看几个常见的模拟例子。 1、对称的钟形曲线不代表正态分布 很多人喜欢用掷骰子的例子来讲中心极限定理，大意是将两次独立掷骰子的结果加起来，看这个和的分布。我犹记当年人大一位老师给我们上抽样就举了这个例子说明CLT的魔力：看，即使样本量为2，得到的分布也是正态分布！恰好昨天在朱老师的幻灯片中又看到这个例子，不禁感叹这样一个糟糕的例子竟然经久不衰。这个例子的骗局在哪儿呢？其实很简单：在于掷骰子得到的结果的“对称性”，换句话说，结果是1、2、3、4、5、6，这6个数字围绕其均值3.5左右对称，因此两次骰子的结果加起来也围绕7对称，再画个图，两边低，中间高，看似正态分布好像出来了。朱老师的SAS代码如下： data a; do x1=1 to 6; do x2=1 to 6; output; end; end; /*模拟掷骰子两次，生成36行数据*/ data a; set a; x=sum(x1,x2); proc univariate data=a noprint; var x; histogram/normal (mu=est sigma=est); run; 先跑题说一处细节：这段代码中的直方图不合适，因为我们知道结果x只可能是整数，而（SAS）直方图默认的分组也会以整数为边界，每个边界上的整数都被归到右边的条中去了，而这个所谓的直方图其实只是个条形图：展示每种结果的频数。所以这种情况下认为指定非整数的分组边界才能显示数据真实的分布。以下是R代码： x = rowSums(expand.grid(1:6, 1:6)) hist(x, breaks = seq(min(x) - 0.5, max(x) + 0.5, 1), main [...]]]></description>
			<content:encoded><![CDATA[<p>昨日翻看朱世武老师的《金融计算与建模》幻灯片（<a href="http://cos.name/cn/topic/15637" target="_blank" rel='nofollow'>来源</a>，幻灯片“13随机模拟基础”），其中提到了中心极限定理（Central Limit Theorem，下文简称CLT）及其SAS模拟实现。由于我一直觉得我们看到的大多数对CLT的模拟都有共同的误导性，因此在此撰文讲述我的观点，希望能说清楚CLT的真实面目，让读者对它有更深刻的理解。</p>
<h2>一、中心极限定理说了什么</h2>
<p>从广义的角度来讲，CLT说的是一些随机变量之和（在n趋于无穷的时候）趋于正态分布，条件是这些随机变量之间相关性不要太严重，每个随机变量自身的方差相对来说不要太大。我们平时看到的都是CLT的最简单的形式：随机变量独立同分布，方差有限。实际上独立同分布不是必要的条件。要理解这段话，我们就得去思考一下Lindeberg条件或Liapounov条件的含义，以及非独立情况下的CLT。而CLT为什么偏偏选中了正态分布呢？这主要是泰勒展开的功劳（注1），加上特征函数作为“催化剂”，捣鼓半天，最后一看，特征函数的极限形式正是正态分布。本文不打算走到这样偏僻的数学角落，只是先介绍一下CLT的前世今生，当我们在统计理论上犯迷糊的时候，回溯到事情的最原始状态，往往能让头脑更清醒（注2）。</p>
<p>即使是最简单的CLT，我觉得几乎所有做模拟的人都走入了一个误区，就是把钟形密度曲线解释为正态分布。给一个非正态的总体分布，重复计算若干次样本均值，把密度以直方图或密度曲线的形式画出来，给观众们说，看：钟形曲线！群众们一看，哇，原本是左偏/右偏/水平的密度，现在真的变成了对称的钟形曲线。于是乎不得不信服CLT的魔力。</p>
<h2>二、中心极限定理的模拟</h2>
<p>我们缺的不是钟形曲线，而是样本均值的分布和正态分布差多少的指标。这一点在下面第3小节中再谈，先看几个常见的模拟例子。</p>
<h3>1、对称的钟形曲线不代表正态分布</h3>
<p>很多人喜欢用掷骰子的例子来讲中心极限定理，大意是将两次独立掷骰子的结果加起来，看这个和的分布。我犹记当年人大一位老师给我们上抽样就举了这个例子说明CLT的魔力：看，即使样本量为2，得到的分布也是正态分布！恰好昨天在朱老师的幻灯片中又看到这个例子，不禁感叹这样一个糟糕的例子竟然经久不衰。这个例子的骗局在哪儿呢？其实很简单：在于掷骰子得到的结果的“对称性”，换句话说，结果是1、2、3、4、5、6，这6个数字围绕其均值3.5左右对称，因此两次骰子的结果加起来也围绕7对称，再画个图，两边低，中间高，看似正态分布好像出来了。朱老师的SAS代码如下：</p>
<pre>data a;
do x1=1 to 6;
do x2=1 to 6;
output;
end;
end;  /*模拟掷骰子两次，生成36行数据*/
data a;
set a;
x=sum(x1,x2);
proc univariate data=a noprint;
var x;
histogram/normal (mu=est sigma=est);
run;</pre>
<p>先跑题说一处细节：这段代码中的直方图不合适，因为我们知道结果x只可能是整数，而（SAS）直方图默认的分组也会以整数为边界，每个边界上的整数都被归到右边的条中去了，而这个所谓的直方图其实只是个条形图：展示每种结果的频数。所以这种情况下认为指定非整数的分组边界才能显示数据真实的分布。以下是R代码：</p>
<pre>x = rowSums(expand.grid(1:6, 1:6))
hist(x, breaks = seq(min(x) - 0.5, max(x) + 0.5, 1), main = "")
</pre>
<div id="attachment_2187" class="wp-caption aligncenter" style="width: 310px"><img class="size-full wp-image-2187" title="两次掷骰子得到的结果之和的分布" src="http://cos.name/wp-content/uploads/2010/05/sim-dice-hist.png" alt="两次掷骰子得到的结果之和的分布" width="300" height="300" /><p class="wp-caption-text">两次掷骰子得到的结果之和的分布</p></div>
<p>样本量为2的时候真的得到正态分布了么？CLT确实有它的神奇之处，但还没那么神奇。以上结果如我前文所说，仅仅是由于样本空间中的元素的对称性，所以得到了一副对称的图形，看起来像是正态分布，如果我们再用另外6个数字试验一下，马上就看穿这种迷惑了，我把最后一个数字换成15再看直方图：</p>
<pre>d = c(1, 2, 3, 4, 5, 15)
x = rowSums(expand.grid(d, d))
hist(x, breaks = seq(min(x) - 0.5, max(x) + 0.5, 1), main = "")
</pre>
<div id="attachment_2188" class="wp-caption aligncenter" style="width: 310px"><img class="size-full wp-image-2188" title="6个数字中2个样本之和的分布" src="http://cos.name/wp-content/uploads/2010/05/sim-6num-hist.png" alt="6个数字中2个样本之和的分布" width="300" height="300" /><p class="wp-caption-text">6个数字中2个样本之和的分布</p></div>
<p>如何？“正态分布”哪里去了？客官是否能看清骰子中的中心极限定理谎言了？</p>
<h3>2、直方图上添加正态密度曲线有误导性</h3>
<p>在我还会用SPSS的年代（大约是SPSS 15.0），我就发现SPSS的一个荒唐之处，它的直方图有个选项，可以控制是否添加正态密度曲线。我们被“正态”毒害得多深，从这些软件设置就可以看出来。为什么只能加正态密度曲线，而不能加数据自身反映出来的核密度估计曲线？换句话说，数据的分布一定要是正态么？</p>
<p>我们看CLT的模拟，很多人也喜欢在直方图上加上正态分布密度曲线，这有一定道理：可以看直方图跟正态密度的差异有多大。然而，我们却很少见直方图上的核密度曲线（注3）。既然是要作比较，就拿最可比的去比，比如曲线对曲线，直方图对直方图，人眼本来就是不精确的测量工具，那么制图者就应该提供尽量准确而方便的参照系。</p>
<h3>3、给出拟合好坏的指标</h3>
<p>综上，我在两年多以前已经把这些CLT模拟的想法写成函数收录在R包<a title="http://cran.r-project.org/web/packages/animation/index.html" href="http://cran.r-project.org/web/packages/animation/index.html" target="_blank" rel='nofollow'>animation</a>中，参见函数<code>clt.ani()</code>。代码及输出如下：</p>
<pre>if (!require(animation)) install.packages("animation")
library(animation)
ani.options(interval = 0.1, nmax = 100)
par(mar = c(4, 4, 1, 0.5))
clt.ani()</pre>
<div id="attachment_2189" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-2189" title="中心极限定理模拟：从指数分布到正态分布" src="http://cos.name/wp-content/uploads/2010/05/clt-rexp-demo.gif" alt="中心极限定理模拟：从指数分布到正态分布" width="480" height="480" /><p class="wp-caption-text">中心极限定理模拟：从指数分布到正态分布</p></div>
<p>这个CLT模拟的过程很简单：给一个总体分布（默认为右偏的指数分布），在给定样本量n时不断重复抽样分别计算样本均值，一直这样计算obs个均值，并画出它们的直方图和相应的核密度估计曲线；然后随着n增大，看相应的样本均值分布如何。此外，我使用了Shapiro正态性检验来检验这些均值的正态性，并把P值取出来画在下半幅图中。这样我们就很清楚地知道，对于每一种样本量（n = 1, &#8230;, 100），我们的样本均值究竟离正态分布多远。此处P值就充当了一个拟合好坏的指标。可以看出，上面的动画中，当样本量n超过20之后，P值会普遍偏大，也就是样本均值的分布和正态分布比较接近（严格来说，是“不能拒绝正态分布”），但也不能保证样本量大就一定意味着正态分布，譬如上图中n=40的时候P值就很小。</p>
<h2>三、小结</h2>
<p>正态分布在统计中的地位如此之重要，以至于人们几乎认为正态是一种自然而然的分布，本文想说明的是，正态有它的自然性（参见注1），但我们不能逮着两边低中间高的东西都叫正态（参见小学课文<a title="http://yihui.name/cn/2009/01/bell-shaped-curve-and-density-estimation/" href="http://yihui.name/cn/2009/01/bell-shaped-curve-and-density-estimation/" target="_blank" rel='nofollow'>《小蝌蚪找妈妈》</a>）；做模型或分析数据之前，先清空脑子里的这种“<a title="http://yihui.name/cn/2009/02/gaussian-distribution-and-statistical-dogmatism/" href="http://yihui.name/cn/2009/02/gaussian-distribution-and-statistical-dogmatism/" target="_blank" rel='nofollow'>正态教义</a>”，用事实说话。</p>
<p>另外，前面胡江堂挖了个大坑，大家跳进去争论了半天SAS和R的问题，我在这里也挖个小坑：就模拟而言，如果有SAS用户愿意研究一下，我想知道朱老师的SAS模拟代码是否有改进的余地。SAS自70年代创立，过了二十多年才引进“函数”这种杀人越货编程必备之工具，一直以来都是“宏”的天下，说它“恐龙”应该也不冤枉吧。朱老师幻灯片中的长篇SAS代码，如果用R改写，应该都不会超过三五行甚至一行（注4），而反过来可能就麻烦了，比如上面的动画（用SAS怎么写？），它用R之所以方便，是因为R大量的统计相关的函数可任意调用，而图形也很灵活，可以把P值动态写在图例的位置，也可以愿意把样本量n作为下标动态写在<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cbar%7BX%7D" title="\bar{X}" alt="\bar{X}" align="absmiddle" />旁边。</p>
<h2>脚注</h2>
<p><strong>注1</strong>：以我的浅见，统计学中绝大多数极限正态分布的来源都是泰勒展开，主要是因为泰勒展开中有一个平方项，这个东西和正态分布的密度函数（或特征函数）看起来形式相似，再加上一些对高次项的假设（使它们在极限中消去），正态分布也就来了。另一个典型例子是极大似然估计的渐近正态性：泰勒展开中一阶导数为零，剩下二阶像正态。此外，正态分布有个独特的特点，就是它的密度函数和特征函数长得很像，冥冥之中也主导了很多统计量的分布（这一点我还没太想清楚）。</p>
<p><strong>注2</strong>：我很少见统计学家强调这种想法的重要性，仿佛大家都埋在公式堆里都推导得倍儿高兴。有两个例外：一个是Brian Ripley教授，我在看他的一份幻灯片<a href="http://www.stats.ox.ac.uk/%7Eripley/Nelder80.pdf" rel='nofollow'>Selecting  amongst large classes of models</a>的时候发现他竟然回顾了AIC的假设条件——这是我见过的唯一一个讲模型选择时会回到数学根源的人；另一个是Ripley的老搭档，Bill Venables，他在他那著名的手稿<a href="http://www.stats.ox.ac.uk/pub/MASS3/Exegeses.pdf" rel='nofollow'>Exegeses  on Linear Models</a>中竟然从泰勒展开来说线性模型的来历，这也是我在所有我读过的线性模型相关的文章和书中看到的唯一一份从泰勒展开角度谈线性模型的材料。我个人并不喜欢数学，但我喜欢看思路。</p>
<p><strong>注3</strong>：我的观点是，画直方图尽量加上核密度估计曲线，因为它能刻画数据在任意位置上的密度大小，而直方图的形状则完全受制于分组边界的位置。当然，核密度估计曲线也取决于核函数，但大多数情况下，核函数不会对曲线的形状有太大的影响。不过邱怡轩在前面“<a title="Permanent Link to 有边界区间上的核密度估计" href="http://cos.name/2010/04/kernel-density-estimation-with-unbounded-region/" rel='nofollow'>有边界区间上的核密度估计</a>”一文中提到的问题很值得注意。</p>
<p><strong>注4</strong>：伯努利随机变量之和的分布。SAS代码：</p>
<pre>symbol;
goptions ftext= ctext= htext=;

%macro a(n);
data rv;
retain _seed_ 0;
do _i_ = 1 to &amp;n;
binom1 = ranbin(_seed_,&amp;n,0.8); /*ranbin函数返回以seed、n、0.8为参数的二项分布随机变量*/
output;
end;
drop _seed_ _i_;
run;
%mend;

%a(100);

proc univariate data=rv noprint;
var binom1;
histogram/normal( mu=est sigma=est);
inset normal ;
run;</pre>
<p>R代码：</p>
<pre>a = function(n) hist(rbinom(n, n, 0.8))</pre>
<p>什么叫向量化编程？这就是R它爹S语言诞生的原因之一：统计学的编程不应该涉及到那么多繁琐的循环。</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2009/01/r-and-sas-new-york-times/" title="R与SAS之争：一个导读">R与SAS之争：一个导读</a> (28)</li><li><a href="http://cos.name/2008/12/decision-and-risk/" title="决策与风险">决策与风险</a> (8)</li><li><a href="http://cos.name/2008/12/my-experience-with-statistics-by-chongjie-liu/" title="刘重杰：和统计接触的经历">刘重杰：和统计接触的经历</a> (4)</li><li><a href="http://cos.name/2008/11/which-statistical-software-should-we-use/" title="统计学专业应该使用什么样的统计软件（写给在统计学院学习的学弟学妹之四）">统计学专业应该使用什么样的统计软件（写给在统计学院学习的学弟学妹之四）</a> (37)</li><li><a href="http://cos.name/2008/11/probability-theory-origin-development-application/" title="概率论的起源、发展、应用">概率论的起源、发展、应用</a> (5)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="" >范建宁</a> : <a class="comment_content" href="http://cos.name/2010/05/from-clt-simulation-to-normal-distribution/#comment-1543" title="View the entire comment by 范建宁" >中心极限定理没有错，但是样本量为2的时候话中心极限定理，这是没有真正理解“极限”的含义。</a></li>
<li><a class="commentor" href="http://yihui.name" >谢益辉</a> : <a class="comment_content" href="http://cos.name/2010/05/from-clt-simulation-to-normal-distribution/#comment-1504" title="View the entire comment by 谢益辉" >谢谢，这个建议很好，固定坐标轴范围之后可以明显观察到：样本均值的分布越来越集中于一个点，即：x轴越来...</a></li>
<li><a class="commentor" href="http://www.etsir.com" >徐梁君</a> : <a class="comment_content" href="http://cos.name/2010/05/from-clt-simulation-to-normal-distribution/#comment-1503" title="View the entire comment by 徐梁君" >中间的gif演示建议把纵轴min-max固定</a></li>
<li><a class="commentor" href="http://yihui.name" >谢益辉</a> : <a class="comment_content" href="http://cos.name/2010/05/from-clt-simulation-to-normal-distribution/#comment-1478" title="View the entire comment by 谢益辉" >所以说向量化编程可以减轻统计工作者的编程任务啊，R把这些常见的功能都封装到底层语言中，代码写起来既轻...</a></li>
<li><a class="commentor" href="http://jiangtanghu.com/" >胡江堂</a> : <a class="comment_content" href="http://cos.name/2010/05/from-clt-simulation-to-normal-distribution/#comment-1476" title="View the entire comment by 胡江堂" >to xin,

你是对的，ranbin()产生一个随机数，n个循环则产生n个随机数。我提到SA...</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2010/05/from-clt-simulation-to-normal-distribution/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>Think SAS(一)</title>
		<link>http://cos.name/2010/04/think-sas-1/</link>
		<comments>http://cos.name/2010/04/think-sas-1/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 07:57:09 +0000</pubDate>
		<dc:creator>胡江堂</dc:creator>
				<category><![CDATA[应用领域]]></category>
		<category><![CDATA[数据分析]]></category>
		<category><![CDATA[生物与医学统计]]></category>
		<category><![CDATA[统计软件]]></category>
		<category><![CDATA[行业观察]]></category>
		<category><![CDATA[Fortran]]></category>
		<category><![CDATA[Maple]]></category>
		<category><![CDATA[Mathematica]]></category>
		<category><![CDATA[MatLab]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[S-plus]]></category>
		<category><![CDATA[SAS]]></category>
		<category><![CDATA[SAS程序员]]></category>
		<category><![CDATA[SPSS]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[商务智能]]></category>
		<category><![CDATA[求职]]></category>
		<category><![CDATA[统计]]></category>
		<category><![CDATA[统计之都]]></category>
		<category><![CDATA[统计工具]]></category>

		<guid isPermaLink="false">http://cos.name/2010/04/think-sas/</guid>
		<description><![CDATA[为什么你应该学SAS？本文不想卷入SAS与R，或者与SPSS、S-Plus、Matlab等统计软件孰优孰劣的争论中去，我是说，作为一个有志于投身工业界的统计分析人员，你为什么应该把SAS纳入你的分析工具箱？这会是一篇动员贴，尤其是对广大对数据分析感兴趣的在校生。在默认统计编程语言是R的“统计之都”，我需要拿上面这幅图来吸引眼球：学SAS吧。 R是好东西，不只是在COS，现在全世界的统计系和统计学生当中，R是主导性的学术语言。但不妙的是，国内高校学生中，学SAS的明显少了，医药、金融等行业经常苦于招不到合适的SAS程序员。在统计分析领域，SAS是主导性的工业语言，它与R，不应该是此消彼长的关系。工业界与学院的隔膜，现在我感觉是非常明显。下面讲的就是，关于SAS，我们在学院可能不太关注的事实。 0. SAS是什么？ 这是一个问题，SAS已经不是你所想象的那个样子。作为一家年收入超过20亿美元的、全球最大的独立BI/分析厂商，SAS就是那家由Dr. Jim Goodnight领导的私人公司。作为一个庞大的软件系统，以下只是SAS系统的一个不完整、不系统的介绍： 1.传统SAS（编程驱动） 1-1 基础模块（Base SAS）：包括类似于PL/L的第四代编程语言data steps、SQL、ODS、XML Engine、Macro以及大量的内置函数（支持Perl 正则表达式）和过程步(procedures)等。对一个SAS程序员来说，这个BASE模块几乎就是全部（说学SAS，就是先学这个，这不需要统计背景或者计算机背景）。又，狭义的SAS Base仅指data steps。 1-2 数据存取模块（SAS/ACCESS）：支持大量的PC文件（除文本文件外，还包括Excel、SPSS的.sav、Stata的.dta等等）以及所有主流的关系数据库及ERP系统（Oracle、SAP、SQL Server、DB2、MySQL等等） 1-3 作图模块(SAS/GRAPH)：SAS作图功能强大，只是模样够土。新版SAS 9.2在这块有不少让人兴奋的改进，比如支持ODS、TrueColor、ActiveX、SVG（Scalable Vector Graphics）等，另外还加了一个graph editor，新潮不少。 1-4 统计分析模块(SAS/STAT ) ：包括回归模型、方差分析模型、混合模型、贝叶斯分析、分类数据分析、多元分析（主成分和因子分析等）、判别分析、聚类分析、生存分析、非参数分析等，多是我不熟悉的领域，只管罗列。有个Stat Studio支持R。 1-5 时间序列与计量经济学模块（SAS/ETS ）：同上，X11、X12、ARIMA、PANEL、AUTOREG、……。又，做资产组合等投资分析也是在这个模块。 1-6 矩阵运算模块(SAS/IML) 1-7 运筹学模块(SAS/OR) 1-8 地理信息系统模块(SAS/GIS) …… 以上部分是大部分SAS高校用户能接触到的东西，主要用命令行实现功能。下面则是有GUI的客户端工具，一般都用它们作计算引擎。 2. 客户端工具 2-1 元数据管理(SAS Management Console，SMC):元数据(metadata)就是关于数据的数据。最简单的，一个数据集的变量属性就是metadata。SMC是SAS产品元数据管理的统一中心。 2-2 ETL工具(SAS Data Integration Studio)：ETL就是数据抽取(Extract)、转换(Transform)和加载(Load)。完成企业数据处理的工具还有SAS OLAP Cube Studio、SAS [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cos.name/wp-content/uploads/2010/04/think_SAS.jpg" rel='nofollow'><img class="alignleft" style="border: 0pt none; margin-left: auto; margin-right: auto;" src="http://cos.name/wp-content/uploads/2010/04/think_SAS.jpg" border="0" alt="think_SAS" width="220" height="200" / rel='nofollow' rel='nofollow'></a> 为什么你应该学SAS？本文不想卷入SAS与R，或者与SPSS、S-Plus、Matlab等统计软件孰优孰劣的争论中去，我是说，<strong>作为一个有志于投身工业界的统计分析人员，你为什么应该把SAS纳入你的分析工具箱</strong>？这会是一篇动员贴，尤其是对广大对数据分析感兴趣的在校生。在默认统计编程语言是R的“<a href="http://cos.name/2008/11/which-statistical-software-should-we-use/" rel='nofollow'>统计之都</a>”，我需要拿上面这幅图来吸引眼球：学SAS吧。</p>
<p>R是好东西，不只是在COS，现在全世界的统计系和统计学生当中，R是主导性的学术语言。但不妙的是，国内高校学生中，学SAS的明显少了，医药、金融等行业经常苦于招不到合适的SAS程序员。在统计分析领域，SAS是主导性的工业语言，它与R，不应该是此消彼长的关系。工业界与学院的隔膜，现在我感觉是非常明显。下面讲的就是，关于SAS，我们在学院可能不太关注的事实。<span id="more-2142"></span></p>
<h2>0. SAS是什么？</h2>
<p>这是一个问题，SAS已经不是你所想象的那个样子。作为一家年收入超过20亿美元的、全球最大的<strong>独立</strong>BI/分析厂商，SAS就是那家由Dr. Jim Goodnight领导的私人公司。作为一个庞大的软件系统，以下只是SAS系统的一个不完整、不系统的介绍：</p>
<blockquote>
<h3>1.传统SAS（编程驱动）</h3>
<p>1-1 基础模块（<span style="color: #ff0000;">Base SAS</span>）：包括类似于PL/L的第四代编程语言data steps、SQL、ODS、XML Engine、Macro以及大量的内置函数（支持Perl 正则表达式）和过程步(procedures)等。对一个SAS程序员来说，这个BASE模块几乎就是全部（说学SAS，就是先学这个，这不需要统计背景或者计算机背景）。又，狭义的SAS Base仅指data steps。</p>
<p>1-2 数据存取模块（<span style="color: #404040;">SAS/ACCESS</span>）：支持大量的PC文件（除文本文件外，还包括Excel、SPSS的.sav、Stata的.dta等等）以及所有主流的关系数据库及ERP系统（Oracle、SAP、SQL Server、DB2、MySQL等等）</p>
<p>1-3 作图模块(<span style="color: #404040;">SAS/GRAPH</span>)：SAS作图功能强大，只是模样够土。新版SAS 9.2在这块有不少让人兴奋的改进，比如支持ODS、TrueColor、ActiveX、SVG（Scalable Vector Graphics）等，另外还加了一个graph editor，新潮不少。</p>
<p>1-4 统计分析模块(<span style="color: #404040;">SAS/STAT</span> ) ：包括回归模型、方差分析模型、混合模型、贝叶斯分析、分类数据分析、多元分析（主成分和因子分析等）、判别分析、聚类分析、生存分析、非参数分析等，多是我不熟悉的领域，只管罗列。有个Stat Studio支持R。</p>
<p>1-5 时间序列与计量经济学模块（<span style="color: #404040;">SAS/ETS</span> ）：同上，X11、X12、ARIMA、PANEL、AUTOREG、……。又，做资产组合等投资分析也是在这个模块。</p>
<p>1-6 矩阵运算模块(SAS/IML) 1-7 运筹学模块(SAS/OR) 1-8 地理信息系统模块(SAS/GIS) …… 以上部分是大部分SAS高校用户能接触到的东西，主要用命令行实现功能。下面则是有GUI的客户端工具，一般都用它们作计算引擎。</p>
<h3>2. 客户端工具</h3>
<p>2-1 元数据管理(SAS Management Console，SMC):元数据(metadata)就是关于数据的数据。最简单的，一个数据集的变量属性就是metadata。SMC是SAS产品元数据管理的统一中心。</p>
<p>2-2 ETL工具(<span style="color: #404040;">SAS Data Integration Studio</span>)：ETL就是数据抽取(Extract)、转换(Transform)和加载(Load)。完成企业数据处理的工具还有SAS OLAP Cube Studio、SAS Information Map Studio等。</p>
<p>2-3 数据挖掘模块(<span style="color: #404040;">SAS Enterprise Miner，EM</span>) ：SAS的重磅产品之一。5以上是Java客户端版本，用户体验增进不少。</p>
<p>2-4 综合分析工具包(SAS Enterprise Guide，EG): 有完善的GUI界面，完成SAS从数据整合、分析到报表的一系列功能。EG与JMP，是SAS公司的两个明星产品。 ……</p>
<h3>3. 其他</h3>
<p>3-1 统计探索软件包<span style="color: #ff0000;">JMP</span>：这是一个独立于Base SAS的软件，由SAS公司的二把手John Sall主管，界面很炫，功能很强，让业务人员爱不释手那种。JMP9支持R。 ……</p></blockquote>
<p>以及，由以上SAS产品整合打包、再加上业务规则支持形成的各种SAS行业解决方案，广泛运用于金融、通信、能源、政府、医药、保险、制造、零售等各个行业。 SAS不仅仅是一款统计软件，它的官方定位是“商务分析和商务智能软件”(Business Analytics and Business Intelligence Software, BA &amp; BI)。现在我们的重点放回SAS 1.1 即<span style="color: #ff0000;">Base SAS</span>上来。</p>
<h2>1. SAS是最流行的数据分析类语言</h2>
<p>我们看一个编程语言4月份的排名，来自<a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" rel='nofollow' rel='nofollow' rel='nofollow' rel='nofollow'>TIOBE</a>。<a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" rel='nofollow' rel='nofollow' rel='nofollow' rel='nofollow'>TIOBE</a>编程语言排名是各种程序语言流行程度的指标，每月更新。它参考全球范围内的技术工程师、培训师以及第三方厂商的意见，通过google、MSN、Yahoo!等常用的搜索引擎搜索结果来计算每种编程语言的流行指数。这个排行榜是程序员查看自己掌握的编程技能是否过时的权威参考之一。具体的评分标准，可以参阅其<a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/tpci_definition.htm" rel='nofollow'>官分评分文档</a>。现在最新的排行榜是（前20名，2010年4月）：</p>
<p><a href="http://cos.name/wp-content/uploads/2010/04/rank_2010041.png" rel='nofollow'><img class="aligncenter" style="border: 0pt none; width: 451px; margin-left: auto; margin-right: auto;" src="http://cos.name/wp-content/uploads/2010/04/rank_2010041.png" border="0" alt="rank_201004" width="451" height="587" / rel='nofollow' rel='nofollow'></a></p>
<p>这个<a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" rel='nofollow' rel='nofollow' rel='nofollow' rel='nofollow'>TIOBE</a>排名，有它自身的局限。比如，Google新推出的Go，一时广受追捧，4月的排名噌就上去了，但这并不能代表它的实际流行程度。但长期看来，模式还是很明显，比如，通用型的编程语言C/C++、Java、Perl、Python等一直占据这个榜单的榜首，而SAS，则一直是数据分析类语言的龙头，与Oracle数据库内置的PL/SQL语言不分上下。在2010年4月这份榜单中，我们可以把常见的统计分析类语言<span style="font-size: x-small;">（关于“统计分析类语言”，这里表述不够精确，比如Matlab，可以作为统计分析工具用，但更多用在科学计算方面。得其大意了。）</span>单独摘出来做一份表单（Maple、Mathematica、R和SPSS由于在榜单上差异不大，故按字母顺序排序）：</p>
<div>
<table border="0" cellspacing="0" cellpadding="2" width="345" align="center">
<tbody>
<tr>
<td width="48" valign="top"></td>
<td width="124" valign="top">统计分析语言</td>
<td width="171" valign="top"><a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" rel='nofollow' rel='nofollow' rel='nofollow' rel='nofollow'>TIOBE</a>排名2010年4月</td>
</tr>
<tr>
<td width="48" valign="top">1</td>
<td width="124" valign="top">SAS</td>
<td width="171" valign="top">13</td>
</tr>
<tr>
<td width="48" valign="top">2</td>
<td width="124" valign="top">Matlab</td>
<td width="171" valign="top">18</td>
</tr>
<tr>
<td width="48" valign="top">3</td>
<td width="124" valign="top">Fortran</td>
<td width="171" valign="top">34</td>
</tr>
<tr>
<td width="48" valign="top">4</td>
<td width="124" valign="top">Maple</td>
<td width="171" valign="top">#51 to #100</td>
</tr>
<tr>
<td width="48" valign="top">5</td>
<td width="124" valign="top">Mathematica</td>
<td width="171" valign="top">#51 to #100</td>
</tr>
<tr>
<td width="48" valign="top">6</td>
<td width="124" valign="top">R</td>
<td width="171" valign="top">#51 to #100</td>
</tr>
<tr>
<td width="48" valign="top">7</td>
<td width="124" valign="top">SPSS</td>
<td width="171" valign="top">#51 to #100</td>
</tr>
</tbody>
</table>
</div>
<p><strong>SAS是工业界最流行的统计分析语言。</strong>以前，号称有工业用途的三个统计软件是SAS、S-plus和SPSS，它们都是二十世纪七十年代问世的。S-plus与R同源，根正苗红，前身是上世纪七十年代末诞生于AT&amp;T的贝尔实验室(Bell Labs)的S语言，八十年代末由<a href="http://www.jiangtanghu.com/cn/2009/01/15/%E5%BF%83%E9%85%B8%E4%B9%8B%E8%B7%AF%E2%80%94%E2%80%94s-plus%EF%BC%88%E8%A2%AB%EF%BC%89%E5%B9%B6%E8%B4%AD%E5%A4%A7%E4%BA%8B%E8%AE%B0/" rel='nofollow'>StatSci</a>公司运作，九十年代初转主<a href="http://en.wikipedia.org/wiki/Mathsoft" rel='nofollow'>MathSoft</a>，2001年公司改组，改名叫<a href="http://en.wikipedia.org/wiki/S-plus" rel='nofollow' rel='nofollow'>Insightful</a>，前年（2008），<a href="http://en.wikipedia.org/wiki/S-plus" rel='nofollow' rel='nofollow'>Insightful</a>又被BI产商<a href="http://www.tibco.com" rel='nofollow'>Tibco</a>收购，从此，江湖上再也听不到S-plus的名号，它被融入Tibco的一个叫TIBCO Spotfire的分析平台。</p>
<p>再说SPSS，它的历史最早，1968年就有第一个发行版，由当时斯坦福大学的研究生<a href="http://en.wikipedia.org/wiki/Norman_Nie" rel='nofollow'>Norman Nie</a>等人发明，原意是Statistical Package for the Social Sciences。1975年SPSS公司成立，1993年上市。2009年，SPSS公司被IBM以12亿美元收购。现在，这家公司称作&#8221;SPSS: An IBM Company&#8221;，那个软件，叫做PASW (Predictive Analytics SoftWare) 。我们默认的那个SPSS也已经不复存在。</p>
<p>2009年，SAS公司的全球收入是<a href="http://www.sas.com/news/preleases/2009financials.html" rel='nofollow'>23亿美元</a>，它创立于1976年，比SPSS公司还晚一年。SAS软件1972年就有一个较稳定的发行版。随着BO等BI公司、SPSS等数据分析工具提供商一个个被IT巨头收购，SAS现在是全球最大的<strong>独立的</strong>BI/分析厂商，迄今没有上市。</p>
<h2>2. R和SAS</h2>
<p>这里要单独说下R。R现在被认为是SAS的一个潜在<a href="http://cos.name/2009/01/r-and-sas-new-york-times/" rel='nofollow'>竞争者</a>。SAS公司在细分市场上的主要竞争对手是SAP、Oracle、IBM、Microsoft、Teradata、SunGard、Unica等IT厂商。R对SAS的（潜在）威胁，不是体现在软件本身，而是体现在用户尤其是高校用户上。前面提到，R现在是学院里的标准统计语言。随便揪一个统计系的学生问：“为什么学R”。答：“因为课程项目用。”“为什么课程项目用？”答：“因为老师用。”或者“因为谢益辉在用。”</p>
<p>那我们再问R的传道者像<a href="http://www.yihui.name/" rel='nofollow'>谢益辉</a>，“为什么用R？”答：“因为R开源”、“因为R统计功能强大，算法日新月异”、“因为某某大佬用R”等等。——通常，你不会因为，比如“R比SAS好”便去学R，或者“SAS比R好”便去学SAS。但是，假如一个人的时间精力只允许他/她学一门语言，那么，由于学院派益辉同学等的大声疾呼，R的确抢走了SAS的很多高校用户。但如果一个在校生还有额外的时间精力，而且他的志向不限于学院，那么，他或许应该再听听工业界的呼吁。</p>
<p>前面提到“算法日新月异”是R的一个优势，这对学院研究颇有吸引力，但工业界相对就保守些，对新算法的需求就小些。——平常听起来“保守”似乎是一个不太积极向上的词，但想想，一个法官应该是保守的，在统计学的假设检验里，遵守的其实也是一个<a href="http://cos.name/2008/12/decision-and-risk/" rel='nofollow'>保守原则</a>。举个例子，在学院研究中，Bayesian（贝叶斯分析）在概念上已经不是那么新潮了，但在医药行业（就是那个由保守的药监局如FDA监管的行业），现在用的还是传统的Frequentist方法（参见ICH E9，<em><a href="http://www.ich.org/LOB/media/MEDIA485.pdf" rel='nofollow'>Statistical Principles for Clinical Trials</a></em>）。学院里的优势不必然是工业界的优势，那么你为什么不额外再学一门SAS，这个工业界的金标准？以前说过，R的不足刚好是SAS所长，反之亦然。</p>
<p>又，有在校生说，R免费，而SAS是商业软件，故学R，——这是一个不成熟的、人云亦云的说法。你在学校实验室能免费学到SAS，以后你的东家自然会为SAS软件买单。费用不是你应该考虑的问题。</p>
<h2>3. SAS可以作为一门职业</h2>
<p>从实际的角度来说，有一个工种就叫做SAS程序员(SAS Programer, 或叫做Statistical SAS Programmer、Statistical Analyst)。在全球最大的求职网站<a href="http://www.monster.com" rel='nofollow'>www.monster.com</a>，分别以SAS等作为skill关键词，搜索结果如下（测试时间：2010-04-13，你现在看到的会有细微的差别）：</p>
<blockquote><p><strong><a href="http://jobsearch.monster.com/PowerSearch.aspx?tjt=sas&amp;rad=20&amp;rad_units=miles&amp;tm=60#q=sas%20&amp;rad=20&amp;rad_units=miles&amp;tm=60" rel='nofollow'>1645 SAS jobs</a></strong></p>
<p><strong><a href="http://jobsearch.monster.com/PowerSearch.aspx?q=matlab&amp;rad=20&amp;rad_units=miles&amp;tm=60#q=matlab&amp;rad=20&amp;rad_units=miles&amp;tm=60" rel='nofollow'>577 Matlab jobs</a> <a href="http://jobsearch.monster.com/PowerSearch.aspx?q=R&amp;tjt=sas&amp;rad=20&amp;rad_units=miles&amp;tm=60#q=spss&amp;rad=20&amp;rad_units=miles&amp;tm=60" rel='nofollow' rel='nofollow'></a></strong></p>
<p><strong><a href="http://jobsearch.monster.com/PowerSearch.aspx?q=R&amp;tjt=sas&amp;rad=20&amp;rad_units=miles&amp;tm=60#q=spss&amp;rad=20&amp;rad_units=miles&amp;tm=60" rel='nofollow'>329 SPSS jobs </a></strong></p>
<p><strong><a href="http://jobsearch.monster.com/PowerSearch.aspx?tjt=sas&amp;rad=20&amp;rad_units=miles&amp;tm=60#q=Fortran&amp;rad=20&amp;rad_units=miles&amp;tm=60" rel='nofollow'>87 Fortran jobs</a></strong></p>
<p><strong><a href="http://jobsearch.monster.com/PowerSearch.aspx?q=stata&amp;rad=20&amp;rad_units=miles&amp;tm=60#q=stata&amp;rad=20&amp;rad_units=miles&amp;tm=60" rel='nofollow'>59 STATA jobs</a> <a href="http://jobsearch.monster.com/PowerSearch.aspx?q=stata&amp;rad=20&amp;rad_units=miles&amp;tm=60#q=Maple&amp;rad=20&amp;rad_units=miles&amp;tm=60" rel='nofollow' rel='nofollow'></a></strong></p>
<p><strong><a href="http://jobsearch.monster.com/PowerSearch.aspx?q=stata&amp;rad=20&amp;rad_units=miles&amp;tm=60#q=Maple&amp;rad=20&amp;rad_units=miles&amp;tm=60" rel='nofollow'>59 Maple jobs</a></strong></p>
<p><strong><a href="http://jobsearch.monster.com/PowerSearch.aspx?q=stata&amp;rad=20&amp;rad_units=miles&amp;tm=60#q=Mathematica&amp;rad=20&amp;rad_units=miles&amp;tm=60" rel='nofollow'>24 Mathematica jobs</a></strong></p></blockquote>
<p>这是英语世界的大致情况。说说我们身边的机会。SAS使用者大多集中在医药、金融等行业。现在国际上的大药厂（辉瑞、拜耳、诺华，……）纷纷在中国开研发中心，对生物统计师（Biostatistician，包括统计师和程序员。程序员就是SAS程序员，而SAS编程也是统计师的基本要求之一）的需求渐长。在金融领域，拿我稍熟悉的信用评分领域来讲，熟悉SAS和数据挖掘的人才也很短缺。另外，广泛的机会还能在国内如火如荼的互联网公司和通信行业找到。</p>
<p>其实，即使不把SAS作为一门职业，对一份分析类的工作，你简历中出现SAS也会比出现其他类似的东西（Excel、……）更能吸引雇主的眼球。SAS被普遍认为是一种重量级的工具。 对于统计系的学生，我知道R是你的首选。你需要再学习一门SAS的理由是，SAS是工业界的流行语言。 对社会学、经济学等社科类的专业学生来说，你们需要学习SAS，还有一个额外的理由，SAS会让你的背景显得更硬朗一些，大白话就是说，能让文科气息稍微淡一些。 对IT类学生来说，学习SAS不会占用你太多时间，然后在就业市场，你的选择会宽广很多。<em><span style="font-size: xx-small;">（待续）</span></em></p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2009/08/econ-software-sas/" title="我的求学之路：经济学、软件工程、SAS">我的求学之路：经济学、软件工程、SAS</a> (31)</li><li><a href="http://cos.name/2008/11/how-to-learn-statistics-by-jthu/" title="如何学习统计学，或我的学习之路——初学者写给初学者">如何学习统计学，或我的学习之路——初学者写给初学者</a> (8)</li><li><a href="http://cos.name/2009/01/r-and-sas-new-york-times/" title="R与SAS之争：一个导读">R与SAS之争：一个导读</a> (28)</li><li><a href="http://cos.name/2008/12/my-experience-with-statistics-by-chongjie-liu/" title="刘重杰：和统计接触的经历">刘重杰：和统计接触的经历</a> (4)</li><li><a href="http://cos.name/2008/11/which-statistical-software-should-we-use/" title="统计学专业应该使用什么样的统计软件（写给在统计学院学习的学弟学妹之四）">统计学专业应该使用什么样的统计软件（写给在统计学院学习的学弟学妹之四）</a> (37)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="" >Sonnets</a> : <a class="comment_content" href="http://cos.name/2010/04/think-sas-1/#comment-1601" title="View the entire comment by Sonnets" >同意，工具就是工具，我们应该主导工具，而不是工具主导我们。该用什么就用什么，学起来都挺容易的。不过可...</a></li>
<li><a class="commentor" href="" >oloolo</a> : <a class="comment_content" href="http://cos.name/2010/04/think-sas-1/#comment-1595" title="View the entire comment by oloolo" >本菜SAS，R双修，深感此类争论没有必要。。。。
任何一个用好了，皆是屠龙刀。
请诸位埋头仔细研...</a></li>
<li><a class="commentor" href="http://hi.baidu.com/ghxandsky/" >ghxandsky</a> : <a class="comment_content" href="http://cos.name/2010/04/think-sas-1/#comment-1588" title="View the entire comment by ghxandsky" >dapangmao兄，很抱歉不能访问你的Blog，Google blogspot.com，Wall了...</a></li>
<li><a class="commentor" href="http://hi.baidu.com/ghxandsky/" >ghxandsky</a> : <a class="comment_content" href="http://cos.name/2010/04/think-sas-1/#comment-1587" title="View the entire comment by ghxandsky" >1991年，Linux面对Unix、*BSD等辈时，不见得当时的人能预见今天的Linux大规模应用。...</a></li>
<li><a class="commentor" href="http://hi.baidu.com/ghxandsky/" >ghxandsky</a> : <a class="comment_content" href="http://cos.name/2010/04/think-sas-1/#comment-1586" title="View the entire comment by ghxandsky" >Fortran is one of All Evil Things.</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2010/04/think-sas-1/feed/</wfw:commentRss>
		<slash:comments>91</slash:comments>
		</item>
		<item>
		<title>我国黄金期货市场的VaR风险度量——基于历史模拟法</title>
		<link>http://cos.name/2010/04/var-risk-measure-in-gold-futures-market-based-on-historical-simulation-method/</link>
		<comments>http://cos.name/2010/04/var-risk-measure-in-gold-futures-market-based-on-historical-simulation-method/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 13:38:38 +0000</pubDate>
		<dc:creator>邓一硕</dc:creator>
				<category><![CDATA[金融学]]></category>
		<category><![CDATA[VaR]]></category>
		<category><![CDATA[历史模拟]]></category>
		<category><![CDATA[金融]]></category>
		<category><![CDATA[黄金期货]]></category>

		<guid isPermaLink="false">http://cos.name/?p=2086</guid>
		<description><![CDATA[VaR是目前金融市场风险测量的主流模型，本文采用历史模拟法以我国上海黄金期货交易所推出的代号为au0901的黄金期货作为研究对象，进行了VaR风险测量实证研究。研究表明，历史模拟法计算出的时变VaR值能够较好地覆盖实际损失，适于我国黄金期货市场的风险度量。
关键词：VaR；历史模拟法；Kupiec失败率检验]]></description>
			<content:encoded><![CDATA[<h2>0.引言</h2>
<p>VaR(Value at Risk)是上世纪90年代由JP·Morgan公司在风险矩阵中提出的一种新型风险管理工具，作为一种进行金融风险测量和控制的模型，它以简单易操作且统计学理论基础扎实而闻名，相较于传统的金融风险管理模型，其具有更高的实用价值。因此，VaR自诞生以来就得到了广泛的应用，且目前在全世界已发展成为金融市场风险测量的主流方法。</p>
<h2>1. VaR方法概述</h2>
<p>VaR全称为Value at Risk,直译为“处于风险状态下价值”， 又译作“风险价值”或“在险价值”。其含义是指：在市场正常情况时，在指定的概率水平（置信度）下， 某一金融资产或证券组合的价值在未来特定持有期T内的最大可能损失，该定义可直观表示为：<br />
<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize Prob%28%5CDelta%20VaR_%7B%5Calpha%7D%291-%5Calpha%5C%7D%20" title="Prob(\Delta VaR_{\alpha})1-\alpha\} " alt="Prob(\Delta VaR_{\alpha})1-\alpha\} " align="absmiddle" /><br />
VaR的严格的数学定义则由Altzner(1999)给出，即<br />
<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize VaR_%7B%5Calpha%7D%3D-inf%5C%7Bx%7CProb%28%5CDelta%20v%5Cleq%20x%29%26gt%3B1-%5Calpha%5C%7D%20" title="VaR_{\alpha}=-inf\{x|Prob(\Delta v\leq x)&amp;gt;1-\alpha\} " alt="VaR_{\alpha}=-inf\{x|Prob(\Delta v\leq x)&amp;gt;1-\alpha\} " align="absmiddle" /><br />
其中，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize inf%5C%7Bx%7CA%7D%5C%7D%20" title="inf\{x|A}\} " alt="inf\{x|A}\} " align="absmiddle" />表示使A成立的所有所组成的集合的下确界，其余符号同上。<br />
目前，典型的VaR的计算方法包括：历史模拟法、蒙特卡洛模拟法、方差-协方差法以及近年来广为流行的Coplus方法。其中，历史模拟法和蒙特卡罗模拟法属于全值估计方法，他们的特色在于不需要对市场因子的统计分布进行假设，因此可以较好地处理金融事件序列中的尖峰和厚尾现象。本文将采用历史模拟法以我国上海黄金期货交易所推出的au0901为研究对象，分析测度au0901的VaR值，最后用Kupiec方法对模型进行有效性检验。</p>
<h2>2. 历史模拟法简介</h2>
<h3>2.1 历史模拟法的定义</h3>
<p>历史模拟法是计算VaR的一种非参数方法，通常适用于那些不易取得完整的历史交易资料的金融资产的VaR值的计算。这种方法的核心是用给定历史时期上所观测到的市场因子的变化来表示市场因子的未来变化，也就是说它用历史上金融资产在一定概率水平下所出现的最大损失值作为相应的VaR值。可以形象的说，历史模拟法是一种“以史为鉴”的VaR计算方法。</p>
<p>历史模拟法计算VaR的具体步骤和流程图示如下：</p>
<p style="text-align: center;"><a href="http://cos.name/wp-content/uploads/2010/04/历史模拟法流程图2.png" rel='nofollow'><img class="size-full wp-image-2089 aligncenter" src="http://cos.name/wp-content/uploads/2010/04/历史模拟法流程图2.png" alt="" width="639" height="403" / rel='nofollow'></a></p>
<p style="text-align: center;">图1 历史模拟法流程图</p>
<p>1、  收集数据资料，确定市场因子。</p>
<p>2、  确定模拟的时间长度N。</p>
<p>3、  对所选取的时间长度N的历史资料计算计算金融资产的收益率。</p>
<p>4、将计算出的收益率按从小到大的顺序进行排序，并按照不同的置信水平计算出相应的分位数，即得到VaR值。</p>
<p>历史模拟法的重点环节是确定合适的历史资料的时间长度N。一般而言，只有足够长的的时间长度，才有可能描述在极端状况下的风险值。如果模拟的时间长度过小，就无法精准刻画金融资产的VaR值。然而，如果模拟的时间长度过长又会因为吸收了过多的历史陈旧信息而是的VaR值的计算不精确。</p>
<h3>2.2 历史模拟法的优缺点</h3>
<p>1、历史模拟法的优点</p>
<p>（1）不需要对市场因子的统计分布进行假设</p>
<p>历史模拟法完全依赖历史资料进行VaR的计算，不需要对市场因子的统计分布进行假设，可以较精确刻画市场因子的特征，例如一般资产报酬具有的厚尾、偏态现象就可能透过历史模拟法表达出来 。</p>
<p>（2）不需对市场因子的波动性和相关性进行假设</p>
<p>历史模拟法不须对资产收益率的波动性、相关性进行假设，因为历史资料已经反应资产报酬波动性、相关性等的特征，因此免除了估计误差的问题，历史模拟法相较于其它方法，较不受到模型风险的影响。</p>
<p>（3）完全评价法</p>
<p>历史模拟法是一种非参数方法，因此无论资产或<a title="投资" href="http://www.hudong.com/wiki/%E6%8A%95%E8%B5%84" rel='nofollow'>投资</a>组合的收益率是否为常态或线性，波动是否随时间而改变，皆可采用历史模拟法来衡量其<a title="风险值" href="linkredwin('%E9%A3%8E%E9%99%A9%E5%80%BC');" rel='nofollow'>风险值</a>。</p>
<p>2、  历史模拟法的缺点</p>
<p>应用历史模拟法计算VaR值主要有以下缺点：</p>
<p>（1）历史资料的耗费大量人力物力</p>
<p>历史模拟法一般需要庞大的历史资料库。数据储存、校对、除错等工作都需要庞大的人力与资金来处理，这是一个复杂繁琐的且极易出错的过程。</p>
<p>（2）极端事件的损失不易被模拟</p>
<p>一般而言，重大极端事件的损失比较罕见，所以在进行历史模拟时，很难将极端事件包罗在内，因此采用历史模拟法是常常无法估计出极端事件的发生。</p>
<p>（3）因子的变动假设</p>
<p>历史模拟法假定未来风险因子的变动会与过去表现相同的假设，然而这不一定可以反映现实状况。随着时间的发展，影响金融资产收益的各种因素都在发生这变化，时过境迁之后，未来的市场因子变化可能会异于历史状况，这是历史模拟法最大的软肋。</p>
<h2>3. 模型的检验方法</h2>
<p>VaR模型的检验方法有很多种，其中Kupiec（1995）提出的失败率检验法最具权威性和实用性。失败率检验法的基本思想是：如果VaR模型计算的VaR 值是准确的，那么金融资产实际损失超过VaR值的例外可视为从一个二项分布中出现的独立事件，即如果损失小于VaR 值，则为一个成功事件(记为1) ，如果损失大于VaR 值，则视为一个失败的事件(记为0)。在原假设 中，P =N/T，其中N 为失败(例外) 天数，即实际损失超过VaR值的天数；1-P为VaR的置信水平； T为实际考察天数。Kupiec 给出了相应的极大似然统计量：</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize LR_%7BPOF%7D%3D-2ln%5BP%5EN%281-P%29%5E%7BT-N%7D%5D%2B2ln%5B%28N%2FT%29%5EN%281-N%2FT%29%5E%7BT-N%7D%5D%20" title="LR_{POF}=-2ln[P^N(1-P)^{T-N}]+2ln[(N/T)^N(1-N/T)^{T-N}] " alt="LR_{POF}=-2ln[P^N(1-P)^{T-N}]+2ln[(N/T)^N(1-N/T)^{T-N}] " align="absmiddle" /></p>
<p>在零假设成立的条件下，统计量LR服从自由度为1的 分布。如果统计量值超过了临界值，我们则拒绝原假设；否则，则接受原假设。</p>
<h2>4. 实证分析</h2>
<h3>4.1 数据基本描述</h3>
<p>本文以交易活跃且具有代表性和国际影响力的上海黄金期货的代号为au0901的黄金期货为例来探讨所选方法的优劣。所用数据为每个交易日的开盘价格连续数据，数据来源于上海期货交易所。考虑到数据的可得性和有效性，au0901的时间跨度定为2008年1月16日至2008年12月31日。在剔除没有交易的交易日后，期铜连续合约的数据个数为252个。为方便处理，本文将期货收益率定义为，为连续期货合约第t日的开盘价格。这里，首先用R软件对样本数据进行基本描述，样本收益率的序列图和收益率的直方图如下：<a rel="attachment wp-att-2091" href="http://cos.name/?attachment_id=2091"><br />
</a></p>
<p style="text-align: center;"><a href="http://cos.name/wp-content/uploads/2010/04/yishuao-yield.png" rel='nofollow'><img class="aligncenter size-full wp-image-2122" title="yishuao-yield" src="http://cos.name/wp-content/uploads/2010/04/yishuao-yield.png" alt="" width="675" height="301" / rel='nofollow'></a></p>
<p style="text-align: center;">图2 收益率的序列图和收益率的直方图</p>
<p>表1：au0901收益率的基本统计特征</p>
<table style="height: 34px;" border="1" cellspacing="0" cellpadding="0" width="452">
<tbody>
<tr>
<td valign="top">N</td>
<td valign="top">均值</td>
<td valign="top">标准差</td>
<td valign="top">偏度</td>
<td style="text-align: center;" valign="top">峰度</td>
<td valign="top">J-B值</td>
<td valign="top">D-W值</td>
<td valign="top">Q(25)</td>
<td valign="top">Q^2 (25)</td>
</tr>
<tr>
<td valign="top">251</td>
<td valign="top">-0.00072</td>
<td valign="top">0.0224</td>
<td valign="top">-0.518</td>
<td valign="top">1.067</td>
<td valign="top">23.928</td>
<td valign="top">2.261</td>
<td valign="top">27.534[0.3]</td>
<td valign="top">47.849[0.03]</td>
</tr>
</tbody>
</table>
<p>由表1可知，au0901的收益序列是右偏的，且峰度大于正态分布的峰度，从而该序列具有尖峰厚尾的特征，且根据J-B统计量我们可以拒绝原序列为正态分布的原假设。另外，由于D-W统计量的值接近于2，说明该收益序列的自相关性微弱。</p>
<h3>4.2 计算及检验VaR</h3>
<p><strong>1.</strong><strong>用历史模拟法计算VaR值</strong></p>
<p>在应用历史模拟法时，本文选取的历史数据模拟长度为25，置信水平为95%。根据2.2中所述方法计算au0901的时变VaR值，将其与实际收益率对比如下:</p>
<p style="text-align: center;"><a href="http://cos.name/wp-content/uploads/2010/04/yishuo-vaR-yield.png" rel='nofollow'></a><a href="http://cos.name/wp-content/uploads/2010/04/yishuo-vaR-yield.png"><img class="aligncenter size-full wp-image-2123" title="yishuo-vaR-yield" src="http://cos.name/wp-content/uploads/2010/04/yishuo-vaR-yield.png" alt="" width="653" height="415" / rel='nofollow'></a></p>
<p style="text-align: center;">图3  置信水平95%下的时变VaR值与实际收益率对比图</p>
<p><strong>2.Kupiec</strong><strong>检验</strong><strong> </strong></p>
<p>用前文所述的Kupiec失败率检验方法对模型的结果进行检验，结果如下：</p>
<p>表2：Kupiec失败率检验结果</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="120" valign="top">样本长度</td>
<td width="120" valign="top">失败次数</td>
<td width="120" valign="top">LR统计量</td>
<td width="120" valign="top">置信水平</td>
<td width="120" valign="top">P-value</td>
</tr>
<tr>
<td width="120" valign="top">250</td>
<td width="120" valign="top">16</td>
<td width="120" valign="top">1.54[&lt;3.84]</td>
<td width="120" valign="top">95%</td>
<td width="120" valign="top">0.215</td>
</tr>
</tbody>
</table>
<p>由表2结果可知，在95%置信水平下LR统计量的值小于临界值3.84，因此历史模拟法计算的VaR值通过了Kupiec失败率检验。</p>
<h3>4.3 结论</h3>
<p>根据前文au0901的VaR的计算结果以及Kupiec的失败率检验结果，我们可以认为：历史模拟法通过了Kupiec失败率检验，可以有效的估计我国黄金期货的风险，适合于我国黄金期货价格的风险度量。</p>
<h3>参考文献：</h3>
<p>[1]王春峰.金融市场风险管理[M].天津大学出版社，2001.</p>
<p>[2]张尧庭.金融市场的统计分析[M].桂林：广西师范大学出版社,1998：32-120</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2009/09/an-introduction-to-var-in-risk-evaluation/" title="风险评价的VaR方法简介">风险评价的VaR方法简介</a> (0)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="http://www.loyhome.cn" >Cloudly</a> : <a class="comment_content" href="http://cos.name/2010/04/var-risk-measure-in-gold-futures-market-based-on-historical-simulation-method/#comment-1409" title="View the entire comment by Cloudly" >刚看到你们这么精彩的争论。
单单关于地震这一点，我觉得，一般在模型中都作为一种外部冲击的，这个应该...</a></li>
<li><a class="commentor" href="" >huang shuai</a> : <a class="comment_content" href="http://cos.name/2010/04/var-risk-measure-in-gold-futures-market-based-on-historical-simulation-method/#comment-1342" title="View the entire comment by huang shuai" >太云你这观点一点也不偏激，在我看来，理解很到位。其实，在我看来，我们讨论的问题，可以没完没了，因为这...</a></li>
<li><a class="commentor" href="" >huang shuai</a> : <a class="comment_content" href="http://cos.name/2010/04/var-risk-measure-in-gold-futures-market-based-on-historical-simulation-method/#comment-1340" title="View the entire comment by huang shuai" >看事情也还是要多一些视角，不然属于你的世界就会很小。

这句话说得好啊。上次在gelman的博客...</a></li>
<li><a class="commentor" href="http://taiyun.cos.name/" >魏太云</a> : <a class="comment_content" href="http://cos.name/2010/04/var-risk-measure-in-gold-futures-market-based-on-historical-simulation-method/#comment-1339" title="View the entire comment by 魏太云" >我前面留言的时候也想到了这一点，某华人统计学家提出干预模型就是考虑这些影响的。不过难点是他们什么时候...</a></li>
<li><a class="commentor" href="http://yishuo.cos.name" >邓一硕</a> : <a class="comment_content" href="http://cos.name/2010/04/var-risk-measure-in-gold-futures-market-based-on-historical-simulation-method/#comment-1335" title="View the entire comment by 邓一硕" >你说的那些乌鸦嘴恐怕不能代表作基本面分析的人。
另外，做事情还是不要过于激愤，看事情也还是要多一些...</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2010/04/var-risk-measure-in-gold-futures-market-based-on-historical-simulation-method/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>有边界区间上的核密度估计</title>
		<link>http://cos.name/2010/04/kernel-density-estimation-with-unbounded-region/</link>
		<comments>http://cos.name/2010/04/kernel-density-estimation-with-unbounded-region/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 05:07:51 +0000</pubDate>
		<dc:creator>邱怡轩</dc:creator>
				<category><![CDATA[推荐文章]]></category>
		<category><![CDATA[统计图形]]></category>
		<category><![CDATA[统计理论]]></category>
		<category><![CDATA[统计计算]]></category>
		<category><![CDATA[统计软件]]></category>
		<category><![CDATA[非参数统计]]></category>
		<category><![CDATA[偏差]]></category>
		<category><![CDATA[核密度估计]]></category>
		<category><![CDATA[模拟]]></category>
		<category><![CDATA[边界]]></category>

		<guid isPermaLink="false">http://cos.name/?p=2060</guid>
		<description><![CDATA[一、一个例子 核密度估计应该是大家常用的一种非参数密度估计方法，从某种程度上来说它的性质比直方图更好，可以替代直方图来展示数据的密度分布。但是相信大家会经常遇到一个问题，那就是有些数据是严格大于或等于零的，在这种情况下，零附近的密度估计往往会出现不理想的情况。下面以一个指数分布的模拟数据为例（样本量为1000），R程序代码为： set.seed(123); x=rexp(1000,1); plot(density(x,kernel="epanechnikov"),ylim=c(0,1.2)); lines(seq(0,8,by=0.02),dexp(seq(0,8,by=0.02),1),col="blue"); abline(v=0,col="red"); 可以看出，理论上应该单调递减的密度函数在0附近有明显的“陡坡”，而且不应该有密度的小于零的区域也有着正的估计值。当样本量增大时，这种现象也不会得到明显好转，下图是将样本量改为10000时的情形。 set.seed(123); x=rexp(10000,1); plot(density(x,kernel="epanechnikov"),ylim=c(0,1.2)); lines(seq(0,8,by=0.02),dexp(seq(0,8,by=0.02),1),col="blue"); abline(v=0,col="red"); 我们也许从平时看的书中了解到，当样本量趋于无穷时，核密度估计值将是收敛到真实的密度函数的，但我们可能不会特意去研究那些结论成立的条件。以上这两个简单的例子似乎给了我们一个直观的感觉，那就是当真实密度函数的支集（函数f(x)的支集指的是使得f(x)≠0的x的集合）有边界时，核密度估计值可能会出现一些不理想的情况。下面就简单地给出一些理论的结果。 二、理论分析 在一些必要的条件下（真实的密度函数f二阶导绝对连续，三阶导平方可积），核密度估计值的偏差有表达式，其中h是带宽，，k(u)是支集为[-1,1]的核函数（即在[-1,1]上有值，其余的地方取零）。可以看出这个偏差是随着带宽h的减小以的速度趋于零的。 而假设密度函数以0为边界，那么上述表达式将不再成立，而是代之以 其中。可以看出，当x&#62;=h时，，，此时的偏差跟之前的那个表达式没有区别；但当0&#60;=x&#60;h时，和都是非零的，于是偏差总是存在。 也许你会提议说，将估计值除以，偏差就可以减小了吧？的确，这样是一种改进的办法，但也要注意到，此时h的一次项不会消除，也就是说原来的衰减速度放慢到了h，从效率上说相对于理想的情况是大打了折扣。 这时候一个巧妙的办法是，用另外一个核函数l(x)对f也做一次估计，那么就有 其中的和意义类似，只不过是针对l(x)的。 对以上两个式子进行线性组合，则会有 然后把f(x)的系数移到等式左边，O(h)项的偏差就神奇地消失了。 通过观察核密度估计的表达式，我们可以将上面这个过程等价地认为是对f(x)用了一个新的核函数进行估计，这个新的核函数是 特别地，如果将l(x)取为x*k(x)，那么p(x)将有一个简单的形式 当x&#62;=h时，这个新的核函数p(x)就是k(x)，而当0&#60;=x&#60;h时（也就是在边界），它会对最初的核函数进行调整。当x&#60;0时，不管算出来的估计值是多少，都只需将密度的估计值取为0即可。 三、程序实现 下面这段程序是对本文的第一幅图进行“整容”，代码及效果图如下： k=function(x) 3/4*(1-x^2)*(abs(x)&#60;=1); a0=function(u,h) { lb=-1; ub=pmin(u/h,1); 0.75*(ub-lb)-0.25*(ub^3-lb^3); } a1=function(u,h) { lb=-1; ub=pmin(u/h,1); 3/8*(ub^2-lb^2)-3/16*(ub^4-lb^4); } a2=function(u,h) { lb=-1; ub=pmin(u/h,1); 0.25*(ub^3-lb^3)-0.15*(ub^5-lb^5); } kernel.new=function(x,u,h) { k(x)*(a2(u,h)-a1(u,h)*x)/(a0(u,h)*a2(u,h)-a1(u,h)^2); } den.est=function(u,ui,h) { sapply(u,function(u) [...]]]></description>
			<content:encoded><![CDATA[<h2>一、一个例子</h2>
<p>核密度估计应该是大家常用的一种非参数密度估计方法，从某种程度上来说它的性质比直方图更好，可以替代直方图来展示数据的密度分布。但是相信大家会经常遇到一个问题，那就是有些数据是严格大于或等于零的，在这种情况下，零附近的密度估计往往会出现不理想的情况。下面以一个指数分布的模拟数据为例（样本量为1000），R程序代码为：</p>
<pre>set.seed(123);
x=rexp(1000,1);
plot(density(x,kernel="epanechnikov"),ylim=c(0,1.2));
lines(seq(0,8,by=0.02),dexp(seq(0,8,by=0.02),1),col="blue");
abline(v=0,col="red");</pre>
<p><a href="http://cos.name/wp-content/uploads/2010/04/kde_original_kernel_n1000.png" rel='nofollow'><img class="aligncenter size-full wp-image-2061" title="原始核函数（样本量1000）" src="http://cos.name/wp-content/uploads/2010/04/kde_original_kernel_n1000.png" alt="" width="500" height="500" / rel='nofollow'></a></p>
<p>可以看出，理论上应该单调递减的密度函数在0附近有明显的“陡坡”，而且不应该有密度的小于零的区域也有着正的估计值。当样本量增大时，这种现象也不会得到明显好转，下图是将样本量改为10000时的情形。</p>
<pre>set.seed(123);
x=rexp(10000,1);
plot(density(x,kernel="epanechnikov"),ylim=c(0,1.2));
lines(seq(0,8,by=0.02),dexp(seq(0,8,by=0.02),1),col="blue");
abline(v=0,col="red");</pre>
<p><a href="http://cos.name/wp-content/uploads/2010/04/kde_original_kernel_n10000.png" rel='nofollow'><img class="aligncenter size-full wp-image-2062" title="原始核函数（样本量10000）" src="http://cos.name/wp-content/uploads/2010/04/kde_original_kernel_n10000.png" alt="" width="500" height="500" / rel='nofollow'></a></p>
<p>我们也许从平时看的书中了解到，当样本量趋于无穷时，核密度估计值将是收敛到真实的密度函数的，但我们可能不会特意去研究那些结论成立的条件。以上这两个简单的例子似乎给了我们一个直观的感觉，那就是当真实密度函数的支集（函数f(x)的支集指的是使得f(x)≠0的x的集合）有边界时，核密度估计值可能会出现一些不理想的情况。下面就简单地给出一些理论的结果。</p>
<h2>二、理论分析</h2>
<p>在一些必要的条件下（真实的密度函数f二阶导绝对连续，三阶导平方可积），核密度估计值<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Chat%7Bf%7D%28x%29" title="\hat{f}(x)" alt="\hat{f}(x)" align="absmiddle" />的偏差有表达式<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize Bias%5B%5Chat%7Bf%7D%28x%29%5D%3D%5Cfrac%7Bh%5E2%5Csigma_k%5E2f%27%27%28x%29%7D%7B2%7D%2BO%28h%5E4%29" title="Bias[\hat{f}(x)]=\frac{h^2\sigma_k^2f&#039;&#039;(x)}{2}+O(h^4)" alt="Bias[\hat{f}(x)]=\frac{h^2\sigma_k^2f&#039;&#039;(x)}{2}+O(h^4)" align="absmiddle" />，其中h是带宽，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Csigma_k%5E2%3D%5Cint%20u%5E2k%28u%29du" title="\sigma_k^2=\int u^2k(u)du" alt="\sigma_k^2=\int u^2k(u)du" align="absmiddle" />，k(u)是支集为[-1,1]的核函数（即在[-1,1]上有值，其余的地方取零）。可以看出这个偏差是随着带宽h的减小以<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize h%5E2" title="h^2" alt="h^2" align="absmiddle" />的速度趋于零的。</p>
<p>而假设密度函数以0为边界，那么上述表达式将不再成立，而是代之以<br />
<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize E%5B%5Chat%7Bf%7D_k%28x%29%5D%3Da_0%28x%29f%28x%29-ha_1%28x%29f%27%28x%29%2BO%28h%5E2%29" title="E[\hat{f}_k(x)]=a_0(x)f(x)-ha_1(x)f&#039;(x)+O(h^2)" alt="E[\hat{f}_k(x)]=a_0(x)f(x)-ha_1(x)f&#039;(x)+O(h^2)" align="absmiddle" /><br />
其中<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize a_i%28x%29%3D%5Cint_%7B-1%7D%5E%7Bx%2Fh%7Du%5Eik%28u%29du" title="a_i(x)=\int_{-1}^{x/h}u^ik(u)du" alt="a_i(x)=\int_{-1}^{x/h}u^ik(u)du" align="absmiddle" />。可以看出，当x&gt;=h时，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize a_0%28x%29%3D1" title="a_0(x)=1" alt="a_0(x)=1" align="absmiddle" />，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize a_1%28x%29%3D0" title="a_1(x)=0" alt="a_1(x)=0" align="absmiddle" />，此时的偏差跟之前的那个表达式没有区别；但当0&lt;=x&lt;h时，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize a_0%28x%29" title="a_0(x)" alt="a_0(x)" align="absmiddle" />和<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize a_1%28x%29" title="a_1(x)" alt="a_1(x)" align="absmiddle" />都是非零的，于是偏差总是存在。</p>
<p>也许你会提议说，将估计值除以<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize a_0%28x%29" title="a_0(x)" alt="a_0(x)" align="absmiddle" />，偏差就可以减小了吧？的确，这样是一种改进的办法，但也要注意到，此时h的一次项不会消除，也就是说原来<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize h%5E2" title="h^2" alt="h^2" align="absmiddle" />的衰减速度放慢到了h，从效率上说相对于理想的情况是大打了折扣。</p>
<p>这时候一个巧妙的办法是，用另外一个核函数l(x)对f也做一次估计，那么就有<br />
<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize E%5B%5Chat%7Bf%7D_l%28x%29%5D%3Db_0%28x%29f%28x%29-hb_1%28x%29f%27%28x%29%2BO%28h%5E2%29" title="E[\hat{f}_l(x)]=b_0(x)f(x)-hb_1(x)f&#039;(x)+O(h^2)" alt="E[\hat{f}_l(x)]=b_0(x)f(x)-hb_1(x)f&#039;(x)+O(h^2)" align="absmiddle" /><br />
其中的<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize b_0" title="b_0" alt="b_0" align="absmiddle" />和<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize b_1" title="b_1" alt="b_1" align="absmiddle" />意义类似，只不过是针对l(x)的。</p>
<p>对以上两个式子进行线性组合，则会有<br />
<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize b_1%28x%29%2AE%5B%5Chat%7Bf%7D_k%28x%29%5D-a_1%28x%29%2AE%5B%5Chat%7Bf%7D_l%28x%29%5D%3D%5Bb_1%28x%29a_0%28x%29-a_1%28x%29b_0%28x%29%5Df%28x%29%2BO%28h%5E2%29" title="b_1(x)*E[\hat{f}_k(x)]-a_1(x)*E[\hat{f}_l(x)]=[b_1(x)a_0(x)-a_1(x)b_0(x)]f(x)+O(h^2)" alt="b_1(x)*E[\hat{f}_k(x)]-a_1(x)*E[\hat{f}_l(x)]=[b_1(x)a_0(x)-a_1(x)b_0(x)]f(x)+O(h^2)" align="absmiddle" /><br />
然后把f(x)的系数移到等式左边，O(h)项的偏差就神奇地消失了。</p>
<p>通过观察核密度估计的表达式，我们可以将上面这个过程等价地认为是对f(x)用了一个新的核函数进行估计，这个新的核函数是<br />
<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize p%28x%29%3D%5Cfrac%7Bb_1%28x%29k%28x%29-a_1%28x%29l%28x%29%7D%7Bb_1%28x%29a_0%28x%29-a_1%28x%29b_0%28x%29%7D" title="p(x)=\frac{b_1(x)k(x)-a_1(x)l(x)}{b_1(x)a_0(x)-a_1(x)b_0(x)}" alt="p(x)=\frac{b_1(x)k(x)-a_1(x)l(x)}{b_1(x)a_0(x)-a_1(x)b_0(x)}" align="absmiddle" /></p>
<p>特别地，如果将l(x)取为x*k(x)，那么p(x)将有一个简单的形式<br />
<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize p%28x%29%3D%5Cfrac%7B%28a_2%28x%29-a_1%28x%29x%29k%28x%29%7D%7Ba_0%28x%29a_2%28x%29-a_1%5E2%28x%29%7D" title="p(x)=\frac{(a_2(x)-a_1(x)x)k(x)}{a_0(x)a_2(x)-a_1^2(x)}" alt="p(x)=\frac{(a_2(x)-a_1(x)x)k(x)}{a_0(x)a_2(x)-a_1^2(x)}" align="absmiddle" /></p>
<p>当x&gt;=h时，这个新的核函数p(x)就是k(x)，而当0&lt;=x&lt;h时（也就是在边界），它会对最初的核函数进行调整。当x&lt;0时，不管算出来的估计值是多少，都只需将密度的估计值取为0即可。</p>
<h2>三、程序实现</h2>
<p>下面这段程序是对本文的第一幅图进行“整容”，代码及效果图如下：</p>
<pre>k=function(x) 3/4*(1-x^2)*(abs(x)&lt;=1);
a0=function(u,h)
{
	lb=-1;
	ub=pmin(u/h,1);
	0.75*(ub-lb)-0.25*(ub^3-lb^3);
}
a1=function(u,h)
{
	lb=-1;
	ub=pmin(u/h,1);
	3/8*(ub^2-lb^2)-3/16*(ub^4-lb^4);
}
a2=function(u,h)
{
	lb=-1;
	ub=pmin(u/h,1);
	0.25*(ub^3-lb^3)-0.15*(ub^5-lb^5);
}
kernel.new=function(x,u,h)
{
	k(x)*(a2(u,h)-a1(u,h)*x)/(a0(u,h)*a2(u,h)-a1(u,h)^2);
}
den.est=function(u,ui,h)
{
	sapply(u,function(u) ifelse(u&lt;0,0,mean(kernel.new((u-ui)/h,u,h))/h));
}
set.seed(123);
dat=rexp(1000,1);
x=seq(0,8,by=0.02);
y=den.est(x,dat,2*bw.nrd0(dat));
plot(x,y,type="l",ylim=c(0,1.2),main="Corrected Kernel");
lines(x,dexp(x,1),col="red");</pre>
<p><a href="http://cos.name/wp-content/uploads/2010/04/kde_corrected_kernel_n1000.png" rel='nofollow'></a></p>
<p><a href="http://cos.name/wp-content/uploads/2010/04/kde_corrected_kernel_n1000.png"><img class="aligncenter size-full wp-image-2081" title="修正核函数（样本量1000）" src="http://cos.name/wp-content/uploads/2010/04/kde_corrected_kernel_n1000.png" alt="" width="500" height="500" / rel='nofollow'></a></p>
<p>从中可以看出，边界的偏差问题已经得到了很好的改进。</p>
<p>如果真实的密度函数的支集不是[0,+∞]，而是某一个闭区间[m,n]，那么偏差修正的过程与上面类似，只不过是要将<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize a_i%28x%29" title="a_i(x)" alt="a_i(x)" align="absmiddle" />定义为<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize a_i%28x%29%3D%5Cint_%7B%28x-n%29%2Fh%7D%5E%7B%28x-m%29%2Fh%7Du%5Eik%28u%29du" title="a_i(x)=\int_{(x-n)/h}^{(x-m)/h}u^ik(u)du" alt="a_i(x)=\int_{(x-n)/h}^{(x-m)/h}u^ik(u)du" align="absmiddle" />。在编程序的时候，也只需把积分的上下限进行相应的调整即可。</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2010/03/monte-carlo-method-to-compute-integration/" title="蒙特卡洛方法与定积分计算">蒙特卡洛方法与定积分计算</a> (28)</li><li><a href="http://cos.name/2009/06/why-ratio-estimation-is-more-accurate-in-sampling/" title="比率估计为什么精确">比率估计为什么精确</a> (5)</li><li><a href="http://cos.name/2008/11/probability-theory-origin-development-application/" title="概率论的起源、发展、应用">概率论的起源、发展、应用</a> (5)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="" >ZUOCHEN</a> : <a class="comment_content" href="http://cos.name/2010/04/kernel-density-estimation-with-unbounded-region/#comment-1576" title="View the entire comment by ZUOCHEN" >膜拜一下，这个方法很好</a></li>
<li><a class="commentor" href="" >邱怡轩</a> : <a class="comment_content" href="http://cos.name/2010/04/kernel-density-estimation-with-unbounded-region/#comment-1514" title="View the entire comment by 邱怡轩" >a_i(x)不是选出来的，它是对核函数进行积分的结果，积分的上下限与区间的边界有关，参见文中的定义式...</a></li>
<li><a class="commentor" href="" >李皞</a> : <a class="comment_content" href="http://cos.name/2010/04/kernel-density-estimation-with-unbounded-region/#comment-1509" title="View the entire comment by 李皞" >理论虽然如此，但实际操作中a(x)，b(x)都怎么选取？能说说思路吗？
还有p(x)的公式（倒数第...</a></li>
<li><a class="commentor" href="" >邱怡轩</a> : <a class="comment_content" href="http://cos.name/2010/04/kernel-density-estimation-with-unbounded-region/#comment-1356" title="View the entire comment by 邱怡轩" >这种变换的方法就是把有边界的区间变换到R上吧，比如如果X是[-1,+∞]上的，就令Y=g(X)=lo...</a></li>
<li><a class="commentor" href="http://yihui.name" >谢益辉</a> : <a class="comment_content" href="http://cos.name/2010/04/kernel-density-estimation-with-unbounded-region/#comment-1353" title="View the entire comment by 谢益辉" >要是数据有负值呢？</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2010/04/kernel-density-estimation-with-unbounded-region/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>蒙特卡洛方法与定积分计算</title>
		<link>http://cos.name/2010/03/monte-carlo-method-to-compute-integration/</link>
		<comments>http://cos.name/2010/03/monte-carlo-method-to-compute-integration/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 09:21:23 +0000</pubDate>
		<dc:creator>邓一硕</dc:creator>
				<category><![CDATA[统计计算]]></category>
		<category><![CDATA[Monte-Carlo]]></category>
		<category><![CDATA[定积分]]></category>
		<category><![CDATA[模拟]]></category>
		<category><![CDATA[蒙特卡洛]]></category>

		<guid isPermaLink="false">http://cos.name/?p=2010</guid>
		<description><![CDATA[本文讲述一下蒙特卡洛模拟方法与定积分计算，首先从一个题目开始：设，用蒙特卡洛模拟法求定积分的值。 随机投点法 设服从正方形 上的均匀分布，则可知 分别服从[0,1]上的均匀分布，且相互独立。记事件 ，则的概率为 即定积分 的值 就是事件出现的频率。同时，由伯努利大数定律，我们可以用重复试验中出现的频率作为 的估计值。即将看成是正方形内的随机投点，用随机点落在区域中的频率作为定积分的近似值。这种方法就叫随机投点法，具体做法如下： 图1 随机投点法示意图 1、首先产生服从 上的均匀分布的 个随机数（ 为随机投点个数，可以取很大，如 ）并将其配对。 2、对这对数据 ，记录满足不等式的个数，这就是事件 发生的频数，由此可得事件 发生的频率 ，则 。 举一实例，譬如要计算，模拟次数时，R代码如下： n=10^4; x=runif(n); y=runif(n); f=function(x) { exp(-x^2/2)/sqrt(2*pi) } mu_n=sum(y&#60;f(x)); J=mu_n/n; J 模拟次数 时，令,其余不变。 定积分的精确值和模拟值如下： 表1 精确值 0.3413447 0.342 0.344 0.34187 0.341539 0.341302 注：精确值用integrate(f,0,1)求得 扩展 如果你很细心，你会发现这个 方法目前只适用于积分区间 ，且积分函数 在区间上的取值也位于 内的情况。那么，对于一般区间 上的定积分 呢？一个很明显的思路，如果我们可以将 与 [...]]]></description>
			<content:encoded><![CDATA[<p>本文讲述一下蒙特卡洛模拟方法与定积分计算，首先从一个题目开始：设<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize 0%5Cleq%20f%28x%29%20%5Cleq%201" title="0\leq f(x) \leq 1" alt="0\leq f(x) \leq 1" align="absmiddle" />，用蒙特卡洛模拟法求定积分<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%3D%5Cint_%7B0%7D%5E%7B1%7Df%28x%29dx%20" title="J=\int_{0}^{1}f(x)dx " alt="J=\int_{0}^{1}f(x)dx " align="absmiddle" />的值。</p>
<p style="text-align: center;"><strong>随机投点法</strong></p>
<p>设<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %28X%2CY%29" title="(X,Y)" alt="(X,Y)" align="absmiddle" />服从正方形 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5C%7B0%5Cleq%20x%20%5Cleq%201%2C0%5Cleq%20y%5Cleq%201%5C%7D%20" title="\{0\leq x \leq 1,0\leq y\leq 1\} " alt="\{0\leq x \leq 1,0\leq y\leq 1\} " align="absmiddle" />上的均匀分布，则可知 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize X%2CY" title="X,Y" alt="X,Y" align="absmiddle" />分别服从[0,1]上的均匀分布，且<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize X%2CY" title="X,Y" alt="X,Y" align="absmiddle" />相互独立。记事件<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize A%3D%5C%7BY%5Cleq%20f%28X%29%5C%7D" title="A=\{Y\leq f(X)\}" alt="A=\{Y\leq f(X)\}" align="absmiddle" /> ，则<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize A%20" title="A " alt="A " align="absmiddle" />的概率为</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize P%28A%29%3DP%28Y%5Cleq%20f%28X%29%29%3D%5Cint_%7B0%7D%5E%7B1%7D%5Cint_%7B0%7D%5E%7Bf%28x%29%7Ddydx%3D%5Cint_%7B0%7D%5E%7B1%7Df%28x%29dx%3DJ%20" title="P(A)=P(Y\leq f(X))=\int_{0}^{1}\int_{0}^{f(x)}dydx=\int_{0}^{1}f(x)dx=J " alt="P(A)=P(Y\leq f(X))=\int_{0}^{1}\int_{0}^{f(x)}dydx=\int_{0}^{1}f(x)dx=J " align="absmiddle" /></p>
<p>即定积分<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J" title="J" alt="J" align="absmiddle" /> 的值 就是事件<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize A%20" title="A " alt="A " align="absmiddle" />出现的频率。同时，由伯努利大数定律，我们可以用重复试验中<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize A" title="A" alt="A" align="absmiddle" />出现的频率作为 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize p" title="p" alt="p" align="absmiddle" />的估计值。即将<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %28X%2CY%29" title="(X,Y)" alt="(X,Y)" align="absmiddle" />看成是正方形<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5C%7B0%5Cleq%20x%20%5Cleq%201%2C0%5Cleq%20y%20%5Cleq%201%5C%7D" title="\{0\leq x \leq 1,0\leq y \leq 1\}" alt="\{0\leq x \leq 1,0\leq y \leq 1\}" align="absmiddle" />内的随机投点，用随机点落在区域<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %7By%5Cleq%20f%28x%29%7D" title="{y\leq f(x)}" alt="{y\leq f(x)}" align="absmiddle" />中的频率作为定积分的近似值。这种方法就叫随机投点法，具体做法如下：</p>
<p style="text-align: center;"><a rel="attachment wp-att-2051" href="http://cos.name/2010/03/monte-carlo-method-to-compute-integration/m-6/" rel='nofollow'><img class="size-full wp-image-2051 aligncenter" src="http://cos.name/wp-content/uploads/2010/03/m5.png" alt="" width="480" height="480" / rel='nofollow'></a></p>
<p style="text-align: center;"><a href="../../../../../wp-content/uploads/2010/03/m4.png" rel='nofollow'></a>图1 随机投点法示意图</p>
<p>1、首先产生服从 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5B0%2C1%5D" title="[0,1]" alt="[0,1]" align="absmiddle" />上的均匀分布的 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize 2n%20" title="2n " alt="2n " align="absmiddle" />个随机数（ <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize n%20" title="n " alt="n " align="absmiddle" />为随机投点个数，可以取很大，如 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize n%3D10%5E4%20" title="n=10^4 " alt="n=10^4 " align="absmiddle" />）并将其配对。</p>
<p>2、对这<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize n" title="n" alt="n" align="absmiddle" />对数据 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %28x_i%2Cy_i%29%2Ci%3D1%2C2%2C...%2Cn" title="(x_i,y_i),i=1,2,...,n" alt="(x_i,y_i),i=1,2,...,n" align="absmiddle" /> ，记录满足不等式<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize y_i%5Cleq%20f%28x_i%29%20" title="y_i\leq f(x_i) " alt="y_i\leq f(x_i) " align="absmiddle" />的个数，这就是事件 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize A%20" title="A " alt="A " align="absmiddle" />发生的频数<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cmu_n" title="\mu_n" alt="\mu_n" align="absmiddle" />，由此可得事件<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize A%20" title="A " alt="A " align="absmiddle" /> 发生的频率<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cfrac%7B%5Cmu_n%7D%7Bn%7D%20" title="\frac{\mu_n}{n} " alt="\frac{\mu_n}{n} " align="absmiddle" /> ，则<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%5Capprox%20%5Cfrac%7B%5Cmu_n%7D%20%7Bn%7D" title="J\approx \frac{\mu_n} {n}" alt="J\approx \frac{\mu_n} {n}" align="absmiddle" /> 。</p>
<p>举一实例，譬如要计算<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cint_%7B0%7D%5E%7B1%7De%5E%7B-x%5E2%2F2%7D%2F%5Csqrt%7B2%5Cpi%7Ddx%20" title="\int_{0}^{1}e^{-x^2/2}/\sqrt{2\pi}dx " alt="\int_{0}^{1}e^{-x^2/2}/\sqrt{2\pi}dx " align="absmiddle" />，模拟次数<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize n%3D10%5E4" title="n=10^4" alt="n=10^4" align="absmiddle" />时，R代码如下：</p>
<pre>n=10^4;
 x=runif(n);
 y=runif(n);
 f=function(x)
 {
 exp(-x^2/2)/sqrt(2*pi)
 }
 mu_n=sum(y&lt;f(x));
 J=mu_n/n;
 J</pre>
<p>模拟次数 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize n%3D10%5E5%20" title="n=10^5 " alt="n=10^5 " align="absmiddle" />时，令<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize n%3D10%5E5" title="n=10^5" alt="n=10^5" align="absmiddle" />,其余不变。</p>
<p>定积分<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cint_%7B0%7D%5E%7B1%7De%5E%7B-x%5E2%2F2%7D%2F%5Csqrt%7B2%5Cpi%7Ddx%20" title="\int_{0}^{1}e^{-x^2/2}/\sqrt{2\pi}dx " alt="\int_{0}^{1}e^{-x^2/2}/\sqrt{2\pi}dx " align="absmiddle" />的精确值和模拟值如下：</p>
<p>表1</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">精确值</td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E3" title="  10^3" alt="  10^3" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E4" title="  10^4" alt="  10^4" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E5" title="  10^5" alt="  10^5" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E6" title="  10^6" alt="  10^6" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E7" title="  10^7" alt="  10^7" align="absmiddle" /></td>
</tr>
<tr>
<td valign="top">0.3413447</td>
<td valign="top">0.342</td>
<td valign="top">0.344</td>
<td valign="top">0.34187</td>
<td valign="top">0.341539</td>
<td valign="top">0.341302</td>
</tr>
</tbody>
</table>
<pre>注：精确值用integrate(f,0,1)求得</pre>
<p>扩展</p>
<p>如果你很细心，你会发现这个 方法目前只适用于积分区间<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5B0%2C1%5D%20" title="[0,1] " alt="[0,1] " align="absmiddle" /> ，且积分函数 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize f%28x%29%20" title="f(x) " alt="f(x) " align="absmiddle" />在区间<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5B0%2C1%5D" title="[0,1]" alt="[0,1]" align="absmiddle" />上的取值也位于 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5B0%2C1%5D" title="[0,1]" alt="[0,1]" align="absmiddle" /> 内的情况。那么，对于一般区间 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Ba%2Cb%5D%20" title="[a,b] " alt="[a,b] " align="absmiddle" />上的定积分<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%27%3D%5Cint_%7Ba%7D%5E%7Bb%7Dg%28x%29dx%20" title="J&#039;=\int_{a}^{b}g(x)dx " alt="J&#039;=\int_{a}^{b}g(x)dx " align="absmiddle" /> 呢？一个很明显的思路，如果我们可以将 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%27%20" title="J&#039; " alt="J&#039; " align="absmiddle" /> 与<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J" title="J" alt="J" align="absmiddle" /> 建立代数关系就可以了。</p>
<p>首先，做线性变换，令 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize y%3D%28x-a%29%2F%28b-a%29%20" title="y=(x-a)/(b-a) " alt="y=(x-a)/(b-a) " align="absmiddle" /> ，此时，</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize x%3D%28b-a%29y%2Ba" title="x=(b-a)y+a" alt="x=(b-a)y+a" align="absmiddle" />,<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%27%3D%28b-a%29%5Cint_%7B0%7D%5E%7B1%7Dg%5B%28b-a%29y%2Ba%5Ddy%20" title="J&#039;=(b-a)\int_{0}^{1}g[(b-a)y+a]dy " alt="J&#039;=(b-a)\int_{0}^{1}g[(b-a)y+a]dy " align="absmiddle" />。</p>
<p>进一步如果在区间<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Ba%2Cb%5D%20" title="[a,b] " alt="[a,b] " align="absmiddle" />上有<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize c%5Cleq%20g%28x%29%20%5Cleq%20d%20" title="c\leq g(x) \leq d " alt="c\leq g(x) \leq d " align="absmiddle" /> ，令</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize f%28y%29%3D%5Cfrac%7B1%7D%7Bd-c%7D%7Bg%28x%29-c%7D%3D%5Cfrac%7B1%7D%7Bd-c%7D%7Bg%5Ba%2B%28b-a%29y%5D-c%7D%20" title="f(y)=\frac{1}{d-c}{g(x)-c}=\frac{1}{d-c}{g[a+(b-a)y]-c} " alt="f(y)=\frac{1}{d-c}{g(x)-c}=\frac{1}{d-c}{g[a+(b-a)y]-c} " align="absmiddle" />，</p>
<p>则<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize 0%5Cleq%20f%28y%29%20%5Cleq%201" title="0\leq f(y) \leq 1" alt="0\leq f(y) \leq 1" align="absmiddle" />。此时，可以得到<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%27%3D%5Cint_%7Ba%7D%5E%7Bb%7Dg%28x%29dx%3DS_0J%2Bc%28b-a%29%20" title="J&#039;=\int_{a}^{b}g(x)dx=S_0J+c(b-a) " alt="J&#039;=\int_{a}^{b}g(x)dx=S_0J+c(b-a) " align="absmiddle" /> 。</p>
<p>其中,<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize S_0%3D%28b-a%29%28d-c%29%20" title="S_0=(b-a)(d-c) " alt="S_0=(b-a)(d-c) " align="absmiddle" />,<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%3D%5Cint_%7B0%7D%5E%7B1%7Df%28y%29dy%20" title="J=\int_{0}^{1}f(y)dy " alt="J=\int_{0}^{1}f(y)dy " align="absmiddle" />。</p>
<p>这说明，用随机投点法计算定积分方法具有普遍意义。</p>
<p>举一个实例，求定积分 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%27%3D%5Cint_%7B2%7D%5E%7B5%7De%5E%7B-x%5E2%2F2%7D%2F%5Csqrt%7B2%5Cpi%7Ddx%20" title="J&#039;=\int_{2}^{5}e^{-x^2/2}/\sqrt{2\pi}dx " alt="J&#039;=\int_{2}^{5}e^{-x^2/2}/\sqrt{2\pi}dx " align="absmiddle" />。</p>
<p>显然<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize a%3D2%2Cb%3D5%20" title="a=2,b=5 " alt="a=2,b=5 " align="absmiddle" />，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize c%3Dmin%5C%7Bg%28x%29%7C2%5Cleq%20x%20%5Cleq%205%5C%7D%2Cd%3Dmax%5C%7Bg%28x%29%7C2%5Cleq%20x%20%5Cleq%205%5C%7D%20" title="c=min\{g(x)|2\leq x \leq 5\},d=max\{g(x)|2\leq x \leq 5\} " alt="c=min\{g(x)|2\leq x \leq 5\},d=max\{g(x)|2\leq x \leq 5\} " align="absmiddle" />，由于<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize g%28x%29%3De%5E%7B-x%5E2%2F2%7D%2F%5Csqrt%7B2%5Cpi%7D%20" title="g(x)=e^{-x^2/2}/\sqrt{2\pi} " alt="g(x)=e^{-x^2/2}/\sqrt{2\pi} " align="absmiddle" />在 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5B2%2C5%5D" title="[2,5]" alt="[2,5]" align="absmiddle" />上时单调减函数，所以<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize c%3Dg%285%29%2Cd%3Dg%282%29" title="c=g(5),d=g(2)" alt="c=g(5),d=g(2)" align="absmiddle" /> ，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize S_0%3D%28b-a%29%28d-c%29%20" title="S_0=(b-a)(d-c) " alt="S_0=(b-a)(d-c) " align="absmiddle" />。R中代码为</p>
<pre>a=2;
 b=5;
 g=function(x)
 {
 exp(-x^2/2)/sqrt(2*pi);
 }
 f=function(y)
 {
 (g(a+(b-a)*y)-c)/(d-c);
 }
 c=g(5);d=g(2);s_0=(b-a)*(d-c);
 n=10^4;
 x=runif(n);y=runif(n);
 mu_n=sum(y&lt;=f(x));
 J=mu_n/n;
 J_0=s_0*J+c*(b-a);</pre>
<p>定积分 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%27%3D%5Cint_%7B2%7D%5E%7B5%7De%5E%7B-x%5E2%2F2%7D%2F%5Csqrt%7B2%5Cpi%7Ddx%20" title="J&#039;=\int_{2}^{5}e^{-x^2/2}/\sqrt{2\pi}dx " alt="J&#039;=\int_{2}^{5}e^{-x^2/2}/\sqrt{2\pi}dx " align="absmiddle" />的精确值和模拟值如下：</p>
<p>表2</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">真实值</td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E3" title="  10^3" alt="  10^3" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize 10%5E4" title="10^4" alt="10^4" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E5" title="  10^5" alt="  10^5" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E6" title="  10^6" alt="  10^6" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E7" title="  10^7" alt="  10^7" align="absmiddle" /></td>
</tr>
<tr>
<td valign="top">0.02274985</td>
<td valign="top">0.02332792</td>
<td valign="top">0.02311736</td>
<td valign="top">0.02262659</td>
<td valign="top">0.02284152</td>
<td valign="top">0.02278524</td>
</tr>
</tbody>
</table>
<pre>注：精确值用integrate(g,2,5)求得)</pre>
<p>平均值法</p>
<p>蒙特卡洛模拟法计算定积分时还有另一种方法，叫平均值法。这个原理也很简单：设随机变量 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize X%20" title="X " alt="X " align="absmiddle" />服从<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5B0%2C1%5D%20" title="[0,1] " alt="[0,1] " align="absmiddle" />上的均匀分布，则 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize Y%3Df%28X%29" title="Y=f(X)" alt="Y=f(X)" align="absmiddle" />的数学期望为</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize E%28f%28X%29%29%3D%5Cint_%7B0%7D%5E%7B1%7Df%28x%29dx%3DJ%20" title="E(f(X))=\int_{0}^{1}f(x)dx=J " alt="E(f(X))=\int_{0}^{1}f(x)dx=J " align="absmiddle" /></p>
<p>所以估计<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%20" title="J " alt="J " align="absmiddle" /> 的值就是估计 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize f%28X%29" title="f(X)" alt="f(X)" align="absmiddle" />的数学期望值。由辛钦大数定律，可以用<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize f%28X%29" title="f(X)" alt="f(X)" align="absmiddle" /> 的观察值的均值取估计<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize f%28X%29" title="f(X)" alt="f(X)" align="absmiddle" /> 的数学期望。具体做法：</p>
<p>先用计算机产生<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize n" title="n" alt="n" align="absmiddle" /> 个服从<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5B0%2C1%5D%20" title="[0,1] " alt="[0,1] " align="absmiddle" />上均匀分布的随机数：<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize x_i%2Ci%3D1%2C2%2C...%2Cn%20" title="x_i,i=1,2,...,n " alt="x_i,i=1,2,...,n " align="absmiddle" /> 。</p>
<p>对每一个<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize x_i" title="x_i" alt="x_i" align="absmiddle" /> ，计算<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize f%28x_i%29" title="f(x_i)" alt="f(x_i)" align="absmiddle" /> 。</p>
<p>计算<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%5Capprox%20%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D1%7D%5E%7Bn%7Df%28x_i%29%20" title="J\approx \frac{1}{n}\sum_{i=1}^{n}f(x_i) " alt="J\approx \frac{1}{n}\sum_{i=1}^{n}f(x_i) " align="absmiddle" />。</p>
<p>譬如，计算 <img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize J%3D%5Cint_%7B0%7D%5E%7B1%7De%5E%7B-x%5E2%2F2%7D%2F%5Csqrt%7B2%5Cpi%7Ddx%20" title="J=\int_{0}^{1}e^{-x^2/2}/\sqrt{2\pi}dx " alt="J=\int_{0}^{1}e^{-x^2/2}/\sqrt{2\pi}dx " align="absmiddle" />，R中的代码为</p>
<pre>n=10^4;
 x=runif(n);
 f=function(x)
 {
 exp(-x^2/2)/sqrt(2*pi)
 }
 J=mean(f(x));</pre>
<p>其精确值和模拟值如下：<br />
表3</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">真实值</td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E3" title="  10^3" alt="  10^3" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E4" title="  10^4" alt="  10^4" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E5" title="  10^5" alt="  10^5" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E6" title="  10^6" alt="  10^6" align="absmiddle" /></td>
<td valign="top"><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %20%2010%5E7" title="  10^7" alt="  10^7" align="absmiddle" /></td>
</tr>
<tr>
<td valign="top">0.3413447</td>
<td valign="top">0.3405831</td>
<td valign="top">0.3410739</td>
<td valign="top">0.3414443</td>
<td valign="top">0.3414066</td>
<td valign="top">0.3413366</td>
</tr>
</tbody>
</table>
<p>平均值法与随机投点法类似可以进行扩展，这里不再赘述。</p>
<p style="text-align: center;"><strong>结论</strong></p>
<p>用蒙特卡洛模拟法计算定积分具有普遍意义。蒙特卡洛模拟方法为我们提供了一个看待世界的新思路，即一个不具随机性的事件可以通过一定的方法用随机事件来模拟或逼近。</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2010/04/kernel-density-estimation-with-unbounded-region/" title="有边界区间上的核密度估计">有边界区间上的核密度估计</a> (10)</li><li><a href="http://cos.name/2009/06/why-ratio-estimation-is-more-accurate-in-sampling/" title="比率估计为什么精确">比率估计为什么精确</a> (5)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="" >huang shuai</a> : <a class="comment_content" href="http://cos.name/2010/03/monte-carlo-method-to-compute-integration/#comment-1392" title="View the entire comment by huang shuai" >http://www.stat.columbia.edu/~cook/movabletype/mlm...</a></li>
<li><a class="commentor" href="http://yihui.name" >谢益辉</a> : <a class="comment_content" href="http://cos.name/2010/03/monte-carlo-method-to-compute-integration/#comment-1306" title="View the entire comment by 谢益辉" >那要看怎么理解“对维数不敏感”了，如果只是“不限制维数”的话，那这算不上优点，因为高维情况下需要的样...</a></li>
<li><a class="commentor" href="" >胡荣兴</a> : <a class="comment_content" href="http://cos.name/2010/03/monte-carlo-method-to-compute-integration/#comment-1305" title="View the entire comment by 胡荣兴" >很久之前用过蒙特卡罗方法，现在都生疏了。蒙特卡罗的好处就是计算简化，不用去考虑那么复杂的积分或微分甚...</a></li>
<li><a class="commentor" href="" >邱怡轩</a> : <a class="comment_content" href="http://cos.name/2010/03/monte-carlo-method-to-compute-integration/#comment-1272" title="View the entire comment by 邱怡轩" >set.seed()不是为了防止产生相同的随机数，相反，正是为了产生相同的随机数，因为这样一来，每次...</a></li>
<li><a class="commentor" href="" >colinisstudent</a> : <a class="comment_content" href="http://cos.name/2010/03/monte-carlo-method-to-compute-integration/#comment-1270" title="View the entire comment by colinisstudent" >我倒是觉得并不是所有的积分问题都值得硬上的，一些问题能够被简化，使得积分问题在相对比较低维的情况下进...</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2010/03/monte-carlo-method-to-compute-integration/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>蒲丰投针问题的推广</title>
		<link>http://cos.name/2010/01/generalization-to-buffons-needle/</link>
		<comments>http://cos.name/2010/01/generalization-to-buffons-needle/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 12:40:44 +0000</pubDate>
		<dc:creator>COS编辑部</dc:creator>
				<category><![CDATA[统计之都]]></category>
		<category><![CDATA[Buffon投针]]></category>
		<category><![CDATA[几何概率]]></category>
		<category><![CDATA[期望]]></category>
		<category><![CDATA[概率论]]></category>

		<guid isPermaLink="false">http://cos.name/?p=1907</guid>
		<description><![CDATA[蒲丰投针问题是一个非常经典的问题，两百多年来，一直受到学者们的广泛关注和研究，并衍生出了很多非常有意思的变种问题。本文利用坐标系变换、几何概率方法巧妙地求出了：往矩形网格上随机投椭圆，该椭圆恰好包含在某个矩形中间的概率，并将结果拓展到了平行四边形网格的情形下。 具体内容，参见此pdf文档。 注： 本文作者为中南大学数学院应数专业蔡永强同学，感谢他的授权，使得本文可以在此分享。 附件pdf文档是由手写稿扫描转换而成，也欢迎广大统计学子向COS主站投稿。 相关文章浅谈Buffon投针问题及其推广 (9)用GERT方法求解两个抛硬币问题 (11)概率论的起源、发展、应用 (5)最新评论]]></description>
			<content:encoded><![CDATA[<p>蒲丰投针问题是一个非常经典的问题，两百多年来，一直受到学者们的广泛关注和研究，并衍生出了很多非常有意思的变种问题。本文利用坐标系变换、几何概率方法巧妙地求出了：往矩形网格上随机投椭圆，该椭圆恰好包含在某个矩形中间的概率，并将结果拓展到了平行四边形网格的情形下。</p>
<p>具体内容，参见<a href="http://cos.name/wp-content/uploads/2010/01/generalization-to-buffons-needle.pdf" target="_blank" rel='nofollow'>此pdf文档</a>。</p>
<p>注：</p>
<ol>
<li>本文作者为中南大学数学院应数专业蔡永强同学，感谢他的授权，使得本文可以在此分享。</li>
<li>附件pdf文档是由手写稿扫描转换而成，也欢迎广大统计学子向COS主站投稿。</li>
</ol>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2009/11/a-brief-talk-on-buffon-throwing-needle-problems/" title="浅谈Buffon投针问题及其推广">浅谈Buffon投针问题及其推广</a> (9)</li><li><a href="http://cos.name/2009/09/introduction-and-application-of-gert/" title="用GERT方法求解两个抛硬币问题">用GERT方法求解两个抛硬币问题</a> (11)</li><li><a href="http://cos.name/2008/11/probability-theory-origin-development-application/" title="概率论的起源、发展、应用">概率论的起源、发展、应用</a> (5)</li></ul><h3>最新评论</h3><ul></ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2010/01/generalization-to-buffons-needle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第二届中国R语言会议纪要</title>
		<link>http://cos.name/2009/12/2nd-chinese-r-conference-summary/</link>
		<comments>http://cos.name/2009/12/2nd-chinese-r-conference-summary/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 07:53:18 +0000</pubDate>
		<dc:creator>邱怡轩</dc:creator>
				<category><![CDATA[新闻通知]]></category>
		<category><![CDATA[R语言]]></category>
		<category><![CDATA[useR eveRywheRe]]></category>
		<category><![CDATA[会议]]></category>
		<category><![CDATA[无处不在的R]]></category>

		<guid isPermaLink="false">http://cos.name/?p=1807</guid>
		<description><![CDATA[2009年12月5~6日以及2009年12月12~13日，第二届中国R语言会议分别在北京和上海两个分会场成功召开。北京会场由中国人民大学应用统计科学研究中心和中国人民大学统计学院主办；上海会场由华东师范大学资源与环境科学学院、金融与统计学院主办，Mango Solutions咨询公司提供赞助。对R语言在中国的推广做出了杰出贡献的吴喜之教授和谢益辉博士远在美国为本次会议发来祝贺；中国R语言的领军人物、华东师范大学的汤银才老师也应邀参加会议并做了专题报告。两个会场的会议就R语言在众多领域中的应用展开了广泛的交流和讨论，为R语言在中国的进一步应用和推广开辟了更宽阔的道路。 会议主题 本次会议的主题是“无处不在的R”，也即印在参会胸牌上的“use R eveRywheRe”，意指R的应用领域之广；同时，“use R eveRywheRe”又可看成是“useR eveRywheRe”，意指R的使用者遍布四面八方。 从会议的结果来看，演讲的内容和参会者所在的单位都很好地契合了这一主题。 会议概况 参会单位 北京和上海两地会议共吸引了90余家单位共300余人参加，参会单位包括： 高校：北京交通大学、北京科技大学、北京林业大学、北京师范大学、东华大学、东南大学、复旦大学、华东师范大学、华中科技大学、吉林大学、剑桥大学、江苏大学、南京财经大学、南京人口管理干部学院、南京人口学院、南京信息工程大学、清华大学、山东大学、上海财经大学、上海大学、上海电机学院、上海海洋大学、首都经济贸易大学、苏州大学系统生物学中心、西北师范大学、西藏民族学院财经学院、新加坡国立大学、英国杜伦大学、浙江大学、中国科学院研究生院、中国农业大学、中国人民大学、中国石油大学、中南大学、中央财经大学、中央民族大学等 科研机构：东海所、上海交通大学瑞金医院、南京地质古生物研究所、上海生命科学研究所、上海植生所、上海中医药大学附属龙华医院、协和医院基础医学所、宣武医院、有色金属技术经济研究院、中国地质环境监测院、中科院动物研究所、中科院生态中心、中科院西双版纳植物园、中科院系统科学研究所、中国科学院计算机网络信息中心、中国科学院马普计算生物学研究所、中国科学院上海生命科学研究院计算生物学研究所、中国科学院植物研究所、中国林业科学研究院、中国农业科学院、中国食品发酵工业研究院、中国水稻研究所等 公司企业：Alipay、CUPL、IMShealth、Iresearch、Mango Solutions、SAS Institute、SIPPE、SPSS China、北京瑞丽杂志社、北京中彩在线科技有限责任公司、贝塔斯曼集团、方正科技集团股份有限公司、好耶、科瑞纳、摩托罗拉、欧维特服务、赛诺菲巴斯德生物统计中国部、上海汇众汽车制造有限公司、上海源略数据、思创软件、拓普公司、网秦、新华信国际信息咨询(北京)、中科软科技股份有限公司、中芯国际等 政府部门及事业单位：北京市质量协会、国家统计局、国家知识产权局专利局、宁波市疾控等 参会人员 用R对填写了年龄信息的参会人员数据进行汇总，得到年龄分布的结果如下： Min. 1st Qu. Median Mean 3rd Qu. Max. 18.00 22.00 24.00 24.93 27.00 45.00 18 &#124; 00 20 &#124; 00000000000000000000000000000 22 &#124; 00000000000000000000000000000000000000000000000000000000000000000000 24 &#124; 0000000000000000000000000000000000000 26 &#124; 000000000000000000000000000000000000000000 28 &#124; 0000000000000 30 [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 510px"><a href="http://cos.name/wp-content/uploads/2009/12/2nd-R-Conf-BJ.jpg" rel='nofollow'><img class="aligncenter size-large wp-image-1821" title="第二届中国R语言会议北京会场合影" src="http://cos.name/wp-content/uploads/2009/12/2nd-R-Conf-BJ-500x332.jpg" alt="第二届中国R语言会议北京会场合影" width="500" height="332" /></a><p class="wp-caption-text">第二届中国R语言会议北京会场合影（右键另存为看大图）</p></div>
<div class="wp-caption aligncenter" style="width: 510px"><a href="http://cos.name/wp-content/uploads/2009/12/2nd-R-Conf-SH.jpg" rel='nofollow'><img class="aligncenter size-large wp-image-1883" title="第二届中国R语言会议上海会场演讲者和工作人员合影" src="http://cos.name/wp-content/uploads/2009/12/2nd-R-Conf-SH-500x332.jpg" alt="第二届中国R语言会议上海会场演讲者和工作人员合影" width="500" height="332" /></a><p class="wp-caption-text">第二届中国R语言会议上海会场演讲者和工作人员合影（右键另存为看大图）</p></div>
<p>2009年12月5~6日以及2009年12月12~13日，第二届中国R语言会议分别在北京和上海两个分会场成功召开。北京会场由中国人民大学应用统计科学研究中心和中国人民大学统计学院主办；上海会场由华东师范大学资源与环境科学学院、金融与统计学院主办，Mango Solutions咨询公司提供赞助。对R语言在中国的推广做出了杰出贡献的吴喜之教授和谢益辉博士远在美国为本次会议发来祝贺；中国R语言的领军人物、华东师范大学的汤银才老师也应邀参加会议并做了专题报告。两个会场的会议就R语言在众多领域中的应用展开了广泛的交流和讨论，为R语言在中国的进一步应用和推广开辟了更宽阔的道路。</p>
<h1>会议主题</h1>
<p>本次会议的主题是“无处不在的R”，也即印在参会胸牌上的“use R eveRywheRe”，意指R的应用领域之广；同时，“use R eveRywheRe”又可看成是“useR eveRywheRe”，意指R的使用者遍布四面八方。</p>
<p><img class="aligncenter size-full wp-image-1816" title="useR eveRywheRe" src="http://cos.name/wp-content/uploads/2009/12/useR-eveRywheRe.png" alt="useR eveRywheRe" width="291" height="133" /></p>
<p>从会议的结果来看，演讲的内容和参会者所在的单位都很好地契合了这一主题。</p>
<h1>会议概况</h1>
<h2>参会单位</h2>
<p>北京和上海两地会议共吸引了90余家单位共300余人参加，参会单位包括：</p>
<ul>
<li>高校：北京交通大学、北京科技大学、北京林业大学、北京师范大学、东华大学、东南大学、复旦大学、华东师范大学、华中科技大学、吉林大学、剑桥大学、江苏大学、南京财经大学、南京人口管理干部学院、南京人口学院、南京信息工程大学、清华大学、山东大学、上海财经大学、上海大学、上海电机学院、上海海洋大学、首都经济贸易大学、苏州大学系统生物学中心、西北师范大学、西藏民族学院财经学院、新加坡国立大学、英国杜伦大学、浙江大学、中国科学院研究生院、中国农业大学、中国人民大学、中国石油大学、中南大学、中央财经大学、中央民族大学等</li>
<li>科研机构：东海所、上海交通大学瑞金医院、南京地质古生物研究所、上海生命科学研究所、上海植生所、上海中医药大学附属龙华医院、协和医院基础医学所、宣武医院、有色金属技术经济研究院、中国地质环境监测院、中科院动物研究所、中科院生态中心、中科院西双版纳植物园、中科院系统科学研究所、中国科学院计算机网络信息中心、中国科学院马普计算生物学研究所、中国科学院上海生命科学研究院计算生物学研究所、中国科学院植物研究所、中国林业科学研究院、中国农业科学院、中国食品发酵工业研究院、中国水稻研究所等</li>
<li>公司企业：Alipay、CUPL、IMShealth、Iresearch、Mango Solutions、SAS Institute、SIPPE、SPSS China、北京瑞丽杂志社、北京中彩在线科技有限责任公司、贝塔斯曼集团、方正科技集团股份有限公司、好耶、科瑞纳、摩托罗拉、欧维特服务、赛诺菲巴斯德生物统计中国部、上海汇众汽车制造有限公司、上海源略数据、思创软件、拓普公司、网秦、新华信国际信息咨询(北京)、中科软科技股份有限公司、中芯国际等</li>
<li>政府部门及事业单位：北京市质量协会、国家统计局、国家知识产权局专利局、宁波市疾控等</li>
</ul>
<h2>参会人员</h2>
<p>用R对填写了年龄信息的参会人员数据进行汇总，得到年龄分布的结果如下：</p>
<pre>   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
  18.00   22.00   24.00   24.93   27.00   45.00

  18 | 00
  20 | 00000000000000000000000000000
  22 | 00000000000000000000000000000000000000000000000000000000000000000000
  24 | 0000000000000000000000000000000000000
  26 | 000000000000000000000000000000000000000000
  28 | 0000000000000
  30 | 0000000000
  32 | 000000
  34 | 0000
  36 | 000
  38 | 00
  40 |
  42 |
  44 | 0</pre>
<p>从中不难看出R的使用者大体是年轻一代，同时也不乏年龄稍大、经验丰富的一批人。</p>
<p>参会的人员大都来自高校和科研机构，包括在校学生、高校老师、科研所研究员等；来自企业和政府部门的朋友也对本次会议给予了极大的关注和支持，他们的职业包括了程序员、软件工程师、系统分析师、公务员、数据挖掘工程师、公司职员、咨询师等等。</p>
<h1>会议演讲</h1>
<p>本次会议要特别感谢各位演讲者的大力支持，他们为演讲报告付出了大量的精力和时间，有的不远千里奔赴两地进行演讲，有的则是通宵达旦修改讲稿。在总共为期四天的会议时间中，共举行了正式演讲34场，其中北京会场19场，上海会场15场。以下演讲资料都遵守<a href="http://creativecommons.org/licenses/by/3.0/deed.zh" target="_blank" rel='nofollow'>CC协议</a>，其中部分遵守<a href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/" target="_blank" rel='nofollow'>CC2.5协议</a>：</p>
<p>北京会场：</p>
<ul>
<li>陈堰平：<a href="http://cos.name/wp-content/uploads/2009/12/R-introduction.pdf" target="_blank" rel='nofollow'>会议开幕及R语言基础</a></li>
<li>高涛、李程：<a href="http://cos.name/wp-content/uploads/2009/12/Statistical-graphics.pdf" target="_blank" rel='nofollow'>统计图形概览与其在R下的实现</a></li>
<li>关菁菁：<a href="http://cos.name/wp-content/uploads/2009/12/RExcel-and-data-mining.pdf" target="_blank" rel='nofollow'>RExcel应用  数据挖掘方法现代发展趋势</a></li>
<li>钟其顶：<a href="http://cos.name/wp-content/uploads/2009/12/R-application-in-food-industry.pdf" target="_blank" rel='nofollow'>R在食品标准研制中的应用与展望</a></li>
<li>肖楠：<a href="http://cos.name/wp-content/uploads/2009/12/Security-in-R-environment.pdf" target="_blank" rel='nofollow'>R环境安全特性初探与前瞻</a></li>
<li>宫雨：<a href="http://cos.name/wp-content/uploads/2009/12/Integrate-R-into-C.pdf" target="_blank" rel='nofollow'>Integrate R into Your C/C++ Application using Visual C++ 2008</a>（CC2.5）</li>
<li>刘永生：<a href="http://cos.name/wp-content/uploads/2009/12/R-in-geological-research.pdf" target="_blank" rel='nofollow'>地质环境调查监测研究中的R应用</a></li>
<li>奚潭：<a href="http://cos.name/wp-content/uploads/2009/12/An-IntRoduction-to-gRey-methods-using-R.pdf" target="_blank" rel='nofollow'>R在灰色系统理论方面的应用</a></li>
<li>刘思喆：<a href="http://cos.name/wp-content/uploads/2009/12/R-in-large-dataset-and-Sweave.pdf" target="_blank" rel='nofollow'>R在大规模数据整理及自动化报告方面的应用</a></li>
<li>祝迎春：<a href="http://cos.name/wp-content/uploads/2009/12/R-in-marketing-research.pdf" target="_blank" rel='nofollow'>R在市场研究中的应用</a></li>
<li>孙晓燕、王婷：<a href="http://cos.name/wp-content/uploads/2009/12/Notes-on-psychology-with-R.pdf" target="_blank" rel='nofollow'>R心理学笔记</a></li>
<li>左辰：<a href="http://cos.name/wp-content/uploads/2009/12/Nonparametric-methods-and-robust-estimation.pdf" target="_blank" rel='nofollow'>非参数方法与稳健性估计初探</a>（CC2.5）</li>
<li>魏太云：<a href="http://cos.name/wp-content/uploads/2009/12/An-Introduction-to-Matrix-Visualization-and-corrplot-Package.pdf" target="_blank" rel='nofollow'>矩阵可视化及corrplot包的介绍</a></li>
<li>陈丽云：<a href="http://cos.name/wp-content/uploads/2009/12/From-Economics-to-R.pdf" target="_blank" rel='nofollow'>从经济学到R语言：在经济和计量中使用R</a>（CC2.5）</li>
<li>孙蝶：<a href="http://cos.name/wp-content/uploads/2009/12/R-application-in-agriculture.pdf" target="_blank" rel='nofollow'>R在近红外光谱分析中的应用</a></li>
<li>王化儒：<a href="http://cos.name/wp-content/uploads/2009/12/R-and-Spatial-Analysis.pdf" target="_blank" rel='nofollow'>R在空间分析中的应用初探</a></li>
<li>丁鹏：<a href="http://cos.name/wp-content/uploads/2009/12/R-and-WinBUGS-by-Ding-Peng.pdf" target="_blank" rel='nofollow'>R and WinBugs</a></li>
<li>马斌：<a href="http://cos.name/wp-content/uploads/2009/12/omd-and-QSAR.pdf" target="_blank" rel='nofollow'>应用omd包对QSAR分析中分子结构参数矩阵的优化</a></li>
<li>黄志一：<a href="http://cos.name/wp-content/uploads/2009/12/Web-R.pdf" target="_blank" rel='nofollow'>WebR–R在线分析及在大气数据分析中的应用</a></li>
</ul>
<p>上海会场：</p>
<ul>
<li>汤银才老师：<a href="http://cos.name/wp-content/uploads/2009/12/R-and-WinBUGS.pdf" target="_blank" rel='nofollow'>R与WinBUGS</a></li>
<li>林光启：<a href="http://cos.name/wp-content/uploads/2009/12/R-application-in-semiconductor-manufacturing.pdf" target="_blank" rel='nofollow'>R和统计在半导体界的应用</a></li>
<li>魏太云：矩阵可视化及corrplot包的介绍（见北京会场）</li>
<li>高涛、李程：统计图形概览与其在R下的实现（见北京会场）</li>
<li>王卫杰：<a href="http://cos.name/wp-content/uploads/2009/12/Decision-tree.pdf" target="_blank" rel='nofollow'>基于rpart包的决策树应用</a></li>
<li>于怡：<a href="http://cos.name/wp-content/uploads/2009/12/Survival-Analysis-in-R.pdf" target="_blank" rel='nofollow'>Survival Analysis in R</a></li>
<li>马斌：应用omd包对QSAR分析中分子结构参数矩阵的优化（见北京会场）</li>
<li>奚潭：R在灰色系统理论方面的应用（见北京会场）</li>
<li>陈丽云：从经济学到R语言：在经济和计量中使用R（见北京会场）</li>
<li>肖楠：R环境安全特性初探与前瞻（见北京会场）</li>
<li>刘思喆：<a href="http://cos.name/wp-content/uploads/2009/12/Learning-R-in-153-minutes.pdf" target="_blank" rel='nofollow'>153分钟学会R</a></li>
<li>刘思喆：R在大规模数据整理及自动化报告方面的应用（见北京会场）</li>
<li>李舰：<a href="http://cos.name/wp-content/uploads/2009/12/JAVA-and-optimization.pdf" target="_blank" rel='nofollow'>R在应用领域的扩展——JAVA开发和最优化</a></li>
<li>谢益辉（刘思喆代讲）：<a href="http://cos.name/wp-content/uploads/2009/12/Writing-R-PKG.pdf" target="_blank" rel='nofollow'>怎么写R包</a></li>
<li>林帧舜：<a href="http://cos.name/wp-content/uploads/2009/12/Marketing-Analytical-Framework.pdf" target="_blank" rel='nofollow'>Marketing Analytical Framework</a></li>
</ul>
<h1>会议展望</h1>
<ol>
<li>在谢益辉博士的建议下，未来的R语言会议可能会邀请到R核心团队（R Development Core Team）成员来中国进行演讲和交流，并希望以暑期学校的形式让更多的人参与到R语言的学习中；</li>
<li>在第一届R语言会议的基础上，本届会议采取了北京和上海两个分会场的形式举办，今后有望将会议的地点转向国内更多的地区，使得R语言的影响力进一步扩大；</li>
<li>为加强大家的交流与合作，平时可以在全国各地举办更多的小型讨论会，巩固和丰富年度R语言会议的成果；</li>
<li>更多，请畅所欲言……</li>
</ol>
<h1>会议报道</h1>
<p>本次会议的很多组织者和参会者都在博客和论坛帖子中记录下了自己眼中的R语言会议，现收录如下：</p>
<ul>
<li>胡江堂：<a href="http://li-and-jiang.com/blog/2009/12/05/ruser2009/" rel='nofollow'>R乌乎在？</a></li>
<li>谢益辉：<a href="http://yihui.name/cn/2009/12/snow-in-ames-and-2nd-chinese-r-conference/" rel='nofollow'>2009第一场雪和第二届中国R语言会议</a></li>
<li>焦静：<a href="http://cos.name/bbs/read.php?tid=17614" rel='nofollow' rel='nofollow'>第二届R语言大会上海分会顺利闭幕</a></li>
<li>焦静：<a href="http://www.sciencenet.cn/m/user_content.aspx?id=278351" rel='nofollow' rel='nofollow'>第二届R语言大会上海分会顺利闭幕</a></li>
<li>刘思喆：<a href="http://www.bjt.name/2009/12/r-conference-beijing/" rel='nofollow'>第二届中国 R 语言会议（北京）随笔</a></li>
<li>刘思喆：<a href="http://www.bjt.name/2009/12/r-conference-shanghai/" rel='nofollow'>中国 R 语言会议（上海）趣闻</a></li>
<li>魏太云：<a href="http://taiyun.cos.name/2009/12/all-about-the-2nd-r-conference/" rel='nofollow'>第二届R会议那些事儿（上海）</a></li>
<li>魏太云：<a href="http://taiyun.cos.name/2009/12/thoughts-about-2nd-r-conference/" rel='nofollow'>第二届R会议随感</a></li>
<li>陈丽云：<a href="http://www.loyhome.cn/857.html" rel='nofollow'>与R有关的那些趣事儿（上海篇）</a></li>
<li>陈丽云：<a href="http://www.loyhome.cn/852.html" rel='nofollow'>与R有关的那些趣事儿（北京篇）</a></li>
<li>山东大学新闻网：<a href="http://www.view.sdu.edu.cn/news/news/ybdt/2009-12-16/1260928570.html" rel='nofollow'>经济学院本科生参加R语言大会并发言</a></li>
<li>关菁菁：<a href="http://cos.name/bbs/read.php?tid=17549" rel='nofollow'>2nd R 会议纪事——2009年12月6日+5日</a></li>
<li>邱怡轩：<a href="http://yixuan.cos.name/cn/2009/12/community-and-torch/" rel='nofollow'>社区和火炬</a></li>
<li>肖楠：<a href="http://www.road2stat.com/cn/statistics/r_language/2009_user_china_shanghai.html" rel='nofollow'>第二届中国R语言会议 Dec 12-13, 2009 @ ECNU</a></li>
<li>肖楠：<a href="http://www.road2stat.com/cn/statistics/r_language/2009_user_china_beijing.html" rel='nofollow'>第二届中国R语言会议 Dec 05-06, 2009 @ RUC</a></li>
<li>肖楠：<a href="http://www.road2stat.com/cn/statistics/r_language/2009_user_china_beijing_2nd_day_and_memories.html" rel='nofollow'>第二届R语言中文会议 @ RUC 第二天趣事及补记</a></li>
<li>李程：<a href="http://www.cheneylee.com/cn/2009/12/the-first-blog-article/" rel='nofollow'>开篇辟博</a></li>
<li>高涛：<a href="http://www.gaotao.name/cn/thoughts/gossiping-about-the-2nd-r-meeting-in-china/" rel='nofollow'>闲谈两三句第二届中国R会议感想</a></li>
</ul>
<p>同时也欢迎您将自己在会议期间的照片、感想等与大家一起分享！</p>
<h1>附录：用R生成会议胸牌</h1>
<p>本次会议所用的胸牌完全是用R代码生成的，其中用到了rimage这个包（现在CRAN上不再提供rimage包的Windows版本，如果想要测试代码的话可以到<a href="http://cos.name/wp-content/uploads/2009/12/rimage.zip" rel='nofollow'>这里</a>下载一个较早版本的rimage包）：</p>
<pre>#字符画
library(rimage)
plot.ch = function(ch, pch = "#", cex = 3) {
    height = 15 * cex
    width = 15 * cex * nchar(ch)
    jpeg("rtemp.jpg", width = width, height = height)
    par(mar = c(0, 0, 0, 0))
    plot(1, type = "n", ann = FALSE, axes = FALSE)
    text(1, 1, labels = ch, cex = cex)
    dev.off()
    m = read.jpeg("rtemp.jpg")
    unlink("rtemp.jpg")
    m.grey = rgb2grey(m)
    m.black = ifelse(m.grey &lt; 0.5, 0, 1)
    v = which(m.black == 0, arr.ind = TRUE)
    return(v)
}

#胸牌制作
draw.card = function(contact) {
    if (require(rimage)) {
        x = read.jpeg(file.path(R.home(), "doc/html/logo.jpg"))
        lim = dim(x)[1:2]
        par(mar = rep(0, 4), cex = 0.7)
        a1 = plot.ch("use", cex = 5)
        v1 = a1[seq(1, nrow(a1), by = 3), ]
        a2 = plot.ch("eveRy wheRe", cex = 3)
        v2 = a2[seq(1, nrow(a2), by = 3), ]
        for (i in 1:nrow(contact)) {
            plot(0, xlim = c(-0.5, 1.5) * lim[1], ylim = c(-1.9,
                2.1) * lim[2], axes = FALSE, ann = FALSE, type = "n",
                asp = 1)
            plot(x, add = TRUE)
            text(0.5 * lim[1], 1.9 * lim[2], "第二届中国R语言会议",
                cex = 2.5)
            text(0.5 * lim[1], 1.4 * lim[2], "The 2nd Chinese R Conference\n(Beijing)",
                cex = 1.7)
            text(0.5 * lim[1], 1 * lim[2], "北京，2009.12.5-6",
                cex = 1.5)
            text(0.5 * lim[1], -0.6 * lim[2], contact[i, 1],
                cex = 2.4)
            text(0.5 * lim[1], -1 * lim[2], contact[i, 2], cex = 1.5)
            text(-1.6 * lim[1], -1.3 * lim[2], paste("主办：中国人民大学应用统计科学研究中心 (www.applstats.org)",
                "　　　中国人民大学统计学院 (stat.ruc.edu.cn)",
                "协办：统计之都网站 (http://cos.name)", sep = "\n"),
                cex = 1, adj = c(0, 1))
            text(1.9 * lim[1], -1.8 * lim[2], paste("ID:", contact[i,
                3]))
            points(v1[, 2] - 160, 60 - v1[, 1], pch = "#", cex = 0.5)
            points(v2[, 2] - 180, -v2[, 1], pch = "#", cex = 0.5)
        }
    }
}

# 示例
contact = data.frame(name = c("张三", "李四"), unit = c("张家村",
    "李家店"), id = c(1001, 1002))

# 写入PDF文件
pdf(width = 3.5, height = 4.5, family = "GB1")
draw.card(contact)
dev.off()</pre>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2010/06/3rd-china-r-beijing-summary/" title="第三届中国R语言会议（北京会场）纪要">第三届中国R语言会议（北京会场）纪要</a> (22)</li><li><a href="http://cos.name/2008/12/1st-chinese-r-conference-summary/" title="第一届中国R语言会议纪要">第一届中国R语言会议纪要</a> (38)</li><li><a href="http://cos.name/2008/11/r-conference-notice/" title="第一届中国R语言会议将于12月中旬在中国人民大学召开">第一届中国R语言会议将于12月中旬在中国人民大学召开</a> (3)</li><li><a href="http://cos.name/2010/05/from-clt-simulation-to-normal-distribution/" title="从中心极限定理的模拟到正态分布">从中心极限定理的模拟到正态分布</a> (35)</li><li><a href="http://cos.name/2009/12/improve-r-computation-efficiency/" title="也谈提高R语言的运算效率">也谈提高R语言的运算效率</a> (15)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="" >Li Ruiyuan</a> : <a class="comment_content" href="http://cos.name/2009/12/2nd-chinese-r-conference-summary/#comment-1321" title="View the entire comment by Li Ruiyuan" >什么时候，能在武汉召开一个就好了</a></li>
<li><a class="commentor" href="" >马相如</a> : <a class="comment_content" href="http://cos.name/2009/12/2nd-chinese-r-conference-summary/#comment-1179" title="View the entire comment by 马相如" >今年没时间参加，希望明年可以参会！</a></li>
<li><a class="commentor" href="" >焦静</a> : <a class="comment_content" href="http://cos.name/2009/12/2nd-chinese-r-conference-summary/#comment-1145" title="View the entire comment by 焦静" >没有啦，是我最近都忙其他的了，现在年底了，导师这里比较忙，都没有及时关注，今天才看见，罪过的是我哦，...</a></li>
<li><a class="commentor" href="" >邱怡轩</a> : <a class="comment_content" href="http://cos.name/2009/12/2nd-chinese-r-conference-summary/#comment-1144" title="View the entire comment by 邱怡轩" >罪过罪过，这就去发。</a></li>
<li><a class="commentor" href="http://yihui.name" >谢益辉</a> : <a class="comment_content" href="http://cos.name/2009/12/2nd-chinese-r-conference-summary/#comment-1143" title="View the entire comment by 谢益辉" >看来会务组在会后没有给参会者发邮件通知这个会议纪要页面啊，会前通知、会后总结，就像“早请示晚汇报”，...</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2009/12/2nd-chinese-r-conference-summary/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>也谈提高R语言的运算效率</title>
		<link>http://cos.name/2009/12/improve-r-computation-efficiency/</link>
		<comments>http://cos.name/2009/12/improve-r-computation-efficiency/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 08:38:22 +0000</pubDate>
		<dc:creator>谢益辉</dc:creator>
				<category><![CDATA[统计计算]]></category>
		<category><![CDATA[统计软件]]></category>
		<category><![CDATA[C语言]]></category>
		<category><![CDATA[P值]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[R语言]]></category>
		<category><![CDATA[t检验]]></category>
		<category><![CDATA[向量]]></category>
		<category><![CDATA[显式循环]]></category>
		<category><![CDATA[隐式循环]]></category>

		<guid isPermaLink="false">http://cos.name/?p=1796</guid>
		<description><![CDATA[用过底层语言做计算的人转入R语言的时候一般都会觉得R语言的运算太慢，这是一个常见的对R的误解或者对R的设计的不理解。在二三十年前Chambers等一群人在贝尔实验室设计S语言之前，统计计算主要是通过那些底层语言实现的，典型的如Fortran。当时有一个基于Fortran的统计分析库，用它的麻烦就在于无论做什么样的数据分析，都涉及到一大摞繁琐的底层代码，这让数据分析变得很没劲，统计学家有统计学家的事情，天天陷在计算机程序代码中也不是个办法，要摆脱底层语言，那就只能设计高层语言了。有所得必有所失，众所周知，高层语言一般来说比底层语言低效，但对用户来说更友好。举个简单的例子，用C语言计算均值时，我们得对一个向量（数组）从头循环到尾把每个值累加起来，得到总和，然后除以向量的长度，而均值在统计当中简直是再家常便饭不过了，要是每次都要来这么个循环，大家也都甭干活儿了，天天写循环好了。 前两天COS论坛上有个帖子提到“R语言的执行效率问题”，大意如下： 有120000行数据，用perl写成12万行R命令做t.test，然后执行，大概几分钟就算完了。如果只用R语言，把所有数据先读入，然后用循环，每一行做t.test，花了几个小时，到现在还没有算完。这说明一个问题，在R里执行单行命令要比用循环快，涉及到循环的问题，最好写成单行命令执行。 我不清楚作者是如何写这“12万行”R命令的，本文假设是把t.test(dat[i, ]), i = 1, 2, ..., 120000写入一个文件，然后用source()执行之。面对这样一个问题，我们有若干种改进计算的可能性。首先我们看“硬”写入程序代码的方法： ## 为了使计算可重复，设定随机数种子 set.seed(123) ## 生成数据，随机数，120000行 x 100列矩阵 dat = matrix(rnorm(120000 * 100), 120000) nr = nrow(dat) nc = ncol(dat) ## 六种方法的P值向量 p1 = p2 = p3 = p4 = p5 = p6 = numeric(nr) ## via source() f = file("test.t") writeLines(sprintf("p1[%d] = t.test(dat[%d, ])$p.value", [...]]]></description>
			<content:encoded><![CDATA[<p>用过底层语言做计算的人转入R语言的时候一般都会觉得R语言的运算太慢，这是一个常见的对R的误解或者对R的设计的不理解。在二三十年前Chambers等一群人在贝尔实验室设计S语言之前，统计计算主要是通过那些底层语言实现的，典型的如Fortran。当时有一个基于Fortran的统计分析库，用它的麻烦就在于无论做什么样的数据分析，都涉及到一大摞繁琐的底层代码，这让数据分析变得很没劲，统计学家有统计学家的事情，天天陷在计算机程序代码中也不是个办法，要摆脱底层语言，那就只能设计高层语言了。有所得必有所失，众所周知，高层语言一般来说比底层语言低效，但对用户来说更友好。举个简单的例子，用C语言计算均值时，我们得对一个向量（数组）从头循环到尾把每个值累加起来，得到总和，然后除以向量的长度，而均值在统计当中简直是再家常便饭不过了，要是每次都要来这么个循环，大家也都甭干活儿了，天天写循环好了。</p>
<p>前两天COS论坛上有个帖子提到“<a title="http://cos.name/bbs/read.php?tid=17601" href="http://cos.name/bbs/read.php?tid=17601" target="_blank" rel='nofollow'>R语言的执行效率问题</a>”，大意如下：</p>
<blockquote><p>有120000行数据，用perl写成12万行R命令做t.test，然后执行，大概几分钟就算完了。如果只用R语言，把所有数据先读入，然后用循环，每一行做t.test，花了几个小时，到现在还没有算完。这说明一个问题，在R里执行单行命令要比用循环快，涉及到循环的问题，最好写成单行命令执行。</p></blockquote>
<p>我不清楚作者是如何写这“12万行”R命令的，本文假设是把<code>t.test(dat[i, ]), i = 1, 2, ..., 120000</code>写入一个文件，然后用<code>source()</code>执行之。面对这样一个问题，我们有若干种改进计算的可能性。首先我们看“硬”写入程序代码的方法：</p>
<pre>## 为了使计算可重复，设定随机数种子
set.seed(123)
## 生成数据，随机数，120000行 x 100列矩阵
dat = matrix(rnorm(120000 * 100), 120000)
nr = nrow(dat)
nc = ncol(dat)
## 六种方法的P值向量
p1 = p2 = p3 = p4 = p5 = p6 = numeric(nr)

## via source()
f = file("test.t")
writeLines(sprintf("p1[%d] = t.test(dat[%d, ])$p.value",
    seq(nr), seq(nr)), f)
system.time({
    source(f)
})
#   user  system elapsed
#  95.36    0.19   95.86
close(f)
unlink("test.t")</pre>
<h1>1、向量式计算：<code>apply()</code>以及<code>*apply()</code></h1>
<p>当我们需要对矩阵的行或者列逐一计算时，<code>apply()</code>系列函数可能会提高效率。本例是对矩阵的行做t检验，那么可以这样计算：</p>
<pre>## via apply()
system.time({
    p2 = apply(dat, 1, function(x) {
        t.test(x)$p.value
    })
})
#   user  system elapsed
#  63.12    0.06   63.50
identical(p1, p2)
# [1] TRUE</pre>
<p>结果比第一种方法快了大约半分钟，而且计算结果完全一样。<code>apply()</code>本质上仍然是循环，但它在某些情况下比直接用显式循环要快：</p>
<pre>## via for-loop
system.time({
    for (i in seq(nr)) p3[i] = t.test(dat[i, ])$p.value
})
#   user  system elapsed
#  69.88    0.03   70.05
identical(p2, p3)
# [1] TRUE</pre>
<p>不过<code>apply()</code>系列函数在提高运算速度上优势并不会太明显，提倡用它的原因是它和统计中的矩阵运算相似，可以简化代码，相比起<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Csum_%7Bi%3D1%7D%5En%20x_i%2Fn" title="\sum_{i=1}^n x_i/n" alt="\sum_{i=1}^n x_i/n" align="absmiddle" />，我们可能更愿意看<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cbar%7Bx%7D" title="\bar{x}" alt="\bar{x}" align="absmiddle" />这样的表达式。很多R内置函数都是用底层语言写的，我们需要做的就是把一个对象作为整体传给函数去做计算，而不要自行把对象分解为一个个小部分计算，这个例子可能更能体现向量式计算的思想：</p>
<pre>system.time(apply(dat, 1, mean))
#   user  system elapsed
#   5.28    0.04    5.25
system.time({
    x = numeric(nr)
    for (i in 1:nr) x[i] = mean(dat[i, ])
})
#   user  system elapsed
#   4.44    0.02    4.42
system.time(rowMeans(dat))
#   user  system elapsed
#   0.11    0.00    0.13</pre>
<h1>2、明确计算的目的</h1>
<p>很多情况下，R函数返回的不仅仅是一个数字作为结果，而是会得到一系列诸如统计量、P值、各种系数等对象，在我们调用R函数之前如果能想清楚我们究竟需要什么，也许对计算的速度提升有帮助。比如本例中，也许我们仅需要12万个双边P值，其它数字我们都用不着，那么可以考虑“手工”计算P值：</p>
<pre>## "hand" calculation in R
system.time({
    p4 = 2 * pt(apply(dat, 1, function(x, mu = 0) -abs((mean(x) -
        mu)/sqrt(var(x)/nc))), nc - 1)
})
#   user  system elapsed
#  15.97    0.07   16.08
identical(p3, p4)
# [1] TRUE</pre>
<p>上面的计算更“纯净”，所以计算速度有了本质的提升，而且计算的结果和前面毫无差异。在做计算之前，人的脑子多思考一分钟，也许计算机的“脑子”会少转一个小时。</p>
<h1>3、把四则运算交给底层语言</h1>
<p>R是高层语言，把它拿来做简单的四则运算是很不划算的，而且容易导致程序低效。加加减减的活儿是C和Fortran等底层语言的强项，所以可以交给它们去做。以下我们用一段C程序来计算t统计量，然后用<code>R CMD SHLIB</code>将它编译为<code>dll</code>（Windows）或<code>so</code>（Linux）文件，并加载到R中，用<code>.C()</code>调用，最终用R函数<code>pt()</code>计算P值：</p>
<pre>## "hand" calculation in C for t-statistic
writeLines("#include &lt;math.h&gt;

void calc_tstat(double *x, int *nr, int *nc, double *mu, double *tstat)
{
    int i, j;
    double sum = 0.0, sum2 = 0.0, mean, var;
    for (i = 0; i &lt; *nr; i++) {
        for (j = 0; j &lt; *nc; j++) {
            sum += x[i + j * *nr];
        }
        mean = sum / (double) *nc;
        sum = 0.0;
        for (j = 0; j &lt; *nc; j++) {
            sum2 += (x[i + j * *nr] - mean) * (x[i + j * *nr] - mean);
        }
        var = sum2 / (double) (*nc - 1);
        sum2 = 0.0;
        tstat[i] = (mean - *mu) / sqrt(var / (*nc - 1));
    }
}", "calc_tstat.c")
system("R CMD SHLIB calc_tstat.c")
dyn.load(sprintf("calc_tstat%s", .Platform$dynlib.ext))
system.time({
    p5 = 2 * pt(-abs(.C("calc_tstat", as.double(dat), nr, nc,
        0, double(nrow(dat)))[[5]]), nc - 1)
})
#   user  system elapsed
#   0.86    0.06    0.92
dyn.unload(sprintf("calc_tstat%s", .Platform$dynlib.ext))</pre>
<p>因为R可以用<code>system()</code>调用系统命令，所以整个过程全都可以用R完成，Windows用户需要安装<a title="http://www.murdoch-sutherland.com/Rtools/" href="http://www.murdoch-sutherland.com/Rtools/" target="_blank" rel='nofollow'>Rtools</a>并设置系统环境变量<code>PATH</code>才能使用<code>R CMD SHLIB</code>。</p>
<p>更进一步，因为R自身的一些C程序也是可供用户的C程序调用的，所以我们可以把整个P值的计算过程全都扔进C代码中，一步完成：</p>
<pre>## "hand" calculation in C calling Rmath.h
writeLines("#include &lt;Rmath.h&gt;
void calc_pvalue(double *x, int *nr, int *nc, double *mu, double *pval)
{
    int i, j;
    double sum = 0.0, sum2 = 0.0, mean, var;
    for (i = 0; i &lt; *nr; i++) {
        for (j = 0; j &lt; *nc; j++) {
            sum += x[i + j * *nr];
        }
        mean = sum / (double) *nc;
        sum = 0.0;
        for (j = 0; j &lt; *nc; j++) {
            sum2 += (x[i + j * *nr] - mean) * (x[i + j * *nr] - mean);
        }
        var = sum2 / (double) (*nc - 1);
        sum2 = 0.0;
        pval[i] = 2 * pt(-fabs((mean - *mu) / sqrt(var / (*nc - 1))),
                      (double) (*nc - 1), 1, 0);
    }
}", "calc_pvalue.c")
system("R CMD SHLIB calc_pvalue.c")
dyn.load(sprintf("calc_pvalue%s", .Platform$dynlib.ext))
system.time({
    p6 = .C("calc_pvalue", as.double(dat), nr, nc, as.double(0),
        double(nrow(dat)))[[5]]
})
#   user  system elapsed
#   0.83    0.07    0.91
dyn.unload(sprintf("calc_pvalue%s", .Platform$dynlib.ext))</pre>
<p>头文件<code>Rmath.h</code>的引入使得我们可以调用很多基于C程序的R函数，详情参考手册Writing R Extensions。通过C计算出来的P值和前面用R算的略有差异，下面画出<code>p6 - p1</code> vs <code>p1</code>以及<code>p6 - p5</code> vs <code>p5</code>的图：</p>
<div id="attachment_1802" class="wp-caption aligncenter" style="width: 490px"><a href="http://cos.name/wp-content/uploads/2009/12/p-values-error.png" rel='nofollow'><img class="size-full wp-image-1802" title="P值的差异" src="http://cos.name/wp-content/uploads/2009/12/p-values-error.png" alt="P值的差异" width="480" height="480" /></a><p class="wp-caption-text">P值的差异</p></div>
<p>导致差异的原因此处不细究，感兴趣的读者可以帮忙检查一下。</p>
<h1>小结</h1>
<ol>
<li>若你熟悉底层语言，计算又不太复杂，那么可用底层语言写，然后用R调之；</li>
<li>否则把R对象当做整体去计算，能做<code>x + 1</code>就不要做<code>for (i in length(x)) x[i] + 1</code></li>
<li>不要低估R core们的编程水平，他们已经做了很多工作让用户脱离底层编程</li>
</ol>
<p>注：本文中的运算时间可能不可重复，这与计算机所处的状态有关，但大体来说，运算速度的快慢是可以肯定的。本文仅仅是关于统计计算的一个微小的例子，以后若有更好的例子，可能会更新本文；也欢迎各位提供更多示例。</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2009/07/maximum-likelihood-estimation-in-r/" title="R中的极大似然估计">R中的极大似然估计</a> (2)</li><li><a href="http://cos.name/2009/03/scatterplot-matrix-visualization/" title="不同版本的散点图矩阵">不同版本的散点图矩阵</a> (17)</li><li><a href="http://cos.name/2009/03/correlation-matrix-visualization/" title="相关矩阵的可视化及其新方法探究">相关矩阵的可视化及其新方法探究</a> (41)</li><li><a href="http://cos.name/2009/03/parallel-coordinates-and-andrews-curve/" title="调和曲线图和轮廓图的比较">调和曲线图和轮廓图的比较</a> (12)</li><li><a href="http://cos.name/2009/01/r-and-sas-new-york-times/" title="R与SAS之争：一个导读">R与SAS之争：一个导读</a> (28)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="http://" >刘重杰</a> : <a class="comment_content" href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1312" title="View the entire comment by 刘重杰" >简单来说，R底层基本上都是C做的，调用的库也是久经考验的。
程序运行的效率核心在于对语言提供的功能...</a></li>
<li><a class="commentor" href="" >zong0jie</a> : <a class="comment_content" href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1209" title="View the entire comment by zong0jie" >补充一点，系统是xp sp3。 类似测试在fedora 12下也进行过，结果依然类似。</a></li>
<li><a class="commentor" href="" >zong0jie</a> : <a class="comment_content" href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1208" title="View the entire comment by zong0jie" >在R2.10里面貌似循环速度大大加快，只比apply慢了300%，几分钟时间完全可以接受了。
我机...</a></li>
<li><a class="commentor" href="" >yfyang</a> : <a class="comment_content" href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1139" title="View the entire comment by yfyang" >用R做像EM之类的处理通常很痛苦。问题就在循环、四则运算、拷贝等问题上面。因为R语言是变量和LISP...</a></li>
<li><a class="commentor" href="http://yihui.name" >谢益辉</a> : <a class="comment_content" href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1099" title="View the entire comment by 谢益辉" >哦，谢谢相告，我之前还搜了好半天邮件，人名和ID对不起来了。也谢谢lyxmoo的热心支持！</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2009/12/improve-r-computation-efficiency/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>
