精华内容
下载资源
问答
  • p值 统计学意义P values are one of the most widely used concepts in statistical analysis. They are used by researchers, analysts and statisticians to draw insights from data and make informed decisions...

    p值 统计学意义

    P values are one of the most widely used concepts in statistical analysis. They are used by researchers, analysts and statisticians to draw insights from data and make informed decisions.

    P值是统计分析中使用最广泛的概念之一。 研究人员,分析人员和统计学家使用它们来从数据中汲取见解并做出明智的决策。

    Along with statistical significance, they are also one of the most widely misused and misunderstood concepts in statistical analysis.

    除了统计意义外,它们还是统计分析中最广泛使用和误解的概念之一。

    This article will explain:

    本文将说明:

    • how a P value is used for inferring statistical significance

      P值如何用于推断统计显着性
    • how P values are calculated

      如何计算P值
    • and how to avoid some common misconceptions

      以及如何避免一些常见的误解

    回顾:假设检验 (Recap: Hypothesis testing)

    Hypothesis testing is a standard approach to drawing insights from data. It is used in virtually every quantitative discipline, and has a rich history going back over one hundred years.

    假设检验是一种从数据中获取见解的标准方法。 几乎所有定量学科都使用它,并且已有一百多年的悠久历史。

    The usual approach to hypothesis testing is to define a question in terms of the variables you are interested in. Then, you can form two opposing hypotheses to answer it.

    假设检验的通常方法是根据您感兴趣的变量定义一个问题。然后,您可以形成两个相反的假设来回答该问题。

    • The null hypothesis claims there is no statistically significant relationship between the variables

      零假设声称变量之间没有统计上的显着关系

    • The alternative hypothesis claims there is a statistically significant relationship between the variables

      替代假设声称变量之间存在统计上的显着关系

    For example, say you are testing whether caffeine affects programming productivity. There are two variables you are interested in - the dose of the caffeine, and the productivity of group of software developers.

    例如,假设您正在测试咖啡因是否会影响编程效率。 您感兴趣的变量有两个-咖啡因的剂量和软件开发人员的生产率。

    The null hypothesis would be:

    假设为:

    • "Caffeine intake has no significant effect on programming productivity".

      “摄入咖啡因对编程效率没有显着影响 ”。

    The alternative hypothesis would be:

    另一种假设是:

    • "Caffeine intake does have a significant effect on productivity".

      “摄入咖啡因确实会对生产力产生重大影响 ”。

    The word 'significant' has a very specific meaning here. It refers to a relationship between variables existing due to something more than chance alone.

    “重要”一词在此具有非常具体的含义。 它指的是由于某些因素而不仅仅是偶然因素而存在的变量之间的关系。

    Instead, the relationship exists (at least in part) due to 'real' differences or effects between the variables.

    相反,由于变量之间的“实际”差异或影响,这种关系存在(至少部分存在)。

    The next step is to collect some data to test the hypotheses. This could be collected from an experiment or survey, or from a set of data you have access to.

    下一步是收集一些数据以检验假设。 这可以从实验或调查中收集,也可以从您有权访问的一组数据中收集。

    The final step is to calculate a test statistic from the data. This is a single number that represents some characteristic of your data. Examples include the t-test, Chi-squared test, and the Kruskal-Wallis test - among many others.

    最后一步是根据数据计算测试统计量。 这是一个代表数据某些特征的数字。 示例包括t检验,卡方检验和Kruskal-Wallis检验-等等。

    Exactly which one to calculate will depend on the question you are asking, the structure of your data, and the distribution of your data.

    究竟要计算哪一个取决于您要问的问题,数据的结构以及数据的分布。

    Here's a handy cheatsheet for your reference.

    这是一个方便的备忘单,供您参考。

    In the caffeine example, a suitable test might be a two-sample t-test.

    在咖啡因示例中,合适的测试可能是两样本t检验

    You will end up with a single test statistic from your data. All that is left to do is interpret this result to determine whether it supports or rejects the null hypothesis.

    您最终将获得数据中的单个测试统计信息。 剩下要做的就是解释这个结果,以确定它是否支持或拒绝原假设。

    This is where P values come into play.

    这就是P值起作用的地方。

    该统计数据不太可能出现? (How unlikely is this statistic?)

    Recall that you have calculated a test statistic, which represents some characteristic of your data. You want to understand whether it supports or rejects the null hypothesis.

    回想一下,您已经计算了一个测试统计量,该统计量代表了数据的某些特征。 您想了解它是否支持或拒绝原假设。

    The approach taken is to assume the null hypothesis is true. That is, assume there are no significant relationships between the variables you are interested in.

    所采用的方法是假设零假设为真。 也就是说,假设您感兴趣的变量之间没有显着的关系。

    Then, look at the data you have collected. How likely would your test statistic be if the null hypothesis really is true?

    然后,查看您收集的数据。 如果原假设正确,那么您的检验统计量有多大?

    Let's refer back to the caffeine intake example from before.

    让我们回顾一下以前的咖啡因摄入量示例。

    • Say that productivity levels were split about evenly between developers, regardless of whether they drank caffeine or not (graph A). This result would be likely to occur by chance if the null hypothesis were true.

      假设无论开发人员是否喝咖啡因,生产力水平在开发人员之间平均分配(图A)。 如果原假设为真,则可能会偶然发生此结果。

    • However, suppose that almost all of the highest productivity was seen in developers who drank caffeine (graph B). This is a more 'extreme' result, and would be unlikely to occur just by chance if the null hypothesis were true.

      但是,假设在喝咖啡因的开发人员中几乎可以看到最高的生产率(图B)。 这是一个更“极端”的结果,并且如果原假设为真,则不可能偶然发生

    But how 'extreme' does a result need to be before it is considered too unlikely to support the null hypothesis?

    但是,在结果被认为不太可能无法支持原假设的情况下,结果必须是多么“极端”?

    This is what a P value lets you estimate. It provides a numerical answer to the question: "if the null hypothesis is true, what is the probability of a result this extreme or more extreme?"

    这就是P值可让您估算的值。 它提供了以下问题的数字答案:“如果原假设是正确的,那么这个极端或更大极端的结果的概率是多少?”

    P values are probabilities, so they are always between 0 and 1.

    P值是概率,因此它们始终在0到1之间。

    • A high P value indicates the observed results are likely to occur by chance under the null hypothesis.

      高P值表示在原假设下观察到的结果很可能偶然发生

    • A low P value indicates that the results are less likely to occur by chance under the null hypothesis.

      P值低表示在原假设下偶然发生结果的可能性较小

    Usually, a threshold is chosen to determine statistical significance. This threshold is often denoted α.

    通常,选择阈值以确定统计显着性。 该阈值通常表示为α。

    If the P value is below the threshold, your results are 'statistically significant'. This means you can reject the null hypothesis (and accept the alternative hypothesis).

    如果P值低于阈值 ,则您的结果“具有统计意义 ”。 这意味着您可以拒绝原假设(并接受替代假设)。

    There is no one-size-fits-all threshold suitable for all applications. Usually, an arbitrary threshold will be used that is appropriate for the context.

    没有适合所有应用的“一刀切”门槛。 通常,将使用适合于上下文的任意阈值。

    For example, in fields such as ecology and evolution, it is difficult to control experimental conditions because many factors can affect the outcome. It can also be difficult to collect very large sample sizes. In these fields, a threshold of 0.05 will often be used.

    例如,在生态和进化等领域,由于许多因素都会影响实验结果,因此很难控制实验条件。 收集非常大的样本量也可能很困难。 在这些字段中,通常将使用0.05的阈值。

    In other contexts such as physics and engineering, a threshold of 0.01 or even lower will be more appropriate.

    在诸如物理和工程学的其他情况下,阈值0.01甚至更低将更为合适。

    卡方示例 (Chi-squared example)

    In this example, there are two (fictional) variables: region, and political party membership. It uses the Chi-squared test to see if there's a relationship between region and political party membership.

    在此示例中,有两个(虚构的)变量:地区和政党成员。 它使用卡方检验来查看地区和政党成员之间是否存在关系。

    You can change the number of members for each party.

    您可以更改每一方的成员数量。

    • Null hypothesis: "there is no significant relationship between region and political party membership"

      零假设:“地区与政党成员之间没有显着关系

    • Alternative hypothesis: "there is a significant relationship between region and political party membership"

      替代假设:“地区与政党成员之间存在重要关系

    Hit the "rerun" button to try different scenarios.

    点击“重新运行”按钮尝试不同的情况。

    常见的误解以及如何避免它们 (Common misconceptions and how to avoid them)

    There are several mistakes that even experienced practitioners often make about the use of P values and hypothesis testing. This section will aim to clear those up.

    即使是经验丰富的从业人员,在使用P值和假设检验时也会经常犯一些错误。 本节旨在清除这些内容。

    The null hypothesis is uninteresting - if the data is good and analysis is done right, then it is a valid conclusion in its own right.

    零假设无趣 -如果数据良好且分析正确,那么它本身就是有效的结论。

    A question worth answering should have an interesting answer - whatever the outcome.

    worth无论结果如何,值得回答的问题都应该有一个有趣的答案。

    P value is the probability of the null hypothesis being true - a P value represents "the probability of the results, given the null hypothesis being true". This is not the same as "the probability of the null hypothesis being true, given the results".

    ❌P 值是原假设为真的概率-P值表示“假设原假设为真,结果的概率”。 这与“在给出给定结果的情况下,原假设为真的概率”不同。

    P(Data | Hypothesis) ≠ P(Hypothesis | Data)

    P(数据|假设)≠P(假设|数据)

    This means a low P value tells you: "if the null hypothesis is true, these results are unlikely". It does not tell you: "if these results are true, the null hypothesis is unlikely".

    这意味着低P值会告诉您:“如果零假设成立,那么这些结果就不太可能”。 它不会告诉你:“如果这些结果是真实的,零假设是不可能的”。

    You can use the same significance threshold for multiple comparisons - remember the definition of the P value. It is the probability of observing a certain test statistic by chance alone.

    您可以对多个比较使用相同的显着性阈值 -请记住P值的定义。 这是仅靠偶然观察某项统计数据的概率。

    If you use a threshold of α = 0.05 (or 1-in-20) and you carry out, say, 20 stats tests... you might expect by chance alone to find a low P value.

    如果您使用阈值α= 0.05(或20分之一),并且进行了20次统计测试,那么您可能会偶然发现低P值。

    You should use a lower threshold if you are carrying out multiple comparisons. There are correction methods that will let you calculate how much lower the threshold should be.

    if如果要进行多个比较,则应使用较低的阈值。 有一些校正方法可让您计算阈值应降低多少。

    The significance threshold means anything at all - it is entirely arbitrary. 0.05 is just a convention. The difference between p = 0.049 and p = 0.051 is the pretty much the same as between p = 0.039 and p = 0.041.

    significance 重要性阈值意味着任何东西 -完全是任意的。 0.05只是一个约定。 p = 0.049和p = 0.051之间的差异与p = 0.039和p = 0.041之间的差异几乎相同。

    This is one of the biggest weaknesses of hypothesis testing this way. It forces you to draw a line in the sand, even though no line can easily be drawn.

    这是这种假设检验的最大弱点之一。 即使没有任何线条可以轻易绘制,它也会迫使您在沙子上画一条线。

    Therefore, always consider significance thresholds for what they are - totally arbitrary.

    因此,始终考虑重要性阈值是什么-完全是任意的。

    Statistical significance means chance plays no part - far from it. Often, there are many causes for a given outcome. Some will be random, others less so.

    ❌具有统计意义,意味着机会不起作用-远非如此。 通常,给定结果的原因很多。 有些会是随机的,有些则不会如此。

    Finding one non-random cause doesn't mean it explains all the differences between your variables. It is important not to mistake statistical significance with "effect size".

    找到一个非随机原因并不意味着它可以解释变量之间的所有差异。 重要的是不要将统计显着性与“效应大小”相混淆。

    P values are the only way to determine statistical significance - there are other approaches which are sometimes better.

    ❌P 值是确定统计显着性的唯一方法 -有些方法有时更好。

    As well as classical hypothesis testing, consider other approaches - such as using Bayes factors, or False Positive Risk instead.

    classical与经典假设检验一样,请考虑其他方法-例如使用贝叶斯因子误报风险

    翻译自: https://www.freecodecamp.org/news/what-is-statistical-significance-p-value-defined-and-how-to-calculate-it/

    p值 统计学意义

    展开全文
  • 在编程的时候,不少语言或者编程包只有现成的双侧T检验的函数,我想知道怎么根据双侧T检验的p值来得到单侧T检验的p值。 或者更广一点来说,单侧T检验p值与双侧T检验的p值是什么关系? 双侧T检验 零假设H0:μ=0H0:μ=...

    在阅读前,建议看:t检验、t分布、t值
    先深入理解 t t t检验、 t t t分布、 t t t统计量的数学意义

    在编程的时候,不少语言或者编程包只有现成的双侧T检验的函数,我想知道怎么根据双侧T检验的 p p p 值来得到单侧T检验的 p p p 值。或者更广一点来说,单侧T检验 p p p 值与双侧T检验的 p p p 值是什么关系?

    双侧T检验

    零假设 H 0 : μ = 0 H0:μ=0 H0:μ=0,对立假设 H 1 : μ ≠ 0 H1:μ≠0 H1:μ=0

    简单理解
    我们假设了 H 0 : μ = 0 H0:μ=0 H0:μ=0,并要去检验此假设下H0成立的概率高不高。
    因为是双侧,如下图所示,只要算出来的 t t t统计量- t s c o r e tscore tscore在95%的区域中,都是能够证明H0成立的。
    在这里插入图片描述

    P − v a l u e P-value Pvalue

    1. 在原假设为真时,检验统计量的观察值>=其计算值的概率:
      双侧检验为分布中两侧的面积之和

    2. P P P越小,拒绝 H 0 H0 H0 的理由越充分。 P P P可看作 H 0 H0 H0是正确的概率,或拒绝了 H 0 H0 H0会犯错的概率,所以 P P P越小说明,犯错的风险越小。

    3. 对某一给定的样本, P P P越小,说明犯第一类错误(弃真)的概率越小,如果 P < = α ( 可 接 受 的 最 大 第 一 类 错 误 风 险 ) P<=α(可接受的最大第一类错误风险) P<=α,则拒绝原假设 H 0 H0 H0;相反如果 P > α P>α P>α,则认为第一类错误(弃真)的风险太大,于是接受原假设 H 0 H0 H0

    4. 决策规则: P < α P<α P<α,拒绝 H 0 H0 H0

    单侧T检验

    零假设 H 0 : μ < = 0 H0:μ<=0 H0:μ<=0,对立假设 H 1 : μ > 0 H1:μ>0 H1:μ>0

    简单理解
    我们假设了 H 0 : μ < = 0 H0:μ<=0 H0:μ<=0,并要去检验此假设下H0成立的概率高不高。
    因为是右侧检验(拒绝域在右边),如下图所示,只要算出来的 t t t统计量- t s c o r e tscore tscore在95%的区域中,都是能够证明H0成立的。
    在这里插入图片描述

    零假设 H 0 : μ > = 0 H0:μ>=0 H0:μ>=0,对立假设 H 1 : μ < 0 H1:μ<0 H1:μ<0

    简单理解
    我们假设了 H 0 : μ > = 0 H0:μ>=0 H0:μ>=0,并要去检验此假设下H0成立的概率高不高。
    因为是左侧检验(拒绝域在左边),如下图所示,只要算出来的 t t t统计量- t s c o r e tscore tscore在95%的区域中,都是能够证明H0成立的。
    在这里插入图片描述

    单尾、双尾T检验的p值关系

    双 侧 检 验 的 p 值 = 双 侧 分 布 中 两 端 面 积 的 总 和 双侧检验的p值=双侧分布中两端面积的总和 p=

    Excel-TDIST函数

    在Excel中使用TDIST函数 计算 p 值 p值 p:

    T D I S T ( x , d e g r e e s f r e e d o m , t a i l s ) TDIST(x,degrees_freedom,tails) TDIST(x,degreesfreedom,tails)

    • X:为需要计算分布的数字。
    • Degrees_freedom:为表示自由度的整数。
    • Tails:指明返回的分布函数是单尾分布还是双尾分布。如果 tails = 1,函数 TDIST 返回单尾分布。如果 tails = 2,函数 TDIST 返回双尾分布。

    TDIST函数适用于:Excel2003、Excel2007、Excel2010、Excel2013、Excel2016。

    1. 如果任一参数为非数值型,函数 TDIST 返回错误值 #VALUE!。
    2. 如果 degrees_freedom < 1,函数 TDIST 返回错误值 #NUM!。
    3. 参数 degrees_freedomtails 将被截尾取整。
    4. 如果 tails 不为 1 或 2,函数 TDIST 返回错误值 #NUM!。
    5. 如果 x < 0,TDIST 返回错误值 #NUM!。 当 x < 0 时要使用 TDIST:
      T D I S T ( − x , d f , 1 ) = 1 – T D I S T ( x , d f , 1 ) = P ( X > − x ) TDIST(-x,df,1) = 1 – TDIST(x,df,1) = P(X > -x) TDIST(x,df,1)=1TDIST(x,df,1)=P(X>x)
      T D I S T ( − x , d f , 2 ) = T D I S T ( x , d f , 2 ) = P ( ∣ X ∣ > x ) TDIST(-x,df,2) = TDIST(x,df,2) = P(|X| > x) TDIST(x,df,2)=TDIST(x,df,2)=P(X>x)
    6. 如果 tails = 1 T D I S T = P ( X > x ) TDIST = P( X>x ) TDIST=P(X>x),其中 X 为服从 t 分布的随机变量。
    7. 如果 tails = 2 T D I S T = P ( ∣ X ∣ > x ) = P ( X > x   o r   X < − x ) TDIST = P(|X| > x) = P(X > x\ or\ X < -x) TDIST=P(X>x)=P(X>x or X<x)

    上述第5-7点对于x<0时的p值讨论,针对左侧检验和右侧检验都是一样的,同样适用!

    TDIST函数 计算可知:

    • p 双 侧 = T D I S T ( x , d f , 2 ) = T D I S T ( − x , d f , 2 ) = P ( ∣ X ∣ > x ) = P ( X > x   o r   X < − x ) p双侧=TDIST(x,df,2)=TDIST(-x,df,2)= P(|X| > x) = P(X > x \ or\ X < -x) p=TDIST(x,df,2)=TDIST(x,df,2)=P(X>x)=P(X>x or X<x)
    • t t t统计量>0时, p 单 侧 = p 双 侧 / 2 = P ( X > x ) p单侧=p双侧/2=P(X >x) p=p/2=P(X>x)
    • t t t统计量<0时, p 单 侧 = 1 − p 双 侧 / 2 = P ( X > − x ) p单侧=1-p双侧/2=P(X > -x) p=1p/2=P(X>x)

    在这里插入图片描述

    Python-ttest等函数

    H 0 : μ = μ 0 , H 1 : μ ≠ μ 0 H0:μ=μ0,H1:μ≠μ0 H0:μ=μ0H1:μ=μ0

    T检验涉及的函数:ttest_1samp进行双侧检验

    # 导入包
    from scipy import stats
    import numpy as np
    
    # 1.单一样本T检验-ttest_1samp
    # step1:生成数据,生成50行×2列的数据
    np.random.seed(120) # seed 保证每次运行得到的结果是一样的
    
    rvs=stats.norm.rvs(loc=41000,scale=5000,size=20) # 均值为5,方差为10,50行×2列的数据
    
    # step2:检验两列数的均值差异是否显著
    stats.ttest_1samp(rvs,40000)
    

    返回结果Ttest_1sampResult(statistic=2.481538955443869, pvalue=0.02260211710111142)

    此处的 t t t 统计量statistic=2.481538955443869, p 双 侧 p双侧 ppvalue=0.02260211710111142

    # step3:单尾检验,H0:u>u0
    def ttest_onesided(sample,u0):
        (t, p) = stats.ttest_1samp(sample,u0)
        if t > 0:
            onesided_p = 1 - p / 2
        else:
            onesided_p = p / 2
        return onesided_p
    ttest_onesided(rvs,40000)
    

    0.9886989414494443

    # step4:单尾检验,H0:u<u0
    def ttest_onesided(sample,u0):
        (t, p) = stats.ttest_1samp(sample,u0)
        if t < 0:
            onesided_p = 1 - p / 2
        else:
            onesided_p = p / 2
        return onesided_p
    ttest_onesided(rvs,40000)
    

    0.01130105855055571


    t t t 统计量在双尾和单尾检测中的区别:

    1. t t t 统计量不管是双尾检验还是单尾检验,算出来的 t t t 值都是一样的,唯一的区别在于双尾中的是 ∣ t ∣ |t| t ,而单尾中的 t t t 是包含+、-符号的。
    2. 另一区别在于,查 t t t 分布表得出的临界值是不一样的。
      双尾查的是 t − α / 2 ( d f ) t-α/2(df) tα/2(df) ,对比的是 p 双 侧 p双侧 p t − α / 2 ( d f ) t-α/2(df) tα/2(df)
      单尾查的是 t − α ( d f ) t-α(df) tα(df),对比的是 p 单 侧 p单侧 p t − α ( d f ) t-α(df) tα(df)
      1)当 t t t统计量>0时, p 单 侧 = p 双 侧 / 2 = P ( X > x ) p单侧=p双侧/2=P(X >x) p=p/2=P(X>x)
      2)当 t t t统计量<0时, p 单 侧 = 1 − p 双 侧 / 2 = P ( X > − x ) p单侧=1-p双侧/2=P(X > -x) p=1p/2=P(X>x)

    更多应用:【DA】常见的假设检验

    总结

    单侧检验和双侧检验是等价的。没有谁更严格之说。

    选择单尾和双尾检验时,就先根据实际问题确定正确的H0和H1,这样验证的思路也会更清晰。

    实际上,同一个单尾检验问题,根据关注点的不同(提问方向的不同),既可以用左侧检验,也可以用右侧检验。两种检验得到的 t t t 统计量的值是一样的,区别在于拒绝域在哪一侧

    展开全文
  • 数据可视化——R语言为ggplot图形添加P值和显著性水平准备安装和加载R包示例数据均值比较的方法用于添加P值的R函数compare_means()stat_compare_means()独立双样本组间比较配对双样本组间比较多组样本的组间比较多个...

    本文对一篇英文博客进行翻译,博客原文链接:Add P-values and Significance Levels to ggplots

    概述:本文介绍如何轻松地为ggplot图形添加P值和显著性水平:

    • 比较两组或多组的均值
    • 自动地将P值和显著性水平添加到ggplot图形中,如箱形图,点图,条形图和折线图等

    使用工具: R语言中的ggplot2包和ggpubr包

    在这里插入图片描述

    准备

    安装和加载R包

    本文使用ggpubr包,要求版本高于0.1.3。ggpubr是一个基于ggplot2的计算工具包。

    • 直接输入以下命令从CARN中下载安装
    install.packages("ggpubr")
    
    • 也可以从GitHub中下载安装最新版本
    if(!require(devtools)) install.packages("devtools")
    devtools::install_github("kassambara/ggpubr")
    
    • 加载ggpubr
    library(ggpubr)
    

    ggpubr的官方文档可在以下位置获得:http://www.sthda.com/english/rpkgs/ggpubr

    示例数据

    示例数据集:ToothGrowth

    data("ToothGrowth")
    head(ToothGrowth)
    

    示例数据如下:

    ##    len supp dose
    ## 1  4.2   VC  0.5
    ## 2 11.5   VC  0.5
    ## 3  7.3   VC  0.5
    ## 4  5.8   VC  0.5
    ## 5  6.4   VC  0.5
    ## 6 10.0   VC  0.5
    

    均值比较的方法

    R中用于两组或多组间均值比较的标准统计方法在之前的文章也有描述:comparing means in R

    均值比较的常见方法:

    方法R实现函数描述
    T-testt.test()比较两组(参数检验)
    Wilcoxon testwilcox.test()比较两组(非参数检验)
    ANOVAaov()或anova()比较多组(参数检验)
    Kruskal-Walliskruskal.test()比较多组(非参数检验)

    以下链接提供了各种方法的详细介绍:

    用于添加P值的R函数

    介绍两个ggpubr包中的函数

    • compare_means():用于执行均值比较
    • stat_compare_means():用于在ggplot图形中自动添加P值和显著性水平

    compare_means()

    该函数用于执行均值比较。该函数与标准的R函数相比,灵活性更强。

    简化形式如下:

    compare_means(formula, data, method = "wilcox.test", paired = FALSE,
      group.by = NULL, ref.group = NULL, ...)
    
    • formula:指定一个公式,公式形式为 x ~ group,其中,x 表示一个数值型变量,group 表示一个因子型变量,包含一个或多个水平。例如,一个示例公式为 formula = TP53 ~ cancer_group,表示在 cancer_group 对应的各水平间比较TP53的表达水平;也可以同时指定多个响应变量,如 formula = c(TP53, PTEN) ~ cancer_group。
    • data:指定一个数据框(data.frame),数据框需包含formula中的变量。
    • method:指定统计检验的方法。默认为“wilcox.test”,即Wilcoxon检验(非参数检验);也可指定其他统计方法:
      • “t.test”,即T检验(参数检验)。“t.test”和“wilcox.test”用于两组样本间的比较。当超过两组时,将会执行两两比较(pairwise comparison)。
      • “anova”(参数检验)或 “kruskal.test”(非参数检验),用于执行多组间的单因素方差分析。
    • paired:指定一个逻辑变量,表示是否需要执行配对检验,仅适用于t.test 和wilcox.test。
    • group.by:指定一个分组变量的字符名,用于在统计检验之前对数据进行分组。当存在group.by指定的变量时,均值比较将在不同水平的各个子集数据中执行。
    • ref.group:指定一个组别的字符名,作为对照组(reference group)。如果指定,各个分组水平将与对照组水平进行比较。也可指定ref.group为“.all.”,表示每个分组水平将于所有分组水平(如base-mean)进行比较。

    stat_compare_means()

    该函数是对ggplot2的扩展,可将均值比较后的P值添加到ggplot图形中,如箱形图、点图、条形图和折线图等。

    简化形式如下:

    stat_compare_means(mapping = NULL, comparisons = NULL hide.ns = FALSE,
                       label = NULL,  label.x = NULL, label.y = NULL,  ...)
    
    • mapping:通过 aes() 设置绘图时的aesthetic

    • comparisons:指定一个列表(list),每个列表元素需为长度等于2的向量。向量的内容可以为X轴的两个组别名(字符型),也可以是两个感兴趣组的组别索引(整数值),表示采用指定的两个组别进行比较。

    • hide.ns:逻辑变量,如果设为TRUE,显示显著性水平时将隐藏 ns 字样,即组间差异不显著时不显示 ns 字样。

    • label:指定一个字符串,表示标签类型。可为:“p.signif”(显示显著性水平),“p.format”(显示格式化的P值)。

    • label.x, label.y:指定一个数值,表示显示标签的绝对坐标位置。

    • :传递给函数compare_means()的参数,如method、paired、ref.group。

    独立双样本组间比较

    执行统计检验

    compare_means(len ~ supp, data = ToothGrowth)
    

    示例结果如下:

    ## # A tibble: 1 x 8
    ##     .y. group1 group2      p  p.adj p.format p.signif   method
    ##                       
    ## 1   len     OJ     VC 0.0645 0.0645    0.064       ns Wilcoxon
    

    method默认为“wilcox.test”(非参数检验),可指定method = “t.test”,表示T检验(参数检验)

    返回值为具有以下列的数据框:

    • .y.:用于统计检验的数值变量

    • p:P值

    • p.adj:调整后的P值,调整P值的默认方法为p.adjust.method = “holm”

    • p.format: 格式化的P值

    • p.signif:显著性水平,即用不同数量的 * 表示显著性水平

    • method:用于组间比较的统计方法

    创建添加P值的箱形图

    p <- ggboxplot(ToothGrowth, x = "supp", y = "len",
              color = "supp", palette = "jco",
              add = "jitter")
    #  Add p-value
    p + stat_compare_means()
    # Change method
    p + stat_compare_means(method = "t.test")
    

    在这里插入图片描述
    注意:显示P值的标签位置可以通过如下参数来调整:label.x, label.y, hjust 和vjust

    显示P值的标签默认为 compare_means() 返回值中的 methodp 的组合。也可以通过 aes() 函数指定为其他显示形式。例如:

    aes(label = ..p.format..)aes(label = paste0(“p =”, ..p.format..))
    表示只显示格式化的P值,而不显示method
    
    aes(label = ..p.signif..)
    表示仅显示显著性水平
    
    aes(label = paste0(..method.., “\n”, “p =”, ..p.format..))
    表示在method名和P值之间添加换行符(“\n”)
    

    示例如下:

    p + stat_compare_means( aes(label = ..p.signif..), 
                            label.x = 1.5, label.y = 40)
    

    在这里插入图片描述
    另外,也可以将参数label指定为字符向量:

    p + stat_compare_means( label = "p.signif", label.x = 1.5, label.y = 40)
    

    配对双样本组间比较

    执行统计检验

    compare_means(len ~ supp, data = ToothGrowth, paired = TRUE)
    

    示例结果如下:

    ## # A tibble: 1 x 8
    ##     .y. group1 group2       p   p.adj p.format p.signif   method
    ##                         
    ## 1   len     OJ     VC 0.00431 0.00431   0.0043       ** Wilcoxon
    

    使用函数 ggpaired() 可视化配对数据

    ggpaired(ToothGrowth, x = "supp", y = "len",
             color = "supp", line.color = "gray", line.size = 0.4,
             palette = "jco")+
      stat_compare_means(paired = TRUE)
    

    在这里插入图片描述

    多组样本的组间比较

    • 全局检验(所有组的均值比较)
    # Global test
    compare_means(len ~ dose,  data = ToothGrowth, method = "anova")
    

    示例结果如下:

    ## # A tibble: 1 x 6
    ##     .y.        p    p.adj p.format p.signif method
    ##                     
    ## 1   len 9.53e-16 9.53e-16  9.5e-16     ****  Anova
    

    添加全局检验的P值(所有组比较总的P值)

    # Default method = "kruskal.test" for multiple groups
    ggboxplot(ToothGrowth, x = "dose", y = "len",
              color = "dose", palette = "jco")+
      stat_compare_means()
    # Change method to anova
    ggboxplot(ToothGrowth, x = "dose", y = "len",
              color = "dose", palette = "jco")+
      stat_compare_means(method = "anova")
    

    在这里插入图片描述

    • 两两比较(Pairwise comparisons)

    如果分组变量包含两个以上的水平,两两比较的检验(pairwise test)将自动执行。默认方法为“wilcox.test”,也可设置为“t.test”。

    # Perorm pairwise comparisons
    compare_means(len ~ dose,  data = ToothGrowth)
    

    示例结果如下:

    ## # A tibble: 3 x 8
    ##     .y. group1 group2        p    p.adj p.format p.signif   method
    ##                           
    ## 1   len    0.5      1 7.02e-06 1.40e-05  7.0e-06     **** Wilcoxon
    ## 2   len    0.5      2 8.41e-08 2.52e-07  8.4e-08     **** Wilcoxon
    ## 3   len      1      2 1.77e-04 1.77e-04  0.00018      *** Wilcoxon
    
    # Visualize: Specify the comparisons you want
    my_comparisons <- list( c("0.5", "1"), c("1", "2"), c("0.5", "2") )
    ggboxplot(ToothGrowth, x = "dose", y = "len",
              color = "dose", palette = "jco")+ 
      stat_compare_means(comparisons = my_comparisons)+ # Add pairwise comparisons p-value
      stat_compare_means(label.y = 50)     # Add global p-value
    

    在这里插入图片描述

    如果需要指定标签显示的Y轴位置,可使用参数label.y

    ggboxplot(ToothGrowth, x = "dose", y = "len",
              color = "dose", palette = "jco")+ 
      stat_compare_means(comparisons = my_comparisons, label.y = c(29, 35, 40))+
      stat_compare_means(label.y = 45)
    

    在这里插入图片描述
    注:ggsignif 包也可以很方便的为条形图添加组间比较的P值

    • 相对于对照组的多重两两比较的检验(Multiple pairwise tests)
    # Pairwise comparison against reference
    compare_means(len ~ dose,  data = ToothGrowth, ref.group = "0.5",
                  method = "t.test")
    

    示例结果如下:

    ## # A tibble: 2 x 8
    ##     .y. group1 group2        p    p.adj p.format p.signif method
    ##                         
    ## 1   len    0.5      1 6.70e-09 6.70e-09  6.7e-09     **** T-test
    ## 2   len    0.5      2 1.47e-16 2.94e-16  < 2e-16     **** T-test
    
    # Visualize
    ggboxplot(ToothGrowth, x = "dose", y = "len",
              color = "dose", palette = "jco")+
      stat_compare_means(method = "anova", label.y = 40)+      # Add global p-value
      stat_compare_means(label = "p.signif", method = "t.test",
                         ref.group = "0.5")                    # Pairwise comparison against reference
    

    在这里插入图片描述

    • 相对于所有组(base-mean)的多重两两比较的检验
    # Comparison of each group against base-mean
    compare_means(len ~ dose,  data = ToothGrowth, ref.group = ".all.",
                  method = "t.test")
    

    示例结果如下:

    ## # A tibble: 3 x 8
    ##     .y. group1 group2        p    p.adj p.format p.signif method
    ##                         
    ## 1   len  .all.    0.5 1.24e-06 3.73e-06  1.2e-06     **** T-test
    ## 2   len  .all.      1 5.67e-01 5.67e-01     0.57       ns T-test
    ## 3   len  .all.      2 1.37e-05 2.74e-05  1.4e-05     **** T-test
    
    # Visualize
    ggboxplot(ToothGrowth, x = "dose", y = "len",
              color = "dose", palette = "jco")+
      stat_compare_means(method = "anova", label.y = 40)+      # Add global p-value
      stat_compare_means(label = "p.signif", method = "t.test",
                         ref.group = ".all.")                  # Pairwise comparison against all
    

    在这里插入图片描述

    下面使用Github中可用的骨髓瘤数据集展示一些典型情况,其中,与“.all.”的比较将很有用。

    将依据患者molecular进行分组,绘制各个组别DEPDC1基因的表达水平。目的是比较各个组别之间是否存在差别,如果有差别,差别又在哪里。

    要回答以上问题,可以在所有7个组之间进行两两比较(pairwise comparison)。 由于组别较多,将导致很多种组别组合,这将很难解释。

    一个简单的解决办法是将7组中的每一组与“.all.”(如base-mean)比较。当检验结果显著时,可以得出结论:与所有组相比,xxx组的DEPDC1的表达水平显著降低或显著升高。

    # Load myeloma data from GitHub
    myeloma <- read.delim("https://raw.githubusercontent.com/kassambara/data/master/myeloma.txt")
    # Perform the test
    compare_means(DEPDC1 ~ molecular_group,  data = myeloma,
                  ref.group = ".all.", method = "t.test")
    

    示例结果如下:

    ## # A tibble: 7 x 8
    ##      .y. group1           group2        p   p.adj p.format p.signif method
    ##                                   
    ## 1 DEPDC1  .all.       Cyclin D-1 0.149690 0.44907  0.14969       ns T-test
    ## 2 DEPDC1  .all.       Cyclin D-2 0.523143 1.00000  0.52314       ns T-test
    ## 3 DEPDC1  .all.     Hyperdiploid 0.000282 0.00169  0.00028      *** T-test
    ## 4 DEPDC1  .all. Low bone disease 0.005084 0.02542  0.00508       ** T-test
    ## 5 DEPDC1  .all.              MAF 0.086107 0.34443  0.08611       ns T-test
    ## 6 DEPDC1  .all.            MMSET 0.576291 1.00000  0.57629       ns T-test
    ## # ... with 1 more rows
    

    注意:上面的R代码中myeloma数据的下载地址存在错误,可从以下链接找到myeloma数据:https://github.com/kassambara/data/blob/master/myeloma.txt
    然后自己将全部数据复制并保存为myeloma.txt,从本地读取myeloma.txt。

    # Visualize the expression profile
    ggboxplot(myeloma, x = "molecular_group", y = "DEPDC1", color = "molecular_group", 
              add = "jitter", legend = "none") +
      rotate_x_text(angle = 45)+
      geom_hline(yintercept = mean(myeloma$DEPDC1), linetype = 2)+ # Add horizontal line at base mean
      stat_compare_means(method = "anova", label.y = 1600)+        # Add global annova p-value
      stat_compare_means(label = "p.signif", method = "t.test",
                         ref.group = ".all.")                      # Pairwise comparison against all
    

    在这里插入图片描述

    根据上图的结果,可以得出proliferation组的DEPDC1表达水平显著升高;Hyperdiploid组和Low bone disease组中DEPDC1表达水平显著降低。

    注意:想要隐藏 ns 标志,可以设置参数 hide.ns = TRUE

    # Visualize the expression profile
    ggboxplot(myeloma, x = "molecular_group", y = "DEPDC1", color = "molecular_group", 
              add = "jitter", legend = "none") +
      rotate_x_text(angle = 45)+
      geom_hline(yintercept = mean(myeloma$DEPDC1), linetype = 2)+ # Add horizontal line at base mean
      stat_compare_means(method = "anova", label.y = 1600)+        # Add global annova p-value
      stat_compare_means(label = "p.signif", method = "t.test",
                         ref.group = ".all.", hide.ns = TRUE)      # Pairwise comparison against all
    

    在这里插入图片描述

    多个分组变量

    • 使用另一个变量进行分组后再执行独立双样本比较

    执行统计检验:

    compare_means(len ~ supp, data = ToothGrowth, 
                  group.by = "dose")
    

    示例结果如下:

    ## # A tibble: 3 x 9
    ##    dose   .y. group1 group2       p  p.adj p.format p.signif   method
    ##                         
    ## 1   0.5   len     OJ     VC 0.02319 0.0464    0.023        * Wilcoxon
    ## 2   1.0   len     OJ     VC 0.00403 0.0121    0.004       ** Wilcoxon
    ## 3   2.0   len     OJ     VC 1.00000 1.0000    1.000       ns Wilcoxon
    

    在上面的示例中,对于分类变量dose的每一个水平,分类变量supp又将数据分为两个水平:OJ和VC,然后在这两个水平上对数值变量len进行均值比较。

    可视化:创建一个按组划分的多面板框图(此处为“dose”)

    # Box plot facetted by "dose"
    p <- ggboxplot(ToothGrowth, x = "supp", y = "len",
              color = "supp", palette = "jco",
              add = "jitter",
              facet.by = "dose", short.panel.labs = FALSE)
    # Use only p.format as label. Remove method name.
    p + stat_compare_means(label = "p.format")
    

    在这里插入图片描述

    # Or use significance symbol as label
    p + stat_compare_means(label =  "p.signif", label.x = 1.5)
    

    在这里插入图片描述

    注意:想要隐藏 ns 标志,可以设置参数hide.ns = TRUE

    可视化:创建一个包含所有箱形图的单一面板。X表示dose,Y表示len,颜色表示supp

    p <- ggboxplot(ToothGrowth, x = "dose", y = "len",
              color = "supp", palette = "jco",
              add = "jitter")
    p + stat_compare_means(aes(group = supp))
    

    在这里插入图片描述

    # Show only p-value
    p + stat_compare_means(aes(group = supp), label = "p.format")
    

    在这里插入图片描述

    # Use significance symbol as label
    p + stat_compare_means(aes(group = supp), label = "p.signif")
    

    在这里插入图片描述

    • 使用另一个变量进行分组后再执行配对双样本比较

    执行统计检验:

    compare_means(len ~ supp, data = ToothGrowth, 
                  group.by = "dose", paired = TRUE)
    

    实例结果如下:

    ## # A tibble: 3 x 9
    ##    dose   .y. group1 group2      p  p.adj p.format p.signif   method
    ##                        
    ## 1   0.5   len     OJ     VC 0.0330 0.0659    0.033        * Wilcoxon
    ## 2   1.0   len     OJ     VC 0.0191 0.0572    0.019        * Wilcoxon
    ## 3   2.0   len     OJ     VC 1.0000 1.0000    1.000       ns Wilcoxon
    

    可视化:创建一个按组划分的多面板框图(此处为“dose”)

    # Box plot facetted by "dose"
    p <- ggpaired(ToothGrowth, x = "supp", y = "len",
              color = "supp", palette = "jco", 
              line.color = "gray", line.size = 0.4,
              facet.by = "dose", short.panel.labs = FALSE)
    # Use only p.format as label. Remove method name.
    p + stat_compare_means(label = "p.format", paired = TRUE)
    

    在这里插入图片描述

    其他绘图方式

    • 条形图和折线图(一个分组变量)
    # Bar plot of mean +/-se
    ggbarplot(ToothGrowth, x = "dose", y = "len", add = "mean_se")+
      stat_compare_means() +                                         # Global p-value
      stat_compare_means(ref.group = "0.5", label = "p.signif",
                         label.y = c(22, 29))                   # compare to ref.group
    # Line plot of mean +/-se
    ggline(ToothGrowth, x = "dose", y = "len", add = "mean_se")+
      stat_compare_means() +                                         # Global p-value
      stat_compare_means(ref.group = "0.5", label = "p.signif",
                         label.y = c(22, 29))     
    

    在这里插入图片描述

    • 条形图和折线图(两个分组变量)
    ggbarplot(ToothGrowth, x = "dose", y = "len", add = "mean_se",
              color = "supp", palette = "jco", 
              position = position_dodge(0.8))+
      stat_compare_means(aes(group = supp), label = "p.signif", label.y = 29)
    ggline(ToothGrowth, x = "dose", y = "len", add = "mean_se",
              color = "supp", palette = "jco")+
      stat_compare_means(aes(group = supp), label = "p.signif", 
                         label.y = c(16, 25, 29))
    

    在这里插入图片描述

    注意:经过实际测试,笔者发现R语言中的统计方法计算结果的P值与SPSS中的P值存在差异。如,常规的方差分析(ANOVA) + 事后两两组间比较(如Bonferroni校正)使用上述R函数就很难得出与SPSS中一致的结果。如果需要使用SPSS的统计P值,建议对生成的图形进行后期修改。

    References

    原文链接:Add P-values and Significance Levels to ggplots

    展开全文
  • ROC和 区别p值和q值

    千次阅读 2019-06-11 21:02:40
    ROC和 区别p值和q值 ROC曲线指受试者工作特征曲线 / 接收器操作特性曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性和特异性的相互关系,它通过将...

    ROC和 区别p值和q值
    ROC曲线指受试者工作特征曲线 / 接收器操作特性曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性和特异性的相互关系,它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性,再以敏感性为纵坐标、(1-特异性)为横坐标绘制成曲线,曲线下面积越大,诊断准确性越高。在ROC曲线上,最靠近坐标图左上方的点为敏感性和特异性均较高的临界值。
    灵敏度是指受患病者中被某种诊断方法检出阳性的百分率,也叫真阳率;特异度是指无病者中被某诊断方法检出阴性的百分率,也叫真阴性。使用任何一种检测方法通过“阳性”“阴性”来判断疾病都有可能出现以下四种情况:

    1.真阳性(true positive,TP):有病且检测结果为阳性

    2.假阴性(false negative,FN):有病但检测结果为阴性

    3.假阳性(falsepositive,FP):无病但检测结果为阳性

    4.真阴性(truenegative,TN):无病且检测结果为阴性
    再以灵敏度(即TPR)为纵坐标、1-特异度(即FPR)为横坐标绘制成ROC曲线,分别反映了A,B两种方法对某种疾病的的诊断结果。

       阳性        阴性           合计
    

    有 TP真阳性 FN假阴性 实际病人数TP+FN

    无 FP假阳性 TN真阴性 实际非病人数FP+TN

    当需要确定诊断标准的时候必须从若干个临界值中选择一个最佳的临界点(最佳工作点,Optimal Operating Point)。每个临界值都有相应的灵敏度与特异度,因此最佳临界点应当是灵敏度与特异度的最佳组合。当某一临界值所对应的灵敏度与特异度都为1.0时,则说明该临界值对阳性以及阴性的准确率都达到了100%,这一个临界值自然是理想的最佳临界点,但是在临床现场或是研究中常常是很难达到这一水准的。

    若我们使用甲,乙,丙三种找诊断方法对同一疾病进行诊断并在同一个坐标系中画出其ROC曲线如下图4-1:(甲=红,乙=黄,丙=蓝)

    (1)图中的横纵坐标

    纵坐标代表的是灵敏度,该指标越高代表诊断的准确率越高;横坐标代表的是1-特异度,该指标越低就代表误判率越低。所以总的来看越是靠近ROC空间的左上角的点,其诊断效果越好。

    (2) 图中四个特殊的点和一条特殊的线

    第一个点是(0,1)即FPR=0,TPR=1的点,这一点意味着这个分类器很强大,他将所有的样本都正确分类了;

    第二个点(1,0)即FPR=1,TPR=0,类似的可以发现这是一个很糟糕的分类器,它成功的避开了所有的正确答案。

    第三个点(0,0)即FPR=TPR=0,可以发现该分类器将所有的样本都分为负样本。

    第四个点(1,1)即FPR=TPR=1,同理该分类器将所有的样本都分成正样本。

    (3)特殊的线

    一条特殊的线是图中的虚线y=x。在这条对角线上的点其实表示的是一个采用随机猜测策略的分类器对样本进行分类的结果,例如(0.5,0.5)就表示分类器随机对一半的样本猜测为正样本,另一半的样本为负样本的分类结果。

    (4)红,黄,蓝三条线比较

    最后我们来看看甲,乙,丙三种方法对应的三条线,前面已经说到了越是靠近左上角的ROC曲线,其对应的分类器性能越好。

    从图中可以直观地看出红线最靠近左上角的ROC曲线,即甲分类器的性能最好,其最佳临界点就是最靠近的左上角的A点。

    相比于甲方法来说,乙方法就要差一点。我们可以在X轴上做一条垂线,经过红,黄两条线上的两个点,可以知道两个点的FPR值相同即两个方法此时的误判率相同;但是红线上点的TPR值大于黄线上的点,即甲方法的灵敏度大于乙方法,这就意味着在这一点甲方法的准确率高于乙方法。

    再说丙方法,像蓝线这样的ROC曲线一般是不会出现的,因为ROC曲线基本都是在对角线之上的。硬要分析的话只能说丙方法实在是太糟糕了,以至于随机分类的正确率都要比该方法高。一般我们以对角线作为参照线,认为在对角线以上的ROC曲线有诊断意义,对角线以下的ROC曲线没有诊断意义。如果很不幸,你在实验中得到一个为于对角线下方的ROC曲线的话,一个最直观的补救方法就是将所有的预测结果反向,即若分类器输出的结果为正,则最终的分类结果就为负,反之就分为正。

    还有一点要说的是ROC曲线之所以是从左下角到右上角,即ROC曲线单调递增是因为从保守分类到激进分类,其TPR与FPR都是上升的。这其实很好理解,你的标准越来越低,那么实际有病的人被诊断为有病的概率上升,但是原本将健康的人被判为有病的概率也升高。

    H0 is true H1is true Total
    Not Significant TN FN TN+FN
    Significant FP TP FP+TP
    Total TN+FP FN+TP m

                 无                                有
    

    阴性不显著 TN真阴性 FN假阴性

    阳性显著 FP假阳性 TP真阳性

    total 实际非病人数FP+TN 实际病人数TP+FN

    首先从上面的混淆矩阵来展示p值域q值的计算公式,就可以看出它们之间的区别:

    p值实际上就是false positive rate(FPR,假正率):直观来看,p值是用上面混淆矩阵的第一列算出来的.p值衡量的是一个原本应该是 H0 的判断被错误认为是H1的比例,所以它是针对单次统计推断的一个置信度评估;
    q值实际上就是false discovery rate (FDR):直观来看,q值是用上面混淆矩阵的第二行算出来的.q值衡量的是在进行多次统计推断后,在所有被判定为显著性的结果里,有多大比例是误判的

    最近用limma作差异分析,接触p.value和adj.p.value比较多,今天就重点解释下p.value和FDR吧:
    在topTable函数的结果里,我们都会看到p.value和adj.p.value:
    对H0和H1的一个较好的解释:

    H0:差别是由抽样误差所致;

    H1:差别不是由抽样误差所致,即并不来自同一总体;

    将所有p.value直接用p.adjust中的‘BH’方法进行校正,head展示前六个结果,可以看出得到的结果与topTable一致;

    仅将第一个p.value用p.adjust中的‘BH’方法进行校正,得到的结果其实与p.value一致;

    综上:
    在多重检验的时候,需要对p值进行校正;

    FDR(Benjamini and Hochberg(BH))是p值的校正方法之一;(所以,统计学家对统计方法抱有的态度比较客观,认为其本身并不完美,需要进行校正)
    FDR计算方法:

    总计m次检验的结果按由小到大进行排序,k为其中一次检验结果的P值所对应的排名;

    找到符合原始阈值α的最大的k值,满足P(k)<=αk/m,认为排名从1到k的所有检验存在显著差异,并计算对应的q值公式为q = p(m/k),q值即FDR;

    若后一个FDR小于前一个FDR,则以前一位的计算结果为FDR,所以会在结果中看到相同的数值;

    1. 多重假设检验的必要性
      统计学中的假设检验的基本思路是:

    设立零假设(null hypothesis)H0 以及与零假设H0 相对应的非零假设(alternative hypothesis, or reject null hypothesis)H1,在假设H0 成立的前提下,计算出H0 发生的概率,若H0 的发生概率很低,基于小概率事件几乎不可能发生,所以可以拒绝零假设

    但是这些传统的假设检验方法研究的对象,都是一次试验

    在一次试验中(注意:是一次试验, 即single test),0.05 或0.01的cutoff足够严格了(想象一下,一个口袋有100个球,95个白的,5个红的, 只让你摸一次,你能摸到红的可能性是多大?)

    但是对于多次试验,又称多重假设检验,再使用p值是不恰当的,下面来分析一下为什么:

    大家都知道墨菲定律:如果事情有变坏的可能,不管这种可能性有多小,它总会发生

    用统计的语言去描述墨菲定律:

    在数理统计中,有一条重要的统计规律:假设某意外事件在一次实验(活动)中发生的概率为p(p>0),则在n次实验(活动)中至少有一次发生的概率为

    pn = 1 - (1 - p)n

    由此可见,无论概率p多么小(即小概率事件),当n越来越大时,pn越来越接近1

    这和我们的一句俗语非常吻合:常在河边走,哪有不湿鞋;夜路走多了,总能碰见鬼

    在多重假设检验中,我们一般关注的不再是每一次假设检验的准确性,而是控制在作出的多个统计推断中犯错误的概率,即False Discover Rate(FDR),这对于医院的诊断情景下尤其重要:

    假如有一种诊断艾滋病(AIDS)的试剂,试验验证其准确性为99%(每100次诊断就有一次false positive)。对于一个被检测的人(single test))来说,这种准确性够了;但对于医院 (multiple test))来说,这种准确性远远不够

    因为每诊断10 000个个体,就会有100个人被误诊为艾滋病(AIDS),每一个误诊就意味着一个潜在的医疗事故和医疗纠纷,对于一些大型医院,一两个月的某一项诊断的接诊数就能达到这个级别,如果按照这个误诊率,医院恐怕得关门,所以医院需要严格控制误诊的数量,宁可错杀一万也不能放过一个,因为把一个没病的病人误判为有病,总比把一个有病的病人误判为没病更保险一些

    利用Benjamini–Hochberg方法计算FDR的计算及R语言实现
    FDR的计算相当简单,包括以下几步:

    1.对p值进行从小到大的排序,标记上序号1~n;

    2.其中,最大的FDR(不考虑重复则为第n位)等于最大的p值;

    3.对于n-1位的FDR,取下面两者的较小值:

    上一步(第n位)计算得出的FDR值;

    p-value*n/(n-1)

    4.不断迭代第三步(n-2,n-3…),直至计算到最小p值对应的FDR。

    下面直接在R里实现:

    ###例如这10个p值进行校正

    temp <- c(0.01,0.11,0.21,0.31,0.41,0.51,0.61,0.71,0.81,0.91)
    p.adjust(temp, method=“fdr”)

    temp <- c(0.01,0.11,0.21,0.31,0.41,0.51,0.61,0.71,0.81,0.91)
    p.adjust(temp, method=“fdr”)
    [1] 0.1000000 0.5500000 0.7000000 0.7750000 0.8200000 0.8500000 0.8714286 0.8875000 0.9000000 0.9100000

    根据上述定义,我们知道以此计算出的FDR是有可能出现相同值的—即使其原始p值不同。在上面的例子中,第9位的p值为0.81,根据公式计算出的待选FDR值为0.81*10/9=0.9,比第10位的0.91要小,因此成为真正的FDR。如果我们更改一下条件,将0.81改成0.90,那么结果就会有所不同:
    ###将0.81改为0.9

    temp <- c(0.01,0.11,0.21,0.31,0.41,0.51,0.61,0.71,0.9,0.91)
    p.adjust(temp, method=“fdr”)
    [1] 0.1000000 0.5500000 0.7000000 0.7750000 0.8200000 0.8500000 0.8714286 0.8875000 0.9100000 0.9100000

    因此这个现象是很正常的。
    Benjamini–Hochberg方法的几何解释
    我们已经知道,p值实际上是拒绝0假设的置信度。这也就意味着,对于n个样本,我们就会期望产生n*p个错误判断。换而言之,对于实际上没有区别的分布进行随机抽样,我们计算出来的p值应该是均一分布的。

    注:也就是说有5%的可能性抽出假阳性出来。

    如果我们从两个有差别的分布中抽样,那么p值的分布将富集在左侧,而这种趋势与差异程度显然是正相关的:

    展开全文
  • 显著性检验:P值和置信度

    千次阅读 2021-05-26 16:21:17
    P称“显著”,P称“非常显著” 由于常用“显著”来表示P值大小,所以P值最常见的误用是把统计学上的显著与临床或实际中的显著差异相混淆,即混淆“差异具有显著性”和“具有显著差异”二者的意思。其实,前者指的是p...
  • P值 卡方值

    万次阅读 2019-10-17 13:01:48
    P值P值即概率,反映某一事件发生的可能性大小。 不同的P数值所表达的含义也是不一样的。 统计学根据显著性检验方法所得到的P 值,一般以P < 0.05为有统计学差异, P<0.01 为有显著统计学差异,P<0....
  • 如何理解T检验和P值

    千次阅读 2020-08-29 17:32:15
    接下来是我转自知乎上的一个通过一个例子来详尽的解析T检验及P值的文章,我看完颇有启发。 关于T检验以及各种假设检验的操作方法,网络上有很多详细讲解。今天我们不谈具体的步骤,而是通过案例全方面地将T检验的...
  • 【数理统计】神奇的P值

    千次阅读 多人点赞 2019-06-29 13:46:21
    理解P值的计算可以在一定程度上帮助我们理解为什么“不显著”,比如(如果试验真的有效果)通常增加试验样本数是有用的,因为样本小的情况下P值通常很大。极端的例子,如果样本只有1个,那么P值只能是0.2或者0.8,...
  • 假设检验之p值(probability value)

    千次阅读 2019-09-08 21:08:24
    而假设检验是,根据以往的经验先给出总体参数的一个假设,然后通过现有的样本信息去检验这个假设是否成立。 关于假设检验过程中的原假设、备择假设、单侧检验及双侧检验等内容都比较容易理解。这里重点讨论一...
  • L6-假设检验:临界值法与P值

    千次阅读 2020-04-26 13:38:00
    假设检验(hypothesis testing),又称统计假设检验,先做出某种假设,然后通过抽样收集数据进行统计推理,对此假设应该被拒绝还是接受做出推断。 包括临界值语P值法。
  • 统计学中的p值

    千次阅读 2016-03-20 11:36:27
    在我看来,假设检验从本质上是一种反证法。当你想证明一样事物是对的,有时候...p值一直是一个令人迷惑的地方,p值实际上是当H0假设为真,一些极端情况出现的概率。即 p值={极端情况概率|H0} p值 = \{极端情况概率|H0\
  • 皮尔逊相关系数与p值

    万次阅读 多人点赞 2019-10-21 12:57:26
    根据假设检验方法,在零假设成立的条件下,即假设两变量不存在相关性的前提下,计算出两变量不存在相关性的概率值(P值),如果这个P值很小,说明两变量不存在相关性的概率很小,我们就可以拒绝原假设,接受备择假设...
  • 置信区间、P值那点事

    万次阅读 2019-04-30 15:33:23
      在假设检验中,我们常常看到跟P值形影不离的一对区间值, 就是大名鼎鼎的置信区间了。 这置信区间和P值是怎么得来的,我想大多数盆友都不会有什么直观的概念,只会注意P值是否小于0.05或者0.01(根据显著性水平...
  • 统计学P值

    千次阅读 2019-05-06 19:30:02
    P 值是最常用的一个统计学指标,几乎统计软件输出结果都有P值。 统计学的观点,超过一定基准(比如 5%,其实是低于5%),就不能简单地认为这是偶然事件了,而是受到了外在的影响。 数学大佬出来定义了一个称为值...
  • Java计算卡方值和P值

    千次阅读 2017-09-15 21:12:56
    1.计算卡方值和P值 2.伽马函数 3.不完全伽马函数 1.计算卡方值和P值 P值就是计算卡方分布的分布函数值,公式如下: F(x;k)=γ(k2,x2)Γ(k2)=P(k2,x2)F(x;k)=γ(k2,x2)Γ(k2)=P(k2,x2) F(x;k) = \frac{\...
  • 【DA】z检验p值的计算

    千次阅读 2021-01-05 02:05:58
    该分布的平均为 0(零),标准偏差为 1。 可以使用此函数代替标准正态曲线面积表。 NORMSDIST(z)NORMSDIST(z)NORMSDIST(z) z :必需,是需要计算其分布的数值。如果 z 是非数字的,则 NORMSDIST 返回#VALUE! ...
  • 显著性水平 p值 z值

    万次阅读 多人点赞 2019-06-14 11:38:03
    1 显著性水平 显著性水平是估计总体参数落在某一区间内,可能犯错误的概率,用α表示。...设置一个想要推翻的结论的对立面的null hypothesis,而P值就是假设null hypothesis成立的情况下,计算...
  • 理解假设检验与P值

    千次阅读 多人点赞 2018-08-11 23:26:30
    假设检验: 第一类错误 假设检验例题: 假设检验: 第1步:确定你要研究的...并计算这个样本发生的可能性有多大(P值)。 第3步:判断标准是什么?(显著性水平) 假设检验常用的判断标准是5%,在假...
  • R语言 求P值

    千次阅读 2020-02-04 15:30:05
    P_value <- function(cdf,x,paramet,side=0){ n <-length(paramet) p <-switch(n+1, cdf(x), cdf(x,paramet), cdf(x,paramet[1],paramet[2]), cd...
  • P值是在假设检验中常见的统计量,本质上是一个概率值,我们总是拿0.05和0.025去与它作比较,如果小了,说明可以拒绝,大了说明本应该可以发生。在统计学中是一个常见的概念。
  • p值检验法

    万次阅读 2018-05-14 19:53:25
    (probablity value)是由检验统计量的样本观察值得出的原假设可能被拒绝的最小显著性水平。  对于任意指定的显著性水平 α α \alpha ,就有: 若 p p p 小于等于 α α \alpha , H 0 H 0 H_0 正确的...
  • 显著性水平和p值的理解

    千次阅读 2020-03-07 18:37:20
    统计分析的核心是以随机样本推断整体; 以H0代表原假设,H1代表它的相反面; 显著性水平是指假设H0为真的...p值等于0.05,也就是说: 假设原假设成立,我们抽取到的样本必须是来自于这5个,才有可能发生 “抽取到...
  • 线性回归 T检验P值计算

    万次阅读 2019-02-21 19:08:00
    参考链接 1.http://blog.sciencenet.cn/home.php?mod=space&amp;uid=651374&amp;do=blog&amp;id=1053456&amp;from=space 2.https://blog.csdn.net/touch_dream/article/details/78716507 ...
  • p值还是 FDR

    万次阅读 2018-03-24 22:15:44
    p值:在零假设下,观测到某一特定实验结果的概率称为p值。假阳性:得到了阳性结果,但这个阳性结果是假的。假阴性:得到了阴性结果,但这个阴性结果是假的单次检验:针对单个基因(蛋白),采用统计检验,假设采用的...
  • 如何理解假设检验中的alpha值和p值

    千次阅读 2020-07-05 21:39:28
    如何理解假设检验中的alpha值和p值什么是假设检验假设检验的步骤假设检验中的两个假设确立原假设与备择假设时应遵循的最简单原则:确立原假设与备择假设时应遵循的两个基本原则假设检验的原则α\alphaα 和 p 值的...
  • 在R语言中,可以用以下代码来实现p值的计算: p[i,1]=phyper(o-1, m, n-m, k, lower.tail=FALSE) p值计算出来之后,还要计算p-adjusted,即校正后的p值(qvalue=padj=FDR=Corrected p-Value=p-adjusted),是对p值...
  • FDR错误发现率-P值校正学习

    千次阅读 2020-01-09 16:40:01
    比如,进行10000次检验的话,如果p值选择为0.05, 那么校正的p值筛选为0.000005。 p值低于此的基因才是显著性差异基因。 该方法虽然简单,但是过于严格,导致最后找的差异基因很少,甚至找不到差异的基因。  ...
  • 相关系数和P值

    万次阅读 2018-12-24 16:39:23
    (1)显著水平,就是P值,这是首要的,因为如果不显著,相关系数再高也没用,可能只是因为偶然因素引起的,那么多少才算显著,一般p值小于0.05就是显著了;如果小于0.01就更显著;例如p值=0.001,就是很高的显著水平了,只要...
  • T检验显著性检验根据t值计算p值

    千次阅读 2020-03-17 09:09:55
    使用scala进行T检验,独立样本T...t值根据均值、自由度、方差可以直接计算,由t值计算p值利用了java的math3,maven配置添加下面内容即可: <dependency> <groupId>org.apache.commons</groupI...
  • 线性回归提取P值

    千次阅读 2019-07-04 23:39:10
    注意summary(fit)生成包含所需所有信息的对象。...通过选择系数矩阵的第4列(存储在摘要对象中)获得p值: summary(fit)$coefficients[,4] summary(fit)$r.squared 试一试str(summary(fit))若要查看...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,705,682
精华内容 1,482,272
关键字:

p值