tricky things in R

 ________________________________________________________________
/  ____    _                                                     \
| |  _ \  (_)___    __ ___      _____  ___  ___  _ __ ___   ___  |
| | |_) | | / __|  / _` \ \ /\ / / _ \/ __|/ _ \| '_ ` _ \ / _ \ |
| |  _ <  | \__ \ | (_| |\ V  V /  __/\__ \ (_) | | | | | |  __/ |
| |_| \_\ |_|___/  \__,_| \_/\_/ \___||___/\___/|_| |_| |_|\___| |
\                                                                /
 ----------------------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
  1. 赋值

从一开始学R就知道R的赋值符号和别的语言不一样,用的是<-,虽然=也用,很多书会告诉你两者是一样的,完全通用,不过用R的人习惯也推倡用<-。所以我基本上就抛弃用=号了,反正在ESS里用shift+-就会自动输入<-,也是很方便的。直到有一天,我发现在switch里,必须用=,而不能用<-,才发现坑爹啊,这两符号是不一样的。

Continue reading

跟某同学讲了T test之后,整理一下。 很多的检验和我们的直觉是一致的,前阵子在一个群里,有管理学院的人问说想看两个样本是不是来自于同一个分布,我叫他画两个CDF,一看就知道。对方说不要看图,我就让他用Kolmogorov-Smirnov Tests。我自己搜了一下,发现ks.test检验的就是拿两个CDF的距离做为统计量,虽然计算很复杂,但是和intuition那是相当一致啊。 最简单也最常用的,莫过于T检验,用我们的直觉就可以理解了,但是我发现不理解还有用错的人也挺多的。 我们要看一个样本的均值是不是等于0,最naive的办法就是看样本的均值和0差别多大。 这个比较之所以naive,因为没有考虑到数据的分布,从上图的两个populations来看,它们的均值都是0,从绿色的分布中抽到一个均值为3的样本,概率并不小,但是从红色的分布中得到这样一个样本,那就是小概率事件。所以不能单纯比较均值,而是要看均值的分布,从上面的populations上看,和数据的离散程度有关。 我们随机抽取100个sample,得到以下的均值分布: 我们需要对均值的离散程度做penalty,那么就可以考虑这样一个统计量mean(x)/SEM, SEM代表standard error of the mean,那么这个统计量比单纯的均值要科学得多。这个统计量,就是学生氏所定义的t。 如果没有大量的样本,是没办法估计SEM的,但是从上面两个图上看,样本间均值的标准误SEM,和总体数据的标准误是正相关的。而总体的标准误可以用样本的标准误,sd(x),来估计。如果我们考虑最简单的形式呢?定义统计量mean(x)/sd(x)。 那么,请等一下,我们还需要考虑到样本量的影响,如果sample size没有影响,那么我们就不需要采集大样本了。从我们的直觉上看,肯定是样本量越大,对总体参数的估计越准确了。 从图上看,还是和直觉很一致。sample size越大,分布越compact,对总体均值的估计也就越准确。那么就需要使用sample size进行加权,把统计量修改为mean(x)/sd(x) * f(n),其中n为sample size。 我们可以想像,学生氏当年try了几种形式的f(n),发现sqrt(n)效果最好。于是他就定义了统计量: t = mean(x)/(sd(x)/sqrt(n))。 sqrt(n)效果好,因为sd(x)/sqrt(n)正好是对样本间均值标准误SEM的估计。 我们又可以想像,学生氏当年收集了很多个样本,计算了多个t值,发现这些t值的分布是有规律的,有点像正态分布,学生氏把它定义为t分布,利用t分布的probability density function,就可以计算p-value啦。 上图就是从标准正态分布里抽取100个样本,所计算的t值分布。 很多人上课学不懂,我觉得是因为一上来告诉你t怎么算,但是没让你理解SEM,SEM是理解t值计算的关键。 算完t之后,一句话,符合t分布,然后就是查表看p值,或者让计算机算,太抽象,这世界本来没有t分布,是学生氏定义了t统计量,并发现符合某分布,把它定义为t分布,有计算机做simulation,重现这个过程,就不抽象了,也就好理解了。 至于两样本,如果是paired的话,那就是paired之间相减,用差值做单样本t检验。如果不是成对,那就是t=(mean(x1)-mean(x2))/SEDM. 其中SEDM代表standard error of difference of means,这里有一个pool与否的问题,SEDM看上去稍微复杂了一点点,但是basic idea是一样的,非常好理解。

Continue reading

经常看到一些饼图,描述某些事物的组成,比如说有钱人的学历分布,然后我们可以看到高学历所占比例并不高,根据这个比例下结论通常是错的,这些比例说明不了问题,如果把各种学历在总体人口中的分布做为背景进行考虑的话,你就会发现学历还是有点用的。 当我们用组学测定了一大堆分子之后,我们希望站在更高的角度去看这些分子和那些生物学过程相关。那么通常各种注释,对这些基因/蛋白进行分类,那么从分类的比例上,是不能草率下结论,正如上面有钱人学历分布的例子一样。我们需要把总体的分布考虑进去。 和某个注释/分类是否有相关性,把基因分成属于这一类,和不属于这一类两种,这就好比经典统计学中的白球和黑球的抽样问题。也可以列一个2x2的表,进行独立性分析。 以文章Gene Expression in Ovarian Cancer Reflects Both Morphology and Biological Behavior, Distinguishing Clear Cell from Other Poor-Prognosis Ovarian Carcinomas所鉴定的差异基因为例。

Continue reading

支持向量机(Support Vector Machines, SVM)最初由Vladimir Vapnik于1997年提出,SVM最简单的形式就是找出一下区分界限(descision boundary),也称之为超平面(hyperplane),使得离它最近的点(称之为support vectors)与之间隔最大。

这和logistic regression有些相似,区别在于logistic regression要求所有的点尽可能地远离中间那条线,而SVM是要求最接近中间线的点尽可能地远离中间线。也就是说SVM的主要目标是区分那些最难区分的点。

SVM对于hyperplane的定义,在形式上和logistic regression一样,logistic regression的decision boundary由$\theta^TX=0$确定,SVM则用$w^TX+b=0$表示,其中b相当于logistic regression中的$\theta_0$,从形式上看,两者并无区别,当然如前面所说,两者的目标不一样,logistic regression着眼于全局,SVM着眼于support vectors。有监督算法都有label变量y,logistic regression取值是{0,1},而SVM为了计算距离方便,取值为{-1,1}

Continue reading

初中时在杂志上看到苹果的彩壳机,从此叔就开始成为了苹果的脑残粉,还在K6-2和win98那会,就在玩macintosh主题。

本科时,通过PearPC来虚拟PowerPC,硬是在ATHLON XP 1700+这个破CPU上破了OS X Jaguar,那个慢啊,是无法忍受的。

后来,有了一台powerbook,却拿它来装gentoonetbsd。从那里候开始,基本上就只用Linux/BSD。

Continue reading

happy valentine

今天看到统计之都上的情人节心形图。 这次画的心形函数是: $ x = 16 (sin t)^3$ $ y = 13 cos t - 5 cos 2t - 2 cos 3t - cos 4t$ 尝试用ggplot2来画,结果如下: 代码见Github. 类似的心形图以前也是画过的,当然这样的函数图有很多,详见http://www.mathematische-basteleien.de/heart.htm,画起来也很容易。 倒是以前画过的蝙蝠侠logo,更有成就感些。

Continue reading

Author's picture

Guangchuang Yu

Bioinformatics Professor @ SMU

Bioinformatics Professor

Guangzhou