精华内容
下载资源
问答
  • 常用的随机化方法
    千次阅读
    2019-01-12 22:24:52

    随机化算法

    百科的介绍:
    随机化算法(randomized algorithm),是这样一种算法,在算法中使用了随机函数,且随机函数的返回值直接或者间接的影响了算法的执行流程或执行结果。就是将算法的某一步或某几步置于运气的控制之下,即该算法在运行的过程中的某一步或某几步涉及一个随机决策,或者说其中的一个决策依赖于某种随机事件。

    算法课本:

    在许多情况下,当算法在执行过程中面临一个选择时,随机化选择常比最优选择省事。因此随机化算法在很大程度上降低算法的复杂度。随机化算法的一个基本特征是对所求问题的同一实例用同一随机化算法求解两次可能得到完全不同的效果。不仅是结果,甚至是时间都有可能相差很大。一般情况下,将随机化算法大致分为四类:

    • 数值随机化算法
    • 蒙特卡罗算法
    • 拉斯维加斯算法
    • 舍伍德算法

    数值化随机算法常用于数值问题求解。这类算法得到的往往是近似解,且近似解的精度随着计算时间的增加而不断提高。在许多情况下,要计算出问题的精确解是不可能的或没有必要的,用数值化税基算法可得到相当满意的解。

    数值类问题常用,多见于MATLAB , 各种积分微分,数学计算中。

    蒙特卡罗算法用于求问题的准确解。对许多问题,近似解是毫无意义的。用蒙特卡罗算法能求得问题的一个解,但这个解未必是正确的。其求得正确解的概率依赖算法所用的时间。算法所用时间越多,得到正确解的概率就越高。蒙特卡罗算法的主要缺点也在于此。一般情况下,无法有效的判断所得到的解是否可定正确。(非一般情况是可以判定的!)

    设p为实数,且1/2<p<1。如果一个蒙特卡罗算法对于问题的任一实例得到正确解的概率不小于p,则称该蒙特卡罗算法是p正确的,且称p-1/2是该算法的优势。按照这种情况,只要执行次数足够多,则可以得到正确解。不过当p小于1/2的时候就无能为力了。不过大多数蒙特卡罗算法经重复调用之后正确率快速上升。

    拉斯维加斯算法不会得到不正确的解。一旦用拉斯维加斯算法找到一个解,这个解就一定是正确解。但有时用拉斯维加斯算法会找不到解。拉斯维加斯算法找到正确解的概率会随着它所用的计算时间的增加而提高。位于所求解问题的任一实例,用同一拉斯维加斯算法反复随该实例求解足够多次,可使解失效的概率任一小。

    它可以显著地改进算法的有效性,甚至对某些迄今为止找不到有效算法的问题,也能得到满意的结果。n皇后问题利用此算法可以有效的解决,算法的思路是每次放置保证不跟已经放入的起冲突即可,直到无法放入或者皇后已经放完为止。

    舍伍德算法总能求得问题的一个解,而且所得的解总是正确的。当一个确定性算法在最坏情况下的计算复杂性与其平均情况下的计算复杂性有较大差别时,可在这个确定性算法中引入随机性将它改造成一个舍伍德算法,消除或减少问题的好坏实例间的这种差别。舍伍德算法的精髓不是避免算法的最坏情形,而是设法消除这种最坏情形行为与特定实例之间的关联性。当出现这种情况时,在算法中增加随机性处理,只要随机性处理和当前确定性算法时间相比远低于它的时间复杂度数量级就可以。快速排序就是它的一个实例。舍伍德算法并不能改变算法的时间复杂度,但算法的时间复杂性相对均匀。

    基于舍伍德算法的设计思想还可以设计高效的数据结构,跳跃表就是其中一例。具体跳跃表的实例可以从网上搜索。私下在阅读相关资料的时候,觉得跳跃表的实例应该可以在数据库的索引设计底层中出现,它是一种牺牲空间增加跳跃索引换取查询速度的,查询算法的效率可以参考快速排序,不过增加和删除的效率有点低。

    更多相关内容
  • 总结了等价线性化方法的理论、发展及其在滞变结构随机地震反应分析中的应用,认为等价线性化方法特别是近些年提出的局部和无参数等价线性化方法,是研究滞变结构随机地震反应的一种非常简明实用的分析方法。...
  • 随机分组方法可分为简单随机分组、区组随机分组、分层随机分组和动态随机分组。简单随机分组和区组随机分组较为常见,但未对非处理因素加以限制,样本量少时难以保证组间特征的均衡。分层随机分组能较好实现分层因素...

    随机分组主要目的是保证临床试验组间基线特征分布均衡,以最大限度控制干扰因素影响,更科学地估计干预效应。随机分组方法可分为简单随机分组、区组随机分组、分层随机分组和动态随机分组。简单随机分组和区组随机分组较为常见,但未对非处理因素加以限制,样本量少时难以保证组间特征的均衡。分层随机分组能较好实现分层因素的组间均衡,但不能控制较多因素。如考虑4个分层因素,每个因素3水平,则需分成34=81层。分层数量多不仅难于实施,更可能出现某些层内无病例的情况,无法达到均衡分层因素的目的。

    动态随机分组指研究对象被分到各组的概率随一定条件而动态调整的方法,最小化法(minimization)是其中较为常见的一种。最小化法自提出以来就备受关注,被誉为临床试验的“铂金标准”[1]。其均衡能力强,在小样本及有多个重要预后因素的临床试验中优势尤为突出。如在孕产期疾病治疗的临床试验中,产妇的年龄、孕周、孕产史等因素对治疗效果影响较大,而试验例数往往有限,采用最小化法较其他方法更能均衡各组预后因素分布,提高研究效率。尽管优势明显,最小化法应用并不广泛,可能与其原理不如简单随机分组和区组随机分组直观易解、实施过程相对繁复有关。国内关于最小化法的研究多局限于阐述其思想原理及优缺点[2-3],对其如何实施应用的介绍少见。本文将通过模拟实例阐述最小化法基本原理及运算过程,并编制了专用SAS宏程序,供研究者在临床试验中参考使用。

    资料与方法

    通过查阅国内外相关文献,综述最小化法的基本原理及其运算过程。利用一个简单的模拟实例说明最小化法的具体运算过程,编制专用的SAS宏程序,并给出模拟实例的分组结果作为参考。

    模拟实例为某两组设计的子痫前期药物临床试验,已知产妇年龄(Age)、治疗时孕周(GA)、既往子痫前期病史(History)三个非处理因素对结局有重要影响,希望其分布在各组趋于均衡。已入组的14个病例的分组结果(Group)如表1所示。现第15例患者为32岁,治疗时孕周为33周,无既往子痫前期病史。

    表1前15个病例的预后因素水平及分组情况

    Table 1The levels of prognostic factors and treatment assignments of the first 15 patients

    697c09d64431cfe97af224c131830e6e.jpg

    CaseAgeGAHistoryGroup1220A2110B3211A4220A5310A6220A7211B8210B9320B10210B11220A12210B13110B14311A15∗210

    Value label:Age (1=“≤19 years”, 2=“1934 years”); GA (1=“<34 weeks”, 2=“≥34 weeks”); History (1=“Yes”, 0=“No”).*The variable “Group” was empty in the 15th case, indicating that the assignment result of this case was unknown.

    结 果

    一、方法综述

    最小化法由Taves[4]于1974年提出并命名。其基本原理是:在试验开始前确定对结果有重要影响的预后因素,根据已入组病例预后因素的组间分布情况,将新病例分到使组间预后因素分布差异最小的一组中;当预后因素组间分布无差异时,新病例按等概率随机分配。

    Pocock和Simon[5]于1975年用参数形式介绍了更为广义的最小化法。它根据三个参数确定病例的分组:因素不平衡函数(D)、总体不平衡函数(G)、最优分配概率(P)。因素不平衡函数指某一预后因素中与新病例相同的水平在各组分布的不均衡性,常用极差或方差表示。总体不平衡函数代表所有因素不平衡函数的总和,一般采用因素不平衡函数的直接求和;对于需要区分因素重要性的情况则采用因素不平衡函数的加权求和,需要设定因素权重(w)。最优分配概率指新病例分配到目标组(使组间差异最小的组)的概率。P=1时,新病例直接分配到目标组;P=a(0

    当Pocock和Simon法参数设定为利用极差表示因素不平衡函数、各个因素不加权、且最优分配概率为1时,即为Taves提出的最小化法。目前,最小化法一般指Pocock和Simon最小化法。

    二、分组运算过程

    以下是利用最小化法对模拟实例进行分组运算的过程。首先将收集到的原始信息(表1)整理得到预后因素分布信息,如表2。

    表2已入组的14例患者预后因素分布情况(例)

    Table 2Distribution of prognostic factors of the first 14 patients by groups (n)

    e7dab6ee76c636a2289ae4b89d5c6bab.jpg

    PrognosticfactorsGroupAGroupBAge(year) ≤1902 193421GA(week) <3436 ≥3441History Yes21 No56

    按照Pocock和Simon最小化法设定相关参数:如采用极差表示因素不平衡函数;年龄、孕周、病史的权重分别设为1、2、3;最优分配概率P取0.8。首先计算各因素不平衡函数,A组和B组中与新病例(第15例患者)年龄在相同水平的各有5例和4例,当新病例分配到A组时,A组在该年龄水平上有(5+1)例,因此两组在该年龄水平上的极差(即年龄的因素不平衡函数)为D(age)=|(5+1)-4|=2;其他因素不平衡函数以此类推。对各因素不平衡函数进行加权求和,当新病例分配到A组时,总体不平衡函数G(A)= |(5+1)-4|×1+|(3+1)-6|×2+|(5+1)-6|×3=6;当新病例分配到B组时,总体不平衡函数G(B)= |(4+1)-5|×1+|(6+1)-3|×2+|(6+1)-5|×3=14。比较各组总体不平衡函数的大小,G(A)< G(B),则A组为目标组。将新病例按概率0.8分配到A组,概率0.2分配到B组。实现该种不等概率分组的方法很多,最简单的为生成一个范围在0~1的随机数,若该随机数在0~0.80范围则将新病例分配到A组,在0.81~1范围则分配到B组。

    三、SAS宏程序

    /*调用宏前的准备*/

    /*定义宏变量*/

    /*说明:Dataset指拟分组的数据集;GroupAll指试验组变量名;Group_n指试验组的个数;FactorAll指预后因素变量名;Factor_n指预后因素的个数;WeightAll指预后因素的权重(与FactorAll顺序一一对应);P指新病例分到各试验组的概率,按G从小到大顺序分别为p1、p2、p3,满足p1>p2>=p3,p1+p2+p3=1;Seed指生成随机数所用的参数,可取小于231-1的任意常数*/

    %LET Dataset=CaseN;

    %LET GroupAll=%str(group1 group2 group3);

    %LET Group_n=3;

    %LET FactorAll=%str(factor1 factor2 factor3 factor4);

    %LET Factor_n=4;

    %LET WeightAll=%str(weight1 weight2 weight3 weight4);

    %LET P=%str(p1 p2 p3);

    %LET Seed=constant;

    /*宏主体及解释*/

    /*宏名称为Minimization, 由3步生成*/

    %MACRO Minimization;

    /*步骤1.计算新病例分配到各组时的总体不平衡函数G*/

    %MACRO Stepa;

    DATA result;

    LENGTH Group $10. G 8;

    STOP;

    RUN;

    %DO i= 1 %TO &Group_n;

    %LET Group=%SCAN(&GroupAll, &i);

    %LET G=0;

    %DO j= 1 %TO &Factor_n;

    %LET Factor=%SCAN(&FactorAll, &j);

    %LET Weight=%SCAN(&WeightAll, &j);

    DATA Group_&Group;

    SET newcase end=eof;

    IF eof THEN Group="&Group";

    IF eof THEN CALL SYMPUT("factor_x",&factor);

    RUN;

    PROC SQL NOPRINT;

    CREATE TABLE &factor AS

    SELECT Group, COUNT(&factor) AS n FROM Group_&Group

    WHERE &factor=&factor_x GROUP BY Group;

    SELECT range(n) INTO:d FROM &factor;

    DROP TABLE &factor;

    QUIT;

    %LET G=%EVAL(&G+&d*&weight);

    %END;

    DATA result_&Group;

    Group="&Group";

    G=&G;

    RUN;

    DATA result;

    SET result result_&Group;

    RUN;

    %END;

    %MEND;

    /*步骤2.比较G的大小,计算并储存分组结果*/

    %MACRO Stepb;

    PROC SQL NOPRINT;

    SELECT range(G) INTO:r FROM result;

    QUIT;

    DATA result;

    SET result;

    PROC SORT;

    BY G;

    RUN;

    DATA result;

    SET result;

    rank=_n_;

    IF rank=1 THEN CALL SYMPUT("target_1",Group);

    IF rank=2 THEN CALL SYMPUT("target_2",Group);

    IF rank=3 THEN CALL SYMPUT("target_3",Group);

    RUN;

    %DO k= 1 %TO &Group_n;

    %LET P_&k=%SCAN(&P, &k, " ");

    %END;

    %LET ep=%sysevalf(1/&Group_n);

    DATA &Dataset;

    SET &Dataset;

    randnum=RANUNI(&Seed);

    IF _n_=&newcase_n THEN DO;

    IF &r!0 THEN DO;

    IF randnum<=&p_1 THEN Group="&target_1";

    IF (randnum>&p_1 & randnum<=(&p_1+&p_2)) THEN Group="&target_2";

    IF randnum>(&p_1+&p_2) THEN Group="&target_3";

    END;

    IF &r=0 THEN DO;

    IF randnum<=&ep THEN Group="&target_1";

    IF (randnum>&ep & randnum<=%sysevalf(2*&ep)) THEN Group="&target_2";

    IF randnum>%sysevalf(2*&ep) THEN Group="&target_3";

    END;

    END;

    DROP randnum;

    RUN;

    %MEND;

    /*步骤3.循环运算,实现批量分组*/

    %MACRO Stepc;

    DATA &Dataset;

    SET &Dataset end=eof;

    IF eof THEN CALL SYMPUT("total_n",_n_);

    RUN;

    PROC SQL NOPRINT;

    SELECT COUNT(Group) INTO:oldcase_n

    FROM &Dataset;

    QUIT;

    %DO %WHILE (%eval(&total_n-&oldcase_n));

    %LET newcase_n=%EVAL(&oldcase_n+1);

    DATA newcase;

    SET &Dataset(OBS=&newcase_n);

    RUN;

    %Stepa;

    %Stepb;

    %LET oldcase_n=&newcase_n;

    %END;

    %MEND;

    %Stepc;

    %MEND;

    %Minimization;

    四、模拟实例分组结果

    以模拟实例数据为例(表1),如储存数据的文件名为Example,相关宏变量设定为:%LET Dataset=Example; %LET GroupAll=%str(A B); %LET Group_n=2; %LET FactorAll=%str(Age GA History); %LET Factor_n=3; %LET WeightAll=%str(1 2 3); %LET P=%str(0.8 0.2); %LET Seed=1; 运行上述宏程序后第15个病例会被分到B组。

    讨 论

    最小化法主要优势在于能保证多个预后因素组间分布均衡。在小样本试验(如100例以内)中最小化法均衡能力总是优于简单随机分组和区组随机分组[7]。与分层随机分组相比,当预后因素较多(如3个以上)时,最小化法的均衡能力明显较高,可同时考虑10到20个预后因素[8]。其不仅适用于个体临床试验,在基线特征复杂且样本量往往有限的整群随机试验中优势也尤为突出[9]。

    实施过程复杂是影响最小化法使用的一个重要方面。最小化法不像简单随机分组和区组随机分组等方法能在试验开始前一次性得到所有病例的分组结果,而需在试验过程中对每一名新入组病例重复分组运算过程,操作较为繁复,对临床试验的组织管理亦是一个挑战。有学者建议最小化法配合计算机使用[5]。本文通过编制SAS宏程序,可大大提高分组运算效率。在依照运算原理计算出每个新病例分组结果的基础上,程序还设计了循环运算,可实现批量分组,即研究者可在收集若干名新病例预后因素信息后一次性确定其分组结果。如在模拟实例中,前14名病例分组结果已确定,假如第15至20名病例都已收集预后因素信息,但尚未进行分组。此时运行宏程序,则程序先根据前14名病例特征分布情况计算第15名病例分组信息并存入原数据集中,再根据前15名病例特征分布情况计算第16名病例分组结果并储存,以此类推,直至第20名病例。如此可适当降低人工操作频率,简化实施过程。

    本程序设定采用极差表示因素不平衡函数,若采用方差则需作相应更改;因素的权重和最优分配概率可根据实际情况在宏变量中定义。最优分配概率P的设定方法有多种。如考虑3组设计,可设定分配到目标组概率为0.6,分配到其他两组的概率各为0.2;或根据G值的大小对3组进行排序,如按G值从小到大的顺序分配概率分别设为0.6、0.3、0.1等。P值大小没有绝对的设定规则,研究者可综合考虑组间均衡和预测难度的需要进行设定。如两组设计时P一般可取值为2/3[10 ];但若样本量较小或对均衡要求更高,可进一步提高P值,如文天才等[11]研究中,对228例病例、两组设计的临床试验,P值设定为0.8。在多中心研究中,因预测难度大,P可取值为1,以实现均衡最大化[5,12]。程序以3个试验组、4个预后因素为例编制,可直接用于两组或三组设计的临床试验,三组以上设计的编制过程与之类似;预后因素个数无论多少,只需在定义宏变量时作相应设定即可。值得注意的是,当预后因素为连续变量时,需先将其转化为分类变量,如本例中的年龄、孕周。

    采用基于网络的最小化随机分组系统亦是降低最小化法实施难度的一种方法[11,13],但其开发和维护成本较高,需要专业的程序开发人员参与。相较而言,SAS宏程序更为简便易行,成本低廉,便于研究者理解掌握,并可根据需要修改相关参数,适用性更强。目前,未见专门用于最小化随机分组的SAS宏程序。本文结合模拟实例,编制了可实现快速批量分组的SAS宏程序,简化了实施过程。合理使用该宏程序,可促进最小化法的应用,发挥其在小样本、基线复杂的临床试验中的均衡优势。

    参考文献

    1 Treasure T,Macrae KD.Minimisation:the platinum standard for trials? Randomisation doesn't guarantee similarity of groups; minimisation does.BMJ,1998,317:362-363.

    2 王倩,金丕焕.动态随机化在临床试验中的应用.中华预防医学杂志,2005,39:51-53.

    3 闫世艳,姚晨,夏结来.简单随机化、中心分层区组随机化和最小化法的均衡性比较.中国循证医学杂志,2006,6:376-379.

    4 Taves DR.Minimization:a new method of assigning patients to treatment and control groups.Clin Pharmacol Ther,1974,15:443-453.

    5 Pocock SJ,Simon R.Sequential treatment assignment with balancing for prognostic factors in the controlled clinical trial.Biometrics,1975,31:103-115.

    6 ICH Harmonised Tripartite Guideline.Statistical Principles for Clinical Trials.1998,12-13.

    7 Scott NW,McPherson GC,Ramsay CR,et al.The method of minimization for allocation to clinical trials.a review.Control Clin Trials,2002,23:662-674.

    8 Therneau TM.How many stratification factors are "too many" to use in a randomization plan? Control Clin Trials,1993,14:98-108.

    9 Ivers NM,Halperin IJ,Barnsley J,et al.Allocation techniques for balance at baseline in cluster randomized trials:a methodological review.Trials,2012,13:120.

    10 Efron B.Forcing a Sequential Experiment to be Balanced.Biometrika,1971,58:403-417.

    11 文天才,闫世艳,刘保延,等.最小化随机算法在中医药改善脑积水临床研究中的应用.中国数字医学,2008,3:17-18.

    12 White SJ,Freedman LS.Allocation of patients to treatment groups in a controlled clinical study.Br J Cancer,1978,37:849-857.

    13 刘志臻,郑国华,曹治云,等.多中心临床试验中的最小化随机网络系统研究.中国循证医学杂志,2011,11:333-335.

    展开全文
  • 第7章 随机化算法.ppt

    2019-12-08 10:45:55
    * 第7章 随机化算法 * 学习要点 理解产生伪随机数的算法 掌握数值随机化算法的设计思想 掌握蒙特卡罗算法的设计思想 掌握拉斯维加斯算法的设计思想 掌握舍伍德算法的设计思想 * 随机数 随机数在随机化算法设计中扮演...
  • SAS实现临床试验前动态随机化

    千次阅读 2018-10-17 18:46:49
    与传统随机化方法相比,最小化法的不同之处在于,动态随机化在分配过程中,每一个受试人员进入某一组的概率不会一直保持固定,而是按照前面已入组个体的情况不断地进行变更,从而达到维持所有试验组之间非研究因素...

    SAS实现临床试验前动态随机化

    方法介绍

    临床试验前的随机化分组目的在于保证各个试验组间的非研究因素达到均衡。与传统随机化方法相比,动态随机化法的不同之处在于,动态随机化在分配过程中,每一个受试人员进入某一组的概率不会一直保持固定,而是按照前面已入组个体的情况不断地进行变更,从而达到维持所有试验组之间非研究因素达到平衡的目的。每当有新的受试人员进入试验,研究者首先要假设该受试人员进入每一个组的情况,通过统计每组累计的各因素各水平的数目,并乘以一定的权重w(非研究因素间的相对重要性,下面设定为1),来计算不同分配情况下的均衡程度,两相比较后,最后以某一概率(如80%)将受试人员分入某一假设情况下试验组因素间差最小的试验组,以保持良好的均衡性。

    假设试验中有N个试验组,M个非处理因素,各因素的水平数分布为LM,Xijk为第i个试验组中因素j水平k的人数(i=1,2,…,N;j=1,2,…,M;k=1,2,…,LM)。受试者入组时,要首先考虑其进入不同试验组后产生的情况。

    假设某3因素2水平(2×2×2)的试验需入组一名各因素分别为1,1,2水平(圆括号表示)的受试人员,原有受试人员的累计数量如表1、表2(非圆括号的数字表示两组已入组人员的因素水平的累计情况):

    在这里插入图片描述

    由表1,表2分别计算出假设新受试个体进入两试验组的情况下,试验组内每个因素的累计水平数即Xijk,再计算表示在与新个体相同因素水平下组1和组2之间的差异Djk值。Pocock和Simon提出了四种计算Djk值的方法,包括极差法、方差法、最大限值法和符号法,其中最常用的是极差法(Djk=|Xi1jk-Xi2jk|)和方差法(Djk=Var(Xi1jk,Xi2jk,…,XiNjk)),这里使用极差法。
    假设受试者进入组1时,组1和组2之间的各因素水平差Djk为:
    D11=|X111-X211 |=1,
    D21=|X121-X221 |=1,
    D32=|X111-X232 |=2,
    计算总的不均衡值(不妨假设因素重要性相同,权重w全部设定为1),
    G1=w1 D11+w2 D21+w3 D32=4.

    假设受试者进入组2时,组1和组2之间的各因素水平差Djk为:
    D11=|X111-X211 |=3,
    D21=|X121-X221 |=1,
    D32=|X111-X232 |=4,
    计算总的不均衡值(不妨假设因素重要性相同,权重w全部设定为1),
    G2=w1 D11+w2 D21+w3 D32=8.
    w为各因素的权重,这里全部设为1。由于G1<G2,受试个体进入组1时两组的非研究因素差值较小,表示进入组1时两组的均匀性比进入b组要好,所以设定新的受试者进入组1的概率更高80%)。在实际应用中,若出现G1=G2,优先进入例数少的组,若例数在两组也相等,则进入每组的概率相等。相对于其他的随机化方法,动态随机化综合考量了全部非处理因素的平衡,即使在受试者总人数较少的情况下也能保证良好的均衡性。

    SAS9.4代码(八因素(水平不限)动态随机化)

    options nodate nonotes nosource;
    /*
    编号:【ID】001   002  …
    因素1:f1
    记录日期:date(作为生成随机数的种子数)
    因素2:f2
    因素3:f3
    因素4:f4
    因素5:f5
    因素6:f6
    因素7:f7
    因素8:f8
    */
    data patient;
    input ID $ f1 Date mmddyy10. f2 f3 f4 f5 f6 f7 f8;
    cards;
    001 1 12-02-2017 1 1 2 1 2 1 1
    002 1 01-11-2018 1 2 2 1 2 2 2
    003 3 02-05-2018 1 1 1 1 2 1 1
    004 1 03-02-2018 1 2 2 1 2 1 1
    005	3 04-19-2018 1 2 1 2 1 1 2
    006 1 05-08-2018 1 2 2 2 2 1 2
    007 1 05-25-2018 1 2 1 2 2 1 1
    008 1 06-15-2018 2 1 2 2 2 1 1
    009 1 07-13-2018 1 1 2 1 2 2 1
    010 1 09-24-2018 1 1 2 2 2 1 2
    ;
    run;
    data dataset;
    set patient;
    i+1;
    run;
    /*以上是录入数据,最新一行可视作新入组受试个体*/
    
    /*模拟程序:*/
    %let nobs=10;
    proc sql;				 /*建立空表*/
    create table test
    (ID char(8),		/*病人编号*/
     f1 num(3),
     f2 num(3),
     f3 num(3),
     f4 num(3),
     f5 num(3),	
     f6 num(3),
     f7 num(3),
     f8 num(3),/*考虑的因素*/
     date num(10)  ,
     group_ char(3),	 /*分组*/
    
     DiffA num(3),		/*假设新个体纳入A组时,两组在新个体相同水平上的差异*/
     DiffB num(3),		/*假设新个体纳入B组时,两组在新个体相同水平上的差异*/
     P num(3)
    );
    quit;
    
    %macro DR(id,f1,f2,f3,f4,f5,f6,f7,f8,date); /*输入编号,非处理因素f1-f8,入组时间*/
    proc sql NOPRINT;
    insert into test			 /*假设受试个体纳入A组时,A组与新个体在各因素的水平相同的频数*/
    set id="&id" ,f1= %sysevalf(&f1+0),f2= %sysevalf(&f2+0),f3= %sysevalf(&f3+0),f4= %sysevalf(&f4+0),f5= %sysevalf(&f5+0),f6= %sysevalf(&f6+0),
         f7= %sysevalf(&f7+0),f8= %sysevalf(&f8+0),date=%sysevalf(&date+0),group_='A';
    select count(f1)  into :AAcount_f1  from test where f1= %sysevalf(&f1) and group_='A';
    select count(f2)  into :AAcount_f2  from test where f2= %sysevalf(&f2) and group_='A';
    select count(f3)  into :AAcount_f3  from test where f3= %sysevalf(&f3) and group_='A';
    select count(f4)  into :AAcount_f4  from test where f4= %sysevalf(&f4) and group_='A';
    select count(f5)  into :AAcount_f5  from test where f5= %sysevalf(&f5) and group_='A';
    select count(f6)  into :AAcount_f6  from test where f6= %sysevalf(&f6) and group_='A';
    select count(f7)  into :AAcount_f7  from test where f7= %sysevalf(&f7) and group_='A';
    select count(f8)  into :AAcount_f8  from test where f8= %sysevalf(&f8) and group_='A';
    							  /*假设受试个体纳入A组时,B组与新个体在各因素的水平相同的频数*/
    select count(f1)  into :ABcount_f1  from test where f1= %sysevalf(&f1) and group_='B';
    select count(f2)  into :ABcount_f2  from test where f2= %sysevalf(&f2) and group_='B';
    select count(f3)  into :ABcount_f3  from test where f3= %sysevalf(&f3) and group_='B';
    select count(f4)  into :ABcount_f4  from test where f4= %sysevalf(&f4) and group_='B';
    select count(f5)  into :ABcount_f5  from test where f5= %sysevalf(&f5) and group_='B';
    select count(f6)  into :ABcount_f6  from test where f6= %sysevalf(&f6) and group_='B';
    select count(f7)  into :ABcount_f7  from test where f7= %sysevalf(&f7) and group_='B';
    select count(f8)  into :ABcount_f8  from test where f8= %sysevalf(&f8) and group_='B';
    
    update test
    set  group_= 'B' where id="&id";  /*假设受试个体纳入B组时,A组与新个体在各因素的水平相同的频数*/
    select count(f1)  into :BAcount_f1  from test where f1= %sysevalf(&f1) and group_='A';
    select count(f2)  into :BAcount_f2  from test where f2= %sysevalf(&f2) and group_='A';
    select count(f3)  into :BAcount_f3  from test where f3= %sysevalf(&f3) and group_='A';
    select count(f4)  into :BAcount_f4  from test where f4= %sysevalf(&f4) and group_='A';
    select count(f5)  into :BAcount_f5  from test where f5= %sysevalf(&f5) and group_='A';
    select count(f6)  into :BAcount_f6  from test where f6= %sysevalf(&f6) and group_='A';
    select count(f7)  into :BAcount_f7  from test where f7= %sysevalf(&f7) and group_='A';
    select count(f8)  into :BAcount_f8  from test where f8= %sysevalf(&f8) and group_='A';
    
    									  /*假设受试个体纳入B组时,B组与新个体在各因素的水平相同的频数*/
    select count(f1)  into :BBcount_f1  from test where f1= %sysevalf(&f1) and group_='B';
    select count(f2)  into :BBcount_f2  from test where f2= %sysevalf(&f2) and group_='B';
    select count(f3)  into :BBcount_f3  from test where f3= %sysevalf(&f3) and group_='B';
    select count(f4)  into :BBcount_f4  from test where f4= %sysevalf(&f4) and group_='B';
    select count(f5)  into :BBcount_f5  from test where f5= %sysevalf(&f5) and group_='B';
    select count(f6)  into :BBcount_f6  from test where f6= %sysevalf(&f6) and group_='B';
    select count(f7)  into :BBcount_f7  from test where f7= %sysevalf(&f7) and group_='B';
    select count(f8)  into :BBcount_f8  from test where f8= %sysevalf(&f8) and group_='B';
    quit;
    proc sql noprint;
    select count(*) into :count_A from test where id^="&id" and group_="A";
    select count(*) into :count_B from test where id^="&id" and group_="B";
    quit;
     
    
    /*在Test数据集中入组对应信息,1对应A,2对应B(对照组)*/
    data test;
    set test;
    format date DDMMYY10.; 
    if id="&id"  then 
    do;	
    count_A=%sysevalf(&count_A+0);	 count_B=%sysevalf(&count_B+0);	
    date= %sysevalf(&date);
    seed=%sysevalf(&date*&id);
                                /*假设受试个体纳入A组时,A组与新个体在各因素的水平相同的频数总和*/
    DiffA=%sysevalf(%sysfunc(abs(&AAcount_f1-&ABcount_f1))+%sysfunc(abs(&AAcount_f2-&ABcount_f2))+%sysfunc(abs(&AAcount_f3-&ABcount_f3))
                     +%sysfunc(abs(&AAcount_f4-&ABcount_f4))+%sysfunc(abs(&AAcount_f5-&ABcount_f5))+%sysfunc(abs(&AAcount_f6-&ABcount_f6))
                     +%sysfunc(abs(&AAcount_f7-&ABcount_f7))+%sysfunc(abs(&AAcount_f8-&ABcount_f8)));
    DiffB=%sysevalf(%sysfunc(abs(&BAcount_f1-&BBcount_f1))+%sysfunc(abs(&BAcount_f2-&BBcount_f2))+%sysfunc(abs(&BAcount_f3-&BBcount_f3))
                     +%sysfunc(abs(&BAcount_f4-&BBcount_f4))+%sysfunc(abs(&BAcount_f5-&BBcount_f5))+%sysfunc(abs(&BAcount_f6-&BBcount_f6))
                     +%sysfunc(abs(&BAcount_f7-&BBcount_f7))+%sysfunc(abs(&BAcount_f8-&BBcount_f8)));
    						   /*假设受试个体纳入A组时,B组与新个体在各因素的水平相同的频数总和*/
    
    
    if DiffA=DiffB then do;	   /*差异相等时,按相等概率进入A组或B组*/
    P=uniform(%sysevalf(&date*&id));	
     if count_A=count_B then do; 
    if P<0.5 then  group_='A' ; else 	group_='B';end;
    if 	count_A<count_B	 then do;
    if P<0.8 then  group_='A' ; else 	group_='B';end;
    if 	count_A>count_B	 then do;
    if P<0.8 then  group_='B' ; else 	group_='A';end;
    end;
    
    if DiffA<DiffB then 		  /*A组差异较小时,按0.8概率进入A组,0.2概率进入B组*/
    do; 
    P=uniform(%sysevalf(&date*&id));
    if P<=0.8 then group_='A' ; else 	group_='B';
    end;
    
    if DiffA>DiffB then 			 /*B组差异较小时,按0.8概率进入B组,0.2概率进入A组*/
    do; 
    P=uniform(%sysevalf(&date*&id));
    if P<=0.8 then  group_='B' ; else 	group_='A';
    end;
    end;
    run;
    %mend;
    
    %macro test;
    %do	t=1 %to &nobs;
    proc sql noprint;
    select id,f1,f2,f3,f4,f5,f6,f7,f8,date into :id, :f1,:f2,:f3,:f4,:f5,:f6,:f7,:f8,:date from dataset where i=%sysevalf(&t);
    quit;
    %let id=&id;                    /*需要在宏test里面用%let赋值转换成局部宏参数,另一种方法用%global声明亦可*/
    %let F_1=%sysevalf(&f1); 
    %let F_2=%sysevalf(&f2);
    %let F_3=%sysevalf(&f3);
    %let F_4=%sysevalf(&f4);
    %let F_5=%sysevalf(&f5);
    %let F_6=%sysevalf(&f6);
    %let F_7=%sysevalf(&f7);
    %let F_8=%sysevalf(&f8);
    %let seed=%sysevalf(&date);
    %DR(&id,&f_1,&f_2,&f_3,&f_4,&f_5,&f_6,&f_7,&f_8,&seed);
    %end;
    run;
    %mend;
    %test;
    

    sas程序结果如下,work.test数据集中给出了新个体010的分组分组结果,如再有新个体011,在patient数据集中录入新个体各因素数并将全局宏变量nobs赋值为11即可.
    在这里插入图片描述

    展开全文
  • 在构建回归模型时,一般将因变量 YYY 拆成两部分,自变量 XXX 和随机误差 εεε。若 XXX 与 εεε 之间存在相关性,则在构建回归模型的时候,导致对 XXX 的参数 βββ 估计不准。如果能找到一个过滤器,把 XXX ...

    一、工具变量

    参考:https://www.zhihu.com/question/29067965

    在构建回归模型时,一般将因变量 Y Y Y 拆成两部分,自变量 X X X 和随机误差 ε ε ε。若 X X X ε ε ε 之间存在相关性,则在构建回归模型的时候,导致对 X X X 的参数 β β β 估计不准。如果能找到一个过滤器,把 X X X 中和 ε ε ε 相关的部分过滤掉,只剩下与 ε ε ε 无关的部分,则可以准确估计参数 β β β。工具变量是指与自变量 X X X 相关而与 ε ε ε 无关的变量,工具变量可以作为过滤器,去除 X X X 中与 ε ε ε 相关的部分。具体操作如下:

    以工具变量 Z Z Z 作为自变量,对 X X X 进行回归,记回归后的因变量为 X ′ X^{\prime} X X ′ X^{\prime} X 有且仅用 Z 表达,而 Z 与 ε 无关,所以 X ′ X^{\prime} X ε ε ε 无关。这样就把 X X X 分成两个部分,由 Z Z Z 决定的部分 X ′ X^{\prime} X 和于 Z Z Z 无关的部分。与 Z Z Z 无关的部分包含了我们认为 X X X 中蕴含着的和 ε ε ε 相关的部分。去除 X X X 中与 ε ε ε 相关的部分很简单,即用拟合值 X ′ X^{\prime} X 来替换 X X X,所有和我们无法控制的因素 ε ε ε 相关的都被工具变量 Z Z Z 过滤掉了,代入到原来的方程式中回归,就能得到更准的估计了。

    需要注意的是, X X X 中与 Z Z Z 无关的部分不仅包含与 ε ε ε 相关的,还包括与 Z Z Z 不相关且与 ε ε ε 也不相关的部分。所以为了尽可能准确的表示 X X X,可以使用多个工具变量来尽可能的减少不必要的过滤。

    理想情况下,工具变量 Z Z Z 和自变量 X X X 强相关,然后和 ε ε ε 无关;但是有时候 Z Z Z 虽然和 ε ε ε 无关,但是和 X X X 的相关性并不强,用 Z Z Z 所能表示的 X X X 太少,这就相当于过滤网孔太细,能够留下来的东西太少,受到样本抽样的影响也会很大,此时我们称 Z Z Z 为弱工具变量。所以正确选择合适的工具变量是关联研究的重点与难点。

    二、孟德尔随机化法

    参考:孟德尔随机化法在因果推断中的应用

    1986年,Katan 首次提出 MR 的遗传思想:亲代等位基因随机分配给子代,如果基因型决定表型,基因型通过表型而与疾病发生关联,因此可以使用基因型作为工具变量来推断表型与疾病之间的关联。MR 设计的最关键步骤是寻找合适的 SNP 作为工具变量。

    根据 基因-mRNA-蛋白质-表型,通过 GWAS 我们可以找到表型与基因型之间的相关性。但 GWAS 只能找寻关联,无法确定因果。找到的 SNP 是与表型间存在因果关系,还是由于其他未知因素 U 而导致的假阳性,我们无法验证。以前常用的做法是敲除 SNP 附近的基因,观察表型是否按照预想的情况发展。随着多组学的发展,为使用工具变量提供了可能,可以使用多组学验证来确定SNP与表型之间是否存在因果关系。 假设 GWAS 中与表型显著关联(超过阈值)的 SNP 的区间内有基因 A,如果基因 A 与表型存在因果关系,那么受基因 A 调控(以基因 A 的表达量为表型进行 GWAS )或调控基因 A(以转录组为表型进行 GWAS,所有在基因 A 区间出峰的基因)的 SNP 的区间内基因 B 也应该与表型之间显著关联,但基因 B 可能不含有导致基因 A 与表型存在关联的未知因素 U。所以如果基因 B 与表型之间无关联,那么我们可以判断基因 A 可能为假阳性结果;如果基因 B 与表型之间存在关联,那么我可以判断基因 A 可能与表型存在关联。基因 A 与表型存在关联的可信度与基因 B 的质量直接相关:如果基因 B 功能已知、效果单一且与基因 A 直接强关联,那么基因 A 则大概率与表型相关;如果基因 B 功能不清,与基因 A 相关性一般,那么基因 A 则可能与表型相关。当我们以组学角度研究问题是,一般基因 B 的功能是难以清晰了解的,主要的筛选方法是与基因 A 的相关性,即以基因A的表达量或转录组为表型进行 GWAS 时的 p-value,所以基因 B 常用于排除假阳性。利用基因 B 我们可以筛选掉一部分假阳性的基因,基因 B 我们这里称为工具变量

    MR 设计的常用策略:

    一阶段 MR(One stage MR):最早的 MR 研究设计是由 G G G- X X X G G G- Y Y Y 的关联来推断 X X X- Y Y Y 的关联。因为没有 X X X- Y Y Y 因果效应大小的估计,只是通过推断来估计 X X X Y Y Y 的可能关联,比如,KIV-2 基因拷贝数变异与血浆脂蛋白 Lp(a)含量有关,同时又与心肌梗死的发生率有关,因此推断 Lp(a)含量与心肌梗死的发生有关。

    第一步:通过 G G G- X X X G G G- Y Y Y 的回归模型获得回归系数 α g α_g αg δ g δ_g δg;第二步:计算获得 X X X- Y Y Y 回归模型系数 β x = δ g / α g β_x=δ_g/α_g βx=δg/αg

    独立样本 MR(One-sample MR):该方法通过使用 2 阶段最小二乘法回归模型(2-stage least-squares regression,2SLS),定量估计暴露因素 X X X Y Y Y 之间的关联效应大小。

    PS:2SLS是指连续建模两次最小二乘法回归模型。第二次建模的自变量值为第一次建模的回归值。

    第一步:建立 G G G- X X X 回归模型,获得暴露因素预测值(predicted value, P P P
    第二步:构建 P P P- Y Y Y 的回归模型,即获得暴露因素预测值 P P P 和变量 Y Y Y 之间的回归方程。

    双向 MR(Bidirectional MR):若遗传变异 G 1 G_1 G1 X 1 X_1 X1 X 2 X_2 X2 将都有关联,但是遗传变异 G 2 G_2 G2 X 2 X_2 X2 有关却与 X 1 X_1 X1 不存在关联,则可能 X 1 X_1 X1 为因而 X 2 X2 X2 为果。在 “独立样本 MR” 和 “一阶段 MR” 中通过 G G G 仅能确定 X X X- Y Y Y 关联,但是无法判断方向,即 X X X- Y Y Y之间的因果关系。而 双向 MR 有助于确定相关性的方向。如 Timpson 等在双向 MR 设计中使用肥胖基因 FTO( G 1 G_1 G1)和 CRP 基因( G 2 G_2 G2)作为工具变量,研究 BMI( X 1 X_1 X1)和CRP水平( X 2 X_2 X2)之间的关系。作者通过 FTO 基因与 BMI、CRP 水平之间有显著性关联,而 CRP 基因与 BMI 之间无显著性关联,推断 BMI 可能为因而 CRP 水平可能为果。此方法在解决因果网络方向的问题上将会有很大用途。

    但需要注意的是,在借助工具变量 G 1 G_1 G1 判断 X 1 X_1 X1- X 2 X_2 X2 之间的相关性时,必须考虑 G 1 G_1 G1 是否存在一因多效的情况。如果 G 1 G_1 G1 X 1 X_1 X1 X 2 X_2 X2 相关,但 X 1 X_1 X1 X 2 X_2 X2 之间无直接的相关性,是通过 G 1 G_1 G1 而构成相关性,那么 G 2 G_2 G2 的使用会误导研究者认为 X 1 X_1 X1 X 2 X_2 X2 的因。为了排除 G 1 G_1 G1 是一因多效的可能性,可以使用多个与 X 1 X_1 X1 X 2 X_2 X2 相关的工具变量,综合考量

    在这里插入图片描述

    MR 对关联性的分析已经对因果方向的判断,可以用于构建网络。如在通过 GWAS 找到了许多与表型相关的位点,用 MR 可以判断这些位点与表型间的相关性是否可靠,同时还可以判断位点间是否存在因果关系,即 GWAS 挖掘到的位点之间可能是存在上下级调控关系的。当然,不只是 GWAS 的结果,任何可以找寻相关性的方法的结果都可以利用 MR 进行验证并说明因果关系,如通过机器学习找到的与表型相关联的 SNP 位点。

    展开全文
  • ,今天给大家写工具变量和孟德尔随机化,文章略微有些长,请大家准备好清醒的头脑,和半个小时的阅读时间哈。 啥是工具变量回归 Instrumental variable procedures are needed when some regressors are ...
  • 随机化算法-数值随机化算法

    千次阅读 2016-10-16 15:09:23
    在现实计算机上无法产生真正的随机数,因此在随机化算法中使用的随机数都是一定程度上随机的,即伪随机数。 线性同余法是产生伪随机数的最常用方法。由线性同余法产生的随机序列a0,a1,…,an满足 其中b³0,c...
  • 第六章-随机化

    千次阅读 2019-05-08 20:46:01
    6.2什么需要随机化 6.2.1器件配置 6.2.2环境配置 6.2.3原始输入数据 6.2.4封装后的输入数据 6.2.5协议异常、错误(error)和违规(violation) 6.2.6延时 6.3SV中的随机化 6.3.1带有随机变量的简单类 6.3.2...
  • R数据分析:孟德尔随机化分析文献解析和实例操练

    千次阅读 多人点赞 2021-07-26 09:20:20
    最近抽空研读了一篇探讨高血压和肾功能关系的文献,记录下来分享给大家,主要也是想看看孟德尔随机化的统计分析结果在论文中是如何呈现的,之后我会给大家写写孟德尔随机化的统计分析在R语言中的做法,希望可以帮助...
  • 深度学习中常用的参数初始化方法及caffe中的初始化方法介绍 本文首先介绍了深度学习中常用的权重初始化方法,然后介绍 caffe 中的初始化方法的使用。 1. 深度学习中常用的权重初始化方法 1.1 随机初始化(Gaussian)...
  • 欢迎关注”生信修炼手册”!孟德尔随机化研究借助遗传变异这一工具变量,来评估暴露因素与结局变量之间的因果效用。为了准确评估因果效应的大小,有多种方法相继被发明。本文重点看下其中常用的两种方...
  • 数值随机化算法和舍伍德随机算法

    千次阅读 2020-06-01 19:25:04
    我们之前讨论过的动态规划算法、回溯法、分支限界算法、二分法等等都是每个计算步骤确定的算法,而这次要讨论的是随机化算法,允许算法在执行过程中随机地选择下一个计算步骤。 随机化算法不一定是最优的,甚至不...
  • 本章内容包含用jmeter写脚本时用到的生成随机数、随机字符串、从文本文件中读取数据;
  • SV基础知识4----随机化和约束

    千次阅读 2021-08-07 15:20:35
    1 随机约束和分布 为什么需要随机和约束 随着芯片体积的增大,复杂度日益提高,定向测试已无法满足验证的需求,随机测试的比例逐渐提高。定向测试只能找到你认为可能存在的缺陷,而随机测试可以找到连你都没有想到...
  • 随机性检测的五项基本检测方法

    万次阅读 2020-08-31 10:57:47
    五项基本检测方法 五项基本检测包括 频数检验(F-检验) 序偶检验(S-检验) 扑克检验(P-检验) 游程检验(R-检验) 自相关检验(A-检验) 1. 频数检验(F-检验) 目的:F-检验用来保证"0"和"1"的个数大致...
  • 常用实验设计方法有哪些?

    千次阅读 2020-11-03 17:49:18
    经常使用的实验设计方法有完全随机设计、随机区组设计、交叉设计、析因设计、拉丁方设计、正交设计、嵌套设计、重复测量设计、裂区设计以及均匀设计等。不同的实验设计方法适用不同的情况。 下面介绍的这几种实验...
  • systemverilog随机函数

    千次阅读 2020-04-10 19:22:40
    随机函数 1.pre_randmosize() 和post_randmosize 有时需要在定义randmosize之前或之后立即执行一些操作,例如在...用户可以在类中定义这两个函数,分别定义随机化前和随机化后的行为。 如果某个类中定义了pre_ran...
  • 图像二值化常用方法介绍

    万次阅读 2017-04-22 16:52:24
    1.图像二值化常用方法原理介绍图像二值是图像分析与处理中最常见最重要的处理手段,二值处理方法也非常多。越精准的方法计算量也越大。1.1基于RGB色彩空间(主要是阈值的选取) 方法一:该方法非常简单,对RGB...
  • 常用数据增强方法(基于pytorch)

    千次阅读 2020-11-01 11:50:25
    方法分类: 空间位置:如平移 色彩:如灰度图、色彩抖动 形状:如放射变换 上下文场景:如遮挡、填充 具体方法: 数据中心 数据标准 缩放 裁剪 旋转 翻转 填充 噪声添加 灰度变换 线性变换 仿射变换 亮度、饱和...
  • 随机化算法基于随机方法,依赖于概率大小。  (2)分类:一般情况下,可将概率(随机化)算法大致分为四类:数值概率算法,蒙特卡罗(Monte Carlo)算法,拉斯维加斯(Las Vegas)算法和舍伍德(Sherwood)算法。
  • 本篇笔记主要调研的是论文中所使用的随机深度的正则化方法,其他很多方法的实现已经在timm库中进行了实现,笔者也是参考其中的代码进行复现的。 timm 库Git地址:...
  • 基于 Python 的 8 种常用抽样方法

    千次阅读 2022-01-27 00:23:33
    今天来和大家聊聊抽样的几种常用方法,以及在Python中是如何实现的。抽样是统计学、机器学习中非常重要,也是经常用到的方法,因为大多时候使用全量数据是不现实的,或者根本无法取到。所以我们需...
  • 随机生成常用汉字

    千次阅读 2015-05-22 12:14:27
    昨天我写了一篇随笔“随机生成常用汉字(改进版)”,生成汉字的来源增加了现代汉语常用字(共3500字)。 园友评论说: 菜菜灰园友:也有很多不认识的,用户体验不好 新的开始园友:也可以用在生成验证码上的,那就...
  • 〖Python语法进阶篇⑥〗- 线程的创建与常用方法

    千次阅读 多人点赞 2022-04-11 18:13:18
    前面的学习我们知道进程的使用需要获取 CPU和内存 的资源,而线程则是利用进程的资源来执行业务,并且通过创建多个线程,对于资源的消耗相对来说会比较低,今天就来看一看线程的使用方法具体有哪些吧。
  • 常用的降维方法

    千次阅读 2018-09-17 15:19:10
    大数据时代,随着数据的喷涌式生成以及数据收集量的不断增加,可视数据变得越来越困难,提取关键信息的难度也在不断上升。而通过把高维的数据转变为低维数据,使其能够通过可视工具直观的展示或者变成易处理的...
  • 【机器学习】特征选择常用方法 整理

    万次阅读 多人点赞 2018-06-14 19:36:12
    特征选择的好处:便于理解和可视数据,降低计算及存储压力,对抗维度灾难以提高模型预测准确率等等。 特征选择的三类主流方法为:过滤式、包裹式、嵌入式。 一、过滤式 变量排序就是一种典型的过滤式方法,.....
  • 常用数据科学方法总结梳理笔记

    千次阅读 2019-05-10 16:27:06
    常用数据科学方法 【未经允许,不得转载】 ...
  • 常用的5种数据分析方法有哪些?

    万次阅读 2021-01-06 08:07:43
    常用的数据分析方法有5种。 1.对比分析法 对比分析法指通过指标的对比来反映事物数量上的变化,属于统计分析中常用方法。常见的对比有横向对比和纵向对比。 横向对比指的是不同事物在固定时间上的对比...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 316,534
精华内容 126,613
热门标签
关键字:

常用的随机化方法