为啥采样(抽样)用在统计学中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥采样(抽样)用在统计学中?相关的知识,希望对你有一定的参考价值。

目标是所要研究的对象的全体。例如,制造商检查某个批次的产品质量是否合格,目标总体就是这一批次的产品。抽样总体是用于从中抽取样本的总体。

按理,抽样总体应该与目标总体一致,但实践中时常发生不一致的情况。例如,科学家通过小白鼠试验来检测药物用于人类总体的效果。

其基本要求是要保证所抽取的样品单位对全部样品具有充分的代表性。抽样的目的是从被抽取样品单位的分析、研究结果来估计和推断全部样品特性,是科学实验、质量检验、社会调查普遍采用的一种经济有效的工作和研究方法。

扩展资料

优点

(1)减小抽样误差,分层后增加了层内的同质性,因而可使观察值的变异度减小,各层的抽样误差减小。在样本含量相同的情况下.分层抽样总的标准误一般均小于单纯随机抽样、系统抽样和整群抽样的标准误。

(2)抽样方法灵活,可以根据各层的具体情况对不同的层采用不同的抽样方法。如调查某地居民某病患病率,分为城、乡两层。城镇人口集中.可考虑系统抽样方法;农村人口分散,可采用整群抽样方法。

(3)可对不同层独立进行分析。分层抽样的缺点是若分层变量选择不当,层内变异较大,层间均数相近,分层抽样就失去了意义。

参考技术A

目标是所要研究的对象的全体。例如,制造商检查某个批次的产品质量是否合格,目标总体就是这一批次的产品。抽样总体是用于从中抽取样本的总体。

按理,抽样总体应该与目标总体一致,但实践中时常发生不一致的情况。例如,科学家通过小白鼠试验来检测药物用于人类总体的效果。

抽样方法:

一、简单随机抽样

简单随机抽样(simple random sampling),也叫纯随机抽样。从总体N个单位中随机地抽取n个单位作为样本,使得每一个容量为样本都有相同的概率被抽中。

特点是:每个样本单位被抽中的概率相等,样本的每个单位完全独立,彼此间无一定的关联性和排斥性。简单随机抽样是其它各种抽样形式的基础。通常只是在总体单位之间差异程度较小和数目较少时,才采用这种方法。

二、系统抽样

系统抽样(systematic sampling),也称等距抽样。将总体中的所有单位按一定顺序排列,在规定的范围内随机地抽取一个单位作为初始单位,然后按事先规定好的规则确定其他样本单位。

先从数字1到k之间随机抽取一个数字r作为初始单位,以后依次取r+k、r+2k……等单位。这种方法操作简便,可提高估计的精度。

三、分层抽样

分层抽样(stratified sampling)。将抽样单位按某种特征或某种规则划分为不同的层,然后从不同的层中独立、随机地抽取样本。从而保证样本的结构与总体的结构比较相近,从而提高估计的精度。

四、整群抽样

整群抽样(cluster sampling)。将总体中若干个单位合并为组,抽样时直接抽取群,然后对中选群中的所有单位全部实施调查。抽样时只需群的抽样框,可简化工作量,缺点是估计的精度较差。

扩展资料:

一、基本过程

抽样过程主要包括以下几个阶段:

1、定义总体(母体);

2、确定抽样框;

3、确定抽样方法;

4、决定样本量;

5、实施抽样计划;

6、抽样与数据收集;

7、回顾抽样过程。

二、抽样框

在抽样之前,总体应划分成抽样单位,抽样单位互不重叠且能合成总体,总体中的每个个体只属于一个单位。抽样框是一份包含所有抽样单元的名单。

参考技术B 一般是在无法进行或者不需要进行普查的时候才会采用抽查,而抽查又分为典型抽查,随机抽查等等,统计的功能就是根据数据分析研究对象的性质和发展趋势,抽查就是节约人力物力时间,且可以根据研究对象设定抽样方法的便捷途径。本回答被提问者采纳 参考技术C 假设:问某个工厂生产的某灯泡寿命,那么你不可能把工厂里所有的灯泡都给点上了,然后统计这些灯泡可以用多久,你应该是从里面“随机”“抽取”一部分有代表性的来点上,再统计,这种就叫抽样。希望你满意。不懂可以继续问喔

ORACLE动态采样

原文地址:http://www.oracle.com/technetwork/issue-archive/2009/09-jan/o19asktom-086775.html

动态采样是为了解决当硬解析时对没有统计信息的表抽样收集统计信息,让优化器走出合适的执行计划。

从oracle9.2开始,动态采样共有11个级别(从0到10),oracle9.2的默认采样级别为1,oracle10.1及以上版本默认为2.

1.启用动态采样的方法:

  1.1 设置参数OPTIMIZER_DYNAMIC_SAMPLING 

  1.2 会用hint  DYNAMIC_SAMPLING

 

2.当优化器遇到没有统计信息的表时,会尝试动态的收集优化器需要的统计信息。但是对于remote tables和external tables,

无法对其进行动态采样,只能使用默认值,虽然默认值通常和实际的差别比较大:

http://docs.oracle.com/cd/B28359_01/server.111/b28274/stats.htm#i41866

 

3. 动态采样测试

create table t
    as
   select owner, object_type
      from all_objects

  3.1通过hint禁用动态采样,采样级别设置为0即禁用动态采样

select /*+ dynamic_sampling(t 0) */* from t;

执行计划如下所示:

    --------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |       |       |    63 (100)|          |
    |   1 |  TABLE ACCESS FULL| T    | 18378 |   502K|    63   (0)| 00:00:01 |
    --------------------------------------------------------------------------

优化器认为只会返回18378,实际t表中有80761条数据,和实际值的差别还是很大的。(不知道为什么如果建表语句为create table t as select *  from all_objects的话,Rows的值会很接近实际值)

  3.2 假设我们不通过hint禁用动态采样,oracle10.1以上版本默认采样级别为2的动态采样

select * from t;

执行计划如下:

7    --------------------------------------------------------------------------
8    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
9    --------------------------------------------------------------------------
10    |   0 | SELECT STATEMENT  |      |       |       |    64 (100)|          |
11    |   1 |  TABLE ACCESS FULL| T    | 81761 |  2235K|    64   (2)| 00:00:01 |
12    --------------------------------------------------------------------------

38    Note
39    -----
40       - dynamic sampling used for this statement (level=2)

此时优化器的预估返回值81761和80761基本一致,3.1中的示例是优化器对cardinality的估值偏小,

同样存在因为缺乏统计信息导致优化器对cardinality估值偏大的情况

  3.3 对cardinality 估值偏大

我们对删除表t中的数据,然后再次执行3.1中的sql

delete from t;
commit;
select /*+ dynamic_sampling(t 0) */* from t;

得到的执行计划如下所示:

    --------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |       |       |    63 (100)|          |
    |   1 |  TABLE ACCESS FULL| T    | 18378 |   502K|    63   (0)| 00:00:01 |
    --------------------------------------------------------------------------

和3.1基本没有变化,优化器错误的评估了cardinality。

 

4. 动态采样的使用情况

  4.1 访问一个刚被创建并导入大量数据且没有收集统计信息的表,比如系统期初上线通常会导入大批量数据,

如果没有来得及对表收集统计信息的话,动态采样就可以发挥作用帮助优化器走出相对合理的执行计划。

  4.2 临时表。临时表通常是没有统计信息的,动态采样可以帮助优化器确定临时表的信息。

 

5. 对关联列的动态采样

  抛开多列统计信息不谈,动态采样可以动态的收集表中列与列之间的关联关系,如果单纯用dbms_stats对表收集统计信息的话,

是不会知道表中列与列之间的关联关系的。

假设我们有员工信息表,表中有字段员工出生月份BIRTH_MONTH(如5月),星座CONS(如金牛座),一年有12月份,12个星座,

当我们想查询5月出生且星座为金牛座的员工时,可选择率似乎应该是1/12 * 1/12,但是通常情况5月出生的人一大部分都是金牛座。

当应用动态采样的时候,可以近似评估出正常的cardinality。

  5.1 动态采样对关联列评估出来的cardinality测试

drop table t;
create table t
   as select decode( mod(rownum,2), 0, N, Y ) flag1,
                 decode( mod(rownum,2), 0, Y, N ) flag2, a.*
      from all_objects a
create index t_idx on t(flag1,flag2); 
--对表T收集统计信息   
BEGIN
  dbms_stats.gather_table_stats(USER,
                                 T,
                                 method_opt => for all indexed columns size 254);
END;

此时表t中满足条件flag1=‘N‘的数据为39016条,满足flag2=‘N‘的数据也是39016,但是满足条件同时满足flag1=‘N‘和flag2=‘N‘的数据为0条

select * from t where flag1 = N and flag2 = N;

执行计划如下所示:

    --------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |       |       |   325 (100)|          |
    |*  1 |  TABLE ACCESS FULL| T    | 19496 |  1941K|   325   (1)| 00:00:04 |
    --------------------------------------------------------------------------

优化器错误的评估cardinality为19496,和实际值0差别巨大。

通过动态采样可以近似得到实际值:

SELECT /*+ dynamic_sampling(t 3) */
 *
  FROM t
 WHERE flag1 = N
       AND flag2 = N;

执行计划如下所示:

8    -------------------------------------------------------------------------------------
9    | Id  | Operation                   | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
10    -------------------------------------------------------------------------------------
11    |   0 | SELECT STATEMENT            |       |       |       |     2 (100)|          |
12    |   1 |  TABLE ACCESS BY INDEX ROWID| T     |     6 |   612 |     2   (0)| 00:00:01 |
13    |*  2 |   INDEX RANGE SCAN          | T_IDX |     6 |       |     1   (0)| 00:00:01 |
14    -------------------------------------------------------------------------------------

54    Note
55    -----
56       - dynamic sampling used for this statement (level=2)
57     

评估出来的cardinality仅为6,和实际值0非常接近。(不知道为什么level=2,不应该是3吗?)

 

6.动态采样的采样级别

http://docs.oracle.com/cd/B19306_01/server.102/b14211/stats.htm#i43032

 

7.什么时候使用动态采样

  7.1 对OLAP或者数据仓库来说,SQL的执行时间远大于解析时间,建议将采样级别设置3或者4

  7.2 对OLTP系统来说,SQL的解析时间通常大于执行时间,会有很多执行时间很短的SQL,不建议修改默认的采样级别

  

 

以上是关于为啥采样(抽样)用在统计学中?的主要内容,如果未能解决你的问题,请参考以下文章

动态采样---DYNAMIC_SAMPLING 基于tom文章的翻译

随机模拟与采样方法

蓄水池采样问题

不是抽样统计而是面向全体样本的统计啥意思

ORACLE动态采样

初识机器学习-理论篇(慕课笔记)