精华内容
下载资源
问答
  • 其一,数据采集上都是重复测量(repeated-measure),需要对同一个变量多测量几次才有说服力嘛 其二,都是采用方差分析的方法,分析的结果里面都有F=***,p=****,都是先整体后局部,表述也都是因素之间存在显著...

    前言:做HCI研究的童鞋们在网上搜AVOVA分析的时候,常常按照网上的经验去分析,却不知那是针对生物化学等学科的方法,,,,,明悟之时只能含泪撤稿啊?

    ANOVA是生化研究中不同条件数据分析的重要方法,具体如何实现这里不谈,有兴趣的童鞋可以自己去找度娘,而HCI中也在使用这种方法分析不同因素之间的区别,HCI中具体如何分析也不是重点,这里的重点是二者之间的差异。

    首先是两者之间的相同点,具体有二。

    其一,数据采集上都是重复测量(repeated-measure),需要对同一个变量多测量几次才有说服力嘛

    其二,都是采用方差分析的方法,分析的结果里面都有F=***,p=****,都是先整体后局部,表述也都是因素之间存在显著差异。

    但是,,,,不要被现象蒙蔽了双眼,二者之间是有显著的差异的。

    总的来说,区别也有二。

    首先,数据分析的目的不同。前者是为了说明不同时刻的因素水平之间的差异,是为了研究在时间这一附加自变量的作用下,不同时刻的水平的差异性,所以才是重复测量,顾名思义啊;后者用于组内变量的差异性,是对人的实验条件之间的差异,对象变成了人了啊(不是大白鼠!!!),不同实验条件总要一个一个经历吧,所以才是重复测量一个因变量,是为了分析不同因素对人的影响的差异。

    其次,数据的采集、记录、分析方式不同。前者的数据记录是横向为时间,纵向为条件,后者横竖都可;前者可以是所有实验对象全部做完实验后同时记录,后者必须是一个实验对象挨个经历不同的条件;数据分析上,以SPSS为例,前者是在一般线性模型中的重复测量,后者则是比较平均值中的单因素anova。

    有收获的童鞋加个关注呗?

     

    展开全文
  • Repeated measures ANOVA with R

    千次阅读 2019-09-03 16:54:08
    How to do Repeated Measures ANOVAs in R 线性混合模型(LMM)的核心思想是通过加入随机项,来控制掉抽样中的数据嵌套情形(无论是病人数据来自不同医生,此时把医生作为随机项;亦或是重复测量时,不同时间的测量...

    传统方法:

    lmer():

    How to do Repeated Measures ANOVAs in R

    线性混合模型(LMM)的核心思想是通过加入随机项,来控制掉抽样中的数据嵌套情形(无论是病人数据来自不同医生,此时把医生作为随机项;亦或是重复测量时,不同时间的测量来自同一个病人,此时把病人作为随机项)

    参考文章:

    展开全文
  • 1, https://statistics.laerd.com/statistical-guides/repeated-measures-anova-statistical-guide.php ...Repeated measures ANOVA is the equivalent of the one-way ANOVA, but for related, ...

    1, https://statistics.laerd.com/statistical-guides/repeated-measures-anova-statistical-guide.php

    是什么东西?实验数据满足什么条件时用?

    Repeated measures ANOVA is the equivalent of the one-way ANOVA, but for related, not independent groups, and is the extension of thedependent t-test. A repeated measures ANOVA is also referred to as a within-subjects ANOVA or ANOVA for correlated samples. All these names imply the nature of the repeated measures ANOVA, that of a test to detect any overall differences between related means. There are many complex designs that can make use of repeated measures, but throughout this guide, we will be referring to the most simple case, that of a one-way repeated measures ANOVA. This particular test requires one independent variable and one dependent variable. The dependent variable needs to be continuous (interval or ratio) and the independent variable categorical (either nominal or ordinal).

    We can analyse data using a repeated measures ANOVA for two types of study design. Studies that investigate either (1) changes in mean scores over three or more time points, or (2) differences in mean scores under three or more different conditions. 

     

    SPSS Repeated Measures ANOVA Tutorial

    SPSS Repeated Measures ANOVA II

    在spss中怎么分析数据。

    之后两两分析用, paired samples t-tests 或 Bonferroni 或

     

    3,详细讲解的博文

    转载于: SPSS:单因素重复测量方差分析

    一、问题与数据

     

    研究者招募了10名研究对象,研究对象进行了6个月的锻炼干预。CRP浓度共测量了3次:干预前的CRP浓度——crp_pre;干预中(3个月)——crp_mid;干预后(6个月)——crp_post。这三个时间点代表了受试者内因素“时间”的三个水平,因变量是CRP的浓度,单位是mg/L。部分数据如下:

     

    二、对问题的分析

    使用One-way Repeated Measures Anova进行分析时,需要考虑6个假设。 

     

    对研究设计的假设:

     

    假设1:因变量唯一,且为连续变量;

     

    假设2:受试者内因素(Within-Subject Factor)有3个或以上的水平。

     

    注:在重复测量的方差分析模型中,对同一个体相同变量的不同次观测结果被视为一组,用于区分重复测量次数的变量被称为受试者内因素,受试者内因素实际上是自变量。

     

    对数据的假设:

     

    假设3:受试者内因素的各个水平,因变量没有极端异常值;

     

    假设4:受试者内因素的各个水平,因变量需服从近似正态分布;

     

    假设5:对于受试者内因素的各个水平组合而言,因变量的方差协方差矩阵相等,也称为球形假设。

    三、思维导图

    (点击图片可查看大图)

    四、对假设的判断

    在分析时,如何考虑和处理这5个假设呢?

     

    由于假设1-2都是对研究设计的假设,需要研究者根据研究设计进行判断,所以我们主要对数据的假设3-5进行检验。

     

    (一) 检验假设3和假设4的SPSS操作

     

    1. 在主菜单点击Analyze > Descriptive Statistics > Explore...,如下图:

     

     

    2. 出现Explore对话框,将crp_pre、crp_mid和crp_post选入Dependent List,点击Plots;

     

     

    3. 出现下图Plots对话框;

     

     

    4. 在Boxplots下选择Dependents together,去掉Descriptive下Stem-和-leaf,选择Normality plots with tests,点击Continue;

     

     

    5. 回到Explore主对话框,在Display下方选择Plots,点击OK。

     

     

    (二) 检验假设3:受试者内因素的各个水平,因变量没有极端异常值

     

    1. 在输出的结果中,如下图所示,在箱式图中,距离箱子边缘超过1.5倍箱身长度的数据点定义为异常值,在本例中,未发现异常值

     

     

    2. 为了方便进一步的理解,下面图示是有异常值的箱式图,上下边缘超过1.5倍箱式长度为异常值,如下图所示,用“圆圈”表示,右上标为异常值在数据表中所对应的行数;将距离箱子边缘超过3倍箱身长度的数据点定义为极端值(极端异常值),用“*”表示,右上标代表异常值在数据表中所对应的行数。因此,在箱式图中查看异常值时,可以直接看“圆圈”或“*”。

     

     

    3. 异常值的处理

     

    导致数据中存在异常值的原因有3种:

     

    (1) 数据录入错误:首先应该考虑异常值是否由于数据录入错误所致。如果是,用正确值进行替换并重新进行检验;

     

    (2) 测量误差:如果不是由于数据录入错误,接下来考虑是否因为测量误差导致(如仪器故障或超过量程),测量误差往往不能修正,需要把测量错误的数据删除;

     

    (3) 真实存在的异常值:如果以上两种原因都不是,那最有可能是一种真实的异常数据。这种异常值不好处理,但也没有理由将其当作无效值看待。目前它的处理方法比较有争议,尚没有一种特别推荐的方法。

     

    需要注意的是,如果存在多个异常值,应先把最极端的异常值去掉后,重新检查异常值情况。这是因为有时最极端异常值去掉后,其他异常值可能会回归正常。

     

    异常值的处理方法分为2种:

     

    (1) 保留异常值:

    • 采用非参数Friedman test检验;

    • 用非最近端的值代替极端异常值(如用第二大的值代替极端异常值);

    • 因变量转换成其他形式;

    • 将异常值纳入分析,并坚信其对结果不会产生实质影响。

     

    (2) 剔除异常值:

     

    直接删除异常值很简单,但却是没有办法的办法。当我们需要删掉异常值时,应报告异常值大小及其对结果的影响,最好分别报告删除异常值前后的结果。而且,应该考虑有异常值的个体是否符合研究的纳入标准。如果其不属于合格的研究对象,应将其剔除,否则会影响结果的推论。

     

    (更多阅读:怎么判别我的数据中存在特异值?教你几招!

     

    (三) 检验假设4:受试者内因素的各个水平,因变量需服从近似正态分布

     

    1. 对于样本量较小(<>P<>P均大于0.05,说明受试者内因素的三个水平crp_pre、crp_mid和crp_post均服从正态分布

     

     

    2. 如果数据不服从正态分布,可以有如下4种方法进行处理:

     

    (1) 数据转换:对转换后呈正态分布的数据进行单因素方差分析。当各组因变量的分布形状相同时,正态转换才有可能成功。对于一些常见的分布,有特定的转换形式,但是对于转换后数据的结果解释可能比较复杂。

     

    (2) 使用非参数检验:可以使用Friedman test等非参数检验方法,但是要注意Friedman test和单因素重复测量方差分析的无效假设和备择假设不太一致。

     

    (3) 直接进行分析:由于单因素重复测量方差分析对于偏离正态分布比较稳健,尤其是在各组样本量相等或近似相等的情况下,而且非正态分布实质上并不影响犯I型错误的概率。因此可以直接进行检验,但是结果中仍需报告对正态分布的偏离。

     

    (4) 检验结果的比较:将转换后和未转换的原始数据分别进行单因素重复测量方差分析,如果二者结论相同,则再对未转换的原始数据进行分析。

     

    (更多阅读:SPSS教程:判断数据正态分布的超多方法!SPSS详细操作:正态转换的多种方法

    五、SPSS操作

    (一) 单因素重复测量方差分析的操作

     

    1. 在主菜单下点击Analyze > General Linear Model > Repeated measures...,如下图所示:

     

     

    2. 出现Repeated Measures Define Factor(s)对话框,如下图所示:

     

     

    3. 在Within-Subject Factor Name:中将“factor1”更改为time,因为共测量了3次CRP的水平,所以在Number of Levels:中填入3;

     

     

    4. 点击Add,出现下图:

     

     

    5. 在Measure Name:中赋予因变量一个合理的名字,本例中因变量为CRP的水平,所以填入CRP,点击下方的Add,出现下图:

     

     

    6. 点击Define,出现下图Repeated Measures对话框:

     

     

    7. 如下图所示,Within-Subjects Variables后面的括号内是受试者内因素的名字,框内三条分别代表“time”对应的各个水平;

     

     

    8. 将crp_pre、crp_mid和crp_post一起选入右侧的框中,如下图所示:

     

     

    9. 点击Plots,出现Repeated Measures: Profile Plots 对话框,如下图所示:

     

     

    10. 将time选入Horizontal Axis:框中;

     

     

    11. 点击Add,出现下图,点击Continue;

     

     

    12. 点击Options,出现Repeated Measures: Options对话框;

     

     

    13. 将time选入Display Means for:中;下方Compare main effects为勾选状态;在Confidence interval adjustment:下选择Bonferroni;在Display下方勾选Descriptive statistics 和Estimates of effect size;点击Continue,点击OK。

     

     

    (二) 单因素重复测量方差分析→自定义组间比较(custom contrasts)

     

    如果只关心特定组别间的差异,你需要知道如何进行自定义比较(custom contrasts),以及如何对多重比较结果进行调整,这就要用到SPSS软件中的Syntax Editor窗口编写相应程序语句。当满足方差齐性条件时,推荐采用单因素重复测量方差分析进行自定义组间比较。

     

    1. 操作同上述1-13步的操作,这里不再赘述。接下来:

     

    (1) 点击Paste,出现IBM SPSS Statistics Syntax Editor窗口:

     

     

    (2) 在 /PRINT 和 /CRITERIA两行中间,输入/MMATRIX = '0 vs 6 Months' ALL 1 0 -1; 

     

     

    /MMATRIX=旨在告诉SPSS我们要做一个自定义假设; 1  0  -1表示要进行比较的自变量组别,组别的顺序和SPSS里输入的组别顺序有关:这里从左到右(1  0  -1)分别对应着crp_pre、crp_mid和crp_post,表示将crp_pre与crp_post进行比较。“ALL”代表受试者内因素的所有水平。

     

    注:自定义比较包括了简单比较(simple contrasts)和复合比较(complex contrasts)。简单比较为只比较自变量某两个组别间的差异,需要建立线性比较函数(linear contrast,φ)。它包含一系列组别和每个组别对应的均数,组别取值只能为1,-1,0。我们把要比较的两组的组别分别赋值为1和-1,其他不比较的组别组别赋值为0

     

    本例中crp_pre组别为1,crp_post组别为-1,其他组别均为0,则是要比较干预前CRP水平和干预后CRP水平的差异,看二者的平均CRP水平的差值是否为0(即组别为1的组别减去组别为-1的组别,以组别为-1的组别为参照组,组别赋值的正负与研究设计和研究假设有关)。

     

    (3) 用/MMATRIX指令增加另外比较:

     /MMATRIX = '0 vs 3&6 Months' ALL 1 -1/2 -1/2

     

     

    注:复合比较为比较自变量超过2个组别的组合间的差异。同样采用线性比较函数的方法,某组合的组别赋值为1或-1除以组合内的组数,但是要保证要比较的组间组合与另一组(组合)的所有组别加起来为0,组别赋值的正负与研究设计和研究假设有关。

     

    本例中, /MMATRIX = '0 vs 3&6 Months' ALL 1 -1/2 -1/2表示crp_pre与crp_mid、crp_post差异的比较。 

     

    (4) 多重比较的校正

     

    接下来,我们需要校正显著性水平(α),通常也可以校正每次比较的P值和可信区间,得到调整后P值和联合可信区间(simultaneous confidence intervals)。我们首先采用Bonferroni方法对显著性水平α进行校正,公式如下:

     

    调整后α=调整前α ÷ 比较的次数

     

    本例中我们需要进行2次比较,则调整后α=0.05÷2=0.025。

     

     

    (5) 箭头标注处为SPSS软件默认的显著性水平α=0.05:

    /CRITERIA=ALPHA(.05)

     

    我们将其改为调整后的显著性水平α=0.025:

    /CRITERIA=ALPHA(.025)

     

     

    (6) 在菜单栏点击Run > All。

    六、结果解释 

    1. 基本描述

     

    (1) SPSS首先会给出Within-Subjects Factors表,该表提示了受试者内因素crp_pre、crp_mid和crp_post对应的标签为1、2和3,在后面的Estimates表和Pairwise Comparisons表中会用到。

     

     

    (2) Descriptive Statistics表给出了crp_pre、crp_mid和crp_post的均值、标准差和例数。受试者干预前、干预中和干预后的CRP浓度分别为4.33 ± 0.64 mg/L、3.94 ± 0.57 mg/L和3.65 ± 0.43mg/L。

     

     

    (3) Estimates表中没有再出现crp_pre、crp_mid和crp_post的变量名,而是给出了对应的3个时间点的标签。该表中给出了crp_pre、crp_mid和crp_post的均值、标准误和95%的置信区间。

     

     

    (4) Estimated Marginal Means of CRP给出了三个时间点CRP的均值的折线图,可以看到从干预前到干预后呈下降趋势,但1到2的时间点下降程度比2到3的下降程度大。

     

     

    2. 球形假设的检验结果

     

    (1) 在Mauchly's Test of Sphericity表中,给出了球形假设的检验结果。如果P<>P>0.05,则满足球形假设。本例中,χ2=6.270,P=0.043,所以不满足球形假设。

     

     

    (2) 当违背了球形假设条件时,需要进行epsilon (ε)校正。如下图突出显示,SPSS共用了三种方法进行校正,分别为:Greenhouse-Geisser、Huynh-Feldt 和Lower-bound。

     

    在实际应用中,只用Greenhouse-Geisser和Huynh-Feldt两种方法,这两种方法计算的epsilon (ε)的值越低,说明违反球形假设的程度越大,当epsilon (ε)=1时,说明完美的服从了球形假设。

     

    Maxwell & Delaney (2004)建议当epsilon (ε)<0.75时,使用greenhouse-geisser方法校正。其他统计学家建议当epsilon (ε)="">0.75时,使用Huynh-Feldt方法校正。

     

     

     

    (3) 满足球形假设的结果

     

    在Tests of Within-Subjects Effects表中,该表给出了crp_pre、crp_mid和crp_post在不同时间点的均值是否存在差异;偏η2(Partial Eta Squared)表示控制了其他自变量后,因变量被某一自变量解释的百分比(单因素方差分析时,即自变量对因变量的解释程度),代表样本的效应量。

     

    如果P>0.05,则表示各组间均数差异无统计学意义(本例中,P值显示为0.000,不代表P值实际为0,而是表示P<>P<>2=0.75。

     

     

    以上具体结果见下表:

     

     

    目前许多杂志要求除了列出上述结果,还要报告效应量。计算单因素方差分析的效应量有很多方法,比较推荐的是计算偏ω2,公式如下:

     

     

    公式里k =受试者内因素的个数,F为F统计量,n=研究对象的数量,计算结果如下:

     

     

    可见偏ω2=0.63<>2,与偏η2相比,偏ω2还考虑了抽样误差,可以提供相对准确的总体效应量的估计。

     

    (4) 不满足球形假设的结果

     

    当不满足球形假设时,可以采用Greenhouse & Geisser方法进行校正,如下表中突出显示的内容。可见,自由度(df)由原来符合球形假设时的2变成了1.296,均方(Mean Square)由原来的1.164变成1.797,方差不变。

     

    Greenhouse & Geisser的校正结果显示不同的时间点的CRP浓度的差异具有统计学意义,F(1.296, 11.663)=26.938,P<>2=0.75。

     

     

    以上具体结果见下表:

     

     

    (5) Bonferroni post hoc test检验结果

     

    如果事前没有对特定组间差异进行假设,或者关心所有组间的两两比较,则应该进行所有组间的两两比较(post hoc test)。推荐使用Bonferroni post hoc test方法进行组间两两比较。该检验不仅提供了每两个组间比较的P值,也给出了均数差值的可信区间。

     

    在前面我们已经知道球形假设不容易满足,会影响单因素重复测量方差分析的结果。Bonferroni post hoc test 的实质是在进行Bonferroni对显著性水平校正的基础上,配对t检验的多重比较。结果见Pairwise Comparisons表格:

     

     

    本例中受试者内因素有3个,因此会有3种不同的组间组合。当我们要比较crp_pre和crp_mid时,可以见如下标黄部分。两行均为crp_pre和crp_mid比较的结果。

     

     

    我们回顾一下之前的结果,可见上表中第一行标黄部分Mean Difference(I-J)为crp_pre与crp_mid之差:4.3300 - 3.9400 = 0.390。而第二行的标黄部分则为crp_mid与crp_pre之差: 3.9400 - 4.3300 = -0.390。

     

     

    另外,见下图标黄部分,可见标准误和P值是相同的。

     

     

    我们再对比一下95%的置信区间,见下表中标黄部分,置信区间的上限和下限符号不同,绝对值相同。

     

     

    通过对上述数值的理解,我们可以报告以上结果:干预前CRP浓度为4.33 ± 0.64mg/L,干预中三个月时CRP浓度为3.94 ± 0.57mg/L,比干预前显著降低了0.390(95%置信区间:0.242-0.538)mg/L(P<0.001),干预后6个月时crp浓度为3.65 ±="">P=0.001),未发现干预中和干预后CRP浓度的差异具有统计学意义。

     

    1) 自定义组间比较的结果

     

    当我们在syntax编辑器输入了自定义比较的组别后,我们会得到如下Contrast Results (K Matrix) 表格。此表为干预前和干预后CRP浓度比较的结果,与我们当时输入的比较顺序对应一致。

     

     

    首先,我们来看Contrast Estimate、Lower Bound和Upper Bound这三行的结果。Contrast Estimate一行结果为0.680,这是所比较的2组间的均数差值;而我们看到置信区间是97.5%置信区间而非95%置信区间,这是因为我们进行了Bonferroni校正,我们还是报告成95%的置信区间。

     

     

    对于P值,我们双击P值,出现下图,由于进行了Bonferroni校正,显著性水平为0.025,0.000229<>

     

     

    另外,还需要报告效应量,在Univariate Test Results中,偏η2=0.795。

     

     

    2) 复合比较的结果

     

    如下图标黄部分所示,是干预前和干预中、干预后两者的平均值进行比较,干预前与干预中、干预后二者均值的差值为0.535(95%置信区间:0.338-0.732)mg/L,P<><>

     

     

    另外,还需要报告效应量,在Univariate Test Results中,偏η2=0.855。

     

    七、撰写结论

    1. 假如:满足球形假设,单因素重复测量方差分析显示组间差异无统计学意义:

     

    采用单因素重复测量方差分析方法,判断6个月的锻炼干预对受试者CRP浓度的影响。经箱线图判断,数据无异常值;经Shapiro-Wilk检验,各组数据服从正态分布(P>0.05);经Mauchly's球形假设检验,因变量的方差协方差矩阵相等,χ2(2)=3.343, P=0.188。

     

    数据以均数±标准差的形式表示。受试者干预前、干预中和干预后的CRP浓度分别为4.33 ± 0.64 mg/L、3.94 ± 0.57 mg/L和3.65 ± 0.43mg/L。干预前、干预中和干预后的CRP浓度差异不具有统计学意义,F(2, 18)=1.256, P=0.309,偏η2=0.02。

     

    2. 假如:不满足球形假设,单因素重复测量方差分析显示组间差异无统计学意义:

     

    采用单因素重复测量方差分析方法,判断6个月的锻炼干预对受试者CRP浓度的影响。经箱线图判断,数据无异常值;经Shapiro-Wilk检验,各组数据服从正态分布(P>0.05);经Mauchly's球形假设检验,因变量的方差协方差矩阵不相等,χ2(2)=6.270, P=0.043,通过Greenhouse & Geisser方法校正ε=0.648。

     

    数据以均数±标准差的形式表示。受试者干预前、干预中和干预后的CRP浓度分别为4.33 ± 0.64 mg/L、3.94 ± 0.57 mg/L和3.65 ± 0.43mg/L。干预前、干预中和干预后的CRP浓度差异不具有统计学意义,校正后F(1.296, 11.663)=1.256, P=0.300,偏η2 =0.02。

     

    3. 不满足球形假设,单因素重复测量方差分析显示组间差异有统计学意义,并进行了两两比较(本文例子的结果):

     

    采用单因素重复测量方差分析方法,判断6个月的锻炼干预对受试者CRP浓度的影响。经箱线图判断,数据无异常值;经Shapiro-Wilk检验,各组数据服从正态分布(P>0.05);经Mauchly's球形假设检验,因变量的方差协方差矩阵不相等,χ2(2)=6.270, P=0.043,通过Greenhouse & Geisser方法校正ε=0.648。

     

    数据以均数±标准差的形式表示。受试者干预前、干预中和干预后的CRP浓度分别为4.33 ± 0.64 mg/L、3.94 ± 0.57 mg/L和3.65 ± 0.43mg/L。干预前、干预中和干预后的CRP浓度差异具有统计学意义,校正后F(1.296, 11.663)=26.938, P<0.001,>2=0.75。

     

    干预中三个月时CRP浓度比干预前显著降低了0.390(95%置信区间:0.242-0.538)mg/L(P<0.001),干预后6个月时crp浓度比干预前显著降低了0.680(95%置信区间:0.342-1.018)mg>P=0.001),未发现干预中和干预后CRP的浓度存在的差异具有统计学意义。

     

    4. 从无效假设和备择假设的角度出发,当单因素重复测量方差分析显示组间差异有统计学意义时:各组间均数差异有统计学意义(P<>

     

    5. 从无效假设和备择假设的角度出发,当单因素重复测量方差分析显示组间差异无统计学意义时:各组间均数差异无统计学意义(P>0.05)。因此,不能拒绝无效假设,不能接受备择假设。

    八、绘制图表

    最后,我们来学习如何在SPSS软件中绘制简单线图,从而更好地展示展示单因素重复测量方差分析的结果,使其更适合于学术发表。

     

    1. 绘制简单线图的操作

     

    (1) 在菜单栏中,点击Graphs > Chart Builder...:

     

     

    出现如下Chart Builder对话框:

     

     

    (2) 在Chart Builder对话框的左下角,Choose from:模块中选择“Line”:

     

     

    (3) 在Chart Builder对话框的中下部,出现2个不同的线图选项,把左侧的第一个(Simple Line)拖进上面的主要图表预览窗口,并点击Element Properties:

     

     

    (4) 出现下图,图表预览窗口的线图横纵轴分别显示“X-Axis?”和“Y-Axis?”:

     

     

    (5) 从Variables:模块中把自变量time拖进“X-Axis?”,把因变量crp拖进“Y-Axis?”:

     

     

    (6) 在Element Properties对话框中勾选Display error bars,激活–Error Bars Represent– 模块,勾选Confidence intervals,Level (%):设定为95,当然也可以根据需要勾选Standard error或者Standard deviation,点击Apply:

     

     

    (7) 在'Edit Properties of: 模块中点击'Y-Axis1 (Line1)'进行设置,出现下图:

     

     

    (8) 去掉勾选Scale Range下的Minimum,点击Apply并进行确认;

     

     

    (9) 如果想改变自变量分组的顺序,可以在'Edit Properties of: 模块中点击'X-Axis1 (Line1)'进行设置,并在更改后点击Apply,点击OK。

     

     

    2. 简单线图结果

     

    按照上述操作步骤,生成简单线图如下图所示:error bar表示均值的95%置信区间。

     

     

     

     

    展开全文
  • You could wrap it into a plpgsql function for repeated use, hand in the table name as parameter and use   EXECUTE . Result: what | bytes / ct | bytes_pretty | bytes_per_row -- --------...
    Q:
     

    I have a PostgreSQL table. select * is very slow whereas select id is nice and quick. I think it may be that the size of the row is very large and it's taking a while to transport, or it may be some other factor.

    I need all of the fields (or nearly all of them), so selecting just a subset isn't a quick fix. Selecting the fields that I want is still slow.

    Here's my table schema minus the names:

    integer                  | not null default nextval('core_page_id_seq'::regclass)
    character varying(255)   | not null
    character varying(64)    | not null
    text                     | default '{}'::text
    character varying(255)   | 
    integer                  | not null default 0
    text                     | default '{}'::text
    text                     | 
    timestamp with time zone | 
    integer                  | 
    timestamp with time zone | 
    integer                  | 

    The size of the text field may be any size. But still, no more than a few kilobytes in the worst case.

    Questions

    1. Is there anything about this that screams 'crazy inefficient'?
    2. Is there a way to measure page size at the Postgres command-line to help me debug this?
     
     
    A1:
     
     
     
     

    Q2: way to measure page size

    PostgreSQL provides a number of Database Object Size Functions, you can use. I packed the most interesting ones in this query and added some Statistics Access Functions.

    This is going to demonstrate that the various methods to measure the "size of a row" can lead to very different results. It all depends what you want to measure exactly.

    Replace public.tbl with your (optionally schema-qualified) table name to get a compact view of collected statistics about the size of your rows.

    WITH x AS (
       SELECT count(*)               AS ct
            , sum(length(t::text))   AS txt_len  -- length in characters
            , 'public.tbl'::regclass AS tbl  -- provide (qualified) table name here
       FROM   public.tbl t  -- ... and here
       )
    , y AS (
       SELECT ARRAY [pg_relation_size(tbl)
                   , pg_relation_size(tbl, 'vm')
                   , pg_relation_size(tbl, 'fsm')
                   , pg_table_size(tbl)
                   , pg_indexes_size(tbl)
                   , pg_total_relation_size(tbl)
                   , txt_len
                 ] AS val
            , ARRAY ['core_relation_size'
                   , 'visibility_map'
                   , 'free_space_map'
                   , 'table_size_incl_toast'
                   , 'indexes_size'
                   , 'total_size_incl_toast_and_indexes'
                   , 'live_rows_in_text_representation'
                 ] AS name
       FROM   x
       )
    SELECT unnest(name)                AS what
         , unnest(val)                 AS "bytes/ct"
         , pg_size_pretty(unnest(val)) AS bytes_pretty
         , unnest(val) / ct            AS bytes_per_row
    FROM   x, y
    
    UNION ALL SELECT '------------------------------', NULL, NULL, NULL
    UNION ALL SELECT 'row_count', ct, NULL, NULL FROM x
    UNION ALL SELECT 'live_tuples', pg_stat_get_live_tuples(tbl), NULL, NULL FROM x
    UNION ALL SELECT 'dead_tuples', pg_stat_get_dead_tuples(tbl), NULL, NULL FROM x;

    I only pack the values in arrays and unnest() again, so I don't have to spell out calculations for every single row repeatedly.

    General row count statistics are appended at the end with unconventional SQL-foo to get everything in one query. You could wrap it into a plpgsql function for repeated use, hand in the table name as parameter and use EXECUTE.

    Result:

                  what                | bytes/ct | bytes_pretty | bytes_per_row
    -----------------------------------+----------+--------------+---------------
     core_relation_size                | 44138496 | 42 MB        |            91
     visibility_map                    |        0 | 0 bytes      |             0
     free_space_map                    |    32768 | 32 kB        |             0
     table_size_incl_toast             | 44179456 | 42 MB        |            91
     indexes_size                      | 33128448 | 32 MB        |            68
     total_size_incl_toast_and_indexes | 77307904 | 74 MB        |           159
     live_rows_in_text_representation  | 29987360 | 29 MB        |            62
     ------------------------------    |          |              |
     row_count                         |   483424 |              |
     live_tuples                       |   483424 |              |
     dead_tuples                       |     2677 |              |

    The additional module pgstattuple provides more useful functions.

    Update for Postgres 9.3+

    We could use the new form of unnest() in pg 9.4 taking multiple parameters to unnest arrays in parallel.
    But using LATERAL and a VALUES expression, this can be simplified further. Plus some other improvements:

    SELECT l.what, l.nr AS "bytes/ct"
         , CASE WHEN is_size THEN pg_size_pretty(nr) END AS bytes_pretty
         , CASE WHEN is_size THEN nr / x.ct END          AS bytes_per_row
    FROM  (
       SELECT min(tableoid)        AS tbl      -- same as 'public.tbl'::regclass::oid
            , count(*)             AS ct
            , sum(length(t::text)) AS txt_len  -- length in characters
       FROM   public.tbl t  -- provide table name *once*
       ) x
     , LATERAL (
       VALUES
          (true , 'core_relation_size'               , pg_relation_size(tbl))
        , (true , 'visibility_map'                   , pg_relation_size(tbl, 'vm'))
        , (true , 'free_space_map'                   , pg_relation_size(tbl, 'fsm'))
        , (true , 'table_size_incl_toast'            , pg_table_size(tbl))
        , (true , 'indexes_size'                     , pg_indexes_size(tbl))
        , (true , 'total_size_incl_toast_and_indexes', pg_total_relation_size(tbl))
        , (true , 'live_rows_in_text_representation' , txt_len)
        , (false, '------------------------------'   , NULL)
        , (false, 'row_count'                        , ct)
        , (false, 'live_tuples'                      , pg_stat_get_live_tuples(tbl))
        , (false, 'dead_tuples'                      , pg_stat_get_dead_tuples(tbl))
       ) l(is_size, what, nr);

    Same result.

     

    Q1: anything inefficient?

    You could optimize column order to save some bytes per row, currently wasted to alignment padding:

     

    integer                  | not null default nextval('core_page_id_seq'::regclass)
    integer                  | not null default 0
    character varying(255)   | not null
    character varying(64)    | not null
    text                     | default '{}'::text
    character varying(255)   | 
    text                     | default '{}'::text
    text                     |
    timestamp with time zone |
    timestamp with time zone |
    integer                  |
    integer                  |

    This saves between 8 and 18 bytes per row. I call it "column tetris". Details:

    Also consider:

    A2:
     
    An approximation of the size of a row, including the TOAST'ed contents, is easy to get by querying the length of the TEXT representation of the entire row:
    SELECT octet_length(t.*::text) FROM tablename AS t WHERE primary_key=:value;

    This is a close approximation to the number of bytes that will be retrieved client-side when executing:

    SELECT * FROM tablename WHERE primary_key=:value;

    ...assuming that the caller of the query is requesting results in text format, which is what most programs do (binary format is possible, but it's not worth the trouble in most cases).

    The same technique could be applied to locate the N "biggest-in-text" rows of tablename:

    SELECT primary_key, octet_length(t.*::text) FROM tablename AS t
       ORDER BY 2 DESC LIMIT :N;

     

     

     

    注:
    1、octet_lengt h(string)函数表示的是Number of bytes in binary string,而length则表示的字符个数。
     
     
     
     
     

    转载于:https://www.cnblogs.com/xiaotengyi/p/7794064.html

    展开全文
  • 因为自变量均为Within-subject factors时,故用Two-way repeated-measures ANOVA。 两因素分别为:不同的状态(P1、P2、P3、P4、P5)和不同的参数(MS_A、MS_B、MS_C、MS_D) 部分数据如下表: 二、SPSS操作 在主...
  • <p>That's the 2nd, 3rd and 5th element of the array with a couple commas and a newline added in for good measure repeated all the way down the array. <p><strong>EDIT:</strong></p> <p>I have an error...
  • In order to avoid unnecessary repeated routine code to measure performance such as below: " get timestamp1 " run the method whose performance you want to measure " get timestamp2 " duration = timestam...
  • Created by Wang, Jerry, last modified on Jan 05, ...In order to avoid unnecessary repeated routine code to measure performance such as below: " get timestamp1 " run the method whose performance you ...
  • Redis基础--Redis 4.0 常用配置

    万次阅读 2018-07-29 11:47:14
    # Redis configuration file example. # # Note that in order to read the configuration file, Redis must be # started with the file path as first argument: # # 启动 Redis 时读取指定的 redis.conf 配置。...
  • using spm1d package (v.0.4.3), compute anova and post-hoc tests from anova1 to anova...The type of anova (if required) and post-hoc are choosen regarding the independant or repeated measure effect given.
  • In MAXDISTCOLOR I use repeated application of a simple greedy algorithm to find the maximally-distinct colors: the repeated greedy algorithm is not particularly fast and is not a general solution for...
  • 论文下载百度云链接:链接:https://pan.baidu.com/s/100OAXTIOTPoMjbi-dwOcxA ... 今天更新到2019年10月11号 目录 今天更新到2019年9月4号 Understanding the Representation Power of Graph Neural Networks i...
  • 论文下载百度云链接:链接:https://pan.baidu.com/s/100OAXTIOTPoMjbi-dwOcxA ... 今天更新到2019年9月6号 目录 今天更新到2019年9月4号 Understanding the Representation Power of Graph Neural Networks in ...
  • main effect 主效应 matrix 矩阵 maximum 最大值 maximum likelihood estimation 极大似然估计 mean squared deviation(MSD) 均方差 mean sum of square 均方和 measure 衡量 media 中位数 M-estimator M估计minimum...
  • Scipy教程 - 统计函数库scipy.stats

    万次阅读 多人点赞 2015-10-30 18:44:12
    http://blog.csdn.net/pipisorry/article/details/49515215统计函数Statistical functions(scipy.stats)Python有一个很好的统计推断包。那就是scipy里面的stats。Scipy的stats模块包含了多种概率分布的随机变量,...
  • 目录 1.写在前面 2.具体信息 2.1 单位 2.2 包含 2.3 网络 2.4通用 GENERAL 2.5 快照 2.6REPLICATION 主从复制 2.7SECURITY 安全 2.8 CLIENTS客户端连接相关配置 2.9 AOF相关配置 ......
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <!-- saved from url=(0063)... <...
  • OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks;论文被引:4061(06/09/2020)
  • Selective Search for Object Recognition;论文被引:4498(07/09/2020)
  • 【CV-Paper 02】ZFNet-2013

    2020-08-20 18:57:40
    Visualizing and Understanding Convolutional Networks;论文年份:2013;论文被引:9898(20/08/2020)
  • to avoid repeated allocations. By reusing s (passed by reference), we allocate new memory only when we need to expand s 's capacity. This technique is sometimes called the "caller-allocated out" ...
  • 阿里云centos环境之linux上redis安装及踩过的坑<七> 阿里云centos环境之linux上redis安装及踩过的坑七 第一下载上传 第二解压安装 第三修改配置 第四启动 第五用redis-cli测试内网 第六用java测试外网 ...
  • 一 Redis启动 Redis有两种启动,分别是:前端启动、后端启动。要启动Redis,就需要到Redis的bin目录下执行启动命令,先看看bin目录结构 直接上启动命令:注意指定配置文件 ..../redis-server ../redis.conf ...
  • If message processing is idempotent (see the previous item), repeated delivery should not be a problem. Design applications to gracefully degrade  when reaching resource limits, and take ...
  • 想使用Rx编写代码,如何开始呢?我们学习了Rx的核心类型,也知道不应该自己实现IObserver&lt;T&gt;和IObservable&lt;T&gt;接口,而应该使用工厂方法,也不应该使用Subject类。假如已有一个可观察...
  • The performance measure reported by k-fold cross-validation is then the average of the values computed in the loop. This approach can be computationally expensive, but does not waste too much data (as...
  • Redis & Redis Sentinel 基本使用

    千次阅读 2018-03-22 23:14:01
    Redis &amp; Redis-sentinel 基本使用 本文主要介绍如下几点内容: Redis基本配置 Redis Sentinel基本配置 Redis Client客户端基本内容 Redis Sentinel客户端基本内容 ...与本文相关的代码与配置文件都已经上传...
  • Web-拾贝

    千次阅读 2018-03-10 13:45:55
    JavaScript MVC框架PK:Angular、Backbone、CanJS与Emberhttp://www.csdn.net/article/2013-04-25/2815032-A-Comparison-of-Angular-Backbone-CanJS-and-Ember一个好的js method 方法查询的网站, 有browser兼容的...
  • Ubuntu 意外死机 (Linux Crash/Hang)解决以Intel Bay Trail/J1900/N2940 为例,通常是由于linux kernel和硬件兼容性问题导致:查询网址:https://bugzilla.kernel.org/点开对应问题,就可以看到问题,和一些解决...
  • Android性能优化系列之布局优化

    万次阅读 2017-01-15 22:20:14
    在Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性、复杂度也会随之增长,这样使得UI布局的优化,显得至关重要,UI布局不慎,就会引起过度绘制,从而造成UI卡顿的情况,本篇博客...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,145
精华内容 858
关键字:

measurerepeated