Python 如何计算(正态)分布点的p值?

Python 如何计算(正态)分布点的p值?,python,scipy,statistics,distribution,p-value,Python,Scipy,Statistics,Distribution,P Value,我试图为我的度量(spearman)计算一个p值,我试图推广该方法,以便它可以与其他度量一起工作(而不是依赖scipy.stats.spearman) 如何从该分布生成点的p值? 该方法是否适用于非正态分布?这是正态分布,如果我采样超过100个点,情况可能会更糟 这篇文章需要µ=0,std=1 根据您的评论,我将假设这些是排列测试的结果。也就是说,您从原始数据集中获得了一个值(-0.44),而所有其他值都是通过排列数据获得的。现在,您想确定您的原始值是否重要 置换检验(在重采样分支中)是一种非参

我试图为我的度量(spearman)计算一个p值,我试图推广该方法,以便它可以与其他度量一起工作(而不是依赖scipy.stats.spearman)

如何从该分布生成点的p值?

该方法是否适用于非正态分布?这是正态分布,如果我采样超过100个点,情况可能会更糟

这篇文章需要
µ=0,std=1


根据您的评论,我将假设这些是排列测试的结果。也就是说,您从原始数据集中获得了一个值(-0.44),而所有其他值都是通过排列数据获得的。现在,您想确定您的原始值是否重要

置换检验(在重采样分支中)是一种非参数统计,因此与正态分布无关。在您的情况下,这看起来大致正常,但这既不是必要的,也不是必需的。有不同的方法可以从置换分布估计p值,最简单的方法与您的想法类似

如果你执行了所有可能的排列,你会得到一个精确的分布,因此你的(双面)p值公式是正确的,
,其中
t*
是原始值,
t
是排列值,
p
是总排列数


如果您执行了不完整数量的排列,那么公式只是略有不同,
(1+| t*|>=|t |)/(1+p)
,以解释随机性。

根据您的评论,我将假设这些是排列测试的结果。也就是说,您从原始数据集中获得了一个值(-0.44),而所有其他值都是通过排列数据获得的。现在,您想确定您的原始值是否重要

置换检验(在重采样分支中)是一种非参数统计,因此与正态分布无关。在您的情况下,这看起来大致正常,但这既不是必要的,也不是必需的。有不同的方法可以从置换分布估计p值,最简单的方法与您的想法类似

如果你执行了所有可能的排列,你会得到一个精确的分布,因此你的(双面)p值公式是正确的,
,其中
t*
是原始值,
t
是排列值,
p
是总排列数


如果你进行了非完整数量的排列,那么公式只是略有不同,
(1+| t*|>=|t |)/(1+p)
,以解释随机性。

我无法从你的文本中看出,正态分布的点值、平均值和sd是多少?另外,你是想估计密度还是累计值?这些是从-1到1的相关值。我试图确定我的分值是否具有统计学意义。我的理解是,我测量低于我的值(-0.44)和高于我的值(0.44)的出现次数,然后除以置换总数(N=100)。然而,这是一种可能性。是否可以使用scipy分布和一个点值来确定一个值是否重要?您提到了一些新的信息,现在您没有包括在问题中,这是一个排列测试吗?是的。对不起,我漏掉了。从你的文本中,我看不出正态分布的点值、均值和标准差是多少?另外,你是想估计密度还是累计值?这些是从-1到1的相关值。我试图确定我的分值是否具有统计学意义。我的理解是,我测量低于我的值(-0.44)和高于我的值(0.44)的出现次数,然后除以置换总数(N=100)。然而,这是一种可能性。是否可以使用scipy分布和一个点值来确定一个值是否重要?您提到了一些新的信息,现在您没有包括在问题中,这是一个排列测试吗?是的。对不起,我漏掉了。所以,如果我用欧几里德距离做一个类似的置换测试来确定某个距离是否明显很小,这会是一个单边测试吗?我只检查空值的比例是否更低?谢谢!这真的很有用。因此,如果我将空值拟合到一个分布,比如上面的分布,有没有方法从实际的scipy分布计算p值?或者这是不可能的,并且应该/只能使用您描述的置换测试来完成吗?@O.rka我真的不理解您的要求,但是如果这是关于Python的,那么我无法帮助您。因此,如果我使用欧几里德距离作为度量来做类似的置换测试,以确定某个距离是否非常小,这是一个片面的测试,我只检查空值的比例是否更低?谢谢!这真的很有用。因此,如果我将空值拟合到一个分布,比如上面的分布,有没有方法从实际的scipy分布计算p值?或者这是不可能的,并且应该/只能使用您描述的置换测试来完成吗?@O.rka我真的不明白您在问什么,但是如果这是关于Python的,那么我无法帮助您。
from scipy import stats
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

data = np.asarray([0.027972027972027972, -0.2802197802197802, -0.21818181818181817, 0.3464285714285714, 0.15, 0.34065934065934067, -0.3216783216783217, 0.08391608391608392, -0.03496503496503497, -0.2967032967032967, 0.09090909090909091, 0.11188811188811189, 0.1181818181818182, -0.4787878787878788, -0.6923076923076923, -0.05494505494505495, 0.19090909090909092, 0.3146853146853147, -0.42727272727272725, 0.06363636363636363, 0.1978021978021978, 0.12142857142857141, 0.10303030303030303, 0.23214285714285712, -0.5804195804195805, 0.013986013986013986, 0.02727272727272727, 0.5659340659340659, 0.06363636363636363, -0.503030303030303, -0.2867132867132867, 0.07252747252747253, -0.13736263736263737, 0.21212121212121213, -0.09010989010989011, -0.2517482517482518, -0.17482517482517484, -0.3706293706293707, 0.15454545454545454, 0.01818181818181818, 0.17582417582417584, 0.3230769230769231, -0.09642857142857142, -0.5274725274725275, -0.23626373626373626, -0.2692307692307692, -0.2857142857142857, -0.19999999999999998, -0.489010989010989, -0.15454545454545454, 0.38461538461538464, 0.6, 0.37762237762237766, -0.0029411764705882353, -0.06993006993006994, -0.19999999999999998, 0.38181818181818183, 0.05454545454545455, -0.03296703296703297, 0.17272727272727273, -0.13986013986013987, -0.08241758241758242, -0.34545454545454546, 0.5252747252747253, 0.10303030303030303, 0.16783216783216784, -0.36363636363636365, -0.42857142857142855, 0.12727272727272726, -0.18181818181818182, -0.10439560439560439, -0.6083916083916084, -0.1956043956043956, 0.13846153846153847, -0.48951048951048953, -0.18881118881118883, 0.7362637362637363, -0.19090909090909092, 0.4909090909090909, 0.37142857142857144, -0.3090909090909091, -0.1098901098901099, 0.15151515151515152, -0.13636363636363635, -0.5494505494505495, 0.44755244755244755, 0.04895104895104896, -0.37142857142857144, 0.01098901098901099, 0.08131868131868132, 0.2571428571428571, -0.3076923076923077, 0.24545454545454545, 0.06043956043956044, 0.06764705882352941, 0.02727272727272727, -0.07252747252747253, 0.21818181818181817, -0.03846153846153846, 0.48571428571428577])
query_value = -0.44155844155844154

with plt.style.context("seaborn-white"):
    fig, ax = plt.subplots()
    sns.distplot(data, rug=True, color="teal", ax=ax)
    ax.set_xlabel("$x$", fontsize=15)
    ax.axvline(query_value, color="black", linestyle=":", linewidth=1.618, label="Query: %0.5f"%query_value)
    ax.legend()

# Normal Test
print(stats.normaltest(data))
# Fit the data
params = stats.norm.fit(data)
# Generate the distribution
distribution = stats.norm(*params)
distribution