【Scala统计学系列】Scala P值定义、P值检验法、P值计算

Scala P值定义 P值检验法 P值计算

P值的定义

假设检验问题的p值是由检验统计量样本观察值得出的的原假设可被拒绝的最小显著性水平

P值检验法

按照p值的定义,对于对于任意指定的显著性水平α,就有

(1)若p值≤α,则在显著性水平α下拒绝H0

(2) 若p值>α,则在显著性水平α下接受H0

有了这两条结论就能方便地确定H0的拒绝域,这种利用p值来确定检验拒绝域的方法,称为p值检验法。

用临界值法来确定H0的拒绝域时,例如当取α=0.05时知道要拒绝H0,再取α=0.01时也要拒绝H0,但不能知道将α再降低一些是否也要拒绝H0,而p值法给出了拒绝H0的最小显著性水平,因此p值法临界法给出了有关拒绝域的更多的信息

p值表示反对原假设H0的依据的强度p值越小,反对H0的依据越强、越充分(譬如对于某个检验问题的检验统计量的观察值的p值=0.0009,p值如此的小,以至于几乎不可能在H0为真时,出现目前的观察值,这说明拒绝H0的理由很强,我们就拒绝H0)。

一般,若p值≤0.01,称推断拒绝H0的依据很强或称检验是高度显著的;

若0.01<p值≤0.05称推断拒绝的H0的依据是强的或称检验是显著的;

若0.05<p值≤0.1称推断拒绝H0的理由是弱的,检验是不显著的;

若p值>0.1一般来说没有理由拒绝H0,基于p值,研究者可以使用任意希望的显著性水平来作计算,在杂志上或在一些技术报告中,许多研究者在讲述假设检验的结果时,常不明显地论及显著性水平以及临界值,代之以简单地引用假设检验的p值,利用或让它来评价反对原假设的依据的强度,做出判断。

P值计算示例

双侧检验和单侧检验计算p-value的过程相同吗

在概率统计中,双侧检验和单侧检验计算p-value的过程是不同的。

  • 双侧检验(two-tailed test)用于检验一个假设是否与观察数据显著不同。计算p-value时,需要考虑两个方向的概率,即假设值左侧和右侧的概率。p-value等于两个方向概率之和的两倍。

  • 单侧检验(one-tailed test)用于检验一个假设是否大于或小于观察数据。计算p-value时,只需考虑一个方向的概率。如果是检验假设值大于观察数据,则p-value等于假设值右侧的概率;如果是检验假设值小于观察数据,则p-value等于假设值左侧的概率。

下面是使用Scala编写的示例代码:


/** 在概率统计中,双侧检验和单侧检验计算p-value的过程是不同的。

双侧检验(two-tailed test)用于检验一个假设是否与观察数据显著不同。计算p-value时,需要考虑两个方向的概率,即假设值左侧和右侧的概率。
p-value等于两个方向概率之和的两倍。

单侧检验(one-tailed test)用于检验一个假设是否大于或小于观察数据。计算p-value时,只需考虑一个方向的概率。如果是检验假设值大于观察数据,
则p-value等于假设值右侧的概率;如果是检验假设值小于观察数据,则p-value等于假设值左侧的概率。 */
object ComputePValue extends App {
  import org.apache.commons.math3.distribution.NormalDistribution

  // 创建正态分布对象
  val normalDistribution = new NormalDistribution(0, 1)

  // 双侧检验计算p-value
  val observedValue = 1.5
  val twoTailedPValue = 2 * (1 - normalDistribution.cumulativeProbability(math.abs(observedValue)))
  println("双侧检验的p-value: " + twoTailedPValue)

  // 单侧检验计算p-value(检验假设值大于观察数据)
  val rightTailPValue = 1 - normalDistribution.cumulativeProbability(observedValue)
  println("单侧检验的p-value(假设值大于观察数据): " + rightTailPValue)

  // 单侧检验计算p-value(检验假设值小于观察数据)
  val leftTailPValue = normalDistribution.cumulativeProbability(-observedValue)
  println("单侧检验的p-value(假设值小于观察数据): " + leftTailPValue)

}
//双侧检验的p-value: 0.13361440253771617
//单侧检验的p-value(假设值大于观察数据): 0.06680720126885809
//单侧检验的p-value(假设值小于观察数据): 0.06680720126885803

在上述代码中,我们创建了一个正态分布对象normalDistribution。然后,根据观察值observedValue进行双侧检验和两种类型的单侧检验。

对于双侧检验,我们使用normalDistribution.cumulativeProbability()方法计算绝对观察值左侧和右侧的概率,并将其乘以2得到p-value。

对于单侧检验,我们分别计算假设值右侧的概率和假设值左侧的概率,使用1 - normalDistribution.cumulativeProbability()得到右侧概率,使用normalDistribution.cumulativeProbability()得到左侧概率。

累加密度概率函数和逆向累加密度概率函数的关系

累积密度概率函数(cumulative density function,CDF)和逆向累积密度概率函数(inverse cumulative density function,ICDF),也称为累积分布函数和分位点函数,是概率分布函数的两个相关函数。

  • 累积密度概率函数(CDF)表示随机变量小于或等于给定值的概率。它接受一个给定的值作为输入,并返回小于或等于该值的概率。数学符号通常表示为 F(x) = P(X ≤ x)。
  • 逆向累积密度概率函数(ICDF)则表示给定概率下的临界值。它接受一个给定的概率作为输入,并返回**使得CDF等于该概率的对应值。**数学符号通常表示为 F^(-1)§ = x。

以下是在Scala中使用Apache Commons Math库的代码示例:

/**
 * 累积密度概率函数(cumulative density function,CDF)和逆向累积密度概率函数(inverse cumulative density function,ICDF),
 * 也称为累积分布函数和分位点函数,是概率分布函数的两个相关函数。

累积密度概率函数(CDF)表示随机变量小于或等于给定值的概率。它接受一个给定的值作为输入,并返回小于或等于该值的概率。数学符号通常表示为 F(x) = P(X ≤ x)。

逆向累积密度概率函数(ICDF)则表示给定概率下的临界值。它接受一个给定的概率作为输入,并返回使得CDF等于该概率的对应值。数学符号通常表示为 F^(-1)(p) = x。
 */
object NormalDistributionTest extends App {
  import org.apache.commons.math3.distribution.{NormalDistribution, TDistribution}

  // 创建正态分布对象
  val normalDistribution = new NormalDistribution(0, 1)

  // 计算正态分布的CDF值
  val cdfValue = normalDistribution.cumulativeProbability(1.5)
  println("正态分布的CDF值: " + cdfValue)

  // 使用CDF值计算正态分布的ICDF值
  val invCdfValue = normalDistribution.inverseCumulativeProbability(cdfValue)
  println("正态分布的ICDF值: " + invCdfValue)

  // 创建t分布对象
  val tDistribution = new TDistribution(10)

  // 计算t分布的CDF值
  val tcdfValue = tDistribution.cumulativeProbability(1.5)
  println("t分布的CDF值: " + tcdfValue)

  // 使用CDF值计算t分布的ICDF值
  val invtcdfValue= tDistribution.inverseCumulativeProbability(tcdfValue)
  println("t分布的ICDF值: " + invtcdfValue)
}
//正态分布的CDF值: 0.9331927987311419
//正态分布的ICDF值: 1.4999999999999996
//t分布的CDF值: 0.9177463367772797
//t分布的ICDF值: 1.499999999846724

在上述示例中,我们创建了一个正态分布对象normalDistribution和一个t分布对象tDistribution。然后,我们使用cumulativeProbability()方法计算正态分布的CDF值,并使用inverseCumulativeProbability()方法计算t分布的ICDF值。这些函数可以根据具体需要进行调整和使用,以满足概率分布的相关计算需求。

双侧检验和单侧检验计算拒绝域的过程相同吗

双侧检验和单侧检验计算拒绝域的过程是不同的。

  • 双侧检验(two-tailed test)的拒绝域通常涉及到假设值两侧的区域。在这种情况下,计算拒绝域时需要考虑两个方向的临界值。如果观察值落在任一方向的临界值之外,就拒绝原假设。

  • 单侧检验(one-tailed test)的拒绝域只涉及到一个方向的区域。在这种情况下,计算拒绝域时只需考虑一个方向的临界值。如果观察值落在该方向的临界值之外,就拒绝原假设。

下面是使用Scala编写的示例代码:

import org.apache.commons.math3.distribution.NormalDistribution

// 创建正态分布对象
val normalDistribution = new NormalDistribution(0, 1)

// 双侧检验计算拒绝域
val alpha = 0.05 // 显著性水平
val criticalValueTwoTailed = normalDistribution.inverseCumulativeProbability(alpha / 2)
val observedValueTwoTailed = 1.5
if (observedValueTwoTailed < -criticalValueTwoTailed || observedValueTwoTailed > criticalValueTwoTailed) {
  println("拒绝原假设")
} else {
  println("接受原假设")
}

// 单侧检验计算拒绝域(假设值大于观察数据)
val criticalValueRightTail = normalDistribution.inverseCumulativeProbability(alpha)
val observedValueRightTail = 1.5
if (observedValueRightTail > criticalValueRightTail) {
  println("拒绝原假设")
} else {
  println("接受原假设")
}

// 单侧检验计算拒绝域(假设值小于观察数据)
val criticalValueLeftTail = normalDistribution.inverseCumulativeProbability(1 - alpha)
val observedValueLeftTail = 1.5
if (observedValueLeftTail < -criticalValueLeftTail) {
  println("拒绝原假设")
} else {
  println("接受原假设")
}

在上述代码中,我们创建了一个正态分布对象normalDistribution。然后,根据显著性水平alpha和观察值进行双侧检验和两种类型的单侧检验。

对于双侧检验,我们使用normalDistribution.inverseCumulativeProbability()方法计算显著性水平alpha/2对应的临界值。如果观察值落在任一方向的临界值之外,就拒绝原假设。

对于单侧检验,我们分别计算显著性水平alpha1-alpha对应的临界值。如果观察值超过右侧临界值(假设值大于观察数据)或小于左侧临界值(假设值小于观察数据),就拒绝原假设。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值