标签 ‘ P值 ’

也谈提高R语言的运算效率

By 谢益辉 @ 2009/12/14
也谈提高R语言的运算效率

用过底层语言做计算的人转入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 = 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 = t.test(dat)$p.value", seq(nr), seq(nr)), f) system.time({ source(f) }) # user...
阅读全文 »

Tags: , , , , , , , ,
Posted in 统计计算, 统计软件 | 14 Comments »

不拒绝零假设意味着什么

By 郑冰 @ 2009/03/16

由一道试题引发的一点思考 2008年统计学考研真题第四题“食品厂家说:净含量是每袋不低于250g。但有消费者向消协反映不是250g,消协据此要求厂家自检,同时消协也从中随机抽取20袋检验” (1)如果厂家自己检验,你认为提出什么样的原假设和备则假设?并说明理由。 (2)如果从消费者利益出发,你认为应该提出什么样的原假设和备则假设?并说明理由。 …… 作为统计专业的学生来说,熟悉得不能再熟悉了。但是,通过做上面的题目,我发现自己在理解假设检验的问题上犯了一个十分严重的错误。这个问题主要是由于我们学的教材上面写着:“假设检验要么P-value小于a拒绝原假设,P-value大于a接受原假设……”。后来再看看其他教材,发现绝大多数都是这样写的。其实“P-value大于a接受原假设”这种说法是错误的。 P-value大于a的时候,结论到底是什么呢?最早提出这个问题的是: E·皮尔逊问耶日·奈曼,在检验一组数据是否为正态分布时,如果没能得到一个显著性的 P值,那么怎样才能看这组数据是正态分布的呢? 费歇尔其实已经间接地回答了这个问题。费歇尔把比较大的 P 值(代表没有找到显著性证据)解释为:根据该组数据不能做出充分的判断。依据费歇尔的解释,我们绝对不会得出这样的推理,即没有找到显著性的证据,就意味着待检验的假设为真。这里 引用费歇尔的原话: “相信一个假设已经被证明是真的,仅仅是由于该假设与已知的事实没有发生相互矛盾,这种逻辑上的误解,在统计推断上是缺乏坚实根基的,在其它类型的科学推理中也是如此。当显著性检验被准确使用时,只要显著性检验与数据相矛盾,这个显著性检验就能够拒绝或否定这些假设,但该显著性检验永远不能确认这些假设一定是真的,……” 所以假设检验的目的在于试图找到证据拒绝原假设,而不在于证明什么是正确的。当没有足够证据拒绝原假设时,不采用“接受原假设”的表述,而采用“不拒绝原假设”的表述。“不拒绝”的表述实际上意味着并未给出明确的结论,我们没有说原假设正确,也没有说它不正确。 举个例子来说:比如原假设为H0: m =10,从该总体中抽出一个随机样本,得到`x=9.8,在a=0.05的水平上,样本提供的证据没有推翻这一假设,我们说“接受”原假设,这意味着样本提供的证据已经证明m=10是正确的。如果我们将原假设改为H0: m =10.5,同样,在a=0.05的水平上,样本提供的证据也没有推翻这一假设,我们又说“接受”原假设。但这两个原假设究竟哪一个是“真实的”呢?我们不知道。 总之,假设检验的主要目的是为了拒绝而不是接受。 由一道试题引发的另一道试题 这让我想到2007年统计学考研真题第一题问:“正态分布的假定能不能用数据证明?” 其实也是关于假设检验的问题,具体内容可以参看: 统计学博文导读:统计分布的检验(谢益辉博客)
阅读全文 »

Tags: , , ,
Posted in 基础统计, 概率论与数理统计 | 21 Comments »

P-value:一个注脚

By 胡江堂 @ 2008/12/08

郑冰刚提到P值,说P值的定义(着重号是笔者加的,英文是从WikiPedia摘来的): P值就是当原假设为真时,比所得到的样本观察结果更极端的结果出现的概率。 The P-value is the probability of obtaining a result at least as extreme as the one that was actually observed, given that the null hypothesis is true. 以下延续白话系列,解释一下,“什么是P值,什么是极端”,算是郑文的一个长长的注脚。
阅读全文 »

Tags: , , , , , , ,
Posted in 基础统计, 概率论与数理统计 | 10 Comments »

不得不提的P值

By 郑冰 @ 2008/12/07

在论坛,经常发现有人发关于P值的帖子,搜索了一下,一共有29个关于P值的帖子。的确,P值是最常用的一个统计学指标,几乎统计软件输出结果都有P值。了解p值的由来、计算和意义很有必要。
阅读全文 »

Tags: , , ,
Posted in 基础统计, 概率论与数理统计 | 13 Comments »

搜索

推荐阅读

大规模系统内变量关系的研究以及可视化-1因果分析

By 黄帅

引言——变量关系分析的广泛意义
在统计分析中,有这样一类具有普遍意义的问题:在测得了(取样)一个变量系统的数据以后,如何从数据中发现并且验证这些变量之间的关系?了解…阅读全文 »

用GERT方法求解两个抛硬币问题

问题:一枚均匀的硬币,一直抛直至出现HTT(H表示正面,T表示背面),期望要抛多少次?一直抛直至出现HTH(即正反正),期望要抛多少次?假定出现H面的概率为p,出现T面的概率为阅读全文 »

分月存档