<?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>Thu, 11 Mar 2010 04:58:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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)求得
扩展
如果你很细心，你会发现这个 方法目前只适用于积分区间 ，且积分函数 在区间上的取值也位于  内的情况。那么，对于一般区间 上的定积分 呢？一个很明显的思路，如果我们可以将  与 建立代数关系就可以了。
首先，做线性变换，令  ，此时，
,。
进一步如果在区间上有 ，令
，
则。此时，可以得到 。
其中,,。
这说明，用随机投点法计算定积分方法具有普遍意义。
举一个实例，求定积分 。
显然，，由于在 上时单调减函数，所以 ，。R中代码为
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);
 [...]]]></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/2009/06/why-ratio-estimation-is-more-accurate-in-sampling/" title="比率估计为什么精确">比率估计为什么精确</a> (5)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="http://gaotao.name" >gaotao</a> : <a class="comment_content" href="http://cos.name/2010/03/monte-carlo-method-to-compute-integration/#comment-1263" title="View the entire comment by gaotao" >冒个泡，同意谢老大的观点。因为随机投点法比较粗糙，而且用的随机数应该是伪随机的，遇到高维时，单纯的加...</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-1259" title="View the entire comment by 谢益辉" >我再提供一份蒙特卡洛方法的学习材料吧：http://www.ceremade.dauphine.fr...</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-1258" title="View the entire comment by 邓一硕" >你说的erf是误差函数（又叫高斯误差函数），是个非基本函数，是用级数算的。</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-1257" 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/2010/03/monte-carlo-method-to-compute-integration/#comment-1256" title="View the entire comment by 谢益辉" >所谓维数灾难一般也就是指高维空间下数据的稀疏性。这个很容易理解，比如有10000个样本点均匀分布在样...</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2010/03/monte-carlo-method-to-compute-integration/feed/</wfw:commentRss>
		<slash:comments>19</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)概率论的起源、发展、应用 (4)最新评论]]></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> (4)</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; [...]]]></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/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/2009/12/improve-r-computation-efficiency/" title="也谈提高R语言的运算效率">也谈提高R语言的运算效率</a> (14)</li><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/04/from-proportion-to-conclusion/" title="从调查报告中的比例数字说统计人如何甄别统计假象">从调查报告中的比例数字说统计人如何甄别统计假象</a> (18)</li></ul><h3>最新评论</h3><ul><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>
<li><a class="commentor" href="" >焦静</a> : <a class="comment_content" href="http://cos.name/2009/12/2nd-chinese-r-conference-summary/#comment-1142" title="View the entire comment by 焦静" >好激动啊，我太粗心了，原来PPT地址早就有了呢，赶快发给我们实验室，她们都问我要了好几次了。嘿嘿！</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2009/12/2nd-chinese-r-conference-summary/feed/</wfw:commentRss>
		<slash:comments>22</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",
    seq(nr), seq(nr)), f)
system.time({
    source(f)
})
#   user  [...]]]></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> (33)</li><li><a href="http://cos.name/2009/03/parallel-coordinates-and-andrews-curve/" title="调和曲线图和轮廓图的比较">调和曲线图和轮廓图的比较</a> (11)</li><li><a href="http://cos.name/2009/01/r-and-sas-new-york-times/" title="R与SAS之争：一个导读">R与SAS之争：一个导读</a> (27)</li></ul><h3>最新评论</h3><ul><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>
<li><a class="commentor" href="" >lyxmoo</a> : <a class="comment_content" href="http://cos.name/2009/12/improve-r-computation-efficiency/#comment-1095" title="View the entire comment by lyxmoo" >当时我要提自己事情主要是担心只报了上海而不能参加北京活动（不规则的参与者的行动或给组织者造成了麻烦）...</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2009/12/improve-r-computation-efficiency/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>用R也能做精算—actuar包学习笔记（一）</title>
		<link>http://cos.name/2009/11/a-tutorial-on-package-actuar-1/</link>
		<comments>http://cos.name/2009/11/a-tutorial-on-package-actuar-1/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 04:24:55 +0000</pubDate>
		<dc:creator>李皞</dc:creator>
				<category><![CDATA[应用领域]]></category>
		<category><![CDATA[统计软件]]></category>
		<category><![CDATA[风险精算]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[损失分布]]></category>
		<category><![CDATA[精算]]></category>
		<category><![CDATA[风险理论]]></category>

		<guid isPermaLink="false">http://cos.name/?p=1648</guid>
		<description><![CDATA[本文是对R中精算学专用包actuar使用的一个简单教程。actuar项目开始于2005年，在2006年2月首次提供公开下载，其目的就是将一些常用的精算函数引入R系统。目前，提供的函数主要涉及风险理论，损失分布和信度理论。
如题所示，本文是我在学习actuar包过程中的学习笔记，主要涉及这个包中一些函数的使用方法和细节，对一些方法的结论也有稍许探讨，因此能简略的地方简略，而讨论的地方可能讲的会比较详细。闲话少提，下面正式开始学习！
1、数据分组
分组数据是精算学中常用的数据格式，比如我们要把不同风险类别的人群进行分别统计。假设我们要把一组连续变量分为n组，显然需n+1个边界。
函数
gouped.data(Group = c(...), freq1 = c(...), freq2 = c(...),
    ..., right = TRUE, row.names = NULL)
使用注意：
1）  Group 是分组的临界值，freq1和freq2是对应组别的频数。Group，freq1和freq2可以随意命名，但是一定要把临界值向量放在第一个位置。
2）  Group向量要比freq向量多出一个长度。
3）  默认分组区间是左开右闭，如果想变为左闭右开可以设置right=FALSE。row.names可以自定义行的名称。
4）  返回的是一个数据框。特别要注意对第一列的处理。
&#62; x=grouped.data(Group= c(0, 25, 50, 100, 150,250, 500),
 	Line.1 = c(30, 31, 57, 42, 65, 84),
	Line.2 = c(26, 33, 31, 19, 16, 11))
&#62; x
       Group Line.1 [...]]]></description>
			<content:encoded><![CDATA[<p>本文是对R中精算学专用包actuar使用的一个简单教程。actuar项目开始于2005年，在2006年2月首次提供公开下载，其目的就是将一些常用的精算函数引入R系统。目前，提供的函数主要涉及风险理论，损失分布和信度理论。</p>
<p>如题所示，本文是我在学习actuar包过程中的学习笔记，主要涉及这个包中一些函数的使用方法和细节，对一些方法的结论也有稍许探讨，因此能简略的地方简略，而讨论的地方可能讲的会比较详细。闲话少提，下面正式开始学习！<span id="more-1648"></span></p>
<h1>1、数据分组</h1>
<p>分组数据是精算学中常用的数据格式，比如我们要把不同风险类别的人群进行分别统计。假设我们要把一组连续变量分为n组，显然需n+1个边界。</p>
<p>函数</p>
<pre>gouped.data(Group = c(...), freq1 = c(...), freq2 = c(...),
    ..., right = TRUE, row.names = NULL)</pre>
<p>使用注意：</p>
<p>1）  Group 是分组的临界值，freq1和freq2是对应组别的频数。Group，freq1和freq2可以随意命名，但是一定要把临界值向量放在第一个位置。</p>
<p>2）  Group向量要比freq向量多出一个长度。</p>
<p>3）  默认分组区间是左开右闭，如果想变为左闭右开可以设置right=FALSE。row.names可以自定义行的名称。</p>
<p>4）  返回的是一个数据框。特别要注意对第一列的处理。</p>
<pre>&gt; x=grouped.data(Group= c(0, 25, 50, 100, 150,250, 500),
 	Line.1 = c(30, 31, 57, 42, 65, 84),
	Line.2 = c(26, 33, 31, 19, 16, 11))
&gt; x
       Group Line.1 Line.2
1   (0,  25]     30     26
2  (25,  50]     31     33
3  (50, 100]     57     31
4 (100, 150]     42     19
5 (150, 250]     65     16
6 (250, 500]     84     11
&gt; x=grouped.data(Group= c(0, 25, 50, 100, 150,250, 500),
	Line.1 = c(30, 31, 57, 42, 65, 84),
	Line.2 = c(26, 33, 31, 19, 16, 11),
	right=F,row.names=LETTERS[1:6])
&gt; x
       Group Line.1 Line.2
A   [0,  25)     30     26
B  [25,  50)     31     33
C  [50, 100)     57     31
D [100, 150)     42     19
E [150, 250)     65     16
F [250, 500)     84     11</pre>
<p>提取子总体</p>
<pre>&gt; x[1,]
     Group Line.1 Line.2
A [0,  25)     30     26</pre>
<p>提取组频</p>
<pre>&gt; x[,2]
[1] 30 31 57 42 65 84</pre>
<p>提取边界值。如果引用第一列你期待会出现什么结果呢？</p>
<pre>&gt; x[,1]
[1]   0  25  50 100 150 250 500</pre>
<p>如同任何对数据框的操作，也可以对数据框中的数据进行修改。特别需要注意的是对第一列的修改，一定要明确指定分组区间的左右（或者中间）的边界值。如：</p>
<pre>&gt; x[1,1]=c(0,20)
&gt; x
       Group Line.1 Line.2
1   (0,  20]     30     26
2  (20,  50]     31     33
3  (50, 100]     57     31
4 (100, 150]     42     19
5 (150, 250]     65     16
6 (250, 500]     84     11
&gt; x[c(3, 4), 1]  x
       Group Line.1 Line.2
1   (0,  20]     30     26
2  (20,  55]     31     33
3  (55, 110]     57     31
4 (110, 160]     42     19
5 (160, 250]     65     16
6 (250, 500]     84     11</pre>
<p>如果只指定一个边界的话……</p>
<pre>&gt; x[1,1]=10
&gt; x
       Group Line.1 Line.2
1  (10,  10]     30     26
2  (10,  55]     31     33
3  (55, 110]     57     31
4 (110, 160]     42     19
5 (160, 250]     65     16
6 (250, 500]     84     11</pre>
<h1>2、分组统计</h1>
<p>1）函数mean()计算分组均值。等价于</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bj%3D1%7D%5Er%20n_j%28%5Cfrac%7Bc_%7Bj-1%7D%2Bc_j%7D%7B2%7D%29" title="\frac{1}{n}\sum_{j=1}^r n_j(\frac{c_{j-1}+c_j}{2})" alt="\frac{1}{n}\sum_{j=1}^r n_j(\frac{c_{j-1}+c_j}{2})" align="absmiddle" /></p>
<p>高阶矩的计算可以用函数emm(),见后文。</p>
<pre>&gt; x
       Group Line.1 Line.2
A   [0,  25)     30     26
B  [25,  50)     31     33
C  [50, 100)     57     31
D [100, 150)     42     19
E [150, 250)     65     16
F [250, 500)     84     11
&gt; mean(x)
   Line.1    Line.2
179.81392  99.90809</pre>
<p>Line.1的均值等价于：</p>
<pre>&gt; ((0+25)/2*30+(25+50)/2*31+(50+100)/2*57+(100+150)/2*42
       (150+250)/2*65+(250+500)/2*84)/sum(x[,2])
[1] 179.8139</pre>
<p>2）绘制直方图<br />
由于数据已经被划分好组别，因此R会应用数据框x的第一列作为组距的划分来绘制直方图，因此第一列一定要保留，这在绘制不等距直方图时是十分方便的。由于每次只能绘制一组频率，因此绘图时需要指定频率所在的列，如果不指定，默认绘制第一组频率（数据框的第二列）。</p>
<pre>&gt; layout(matrix(1:3,1,3))
&gt; hist(x[,-3],main='Histogram of freq.1')
&gt; hist(x[,-2],main='Histogram of freq.2')
&gt; hist(x,main='Histogram for unspecified x')</pre>
<p align="left"><img class="aligncenter size-full wp-image-1659" src="http://cos.name/wp-content/uploads/2009/11/image004.jpg" alt="image004" width="553" height="227" /></p>
<p>3）绘制累计频率图。如同对连续的随机变量可以绘制经验分布函数图一样，对于分组曲线也可以绘制“拱形图”（ogive），也就是累计频率曲线，它通过将分组边界值所对应的累计频率用直线连接起来得到。累计频率曲线的公式如下：</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %0D%0A%5Ctilde%7BF%7D_n%28x%29%3D%5Cbegin%7Bcases%7D%0D%0A%0D%0A0%20%26amp%3B%20x%5Cleq%20c_0%20%5C%5C%0D%0A%0D%0A%5Cfrac%7B%28c_j-x%29F_n%28c_%7Bj-1%7D%29%2B%28x-c_%7Bj-1%7D%29F_n%28c_j%29%7D%7Bc_j-c_%7Bj-1%7D%7D%20%26amp%3B%20c_%7Bj-1%7D%26lt%3Bx%5Cleq%20c_j%20%5C%5C%0D%0A%0D%0A1%20%26amp%3B%20x%26gt%3Bc_r%0D%0A%0D%0A%5Cend%7Bcases%7D%0D%0A%0D%0A" title="&#13;&#10;\tilde{F}_n(x)=\begin{cases}&#13;&#10;&#13;&#10;0 &amp;amp; x\leq c_0 \\&#13;&#10;&#13;&#10;\frac{(c_j-x)F_n(c_{j-1})+(x-c_{j-1})F_n(c_j)}{c_j-c_{j-1}} &amp;amp; c_{j-1}&amp;lt;x\leq c_j \\&#13;&#10;&#13;&#10;1 &amp;amp; x&amp;gt;c_r&#13;&#10;&#13;&#10;\end{cases}&#13;&#10;&#13;&#10;" alt="&#13;&#10;\tilde{F}_n(x)=\begin{cases}&#13;&#10;&#13;&#10;0 &amp;amp; x\leq c_0 \\&#13;&#10;&#13;&#10;\frac{(c_j-x)F_n(c_{j-1})+(x-c_{j-1})F_n(c_j)}{c_j-c_{j-1}} &amp;amp; c_{j-1}&amp;lt;x\leq c_j \\&#13;&#10;&#13;&#10;1 &amp;amp; x&amp;gt;c_r&#13;&#10;&#13;&#10;\end{cases}&#13;&#10;&#13;&#10;" align="absmiddle" /></p>
<p align="left">
<p align="left">函数ogive()返回的是一个阶梯函数对象(Step Function Class)，也就是说返回的是一个函数，给定函数的横坐标，就可以返回相对应的频率，这点和ecdf()是相同的。我们可以通过konts()返回阶梯函数对象的临界点，通过plot()绘制阶梯函数。</p>
<pre>&gt; Fnt  knots(Fnt)  #返回临界点
[1]   0  25  50 100 150 250 500
&gt; Fnt(knots(Fnt))   #返回临界点对应的累积频率值
[1] 0.00000000 0.09708738 0.19741100 0.38187702
     0.51779935 0.72815534 1.00000000
&gt; plot(Fnt)</pre>
<p><img class="aligncenter size-full wp-image-1660" src="http://cos.name/wp-content/uploads/2009/11/image008.jpg" alt="image008" width="271" height="271" /></p>
<h1>3、计算经验矩</h1>
<p>如果说均值函数mean()只能计算一阶矩，那么emm()函数则可以计算任意阶的经验原点矩。</p>
<p>首先引入actuar包中的两个数据集。其中dental是非分组数据，gdental是分组数据。</p>
<pre>&gt; data(dental)
&gt; dental
 [1]  141   16   46   40  351  259  317 1511  107  567
&gt; data(gdental)
&gt; gdental
          cj    nj
1      (0,  25] 30
2    ( 25,  50] 31
3    ( 50, 100] 57
4    (100, 150] 42
5    (150, 250] 65
6    (250, 500] 84
7   (500, 1000] 45
8  (1000, 1500] 10
9  (1500, 2500] 11
10 (2500, 4000]  3</pre>
<p>emm()函数可以计算任意阶经验原点矩，其使用方法是这样的:  emm(x,order=1)。其中，x可以是数据向量或者是矩阵，如果是分组数据，x也可以是由grouped.data()生成的数据框。order是阶数，可以赋值给它一个向量，这样就能一次性计算多个原点矩。</p>
<p>当为非分组数据时，计算的公式为：</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %0D%0A%0D%0A%5Csum_%7Bj%3D1%7D%5En%20x_j%5Ek%0D%0A%0D%0A" title="&#13;&#10;&#13;&#10;\sum_{j=1}^n x_j^k&#13;&#10;&#13;&#10;" alt="&#13;&#10;&#13;&#10;\sum_{j=1}^n x_j^k&#13;&#10;&#13;&#10;" align="absmiddle" /></p>
<p>当为分组数据时，计算的公式为：</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %0D%0A%0D%0A%5Csum_%7Bj%3D1%7D%5Er%20n_j%5Cfrac%7B%28c_j%5E%7Bk%2B1%7D-c_%7Bj-1%7D%5E%7Bk%2B1%7D%29%7D%7Bn%2A%28k%2B1%29%2A%28c_j-c_%7Bj-1%7D%29%7D%0D%0A%0D%0A" title="&#13;&#10;&#13;&#10;\sum_{j=1}^r n_j\frac{(c_j^{k+1}-c_{j-1}^{k+1})}{n*(k+1)*(c_j-c_{j-1})}&#13;&#10;&#13;&#10;" alt="&#13;&#10;&#13;&#10;\sum_{j=1}^r n_j\frac{(c_j^{k+1}-c_{j-1}^{k+1})}{n*(k+1)*(c_j-c_{j-1})}&#13;&#10;&#13;&#10;" align="absmiddle" /></p>
<pre>&gt; emm(dental,2)
[1] 293068.3
&gt; emm(gdental,1:3)
[1] 3.533399e+02 3.576802e+05 6.586332e+08</pre>
<p>elev()函数可以计算经验有限期望值（limited expected value）。使用方法是elev(x)：x可以是非分组数据，也可以是分组数据，如果是分组数据，默认以第一组频率为计算对象。</p>
<p>对于非分组数据，有限期望值的公式为：</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %0D%0A%0D%0AE%5BX%5Cwedge%20u%5D%3Df%28u%29%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bj%3D1%7D%5En%5Cmin%28x_j%2Cu%29%0D%0A%0D%0A" title="&#13;&#10;&#13;&#10;E[X\wedge u]=f(u)=\frac{1}{n}\sum_{j=1}^n\min(x_j,u)&#13;&#10;&#13;&#10;" alt="&#13;&#10;&#13;&#10;E[X\wedge u]=f(u)=\frac{1}{n}\sum_{j=1}^n\min(x_j,u)&#13;&#10;&#13;&#10;" align="absmiddle" /></p>
<p>对于分组数据，有限期望公式比较复杂，在此略去。</p>
<p>注意到，有限期望值是上限值u的函数。</p>
<pre>&gt; lev=elev(dental)
&gt; lev(knots(lev))
 [1]  16.0  37.6  42.4  85.1 105.5 164.5 187.7 197.9 241.1 335.5
&gt; lev2=elev(gdental)
&gt; par(mfrow=c(1,2))
&gt; plot(lev,type='o',pch=19)
&gt; plot(lev2,type='o',pch=19)</pre>
<p><img class="aligncenter size-full wp-image-1661" src="http://cos.name/wp-content/uploads/2009/11/image018.jpg" alt="image018" width="554" height="306" /></p>
<h1>4、分布拟合</h1>
<p>在R中，MASS包中的fitdistr()函数可以用极大似然估计，对数据进行分布拟合。在actuar()包中，mde()函数则提供了三种基于距离最小化的估计方法（minium distance estimates）。</p>
<p>1）  Cramér-von Mises方法（CvM）最小化理论分布函数和经验分布函数（对于分组数据是ogive）的距离。</p>
<p>未分组数据：</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %0D%0A%0D%0Ad%28%5Ctheta%29%3D%5Csum_%7Bj%3D1%7D%5Er%20w_j%28F%28x_j%3B%5Ctheta%29-F_n%28x_j%29%29%5E2%0D%0A%0D%0A" title="&#13;&#10;&#13;&#10;d(\theta)=\sum_{j=1}^r w_j(F(x_j;\theta)-F_n(x_j))^2&#13;&#10;&#13;&#10;" alt="&#13;&#10;&#13;&#10;d(\theta)=\sum_{j=1}^r w_j(F(x_j;\theta)-F_n(x_j))^2&#13;&#10;&#13;&#10;" align="absmiddle" /></p>
<p>分组数据：</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %0D%0A%0D%0Ad%28%5Ctheta%29%3D%5Csum_%7Bj%3D1%7D%5Erw_j%28F%28c_j%3B%5Ctheta%29-%5Ctilde%7BF%7D_n%28c_j%29%29%5E2%0D%0A%0D%0A" title="&#13;&#10;&#13;&#10;d(\theta)=\sum_{j=1}^rw_j(F(c_j;\theta)-\tilde{F}_n(c_j))^2&#13;&#10;&#13;&#10;" alt="&#13;&#10;&#13;&#10;d(\theta)=\sum_{j=1}^rw_j(F(c_j;\theta)-\tilde{F}_n(c_j))^2&#13;&#10;&#13;&#10;" align="absmiddle" /></p>
<p>在这里，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize F%28x%3B%5Ctheta%29" title="F(x;\theta)" alt="F(x;\theta)" align="absmiddle" />是理论分布函数，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %2Ftheta" title="/theta" alt="/theta" align="absmiddle" />是其参数；<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize F_n%28x%29" title="F_n(x)" alt="F_n(x)" align="absmiddle" />是经验分布函数ecdf；<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Ctilde%7BF%7D_n%28x%29" title="\tilde{F}_n(x)" alt="\tilde{F}_n(x)" align="absmiddle" />是累积频率函数ogive；<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize w_j" title="w_j" alt="w_j" align="absmiddle" />是权重，默认都取1。</p>
<p>2）修正卡方法仅应用于分组数据，通过最小化各组期望频数与实际观测频数的平方误差得到。</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %0D%0A%0D%0Ad%28%5Ctheta%29%3D%5Csum_%7Bj%3D1%7D%5Erw_j%5Bn%28F%28c_j%3B%5Ctheta%29-F%28c_%7Bj-1%7D%3B%5Ctheta%29%29-n_j%5D%5E2%0D%0A%0D%0A" title="&#13;&#10;&#13;&#10;d(\theta)=\sum_{j=1}^rw_j[n(F(c_j;\theta)-F(c_{j-1};\theta))-n_j]^2&#13;&#10;&#13;&#10;" alt="&#13;&#10;&#13;&#10;d(\theta)=\sum_{j=1}^rw_j[n(F(c_j;\theta)-F(c_{j-1};\theta))-n_j]^2&#13;&#10;&#13;&#10;" align="absmiddle" /></p>
<p>其中，<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize n%3D%5Csum_%7Bj%3D1%7D%5Enn_j" title="n=\sum_{j=1}^nn_j" alt="n=\sum_{j=1}^nn_j" align="absmiddle" />,<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize w_j" title="w_j" alt="w_j" align="absmiddle" />默认情况下为<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize n_j%5E%7B-1%7D" title="n_j^{-1}" alt="n_j^{-1}" align="absmiddle" />。</p>
<p>3）LAS法（layer average severity）也仅应用于分组数据。通过最小化各组内的理论和经验有限期望函数的平方误差得到。</p>
<p><img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %0D%0A%0D%0Ad%28%5Ctheta%29%3D%5Csum_%7Bj%3D1%7D%5Er%20w_j%28LAS%28c_%7Bj-1%7D%2Cc_j%3B%5Ctheta%29-L%5Ctilde%7BA%7DS_n%28c_%7Bj-1%7D%2Cc_j%29%29%5E2%0D%0A%0D%0A" title="&#13;&#10;&#13;&#10;d(\theta)=\sum_{j=1}^r w_j(LAS(c_{j-1},c_j;\theta)-L\tilde{A}S_n(c_{j-1},c_j))^2&#13;&#10;&#13;&#10;" alt="&#13;&#10;&#13;&#10;d(\theta)=\sum_{j=1}^r w_j(LAS(c_{j-1},c_j;\theta)-L\tilde{A}S_n(c_{j-1},c_j))^2&#13;&#10;&#13;&#10;" align="absmiddle" /></p>
<p>其中<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize LAS%28x%2Cy%29%3DE%28X%5Cwedge%20y%29-E%28X%5Cwedge%20x%29" title="LAS(x,y)=E(X\wedge y)-E(X\wedge x)" alt="LAS(x,y)=E(X\wedge y)-E(X\wedge x)" align="absmiddle" />,<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize L%5Ctilde%20AS_n%28x%2Cy%29%3D%5Ctilde%20E_n%5BX%5Cwedge%20y%5D-%5Ctilde%20E_n%5BX%5Cwedge%20x%5D" title="L\tilde AS_n(x,y)=\tilde E_n[X\wedge y]-\tilde E_n[X\wedge x]" alt="L\tilde AS_n(x,y)=\tilde E_n[X\wedge y]-\tilde E_n[X\wedge x]" align="absmiddle" />,<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize E%28%29" title="E()" alt="E()" align="absmiddle" />是理论分布的有限期望函数，而<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize %5Ctilde%20E_n" title="\tilde E_n" alt="\tilde E_n" align="absmiddle" />是经验分布的有限期望函数。<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize w_j" title="w_j" alt="w_j" align="absmiddle" />默认情况下为<img src="http://www.forkosh.dreamhost.com/mimetex.cgi?\normalsize n_j%5E%7B-1%7D" title="n_j^{-1}" alt="n_j^{-1}" align="absmiddle" />。</p>
<p>函数调用optim()函数做最优化，其语法为：</p>
<pre>mde(x, fun, start, measure = c("CvM", "chi-square", "LAS"),
      weights = NULL, ...)</pre>
<p>其中：<br />
1）    x是分组的或未分组的数据。<br />
2）    fun是待拟合的分布，CvM法和修正卡方法需要指定分布函数：dfoo。LAS法需要指定理论有限期望函数。</p>
<blockquote><p>Tips：R中对于一些分布foo提供了d，p，q，r四种函数，分别是密度函数，分布函数，分布函数的反函数和生成该分部的随机数。在actuar包中，除了提供R中原先没有但在精算研究中很重要的分布（比如pareto分布）的上述函数外，还对一些连续分布（注意是连续分布！）额外提供了m、lev和mgf三种函数，m是计算理论原点矩，lev是计算有限期望函数，mgf是计算矩母函数。对于经验数据，如上面介绍actuar包中提供了emm()和lev()来计算经验原点矩和经验有限期望函数。</p></blockquote>
<p>3）    start指定参数初始值。形式必须以列表的形式，形式可以见例子，有几个参数就要指定几个初始值。<br />
4）    measure是指定方法。weight指定权重，否则采用默认权重。<br />
5）    &#8230;是其他参数，可以指定optim()函数中的参数，比如使用L-BFGS-B方法进行优化可以添加参数method=“L-BFGS-B”。<br />
我们可以对上面的gdental数据进行分布拟合。</p>
<pre>&gt; mde(gdental,pexp,start=list(rate=1/200),measure="CvM")
     rate
 0.003551270 

   distance
 0.002841739
Warning message:
In optim(x = c(0, 25, 50, 100, 150, 250, 500, 1000, 1500, 2500,  :
  one-diml optimization by Nelder-Mead is unreliable: use optimize
&gt; hist(gdental)
&gt; theta=1/200
&gt; curve(theta*exp(1)^(-theta*x),from=0,to=4000,add=T,col='red')</pre>
<p><img class="aligncenter size-full wp-image-1723" src="http://cos.name/wp-content/uploads/2009/11/clip_image0021.jpg" alt="clip_image002" width="271" height="271" /><br />
在此，我们感兴趣的是将基于距离的分布拟合方法与极大似然估计的参数估计效果进行以下对比。因此不妨做一个实验：<br />
简单起见，先从单参数拟合问题开始，这是一个一维优化问题。<br />
首先生成50组来自于rate=1的指数分布随机数，每组的个数都为10。然后，对于每一组随机数，分别用基于距离的估计方法和极大似然估计进行参数估计，将50次模拟结果的均值和标准差记录下来。之后，将随机数的个数由10增加到20，30…200，重复之前的过程。最终得到的结果如下图：</p>
<p><img class="aligncenter size-full wp-image-1732" src="http://cos.name/wp-content/uploads/2009/11/clip_image0022.jpg" alt="clip_image002" width="553" height="319" /></p>
<p>可以看出，在单参数估计中，尤其是在样本量较大时，两种方法估计的结果相差不大，而极大似然估计的方差要比基于距离的估计方差略小。那么，两种方法对于异常值的稳健性如何呢？在上面生成的所有组随机数中，剔除两个指数分布随机数，再混入两个来自[200,300]均匀分布的随机数，再重新对参数进行估计，结果很明显，基于距离的估计方法估计的结果很稳定，而极大似然估计的参数结果受异常值的影响很大！</p>
<p><img class="aligncenter size-full wp-image-1662" src="http://cos.name/wp-content/uploads/2009/11/image052.jpg" alt="image052" width="553" height="324" /></p>
<p>因此，对于经常存在异常值的损失数据，使用基于距离的分布拟合方法往往更加稳健。</p>
<p>对于两参数的估计，使用mde()函数经常会报错，通常的解决办法是估计参数的对数形式，然后再取指数还原，由于参数的对数形式可以取负值，这样程序虽然也会优化失败，但要比不取对数时的可能性要小很多。</p>
<p>比如：</p>
<pre>&gt; pgammalog=function(x,logshape,logscale)
  {
	pgamma(x,exp(logshape),exp(logscale))
  }
&gt;
&gt; aa=rgamma(200,shape=3,scale=1)
&gt; estlog=mde(aa,pgammalog,start=list(logshape=1.3,logscale=0.2),
              measure='CvM',method='L-BFGS-B',lower=c(0.5,-0.5),
              upper=c(1,5,0.5))$estimate
&gt; exp(estlog)
 logshape  logscale
2.4873247 0.8404548</pre>
<p>(未完待续)</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2009/12/improve-r-computation-efficiency/" title="也谈提高R语言的运算效率">也谈提高R语言的运算效率</a> (14)</li><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/07/studying-notes-on-oop-in-r/" title="R中面向对象编程方法">R中面向对象编程方法</a> (6)</li><li><a href="http://cos.name/2009/07/drawing-china-map-using-r/" title="用R软件绘制中国分省市地图">用R软件绘制中国分省市地图</a> (28)</li><li><a href="http://cos.name/2009/06/statistical-analysis-and-winbugs-part-4/" title="WinBUGS在统计分析中的应用（第四部分）">WinBUGS在统计分析中的应用（第四部分）</a> (0)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="" >于怡</a> : <a class="comment_content" href="http://cos.name/2009/11/a-tutorial-on-package-actuar-1/#comment-1083" title="View the entire comment by 于怡" >其实这种商业的东西还是能够自己编程比较好，如果有现成的开源的release出来，肯定都是落伍了的呵呵...</a></li>
<li><a class="commentor" href="" >李皞</a> : <a class="comment_content" href="http://cos.name/2009/11/a-tutorial-on-package-actuar-1/#comment-1082" title="View the entire comment by 李皞" >原来是这样，受教了。
其实这个包主要是针对《loss models》这本书编的，所以在看这本书时配...</a></li>
<li><a class="commentor" href="" >于怡</a> : <a class="comment_content" href="http://cos.name/2009/11/a-tutorial-on-package-actuar-1/#comment-1081" title="View the entire comment by 于怡" >这个包主要针对loss model, risk theory, credibility
所涉及函数...</a></li>
<li><a class="commentor" href="" >huang shuai</a> : <a class="comment_content" href="http://cos.name/2009/11/a-tutorial-on-package-actuar-1/#comment-1053" title="View the entire comment by huang shuai" >嘿嘿,我也高兴哇</a></li>
<li><a class="commentor" href="http://taiyun.cos.name/" >魏太云</a> : <a class="comment_content" href="http://cos.name/2009/11/a-tutorial-on-package-actuar-1/#comment-1051" title="View the entire comment by 魏太云" >黄兄可是本次会议“两会代表”说法的始作俑者啊，让大家开心了好久:)</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2009/11/a-tutorial-on-package-actuar-1/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>浅谈Buffon投针问题及其推广</title>
		<link>http://cos.name/2009/11/a-brief-talk-on-buffon-throwing-needle-problems/</link>
		<comments>http://cos.name/2009/11/a-brief-talk-on-buffon-throwing-needle-problems/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 09:04:09 +0000</pubDate>
		<dc:creator>魏太云</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=1627</guid>
		<description><![CDATA[公元1777年，法国科学家D·布丰(D.Buffon 1707～1788)设计了一个巧夺天工的实验：往间距为a的平行线族之间投掷长为L 的针，可以计算出针和平行线相交的概率。]]></description>
			<content:encoded><![CDATA[<p><a href="http://cos.name/wp-content/uploads/2009/11/semicircle2.gif" rel='nofollow'><img class="alignleft size-thumbnail wp-image-1792" title="semicircle2" src="http://cos.name/wp-content/uploads/2009/11/semicircle2-150x150.gif" alt="semicircle2" width="150" height="150" /></a>公元1777年，法国科学家D·布丰(D.Buffon 1707～1788)设计了一个巧夺天工的实验：往间距为a的平行线族之间投掷长为L 的针，可以计算出针和平行线相交的概率为：<br />
<img class="aligncenter size-full wp-image-420" title="pi_2ltopia" src="http://taiyun.cos.name/wp-content/uploads/2009/11/pi_2ltopia.png" alt="pi_2ltopia" width="85" height="46" /><br />
根据此式，可以得到pi的近似估计值，这的确是一个伟大的、奇妙而划时代的实验，可算是蒙特卡罗模拟中的鼻祖和经典了。在大多数教材上，这个概率都是用积分或二重积分计算得来的，比较繁琐，在<a href="http://www.matrix67.com/blog/archives/2494" rel='nofollow'>matrix67的博客</a>中，我欣慰而惊奇地看到了一种非常简便、直观的解法，感慨了一番，也稍微思考了一番。</p>
<blockquote><p>期望值的一个最引人注目的性质就是，E(A+B)=E(A)+E(B)，不管A和B是不是独立的。想象一根长度为L的铁丝，不管它被弯成了什么形状，扔到地上后它与地板上的平行线的交点个数的期望值都是一样的，并且这个值是和L成正比的。这是因为，我们可以把一根弯铁丝看作很多很多小的直线段构成；而每个充分小的直线段与平行线交点个数的期望都是相同的，那么由期望值的线性关系，整个弯铁丝与平行线交点数的期望就是c·L，其中c是某个固定的系数。为了求出这个系数是多少，我们只需要考虑一些特殊的情况。注意到，把一根长度为pi的铁丝弯成一个直径为1的圆，则把它扔到地上之后，它与这组平行线总有两个交点。这就是说，pi的c倍就等于2，即c等于2/pi。自然，一根单位长度的针与平行线的交点个数的期望值就是2/pi；而由于这根针与平行线要么没有交点，要么就只有一个交点，因此这个数值就相当于是针与平行线相交的概率了。——matrix67</p></blockquote>
<p><span id="more-1627"></span>matrix67是北大中文系的学生，他对数学思维的把握令我十分汗颜。期望的这条性质大家知道，但是离灵活运用却差得很远。根据上述理论，很容易得到，对于任何曲线，它和平行线族交点个数(Y)的期望都是：<br />
<img class="aligncenter size-full wp-image-422" title="pi_2stopia" src="http://taiyun.cos.name/wp-content/uploads/2009/11/pi_2stopia.png" alt="pi_2stopia" width="117" height="49" /></p>
<p>其中S是该曲线周长。</p>
<p>如果要向平行线族之间投掷凸n边形（或者扩展到凸域，凸域就是过该图形任一点做切线，那么所有的点都在切线的同侧，也就是没有凹进去的部分），如果这个凸域的直径不大于平行线距离a的话，那么它和平行线族相交的概率为：</p>
<p><img class="aligncenter size-full wp-image-423" title="P_stopia" src="http://taiyun.cos.name/wp-content/uploads/2009/11/P_stopia.png" alt="P_stopia" width="90" height="52" /></p>
<p>其中，S为凸区域的周长。<br />
概率值刚好是交点个数期望的一半，这个也很直观，因为凸域和平行线的交点个数只有三种可能：</p>
<ol>
<li>1个交点：当凸域和平行线相切，或者顶点重合</li>
<li>2个交点：这种情况是最常见的</li>
<li>无穷多个交点：有一边重合的时候</li>
</ol>
<p>其中，第一种情况和第三种情况的几何概率为零，故概率值刚好是交点个数期望的一半(这里不太严谨，望大家指教)。把两根针并在一起，既可以构造一个闭区域，其与平行线相交的概率和交点个数都和上面理论一致。</p>
<p>如果投掷一般闭合区域的话，那么它和平行线族相交的概率依然为：</p>
<p><img class="aligncenter size-full wp-image-423" title="P_stopia" src="http://taiyun.cos.name/wp-content/uploads/2009/11/P_stopia.png" alt="P_stopia" width="90" height="52" /></p>
<p>不过，此时S为该闭区域所生成的最小凸区域的周长。</p>
<p>因为尽管它们的周长不一样，和平行线交点的期望不一样，但是它们和平行线是否有交点的概率是一样的。下图中的类半圆图形就是月牙图形生成的最小凸区域，它们显然和平行线是否相交完全等价。</p>
<p><a href="http://cos.name/wp-content/uploads/2009/11/semicircle2.gif" rel='nofollow'><img class="aligncenter size-full wp-image-1792" src="http://cos.name/wp-content/uploads/2009/11/semicircle2.gif" alt="" width="423" height="211" /></a></p>
<p>最后，要说的是直观思维的重要性，定理有千千万万，如果能用直观的形式将它们逐渐消化，那是最好不过的了，我在看书的时候经常能把一个定理啃下来，但是还是觉得对这个定理依然云里雾里的。对此，<a href="http://www.matrix67.com/blog/archives/2494" rel='nofollow'>matrix67</a>做了很精彩的评价：</p>
<blockquote><p>数学学习真正悲哀的就是，记住了某个神奇而伟大的定理，看懂了其最严密的推导过程，但却始终没能直观地去理解它。虽然严密的推导是必要的，直观理解往往是不准确的，但如果能悟出一个让定理一瞬间变得很显然的解释，这不但是一件很酷的事，而且对定理更透彻的理解和更熟练的运用也很有帮助。</p></blockquote>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2010/01/generalization-to-buffons-needle/" title="蒲丰投针问题的推广">蒲丰投针问题的推广</a> (0)</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> (4)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="" >djstat</a> : <a class="comment_content" href="http://cos.name/2009/11/a-brief-talk-on-buffon-throwing-needle-problems/#comment-1055" title="View the entire comment by djstat" >直觉的启发太重要。引用你的文章了呵，http://www.jrtj.org/showtopic-13...</a></li>
<li><a class="commentor" href="http://www.public.asu.edu/~shuang31/" >huang shuai</a> : <a class="comment_content" href="http://cos.name/2009/11/a-brief-talk-on-buffon-throwing-needle-problems/#comment-996" title="View the entire comment by huang shuai" >他估计是要写科幻小说一类的</a></li>
<li><a class="commentor" href="http://taiyun.cos.name/" >魏太云</a> : <a class="comment_content" href="http://cos.name/2009/11/a-brief-talk-on-buffon-throwing-needle-problems/#comment-972" title="View the entire comment by 魏太云" >matrix67的文章的确很好很新很有趣，惭愧中……</a></li>
<li><a class="commentor" href="http://taiyun.cos.name/" >魏太云</a> : <a class="comment_content" href="http://cos.name/2009/11/a-brief-talk-on-buffon-throwing-needle-problems/#comment-970" title="View the entire comment by 魏太云" >直觉、灵感真的很重要，我们看见的书上的东西那么完美，但是当时它们都是残缺的，都是数学家的一个灵感什么...</a></li>
<li><a class="commentor" href="http://blog.sina.com.cn/annihiland" >左辰</a> : <a class="comment_content" href="http://cos.name/2009/11/a-brief-talk-on-buffon-throwing-needle-problems/#comment-968" title="View the entire comment by 左辰" >的确很受启发。实际研究时候的灵感都来源于直觉，而technial proof只是一种辅助。</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2009/11/a-brief-talk-on-buffon-throwing-needle-problems/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>大规模系统内变量关系的研究以及可视化－１因果分析</title>
		<link>http://cos.name/2009/09/relationships-among-variables-in-large-scale-systems/</link>
		<comments>http://cos.name/2009/09/relationships-among-variables-in-large-scale-systems/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 00:19:10 +0000</pubDate>
		<dc:creator>黄帅</dc:creator>
				<category><![CDATA[推荐文章]]></category>
		<category><![CDATA[贝叶斯统计]]></category>
		<category><![CDATA[graphical model]]></category>
		<category><![CDATA[可视化]]></category>
		<category><![CDATA[因果分析]]></category>
		<category><![CDATA[大规模系统]]></category>
		<category><![CDATA[贝叶斯]]></category>

		<guid isPermaLink="false">http://cos.name/?p=1482</guid>
		<description><![CDATA[引言——变量关系分析的广泛意义
在统计分析中，有这样一类具有普遍意义的问题：在测得了（取样）一个变量系统的数据以后，如何从数据中发现并且验证这些变量之间的关系？了解变量之间的关系，无论是对于知识发掘(knowledge discovery)，还是拟合精度的提高，都是很有意义的．比如任何一类回归分析，便是要分析预测变量和响应变量之间的关系．如果我们能用一些方法做回归前的预分析(pre-analysis before regression)，比如，使用方差分析去分析各个预测因素之间的关系，是非常有必要的．为什么呢？一个很简单的原因是出于对复线性的考虑．众所周知，复线性是回归分析的大敌．如果大家还记得回归分析系数的协方差矩阵的话，想必也能记得如果预测因素之间的相关系数太大会导致回归方程系数非常不稳定(请参阅 method of multivariate data analysis by rencher)．又如结构方程模型，是要分析测量变量(measurement)和结构变量(construct)之间的关系．还有最近十分热门的图模型，便是赤裸裸的声称图模型是所有统计模型的一个大综合．
变量关系的终极表示－因果关系
图模型里面大名鼎鼎的，来自人工智能的贝叶斯网络－－相信很多人都有所耳闻．如下是名为alarm network的一个贝叶斯网络的经典之作，被公认为是贝叶斯网络的实用性的一个证明：

该网络是一个辅助医疗诊断系统．共涉及37个变量,46条边． 贝叶斯网络的一个显著特征是它所使用的箭头在很多情况下可以解读为＂因果关系＂－－当然，能否从面板数据中推演因果关系尚存在争议．但是目前我们仍然假设这种可能性．贝叶斯网络的理解很简单，并且已经有了从统计数据中训练一个贝叶斯网络的多种方法，因为流行程度达到了新一轮的高潮．但是，与它的流行伴随而来的是一个让人困扰的问题：贝叶斯网络的训练方法是在太慢(就我的经验，训练如上一个37个变量的网络大概需要3小时，6G 内存、4M 缓存条件下)．而且，算法本身经常陷入局部最优，而这些局部最优往往离真实模型相差甚远．特别是数据量不够的话，局部最优的点会很多，给算法本身的实用性提供了相当大的挑战．另外，对于一个贝叶斯网络的训练，需要大量的数据去支持．经典的多元统计理论认为，一般的多元模型参数与数据量的比值应当＞20．但是通常大家认为，这个比率对于被噎死网络可能还太保守．
之所以在这里谈到贝叶斯网络，是为接下来的较为简单的模型或者数据分析树立一个远大的理想．现在我们的目标已经明确，那就是，在人类所能理解的范畴内，我们最好是能将系统内各个变量的关系用贝叶斯网络所表示出来，其中的箭头代表因果关系，或者至少也要代表一个先后关系，这是我们作数据分析，总结结论的一个终极目标．但是，所谓理想常常是与现实有所出入，在统计学界亦是如此－－从哲学角度来定义因果的话，那么有一条是因果关系所必须满足的，那就是原因是不可能出现在结果之后的．那么，如果我们想知道两者的因果关系，就需要我们知道一个重要的信息－－时序．而很可惜，这个信息并不是总能得到．而且，因果分析还需要一个更为严格的条件是：如果你需要推演一个系统内变量的因果关系的话，你必须保证这个系统内所有的变量都已经被测量(请参阅computation, cauality, and discovery)．这个还仅仅是一个必要条件．这就是为什么Fisher他老人家终生都反对吸烟导致肺癌的的原因了．下图是关于肺癌的研究的一个很经典的贝叶斯网络：


社会上传言：Fisher老人家是喜好抽烟的．他看到这个统计结果以后，立马就提出了一个另外的解释：根据当时收集的样本，人们并不能排除是否存在一种基因，是这种基因导致了意中人既喜欢抽烟，又容易得肺癌．统计上来看这个问题的话，就是在抽烟和肺癌之间还存在一个隐藏变量－Fisher所说的基因，导致了这两者之间是有关系的．而因为我们没有观测到这个变量，所以我们的最终模型里出现了一个从抽烟到肺癌的箭头．
Fisher所说并非狡辩．这也是他一直所声称的，观察研究（observational study）并不能获得因果关系的信息，而倘若研究目的是因果关系的话，那只有实验设计可能还有点戏．本文支持这一观点．但是本文也需要指出，从观察研究里推演因果关系是有可能的－－感兴趣的可以点击Pear的主页，Pearl乃是因果推断的一代宗师．具体的指导思想是－－我们可以从观测数据中推导各个变量之间的相关关系，再假设这些相关关系都是正确的，根据图论的一些理论，并且结合奥柯姆原理(occam&#8217;s principle，简单模型优先)我们就可以推导出部分因果关系．
贝叶斯网络的训练
如上一段所说，贝叶斯网络是符合人类逻辑思维的一种图模型，也是人类思维里表征知识的一种形式，因此广为人民群众所喜闻乐见．接下来的一个问题便是，如何能从数据中得到一个贝叶斯网络？
用人工智能里面的话来说，一个完整的贝叶斯网络包含两个元素，１）结构，也就是那些带有箭头的边；２）系数，也就是每条边的系数．如果所有的变量都是连续型，那我们可以假设它是一个多元高斯分布，于是每个系数就相当于解释变量和被解释变量之间的回归系数．从这里我们可以粗略的得到结论，那就是：倘若知道了结构，得到系数不难．所以贝耶斯网络的训练分两步走，先训练结构，在训练系数．但是问题是如何得到结构？有兴趣的朋友可以google如下关键词&#8221;PC Algorithm&#8221;, &#8220;IC Algorithm&#8221;,&#8221;K2 Algorithm&#8221; 以及 &#8220;learning of gaussian network by heckmen&#8221;.
另外，从实用角度出发，推荐两个工具箱．前者是贝叶斯网络以及隐马尔科夫模型的一个经典的MATLAB工具箱：Bayes Net Toolbox for Matlab.
另外还发现一个Ｒ的包：bnlearn，但我目前还没有用过．
结论
此文仅仅作为科普之用，欢迎拍砖．如果你感到无法满足，你可以点击这里，作者Kevin Murphy是图模型方面的一个牛人．如果你仍然不能满足，那么我推荐你google一下 &#8220;micheal jordan&#8221;(Kevin的老板)，可以发现更多与他一样牛的他的师兄弟师姐妹，有做马尔科夫网络, 隐马尔科夫模型, 动态贝叶斯网络， 独立成分分析（independent component analysis）, 状态空间模型等等，这些都属于图模型，并且都很有意思．
另外，正如文中所说，＂之所以在这里谈到贝叶斯网络，是为接下来的较为简单的模型或者数据分析树立一个远大的理想＂．可能在接下来的后续文章我会与大家讨论如下这种更加实际的情况：如果我们无法做因果分析，那该怎么办？我们仍然需要知道变量之间的关系，无论是为了知识发掘，还是寻求一个好的预测模型．这是一个更加广泛的话题，而且某种程度上可以作为贝叶斯网络的一种替代品．当然，有人可能会跳出来反驳说，并不是所有的统计分析的最终目标是是为了画一个贝叶斯网络.　总而言之，接下来的话题将与此不同．
相关文章不同版本的散点图矩阵 (17)相关矩阵的可视化及其新方法探究 (33)调和曲线图和轮廓图的比较 (11)概率论的起源、发展、应用 (4)最新评论serein : 黄师兄，我现在在做关于隐马尔科夫模型用于疾病暴发预测方面，也就是根据发病数来预测相关疾病的暴发与否，...
盟 : amazing work
盟 : all [...]]]></description>
			<content:encoded><![CDATA[<h2><strong>引言——变量关系分析的广泛意义</strong></h2>
<p>在统计分析中，有这样一类具有普遍意义的问题：在测得了（取样）一个变量系统的数据以后，如何从数据中发现并且验证这些变量之间的关系？了解变量之间的关系，无论是对于知识发掘(knowledge discovery)，还是拟合精度的提高，都是很有意义的．比如任何一类回归分析，便是要分析预测变量和响应变量之间的关系．如果我们能用一些方法做回归前的预分析(pre-analysis before regression)，比如，使用方差分析去分析各个预测因素之间的关系，是非常有必要的．为什么呢？一个很简单的原因是出于对复线性的考虑．众所周知，复线性是回归分析的大敌．如果大家还记得回归分析系数的协方差矩阵的话，想必也能记得如果预测因素之间的相关系数太大会导致回归方程系数非常不稳定(请参阅 method of multivariate data analysis by rencher)．又如结构方程模型，是要分析测量变量(measurement)和结构变量(construct)之间的关系．还有最近十分热门的图模型，便是赤裸裸的声称图模型是所有统计模型的一个大综合．<span id="more-1482"></span></p>
<h2><strong>变量关系的终极表示－因果关系</strong></h2>
<p>图模型里面大名鼎鼎的，来自人工智能的贝叶斯网络－－相信很多人都有所耳闻．如下是名为alarm network的一个贝叶斯网络的经典之作，被公认为是贝叶斯网络的实用性的一个证明：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.bnlearn.com/documentation/networks/alarm.png" alt="" width="480" height="480" /></p>
<p style="text-align: left;">该网络是一个辅助医疗诊断系统．共涉及37个变量,46条边． 贝叶斯网络的一个显著特征是它所使用的箭头在很多情况下可以解读为＂因果关系＂－－当<strong>然，能否从面板数据中推演因果关系尚存在争议</strong>．但是目前我们仍然假设这种可能性．贝叶斯网络的理解很简单，并且已经有了从统计数据中训练一个贝叶斯网络的多种方法，因为流行程度达到了新一轮的高潮．但是，与它的流行伴随而来的是一个让人困扰的问题：贝叶斯网络的训练方法是在太慢(就我的经验，训练如上一个37个变量的网络大概需要3小时，6G 内存、4M 缓存条件下)．而且，算法本身经常陷入局部最优，而这些局部最优往往离真实模型相差甚远．特别是数据量不够的话，局部最优的点会很多，给算法本身的实用性提供了相当大的挑战．另外，对于一个贝叶斯网络的训练，需要大量的数据去支持．经典的多元统计理论认为，一般的多元模型参数与数据量的比值应当＞20．但是通常大家认为，这个比率对于被噎死网络可能还太保守．</p>
<p>之所以在这里谈到贝叶斯网络，是为接下来的较为简单的模型或者数据分析树立一个远大的理想．现在我们的目标已经明确，那就是，在人类所能理解的范畴内，我们最好是能将系统内各个变量的关系用贝叶斯网络所表示出来，其中的箭头代表因果关系，或者至少也要代表一个先后关系，这是我们作数据分析，总结结论的一个终极目标．但是，所谓理想常常是与现实有所出入，在统计学界亦是如此－－从哲学角度来定义因果的话，那么有一条是因果关系所必须满足的，那就是原因是不可能出现在结果之后的．那么，如果我们想知道两者的因果关系，就需要我们知道一个重要的信息－－时序．而很可惜，这个信息并不是总能得到．而且，因果分析还需要一个更为严格的条件是：如果你需要推演一个系统内变量的因果关系的话，你必须保证这个系统内所有的变量都已经被测量(请参阅computation, cauality, and discovery)．这个还仅仅是一个必要条件．这就是为什么Fisher他老人家终生都反对吸烟导致肺癌的的原因了．下图是关于肺癌的研究的一个很经典的贝叶斯网络：</p>
<p style="text-align: center;"><img class="size-full wp-image-1487 aligncenter" src="http://cos.name/wp-content/uploads/2009/09/smoker_bn.jpg" alt="smoker_bn" width="560" height="420" /></p>
<p style="text-align: center;">
<p>社会上传言：Fisher老人家是喜好抽烟的．他看到这个统计结果以后，立马就提出了一个另外的解释：根据当时收集的样本，人们并不能排除是否存在一种基因，是这种基因导致了意中人既喜欢抽烟，又容易得肺癌．统计上来看这个问题的话，就是在抽烟和肺癌之间还存在一个隐藏变量－Fisher所说的基因，导致了这两者之间是有关系的．而因为我们没有观测到这个变量，所以我们的最终模型里出现了一个从抽烟到肺癌的箭头．</p>
<p>Fisher所说并非狡辩．这也是他一直所声称的，观察研究（observational study）并不能获得因果关系的信息，而倘若研究目的是因果关系的话，那只有实验设计可能还有点戏．本文支持这一观点．但是本文也需要指出，从观察研究里推演因果关系是有可能的－－感兴趣的可以点击<a href="http://bayes.cs.ucla.edu/home.htm" target="_blank" rel='nofollow'>Pear的主页</a>，Pearl乃是因果推断的一代宗师．具体的指导思想是－－我们可以从观测数据中推导各个变量之间的相关关系，再假设这些相关关系都是正确的，根据图论的一些理论，并且结合奥柯姆原理(occam&#8217;s principle，简单模型优先)我们就可以推导出部分因果关系．</p>
<h2><strong>贝叶斯网络的训练</strong></h2>
<p>如上一段所说，贝叶斯网络是符合人类逻辑思维的一种图模型，也是人类思维里表征知识的一种形式，因此广为人民群众所喜闻乐见．接下来的一个问题便是，如何能从数据中得到一个贝叶斯网络？</p>
<p>用人工智能里面的话来说，一个完整的贝叶斯网络包含两个元素，１）结构，也就是那些带有箭头的边；２）系数，也就是每条边的系数．如果所有的变量都是连续型，那我们可以假设它是一个多元高斯分布，于是每个系数就相当于解释变量和被解释变量之间的回归系数．从这里我们可以粗略的得到结论，那就是：倘若知道了结构，得到系数不难．所以贝耶斯网络的训练分两步走，先训练结构，在训练系数．但是问题是如何得到结构？有兴趣的朋友可以google如下关键词&#8221;PC Algorithm&#8221;, &#8220;IC Algorithm&#8221;,&#8221;K2 Algorithm&#8221; 以及 &#8220;learning of gaussian network by heckmen&#8221;.</p>
<p>另外，从实用角度出发，推荐两个工具箱．前者是贝叶斯网络以及隐马尔科夫模型的一个经典的MATLAB工具箱：<a href="http://people.cs.ubc.ca/~murphyk/Software/BNT/bnt.html" target="_blank" rel='nofollow'>Bayes Net Toolbox for Matlab</a>.</p>
<p>另外还发现一个Ｒ的包：<a href="http://www.bnlearn.com/documentation/" target="_blank" rel='nofollow'>bnlearn</a>，但我目前还没有用过．</p>
<h2><strong>结论</strong></h2>
<p>此文仅仅作为科普之用，欢迎拍砖．如果你感到无法满足，你可以点击<a href="http://people.cs.ubc.ca/~murphyk/Bayes/bnintro.html" target="_blank" rel='nofollow'>这里</a>，作者Kevin Murphy是图模型方面的一个牛人．如果你仍然不能满足，那么我推荐你google一下 &#8220;micheal jordan&#8221;(Kevin的老板)，可以发现更多与他一样牛的他的师兄弟师姐妹，有做马尔科夫网络, 隐马尔科夫模型, 动态贝叶斯网络， 独立成分分析（independent component analysis）, 状态空间模型等等，这些都属于图模型，并且都很有意思．</p>
<p>另外，正如文中所说，＂之所以在这里谈到贝叶斯网络，是为接下来的较为简单的模型或者数据分析树立一个远大的理想＂．可能在接下来的后续文章我会与大家讨论如下这种更加实际的情况：如果我们无法做因果分析，那该怎么办？我们仍然需要知道变量之间的关系，无论是为了知识发掘，还是寻求一个好的预测模型．这是一个更加广泛的话题，而且某种程度上可以作为贝叶斯网络的一种替代品．当然，有人可能会跳出来反驳说，并不是所有的统计分析的最终目标是是为了画一个贝叶斯网络.　总而言之，接下来的话题将与此不同．</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><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> (33)</li><li><a href="http://cos.name/2009/03/parallel-coordinates-and-andrews-curve/" title="调和曲线图和轮廓图的比较">调和曲线图和轮廓图的比较</a> (11)</li><li><a href="http://cos.name/2008/11/probability-theory-origin-development-application/" title="概率论的起源、发展、应用">概率论的起源、发展、应用</a> (4)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="" >serein</a> : <a class="comment_content" href="http://cos.name/2009/09/relationships-among-variables-in-large-scale-systems/#comment-1237" title="View the entire comment by serein" >黄师兄，我现在在做关于隐马尔科夫模型用于疾病暴发预测方面，也就是根据发病数来预测相关疾病的暴发与否，...</a></li>
<li><a class="commentor" href="" >盟</a> : <a class="comment_content" href="http://cos.name/2009/09/relationships-among-variables-in-large-scale-systems/#comment-1218" title="View the entire comment by 盟" >amazing work</a></li>
<li><a class="commentor" href="" >盟</a> : <a class="comment_content" href="http://cos.name/2009/09/relationships-among-variables-in-large-scale-systems/#comment-1217" title="View the entire comment by 盟" >all of these words, your fantastic work, let me th...</a></li>
<li><a class="commentor" href="" >huang shuai</a> : <a class="comment_content" href="http://cos.name/2009/09/relationships-among-variables-in-large-scale-systems/#comment-1187" title="View the entire comment by huang shuai" >很奇怪为啥回复在这个帖子下...
对于第二个问题, 这其实是一个选取哪个估计量(体重/身高 OR ...</a></li>
<li><a class="commentor" href="" >Qian Minzhu</a> : <a class="comment_content" href="http://cos.name/2009/09/relationships-among-variables-in-large-scale-systems/#comment-1186" title="View the entire comment by Qian Minzhu" >请教各位贤达：
为了考察人的胖瘦程度，设计指标时首先绝不可回避的是体重，又因为大个子有胖也有瘦，小...</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2009/09/relationships-among-variables-in-large-scale-systems/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>用GERT方法求解两个抛硬币问题</title>
		<link>http://cos.name/2009/09/introduction-and-application-of-gert/</link>
		<comments>http://cos.name/2009/09/introduction-and-application-of-gert/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 01:44:05 +0000</pubDate>
		<dc:creator>刘飞燕</dc:creator>
				<category><![CDATA[推荐文章]]></category>
		<category><![CDATA[概率论与数理统计]]></category>
		<category><![CDATA[GERT]]></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=1435</guid>
		<description><![CDATA[先较为详细地介绍GERT方法，然后使用GERT方法求解几个抛硬币问题]]></description>
			<content:encoded><![CDATA[<p>问题：一枚均匀的硬币，一直抛直至出现HTT（H表示正面，T表示背面），期望要抛多少次？一直抛直至出现HTH（即正反正），期望要抛多少次？假定出现H面的概率为<em>p</em>，出现T面的概率为<em>q</em>，且<em>p</em>=<em>q</em>=1/2</p>
<p>本文使用GERT方法（又叫图解评审技术）来求解这两个问题，即先把定性描述的抛硬币问题转换为随机网络系统，再利用流线图和矩母函数中的一些理论来求解系统，并最终得到上述问题的答案。通过GERT方法不仅可以非常有效地解决类似的期望抛硬币次数问题，而且给定任何一个抛硬币次数，均可以直接计算出该次数下出现HTT或HTH等情形的概率。</p>
<p>文中第一部分详细介绍了GERT方法，可作为第二部分的参考内容；第二部分是利用GERT方法求解上述的两个抛硬币问题。由于文中图和公式较多，编辑比较麻烦，所以具体的文章见下面的链接。</p>
<p>文章下载地址：<a href="http://cos.name/wp-content/uploads/2009/09/application-of-gert-in-coin-problems.pdf" rel='nofollow'>用GERT方法解决两个抛硬币问题</a></p>
<p>论坛帖子地址：<a href="http://cos.name/bbs/read.php?tid=16360" rel='nofollow'>http://cos.name/bbs/read.php?tid=16360</a></p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2010/01/generalization-to-buffons-needle/" title="蒲丰投针问题的推广">蒲丰投针问题的推广</a> (0)</li><li><a href="http://cos.name/2009/11/a-brief-talk-on-buffon-throwing-needle-problems/" title="浅谈Buffon投针问题及其推广">浅谈Buffon投针问题及其推广</a> (9)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="http://www.loyhome.cn" >Cloudly</a> : <a class="comment_content" href="http://cos.name/2009/09/introduction-and-application-of-gert/#comment-1174" title="View the entire comment by Cloudly" >没想到马氏链可以这么巧妙的用！佩服佩服！看来学东西要越学越活！</a></li>
<li><a class="commentor" href="" >邱怡轩</a> : <a class="comment_content" href="http://cos.name/2009/09/introduction-and-application-of-gert/#comment-1173" title="View the entire comment by 邱怡轩" >非常感谢！之前一直隐约觉得跟马氏链有关，可是就是不知道怎么列式求解，现在终于明白了！</a></li>
<li><a class="commentor" href="" >刘飞燕</a> : <a class="comment_content" href="http://cos.name/2009/09/introduction-and-application-of-gert/#comment-1172" 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/09/introduction-and-application-of-gert/#comment-1171" title="View the entire comment by 谢益辉" >看到你这解法，我在屋里忍不住大拍桌子，我K，居然有这么简练的解法！！没话说了，没话说了……</a></li>
<li><a class="commentor" href="http://www.myevolution.cn" >邵逸忱</a> : <a class="comment_content" href="http://cos.name/2009/09/introduction-and-application-of-gert/#comment-1170" title="View the entire comment by 邵逸忱" >这个问题也可以用马尔科夫链的思路来做，因为每一步扔下去是否到达HTT仅和前两步有关，所以已知前两步状...</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2009/09/introduction-and-application-of-gert/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>分层线性模型软件HLM6.0操作简介</title>
		<link>http://cos.name/2009/09/guide-to-hlm/</link>
		<comments>http://cos.name/2009/09/guide-to-hlm/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 02:28:45 +0000</pubDate>
		<dc:creator>陈堰平</dc:creator>
				<category><![CDATA[统计软件]]></category>
		<category><![CDATA[HLM]]></category>
		<category><![CDATA[分层线性模型]]></category>

		<guid isPermaLink="false">http://cos.name/?p=610</guid>
		<description><![CDATA[分层线性模型 (Hierarchical linear Model，简称 HLM，又称多层线性模型，Multilevel Linear Model)，HLM6.0 是分层线性模型软件，包含线性和非线性部分，可以读取大部份统计软件的数据如 SPSS, SAS, SYSTAT及STATA等等。HLM常用于社会科学和行为科学，因为它常有嵌套结构(Nested Structure)的数据，因此需用次模型(Sub-Model)或分层线性模型(Hierarchical Model)，HLM就是设计来专门解决此类问题的，HLM提供的模型包括2-level models、3-level models、Hierarchical Generalized Linear Models (HGLM)和Hierarchical Multivariate Linear Models (HMLM)等。
下面是中国人民大学统计学院分层线性模型的课件，主要内容为HLM6.0的操作
下载地址：http://cos.name/wp-content/uploads/2009/09/intro2HLM6.zip
相关文章统计学专业应该使用什么样的统计软件（写给在统计学院学习的学弟学妹之四） (28)最新评论谢益辉 : 非常非常感谢你的解释，有了这样一个大致概念之后再看书就好多了，对我的学习来说，很多统计模型都是因为没...
huang shuai : 恩。。
发现我答非所问了　赫赫
你问的问题透露出你的目的可能是要去研究几个变量之间的关系，或者一...
谢益辉 : 谢谢你的文献，我找到这本书了，回头读一读：）
谢益辉 : ``Rare cases in certain units'' sounds like a reas...
谢益辉 : 这个例子只是说明了一个控制变量的问题，我以前也写过类似的例子：http://yihui.name/c...
]]></description>
			<content:encoded><![CDATA[<p>分层线性模型 (Hierarchical linear Model，简称 HLM，又称多层线性模型，Multilevel Linear Model)，HLM6.0 是分层线性模型软件，包含线性和非线性部分，可以读取大部份统计软件的数据如 SPSS, SAS, SYSTAT及STATA等等。HLM常用于社会科学和行为科学，因为它常有嵌套结构(Nested Structure)的数据，因此需用次模型(Sub-Model)或分层线性模型(Hierarchical Model)，HLM就是设计来专门解决此类问题的，HLM提供的模型包括2-level models、3-level models、Hierarchical Generalized Linear Models (HGLM)和Hierarchical Multivariate Linear Models (HMLM)等。</p>
<p>下面是中国人民大学统计学院分层线性模型的课件，主要内容为HLM6.0的操作</p>
<p>下载地址：http://cos.name/wp-content/uploads/2009/09/intro2HLM6.zip</p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2008/11/which-statistical-software-should-we-use/" title="统计学专业应该使用什么样的统计软件（写给在统计学院学习的学弟学妹之四）">统计学专业应该使用什么样的统计软件（写给在统计学院学习的学弟学妹之四）</a> (28)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="http://www.yihui.name" >谢益辉</a> : <a class="comment_content" href="http://cos.name/2009/09/guide-to-hlm/#comment-839" title="View the entire comment by 谢益辉" >非常非常感谢你的解释，有了这样一个大致概念之后再看书就好多了，对我的学习来说，很多统计模型都是因为没...</a></li>
<li><a class="commentor" href="http://www.public.asu.edu/~shuang31/" >huang shuai</a> : <a class="comment_content" href="http://cos.name/2009/09/guide-to-hlm/#comment-837" title="View the entire comment by huang shuai" >恩。。
发现我答非所问了　赫赫
你问的问题透露出你的目的可能是要去研究几个变量之间的关系，或者一...</a></li>
<li><a class="commentor" href="http://www.yihui.name" >谢益辉</a> : <a class="comment_content" href="http://cos.name/2009/09/guide-to-hlm/#comment-836" title="View the entire comment by 谢益辉" >谢谢你的文献，我找到这本书了，回头读一读：）</a></li>
<li><a class="commentor" href="http://www.yihui.name" >谢益辉</a> : <a class="comment_content" href="http://cos.name/2009/09/guide-to-hlm/#comment-835" title="View the entire comment by 谢益辉" >``Rare cases in certain units'' sounds like a reas...</a></li>
<li><a class="commentor" href="http://www.yihui.name" >谢益辉</a> : <a class="comment_content" href="http://cos.name/2009/09/guide-to-hlm/#comment-834" title="View the entire comment by 谢益辉" >这个例子只是说明了一个控制变量的问题，我以前也写过类似的例子：http://yihui.name/c...</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2009/09/guide-to-hlm/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>我的求学之路：经济学、软件工程、SAS</title>
		<link>http://cos.name/2009/08/econ-software-sas/</link>
		<comments>http://cos.name/2009/08/econ-software-sas/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 02:36:00 +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[COS]]></category>
		<category><![CDATA[SAS]]></category>
		<category><![CDATA[SAS程序员]]></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/2009/08/econ-software-sas/</guid>
		<description><![CDATA[这个青年的经历，只代表他个人，没有任何群体的意义。
我想写下一段自白,这自白既是我个人的,也具有普遍意义,因为一个人经历过的事情所有的人都可以经历。
/*跟武汉博文视点合作，召集些身边的朋友，2009应届生，计算机背景，在毕业之前，讲讲自己求学、实习、找工作等的经历与感悟，文章将由电子工业出版社结集出版，在今天秋季学期开学之前出来。我是主编，也是作者之一，刚好经历跟大伙有重叠：经济学、软件工程、SAS、统计学、数据挖掘，文章贴出来，大伙多拍砖头。文中我提到COS，COS让我长见识，又结识不少好朋友。*/
想启蒙至今，我的学习重心从文史哲转到经济学，最后以软件工程收场；在行业方面，在一家软件公司实习了一年多，找工作以药厂收场——用一个朋友的话讲，“背景是复杂得一塌糊涂”。虽然我常以“学一行，爱一行；做一行，爱一行”自勉，有时也不免回首，想想以前经历过的所有分岔口，玩味些那些没有走过的路，无论当时我多么坚决或者犹豫，一条路被选中，然后一路曲折至今。很多事情，很多选择，可能只有以后才能适合评说，现在我选择把它们记下来，在这么一个时点，我就要毕业，我有一个安身立命的去处，我有规划，但我不知道以后生活会给我什么样的分岔口，就跟我以前遭遇的一样。
——————我的人生轨迹—————

项羽，“学书不成，去；学剑，又不成”。

                      —-《史记·项羽本纪

1.高中：文科生，喜文史
              &#124;
              &#124;高考
     [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>这个青年的经历，只代表他个人，没有任何群体的意义。</p>
<p>我想写下一段自白,这自白既是我个人的,也具有普遍意义,因为一个人经历过的事情所有的人都可以经历。</p></blockquote>
<p>/*跟武汉博文视点合作，召集些身边的朋友，2009应届生，计算机背景，在毕业之前，讲讲自己求学、实习、找工作等的经历与感悟，文章将由电子工业出版社结集出版，在今天秋季学期开学之前出来。我是主编，也是作者之一，刚好经历跟大伙有重叠：经济学、软件工程、SAS、统计学、数据挖掘，文章贴出来，大伙多拍砖头。文中我提到COS，COS让我长见识，又结识不少好朋友。*/</p>
<p>想启蒙至今，我的学习重心从文史哲转到经济学，最后以软件工程收场；在行业方面，在一家软件公司实习了一年多，找工作以药厂收场——用一个朋友的话讲，“背景是复杂得一塌糊涂”。虽然我常以“学一行，爱一行；做一行，爱一行”自勉，有时也不免回首，想想以前经历过的所有分岔口，玩味些那些没有走过的路，无论当时我多么坚决或者犹豫，一条路被选中，然后一路曲折至今。很多事情，很多选择，可能只有以后才能适合评说，现在我选择把它们记下来，在这么一个时点，我就要毕业，我有一个安身立命的去处，我有规划，但我不知道以后生活会给我什么样的分岔口，就跟我以前遭遇的一样。</p>
<pre>——————我的人生轨迹—————

项羽，“学书不成，去；学剑，又不成”。

                      —-《史记·项羽本纪

1.高中：文科生，喜文史
              |
              |高考
            /    \
           /      \
学文史不成，去     2.经济学，北京工商大学
                   |考研
                   / \
                 /   \
学经济学不成，去     3.软件工程（金融信息工程），北京大学
                           | 知识转型
                          / \
                         /   \
学C/C++、Java不成，去        攻SAS与信用评分、数据挖掘
                                     |
                                     |实习
                                   / \
                                 /    \
                                      4.SAS中国研发中心
                                           |工作
                                          / \
                                       /       \
                                    /             \
                                          5. Sanofi Pasteur，SAS程序员
——————我的人生轨迹—————</pre>
<p><span id="more-1416"></span></p>
<p><strong>小学</strong></p>
<p>我是在村小学、乡镇初中和县城高中完成大学之前的学业。家位于江西东北部，父母都是农民，小学文化（未毕业），对我的教育，强调的有几条，与人和气，不要打架，然后就是好好念书。在我们的社会，正如一些学者所说，“农民”更多是一个身份的指称，而不仅仅是一份职业。我愿意提起这个，因为，一旦开始思考，就会觉得没有什么会比它更重要。以前一个在学校负责“北大调查”的朋友跟我讲，在北大的所有在校生中，农村背景的，大概占10%，——大伙可以根据自己的经验，估计一下农村背景的学生在所有大学生中的比例。尽管被有意无意忽略，这却是中国的最大现实。</p>
<p>在农村的局限显而易见，所有的父母都期望他们的子女能够摆脱农民身份。在高三之前，我只做（坐）过一次火车，上大学才开始认真说普通话——或许还可以提一句，在大二，我开始穿上我人生中的第一条牛仔裤。农村有很多淳朴的东西，也有很多粗俗的东西，现在想来，跟童年的伙伴相比，我可能更敏感，更喜欢反观自身——我阅读，大量阅读。我父亲只有小学三年级的文化，但识字很多，喜欢读各种演义和建国历史（包括野史）。记得小时候在家里翻箱倒柜，也能翻出几本小说来，有一本是现在仍让我头大的《红楼梦》，后来就找不到了，可能让我给撕了折纸玩了吧。我读的第一本书，现在仍然印象深刻（好像自己大学以前读的每一本书，印象都比较深刻）。是小学二年级，一个雨天，在家里翻出一本破烂的《说岳全传》，前后都有大量缺页，我只能从朱仙镇读到风波亭，中间也偶有一两页找不到——真是悬念重重啊。虽然有大量生字，也顾不上查《新华字典》，窝在家里，读得是津津有味。来回翻几遍，记下来每一位武将趁手的兵刃，真是非常有成就感（这就是我最初的知识储备）。</p>
<p>自从有了这个体验，就跟“曾经沧海难为水”一样，就不愿意过没有书的日子了。家里没什么藏书，就向语文老师借，在村里淘——伙伴家里还是会有些印刷品的。那时，能够读到的书，以小说特别是通俗演义和武侠小说为主，我为数不多的几本言情，大概也是那时读的（《菟丝草》？）。《格林童话》之类说适合少年看的读物，我是在高中才补的。当时应付学业还比较轻松，所以没有什么来自父母和老师的压力，当然，武侠小说还是偷偷读的。我第一本武侠小说，大概是沧浪客的《一剑平江湖》，上册。高中时老师有一事比较头疼，一些喜欢读书的同学迷上了武侠小说，导致学业下降（那时网络不普及，让学生沉迷的大概只有游戏机和武侠小说）。那时我已经不读武侠，老师就喜欢拿我做例子，说我好读书而不读武侠云云。</p>
<p>一上来就是刀光剑影的阅读，现在真不忍心评价它对我的成长是好是坏。无论怎么样，它让我养成了读书的习惯，并且每到一个地方，都能找到有书的地方。那时候，是带汉字的纸条也爱读啊。</p>
<p><strong>初中</strong></p>
<p>初中比较幸运。在我那乡镇中学，居然有一个不对学生开放的图书室，管理员正好是我的语文老师，于是就有自由出入图书室的特权了。这时读的书，就比较文艺一些，以散文与诗歌为主，语言比较精致，就常常是一本书一本书抄下来。那阵子开始接触鲁迅、林语堂、胡适、梁实秋、梁遇春、哈代、毛姆等作家，还包括一些当时比较知名，现在可能不怎么闻名的，比如刘定中、徐刚、乔麦等等，乔麦是做报告文学的，徐刚写所谓九行诗，刘定中有一部散文诗集。</p>
<p>有过农村中学读书经历的朋友可能都有共识，那阵子的中学真是比较乱，打架的事比较多。那时我忙于抄写《朦胧诗集》之类的东西，心里有许多向往的东西，其他事就顾及不上了。</p>
<p>整个初中，就买过一本书，托在县城读书的朋友，带回一本《水浒传》，岳麓书社的普及本，十六块钱。</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>高中</strong></p>
<p>书一路读过来，到高中就有偏科的倾向，后来索性就转读文科。高中是自己读书的黄金时期，现在都觉得是把所有够得着的地方都淘遍了：校图书馆、朋友和亲戚家的私人藏书、县城所有的书店所有的书摊所有的报刊亭，还去过市里的几家书店，来过北京一次（第一次坐火车那次），在海淀图书城的中国书店买了几本哲学历史书回来。以前写过一系列博文，甚至列出了自己在高中读过的近百本书和杂志的名字，包括每本书的来源，是来自书店、图书馆还是借自个人（<em>具体见<a href="http://tinyurl.com/cfl9cw" rel='nofollow'>这里</a></em>）。那时住校，每个月可以向家里要些生活费。经常省下几顿，留下钱来买些书，但也还在抄书，以古文为主，《论语》、《古文观止》之类。高中毕业时，手头居然也有一柜子的藏书。</p>
<p>大学我念的是经济学，其实也不突兀。美国计量经济学家赫克曼和麦克法登得诺贝尔奖那年，学校旁边的邮政报刊亭不知道怎么就出现了一本《读书》杂志（的确只是一本），刚好有对他们的介绍。这新的领域，对我也是有很大的吸引力。以后读书，就觉得旁边也居然有好些经济学相关的材料，除了《读书》杂志经常刊登些，《青年文摘》、《读者》也还会有些类似《爱情经济学》的经济学随笔。</p>
<p>不过总的来说，高中我对自己的期望，还是人文方面的作家。他们的作品和生平，给我非常多的激励。</p>
<p><strong>本科，经济学，北京工商大学</strong></p>
<p>本科我在北京工商大学念经济学。第一志愿是北大中文系，算是我人生第一个遗憾吧。大一我还准备过一段时间，要考北大哲学系的研究生。现在还偶尔胡思乱想，我的气质和兴趣，在文科方面，说不准会有更大的发展呢。高中抄过一首美国诗人弗罗斯特的《未走过的路》，现在读来，仍然唏嘘不已：</p>
<blockquote><p>深黄的林子里有两条岔开的路，<br />
很遗憾，我，一个过路人，<br />
没法同时踏上两条征途，<br />
伫立好久，我向一条路远远望去，<br />
直到它打弯，视线被灌木丛挡住。</p>
<p>于是我选了另一条，不比那条差，<br />
也许我还能说出更好的理由，<br />
因为它绿草茸茸，等待人去践踏——<br />
其实讲到留下了来往的足迹，<br />
两条路，说不上差别有多大。</p>
<p>那天早晨，有两条路，相差无几，<br />
都埋在还没被踩过的落叶底下。<br />
啊，我把那第一条路留给另一天！<br />
可我知道，一条路又接上另一条，<br />
将来能否重回旧地，这就难言。</p>
<p>隔了多少岁月，流逝了多少时光，<br />
我将叹一口气，提起当年的旧事：<br />
林子里有两条路，朝着两个方向，<br />
而我——我走上一条更少人迹的路，<br />
于是带来完全不同的一番景象。</p></blockquote>
<p>大一时几乎以每天一本书的速度，想掏空学校图书馆人文社科类的好书——那时评判好书的标准也足够简单，一是成书久远，二就是来自大社。不过到大二，对念经济学的兴趣，就比较坚定了。那时开始到北大中国经济研究中心(CCER)听课，CCER当时是中国所有经济学学子向往的地方。现我在北大读研究生，说起来，在北大校园停留的时间，还真没有本科时多。我学校在航天桥，到北大有近二十里的路，大二和大三两年，几乎每周都骑车过去，一周大概两三天。</p>
<p>大学时有印象的，是在位于白石桥的国家图书馆停留过不少时间，很多时候是跟女朋友一起，她在人大念中文。学校图书馆藏书比较少，里面几乎每一本社科类新书的书皮我都翻过。泡国图，我的成就是，把它的两个阅览室——一楼的社科室和六楼的文学室——所有的书皮也都摸过一遍。现在在书店，我也是喜欢在书架中穿梭，手指在书脊上一本本划过，感兴趣的就抽出来翻翻。——我现在对北大图书馆的挖掘，相比功夫下得不足。</p>
<p>大学时自己比较浮躁。我知道自己所处的环境不够好，也积极向最好的地方靠拢，比如坚持去CCER听课。但心里很多东西，都割舍不下，像对文史哲等的喜好，贪多务得，细大不捐，花的时间不会比经济学少。我爱好很广泛，但感兴趣的，可能并不是自己所擅长的——这个我到后来才慢慢体会到，不过已经付出了很多的时间和精力。考研我就一心冲着北大中国经济研究中心(CCER)，两次都被拒掉。这对我触动很大，很长一段时间我都在想，自己到底适合做什么。</p>
<p>后来我又申请北大的深圳商学院以及软件与微电子学院。继续读商学院，可以延续我在经济学方面的训练，可是这方面，我已经有所怀疑。读软院，会是一个全新的开始，在技术方面会有所提升，而且其中的金融信息工程专业，还可以与我以前的教育背景交叉，但风险是，我一个文科生，在技术领域，到底能够走多远，这个选择会不会只是一个折腾？</p>
<p>这两个选择，几乎没有可比性，不可能精确地估计出它们的利弊。有时我想，（像这样比较困难的）决策不是“全面地”做出来的，而（可能）是“偏颇地”做出来的。综合考虑各种因素，你无法得出一个让自己信服的方案：考虑这个因素，我会继续读经济学，但考虑到另一个因素，读软件工程可能就是很好的选择。商学院还是软件学院？把它们各自的利弊摆在一起，我真是不好抉择。最后选择软院，真的是“偏颇”地做出选择的，不是因为我考虑到软院对对我更好，而是因为，我就一个劲想着我读软院对我知识体系带来的提升，我在技术领域可能的突破——这些也让我激动不已。商学院也很好，不过就是另一番景象了——我心里又在默念弗罗斯特的《未走过的路》。我偶尔想那些为走过的路，不是因为我后悔现在走的路，而是因为，这人生的种种可能，玩味起来，感触就深。</p>
<p>我本科的知识积累，对研究生的课程，有用的是，数学和统计学，还有金融学的基础知识。可能最重要的是，我对很多科目都感兴趣，虽然没接触过，但我不排斥计算机的相关课程。</p>
<p><strong>研究生，软件工程，北京大学</strong></p>
<p>2006年9月开始了我的软院求学历程。第一个挑战是：我该如何在软院生存下去？我本科背景，计算机的底子只是会操作计算机。第一堂Java课上，如何设置和为什么要设置环境变量就让我困扰不已。我人生第一个&#8221;Hello World&#8221;，也是手慌脚乱好几次才出来的。</p>
<p>我一边在开始学Java和C++，但心里也清楚，在这块，我很难赶上我身边已经有四年科班训练的同学。研一上学期有一门课让我看到了些曙光，万事达卡组织(MasterCard)的一位资深顾问冯慧博士给我们开信用评分课。申请贷款时，比如，申请信用卡（透支，可以看作是贷款），我们需要填上自己的各种信息。简单地说，信用评分技术就是利用这些申请资料和其他信息，通过各种数学与统计模型，对申请人的风险状况赋予一定的分数，以区别出哪些是好客户，哪些是坏客户。在金融领域，数据量都是非常庞大的，信用评分就是这么一个计算量密集的技术。在信用评分领域，一个标准语言就是SAS，一门解释性语言——有金融，有计算，这是我感兴趣的。</p>
<p>这门课我学得很认真，查看了不少资料，并写了不少信用评分技术相关的读书笔记与同学分享。另外就是自学SAS，它的语法结构类似C。虽然SAS跟Java/C++一样，我都是第一次接触，但我学习SAS的劲头和主动性就高多了。信用评分建模需要用到大量的数据挖掘算法，但我们金融信息工程系没有相关的课程。研一下学期，我就去语言信息工程系修了一门理论性较强的课程，《机器学习》，主要的应用背景是自然语言处理。那个课堂上，我大概是唯一的外系生。这门课我修得比较苦，成绩也不是很理想，就是及格那种。不过有了这门课的底子，接下来我修应用性的课程《数据挖掘与CRM》就轻松多了。</p>
<p>SAS在数据挖掘领域也是行业标准，对它的学习，也是一直没有断。同时我还花时间学习Java和C++，毕竟要拿的是软件工程的学位，不过掌握程度，自是比不上SAS。</p>
<p>这个时候我开始写跟SAS编程与数据挖掘相关的技术博客，记录我学习过程中的点点滴滴。很高兴有些朋友喜欢我的技术博客，有时候认识些新朋友，他提一句：我看过你的SAS博客，就觉得非常亲切。我还开始关注国内SAS相关的论坛（<a href="http://mysas.net" rel='nofollow'>mysas.net</a>、<a href="http://sasor.feoh.net" rel='nofollow'>sasor.feoh.net</a>等），又订阅了全球SAS用户最活跃的邮件列表SAS-L,偶尔也会加入讨论，尽量让自己往这个群体靠拢。从中结识不少志同道合的朋友，是非常愉快的一件事情。</p>
<p>通过网络认识了人大经济论坛的SAS版主朱杰，他是上海师范大学的一位青年教师，在培养学生学习SAS方面是不遗余力。一次聊天，他说，你喜欢SAS，又有金融背景，为什么不去直接跟清华金融系的朱世武老师学呢。于是，朱杰把我介绍给朱老师，我开始在清华旁听朱老师的SAS与金融计算的相关课程。</p>
<p>朱老师是几本SAS与金融计算相关书籍的作者，有统计学和金融工程的专业背景。朱老师说他用SAS几十年，什么工作都用SAS完成。通过课程学习和与朱老师的私下交流，当时自觉自己的SAS功底精进不少。</p>
<p>2007年我开始在学校主持北大SAS俱乐部，它是北大应用统计研究会下属的专业社团，也是国内高校第一个SAS社团，聚集了很多北大和周边高校SAS爱好者。我们通过培训、讲座等活动提高会员的SAS编程技能，促进会员与企业专家的沟通。另外，作为第一批会员，我还参加了“SAS用户与爱好者俱乐部”，它是一个SAS中国用户交流的非商业性组织，并致力于打造成一个SAS中国的user group。SAS在国内还不是很流行，能够投身于SAS推广的活动当中，心情是充满了自豪感。</p>
<p><strong>拓展：SAS、统计学、数据挖掘、商务智能(BI)</strong></p>
<p>在更为广泛的意义上，数据挖掘是商务智能(Business Intelligence, BI)的一个分支。BI行业的主要厂商是SAP、Oracle、IBM、Microsoft、SAS等。通过对SAS的了解，我对这整个行业也感兴趣起来，参加了国内一些活跃BI社区的线上线下交流活动，比如TTNN、Bicubes、Bihuman等，从中结识很多业界的朋友。另外，我还加入了国内高校里最活跃的统计社区，“统计之都”（<a href="cos.name" rel='nofollow'>cos.name</a>），并成为活跃作者之一。</p>
<p>学习技能，我从自己学习SAS、数据挖掘和统计学的经验中，可以总结几条：</p>
<p>学习期间，有任何问题，首先不要想着去论坛发问，教科书或Google能解决你大部分问题。或者干脆找到一个懂行的人，直接去问。人要爱惜自己的羽毛，在论坛问一些傻瓜问题，会损害你在社区的名誉。自己解决问题，会让自己变得更强壮。</p>
<p>还有就是不要过于积极地去网上找学习资料。资料太多，人生太短，对大部分人来说，需要的几本书，国内都有引进，找一本搁案头翻阅就是。几本难得的电子书，赶紧打印了出来，从此不再网上瞎整。以前我把硬盘塞满时，突然警惕。疯狂收集电子书自有乐趣，你会沉浸在这种乐趣之中，而忽略真正有用的东西和真正要做的事情。</p>
<p>最后多认识几位专业相关的朋友，让自己时刻清醒，自己还是这个领域的门外汉，以保持必要的谦逊。</p>
<p><strong>实习，SAS中国研发中心</strong></p>
<p>2007年年底，一次BI社区的线下聚会，我认识了一位在SAS中国研发中心工作的朋友。我向他问了很多关于SAS产品以及SAS公司的问题，聊得很愉快。一直向往SAS公司，没想到它离我也可以这么近。回来就想，为什么不尝试一下直接体验一下SAS公司呢？于是我就向SAS中国研发中心发了一封应聘实习生的求职信，很快得到回复。</p>
<p>面试官是SAS中国研发中心的总经理Alfred，他简单介绍了下自己就说我们来聊聊。接下来的时间，开始我在讲，讲自己的一些背景，尤其是学习SAS的经历，以及对SAS公司的关注和了解，然后是一些互动，Alfred介绍下公司以及中国研发中心的状况。最后Alfred问我C++学得怎么样。这个只好老实说我只是一个初学者。</p>
<p>整个过程很轻松，不像一般面试常有的challenge。我喜欢这样的氛围，或者向往这样的氛围，我们都是成年人，我们都是professional，气氛就应该是平等宽容轻松愉快的。</p>
<p>SAS是一家私人公司(private)，是全球商务智能与分析领域的领袖。在美国，有一句话：“如果你掌握了SAS编程，你将不愁失去工作。”SAS的专长在于数据整理和数据分析，包括统计分析、数据挖掘、预测建模、决策分析等。SAS程序员在国外，是跟C/C++程序员、Java程序员等并立的工种，市场需求比较大，尤其是医药行业、政府部门、金融机构等。我在那一年，几乎是全职状态。第一次开通自己的工作邮箱，真的可以算是自己学生生涯的一个分水岭：你要拿更稳健的做事方式要求自己，就跟自己的同事一样。我参与的是SAS信用评分解决方案的客户化测试项目——信用评分、数据挖掘，也正是我所感兴趣的。</p>
<p>值得一提的是，SAS公司的学习气氛很浓，经常有各种培训、workshop、knowledge share等活动。作为一名实习生，除了第一个月的全天候技术培训外，在以后的日子里，我还参加了商务英语写作、应用统计学、数据挖掘（讲师是印度的同事）等培训。另外，公司还提供大量的网络培训教程（Web Live Training），涉及SAS技术的方方面面，这个只能挑选自己感兴趣的领域去学了。在SAS技术方面，这一年能感觉到自己是越来越strong。</p>
<p>现在我虽然离开了SAS公司，有机会还是很乐意介绍些实习机会向师弟师妹推荐。在网上随时注意些老东家的新闻，并为曾经为它服务而感到自豪。</p>
<p><strong>工作，赛诺菲巴斯德(Sanofi Pasteur)</strong></p>
<p>2009年年初，当时我还在SAS中国研发中心实习，我收到一个猎头朋友的邮件，说一个什么world’s leading company需要SAS Programmer，问我感不感兴趣。</p>
<p>2008年秋季学期开始，我也在考虑工作的事情，当时金融危机已经影响到应届生就业市场了。一开始我也跟风，网申那些著名的投行，后来才慢慢知道它们其实根本不招人，或者名额极少。通过修改简历，分析自我等准备工作，慢慢也更了解自己的兴趣所在和优势所在。被诸多投行拒掉，心里也不着急。</p>
<p>校园招聘我走的不是很积极。因为招聘的旺季，我还在SAS中国研发中心，保持着几乎全职的实习状态，所以SAS也成了我找工作的一个标杆。我的观察是，比SAS好的公司，大概也不多；跟它一样好，但更适合我的，就更少了。</p>
<p>之前也跟猎头接触过。第一次比较搞笑，一个女声打电话过来，拨的是我办公室的电话，报了一个英文名，说是北京的一家猎头公司。先问我是不是SAS中国研发中心，我说是，接着她说要为微软的一个数据库项目招人。我说现在不方便，她就要了我的手机号，说下次再联系。因为第一次接到猎头的电话，心里难免有些激动。中午吃饭时跟几个要好的同事提到这事，原来他们也都接到这个的电话，唉，这就没什么好谈的了。我们想下次其他组的同事也要陆续接到这个电话，于是一起打趣，这猎头，大概是拿着我们的名单，一个个打过去的。</p>
<p>这次猎头跟我联系，我知道它是一家知名的医药公司，赛诺菲巴斯德(Sanofi Pasteur)，总部法国，是世界上最大的疫苗公司。以前一些CRO跟我联系，我都不是很感兴趣。现在却是一家药厂自己的研发中心需要SAS Programmer（又叫Statistical Programmer）,这让我有些心动。在SAS中国研发中心，除了SAS语言，我接触更多的是SAS的各种产品和解决方案，都是在类似实验室的环境里运用。学SAS这么久，也想把它运用在某个行业里面。我回复猎头公司，说我愿意跟潜在的东家谈一谈。</p>
<p>当时把简历寄过去后，我就回老家过年去了。跟公司的接触，也饶有趣味。在家里，就收到现在老板的一个电话，先用中文说明来意，再简单聊一下，然后问我可不可以用英文聊聊。当时也只好硬着头皮说了，——这个真是非常的不适应，在老家，我连说普通话都不自在，更不用说是英语了，让父母听着别扭。这次电面后，约好年后回北京再面谈。</p>
<p>公司在国贸。年后我过去，进老板的办公室，笑着点头去握手，老板却先来一句nice to meet you。我暗想惨了，一上来就英语啊。我是准备了英语面试，心里却是还想要些缓冲。老板在美国念的博士，在国外工作数十年，这次回国是来负责筹建北京的研发中心。这次全英文面试，也说是随便聊聊，大概持续了一个小时。虽然我英语不是很好，但英文面试，倒是不惧，以前也真刀真枪面对过数回，从俄克拉何马的英语到印度的英语，当然还有中国的英语，屡战屡败屡败屡战这么一路过来，当然丝毫不怕。面试结束，老板笑着说了句我的英语真是不咋地。听了这句，我心里倒舒坦起来，觉得有了被认同的感觉。果然，老板给我留了个名片，约好下次再联系。——说到名片，我在学校做社团时就准备了些。在一些有业内人士出没的技术交流活动里，我是顽强地递过不少名片，给自己争取了些工作机会。</p>
<p>说口语，我觉得对我们技术背景的朋友来说，准备多少都不为过。在实习工作中，每天阅读很多技术文档，还有发邮件，英文阅读和写作问题都不大，但口语实践的机会不多——大多数外企，其实也多是中国人扎堆。我觉得自己口语的突破，不是来自外教，也不是自己私下里在大声背些范文，而是以前几次越洋的电话面试，让我实在躲不开，硬着头皮说上几小时。这坎一旦跨过去，以后就都轻松了，遗憾的是口音还没有跟着有显著提升。接下来公司给我安排了一次电面，面试官是美国那边的programming head和statistics head。那次是晚上十一二点，口语再烂，聊的都是我熟悉的话题，蜿蜒曲折也能沟通下去。</p>
<p>提到面试，我比较幸运，因为面试过程中，需要我说的，都是我所熟悉的和我感兴趣的，关于我的学术背景，以及工作本身需要的技能。作为一个求职者，我知道，这能给我提供一个真正平等的智力环境。</p>
<p>这么几番接触，公司唯一放心不下的，是我背景这么复杂（经济、金融、软件），兴趣又这么广泛，我如何能够保持恰当的commitment?</p>
<p>这时我心里，其实也很多激荡。又到了考虑自己的背景和兴趣的时候，——可能又是要默念《未走过的路》了。我的兴趣和背景，要留在IT业，也不赖。转去医药公司，这对我来说又是一个全新的行业，里面只有SAS编程是我熟悉的。除了想提高自己的SAS应用水平，当时还有几个因素，影响着我的决策。我是要加入一个新开设的研发中心，感觉机会会多一些，以后如果能够承担更多的责任，我的经管背景，或许还能用得上。另外，在与公司的来回接触中，感觉它非常人性化，自己在各个流程都受到了极大的尊重，这与校园招聘中被赶鸭子一般赶来赶去的感觉完全不一样。</p>
<p>我跟老板说，我会珍惜自己的职业前程。如果我加入一家公司，进入一个行业，不会随便跳出，知道那样会损害自己在业内的声誉。老板说大伙都是聪明人，那公司也就没有什么疑虑了。</p>
<p>关于找工作。我给原东家挑过简历，在公司也参与过面试几个候选人，对师弟师妹要讲的是，找工作，不妨站在雇主的立场上考虑些问题，然后反观自己的准备。要知道，公司招人是要花成本的，你是你这个职位所要求的技术领域的专家，你可以想象，雇主需要什么样的人，以及用什么样的方式合适展现出来。比如，写简历时，就该多想着HR或部门会如何看待自己的简历和措辞。</p>
<p>我有很多朋友，像刘未鹏、谢益辉，都非常积极维护自己的技术博客，这种展示最为从容。我看这是最有效的自我营销的方式之一，潜在的雇主可能很早就能够了解你，而且HR、猎头也都会积极去网络上收罗候选人。除了博客，在专业社交网站如LinkedIn等推销自己，也能够建立自己在劳动市场上的良好声誉。</p>
<p>在学术圈子，每一个博士候选人都会积极参加各种专业会议，以期与潜在的东家尽早建立联系。这个思路，放在大学生找工作方面，也是非常有效，特别是我们的IT领域。可以通过论坛讨论、技术会议等各种渠道，积极接触你感兴趣的行业、公司和人。这个应该不难，都2.0了，我们可以通过博客、社交网站、Twitter以及老师朋友推荐认识你感兴趣的业界人士。跟这个行业的人接触了，以后跟雇潜在雇主打交道时就能更有自信。</p>
<p><strong>后记</strong></p>
<p>老罗说彪悍的人生不需要解释。在我求学的这些年，每一个重要阶段，我都要向朋友们解释一遍我正在做什么。进大学，我向很多高中朋友说我去念经济学了，读研后我对大学同学说我修的是软件工程，现在快毕业了，我要对我那群进软件公司的同学说，我去药厂了。以前听孟岩讲过，你做什么，而不是你想什么，决定你要成为什么样的人。我进入一个新的领域，这或将成为我人生诸多折腾的一个了结，我的时间，我的精力，都花在这里，我以后的骄傲也会在这里。</p>
<p>2009-6-27，二稿</p>
<p>推荐网址：</p>
<p>SAS</p>
<p>1. SAS-L(SAS全球用户最活跃的电子邮件组，英文，推荐用Gmail订阅) <a href="https://groups.google.com/group/comp.soft-sys.sas/" rel='nofollow'>https://groups.google.com/group/comp.soft-sys.sas/</a></p>
<p>2. SAS用户与爱好者俱乐部（SAS中国用户组，由SAS中国公司赞助）<a href="http://www.sas.com/offices/asiapacific/china/events/2008/2008q3/20080917.htm" rel='nofollow'>http://www.sas.com/offices/asiapacific/china/events/2008/2008q3/20080917.htm</a></p>
<p>以下是两个活跃的SAS中文论坛：</p>
<p>3. SAS中文论坛，<a href="http://www.mysas.net/forum/" rel='nofollow'>http://www.mysas.net/forum/</a></p>
<p>4. SASor,<a href="http://sasor.feoh.net/" rel='nofollow'>http://sasor.feoh.net/</a></p>
<p>统计学、商务智能</p>
<p>5. 统计之都（应用统计学、数据挖掘，群体博客），<a href="http://cos.name/" rel='nofollow'>http://cos.name/</a></p>
<p>6. TTNN BI观点（商务智能电子邮件组，中文），<a href="https://groups.google.com/group/ttnn" rel='nofollow'>https://groups.google.com/group/ttnn</a></p>
<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li><a href="http://cos.name/2009/02/measure-classification-model-performance-lift-gain/" title="分类模型的性能评估&mdash;&mdash;以SAS Logistic回归为例(3): Lift和Gain">分类模型的性能评估&mdash;&mdash;以SAS Logistic回归为例(3): Lift和Gain</a> (6)</li><li><a href="http://cos.name/2008/12/measure-classification-model-performance-roc-auc/" title="分类模型的性能评估&mdash;&mdash;以SAS Logistic回归为例(2): ROC和AUC">分类模型的性能评估&mdash;&mdash;以SAS Logistic回归为例(2): ROC和AUC</a> (10)</li><li><a href="http://cos.name/2008/12/measure-classification-model-performance-confusion-matrix/" title="分类模型的性能评估——以SAS Logistic回归为例(1): 混淆矩阵">分类模型的性能评估——以SAS Logistic回归为例(1): 混淆矩阵</a> (16)</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/2009/03/data-analysis-of-cos-en-members/" title="COS竞赛：英文站点会员类型的识别">COS竞赛：英文站点会员类型的识别</a> (8)</li></ul><h3>最新评论</h3><ul><li><a class="commentor" href="" >盟</a> : <a class="comment_content" href="http://cos.name/2009/08/econ-software-sas/#comment-1221" title="View the entire comment by 盟" >thank u really for these encouraging words</a></li>
<li><a class="commentor" href="" >盟</a> : <a class="comment_content" href="http://cos.name/2009/08/econ-software-sas/#comment-1220" title="View the entire comment by 盟" >tough world, tough guy</a></li>
<li><a class="commentor" href="" >song</a> : <a class="comment_content" href="http://cos.name/2009/08/econ-software-sas/#comment-1207" title="View the entire comment by song" >我目前是学数学与应用数学的本科生，打算往考经济统计方面研究生。拜读了你的文章，收益匪浅~谢谢分享。</a></li>
<li><a class="commentor" href="" >Lynn</a> : <a class="comment_content" href="http://cos.name/2009/08/econ-software-sas/#comment-1197" title="View the entire comment by Lynn" >呵呵~一不小心看到这里，赞一个！！！
羡慕john同学的复杂背景，真是丰富多彩的人生~~</a></li>
<li><a class="commentor" href="http://tinglu.info" >Vincent Tinglu Xu</a> : <a class="comment_content" href="http://cos.name/2009/08/econ-software-sas/#comment-1192" title="View the entire comment by Vincent Tinglu Xu" >感兴趣江堂兄做软件的时候数学是怎么学习的。我原来也是经济学的底子，现在学numerical fina...</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://cos.name/2009/08/econ-software-sas/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
	</channel>
</rss>
