我正在尝试使用Go进行简单统计。
我正在使用this package来获取相关系数。
效果很好,但是没有给出相关性的P值。上面在同一页面上提供了此软件包中的其他功能:https://godoc.org/gonum.org/v1/gonum/stat
类似地,this package也具有相关函数,该函数返回系数但不返回P值。
如何使用这些软件包中的任何一个找到相关系数的P值?
编辑:我已经在交叉验证(stats.stackexchange.com)上发布了该问题,在那里有人提出这是一个编程问题。
答案 0 :(得分:1)
您似乎需要手动计算,并且有多种方法可以执行此操作,具体取决于您可以对数据进行的假设。如果您真的走这条路,强烈建议您也对现有的实现进行测试-例如R's cor.test
-
以确保您没有做错任何事情。
如果观察到的值均接近正常值,则该值
其中r
是计算出的相关系数,n
是观察数,将遵循学生的 t 分布,自由度为n-2
。因此,您可以使用Student's t distribution as implemented in GoNum来计算p值。这就是R中的cor.test
的作用。
它应该类似于(请注意,我从未使用过Go):
import (
"math"
"gonum.org/v1/gonum/stat/distuv"
)
func twoSidedPValue(r float64, n float64) float64 {
// compute the test stat
ts := r * math.Sqrt((n - 2) / (1 - r*r))
// make a Student's t with (n-2) d.f.
t := distuv.StudentsT{0, 1, (n-2), nil}
// compute the p-value
pval := 2 * t.CDF(-math.Abs(testStat))
return pval
}
针对R的cor.test
进行的测试似乎匹配。
如果采样变量不是每个法线,则可以使用置换检验。本质上,随机化数据并查看随机相关性匹配或超过观察到的次数的次数。如果您的测试是双向的(即,您没有关于关联结果的原则性假设),请使用关联的绝对值进行测试。
Wikipedia条目"Pearson correlation coefficient"的推断部分包含详细信息。