标签: scipy.stats

如何在Python中计算正态分布的百分位数?

问题陈述 - 随机变量 X 是 N(25, 4)。找到 X 的指定百分位:

A。第 10 个百分位数

b. 第 90 个百分位数

C。第 80 个百分位数

d. 第 50 个百分位数

尝试1

我的代码:

import numpy as np
import math
import scipy.stats
mu=25
sigma=4
a=mu-(1.282*4)
b=mu+(1.282*4)
Run Code Online (Sandbox Code Playgroud)

... 像那样。我从https://sphweb.bumc.bu.edu/otlt/mph-modules/bs/bs704_probability/bs704_probability10.html中给出的 Zscore 表中获取了值

尝试2

X=np.random.normal(25,4,10000) # sample size not mentioned in 
                                 problem. I just assumed it
a_9 = np.percentile(X,10)
b_9 = np.percentile(X,90)
c_9 = np.percentile(X,80)
d_9 = np.percentile(X,50)
Run Code Online (Sandbox Code Playgroud)

但根据练习平台隐藏的测试用例,答案是不正确的。谁能告诉我计算答案的正确方法吗?有没有 scipy.stats 函数来实现这个?

python numpy scipy.stats

8
推荐指数
2
解决办法
2万
查看次数

如何加快 pandas groupby bin 的聚合速度?

我为每一列创建了不同的 bin,并根据这些对 DataFrame 进行分组。

\n
import pandas as pd\nimport numpy as np\n\nnp.random.seed(100)\ndf = pd.DataFrame(np.random.randn(100, 4), columns=[\'a\', \'b\', \'c\', \'value\'])\n\n# for simplicity, I use the same bin here\nbins = np.arange(-3, 4, 0.05)\n\ndf[\'a_bins\'] = pd.cut(df[\'a\'], bins=bins)\ndf[\'b_bins\'] = pd.cut(df[\'b\'], bins=bins)\ndf[\'c_bins\'] = pd.cut(df[\'c\'], bins=bins)\n
Run Code Online (Sandbox Code Playgroud)\n

的输出df.groupby([\'a_bins\',\'b_bins\',\'c_bins\']).size() 表明组长度为2685619。

\n

计算各组的统计数据

\n

然后,计算各组的统计数据如下:

\n
%%timeit\ndf.groupby([\'a_bins\',\'b_bins\',\'c_bins\']).agg({\'value\':[\'mean\']})\n\n>>> 16.9 s \xc2\xb1 637 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 1 loop each)\n
Run Code Online (Sandbox Code Playgroud)\n

预期产出

\n
    \n
  1. 有可能加快这个速度吗?
  2. \n
  3. 更快的方法还应该支持通过输入a, b, and c值来查找值,如下所示:
  4. \n …

python numpy scipy pandas scipy.stats

8
推荐指数
1
解决办法
1782
查看次数

scipy 中 norm.fit 的意义是什么?

我生成一个随机数据样本并使用 scipy.stats.norm.fit 绘制其 pdf 以生成我的 loc 和 scale 参数。

我想看看如果我只是使用 numpy 计算均值和标准差而不进行任何实际拟合,我的 pdf 会是什么样子。令我惊讶的是,当我绘制两个 pdf 并打印两组 mu 和 std 时,我得到的结果完全相同。所以我的问题是,如果我可以计算样本的均值和标准差并仍然得到相同的结果,那么 norm.fit 的意义何在?

这是我的代码:

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

data = norm.rvs(loc=0,scale=1,size=200)

mu1 = np.mean(data)

std1 = np.std(data)

print(mu1)
print(std1)

mu, std = norm.fit(data)

plt.hist(data, bins=25, density=True, alpha=0.6, color='g')

xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
q = norm.pdf(x, mu1, std1)
plt.plot(x, p, 'k', linewidth=2)
plt.plot(x, q, …
Run Code Online (Sandbox Code Playgroud)

python statistics scipy scipy.stats

5
推荐指数
1
解决办法
6537
查看次数

SciKit Learn R 平方与 Pearson 相关 R 的平方有很大不同

我有 2 个 numpy 数组,如下所示:

a = np.array([32.0, 25.97, 26.78, 35.85, 30.17, 29.87, 30.45, 31.93, 30.65, 35.49, 
              28.3, 35.24, 35.98, 38.84, 27.97, 26.98, 25.98, 34.53, 40.39, 36.3])

b = np.array([28.778585, 31.164268, 24.690865, 33.523693, 29.272448, 28.39742,
              28.950092, 29.701189, 29.179174, 30.94298 , 26.05434 , 31.793175,
              30.382706, 32.135723, 28.018875, 25.659306, 27.232124, 28.295502,
              33.081223, 30.312504])
Run Code Online (Sandbox Code Playgroud)

当我使用 SciKit Learn 计算 R 平方时,我得到的值与计算 Pearson 相关性然后对结果求平方时完全不同的值:

sk_r2 = sklearn.metrics.r2_score(a, b)
print('SciKit R2: {:0.5f}\n'.format(sk_r2))

pearson_r = scipy.stats.pearsonr(a, b)
print('Pearson R: ', pearson_r)
print('Pearson R squared: ', pearson_r[0]**2) …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn pearson-correlation scipy.stats coefficient-of-determination

4
推荐指数
1
解决办法
5882
查看次数

scipy.stats.bootstrap 未导入,python

我已经尝试过pip install scipy,一切看起来都很好,通过我打开文件的路径,找不到任何提及引导库的内容,尽管它位于他们的网站上:https ://docs.scipy.org/doc/scipy/reference/生成/scipy.stats.bootstrap.html

查看 Github https://github.com/scipy/scipy/blob/master/scipy/stats/_bootstrap.py后,我可以看到 5 天前有更新,尽管我三天前运行了代码,没有任何问题

错误信息

python scipy statistics-bootstrap scipy.stats

4
推荐指数
1
解决办法
3989
查看次数

python scipy.stats 中的 norm.ppf 与 norm.cdf

所以我已经粘贴了我的完整代码供您参考,我想知道这里的ppf和cdf有什么用?你能解释一下吗?我做了一些研究,发现 ppf(百分比点函数)是 CDF(累积分布函数)的倒数,如果它们真的是,如果我将 ppf 和 cdf 分别替换为 1/cdf 和 1/ppf,这段代码不应该工作?

请向我解释这一点,两者之间的区别。以及如何以及何时使用哪个

这是,顺便说一句,假设检验。很抱歉有这么多评论,只是为了我将来的参考而解释所有内容的习惯。(如果我的评论有任何错误,请指出我)

ball_bearing_radius = [2.99, 2.99, 2.70, 2.92, 2.88, 2.92, 2.82, 2.83, 3.06, 2.85]




import numpy as np

from math import sqrt
from scipy.stats import norm

# h1 : u != U_0
# h0 : u = u_0
#case study : ball bearing example, claim is that radius = 3, do hypothesis testing 
mu_0 = 3
sigma = 0.1

#collect sample
sample = ball_bearing_radius

#compute mean
mean = np.mean(sample)

#compute …
Run Code Online (Sandbox Code Playgroud)

python numpy hypothesis-test data-science scipy.stats

3
推荐指数
1
解决办法
2205
查看次数

解释安德森亲爱的测试 scipy

有兴趣了解如何在 python 中解释 Anderson darling 测试的结果。

似乎 AD 统计数据必须低于其相关显着性水平的临界值,尽管我不确定如何从函数的返回值中正确确定这一点。

这是函数的结果

AndersonResult(statistic=1.383562257554786,
               critical_values=array([0.574, 0.654, 0.785, 0.916, 1.089]), 
               significance_level=array([15. , 10. ,  5. ,  2.5,  1. ]))
Run Code Online (Sandbox Code Playgroud)

python statistics scipy statistical-test scipy.stats

2
推荐指数
1
解决办法
4169
查看次数

尝试对 Pandas 中的列应用 box-cox 转换时出错

这应该是非常基本的,但这里似乎没有关于它的帖子(好吧,我没有找到任何)。

我尝试将 box-cox 变换应用于 Pandas 中的列,但收到此错误:

ValueError: Length of values does not match length of index
Run Code Online (Sandbox Code Playgroud)

这就是我所做的:

from scipy import stats 
df['boxcox_col_1'] = stats.boxcox(df['col_1'])
Run Code Online (Sandbox Code Playgroud)

这不应该起作用吗?

它只是一个常规的 pandas 列,其数值变量范围为 0.005 到 39,并且没有缺失值。

python scipy pandas scipy.stats

2
推荐指数
1
解决办法
2167
查看次数

scipy 中计算相对熵的 3 个函数 有什么不同?

python 中的 Scipy 提供了以下函数,它们似乎计算相同的信息论度量,Kullback-Leibler 散度,也称为相对熵:

  • scipy.stats.entropy,如果qk=None
  • scipy.special.rel_entr
  • scipy.special.kl_div

为什么是三个一样的东西?有人能解释一下它们之间的区别吗?

python entropy information-theory scipy.stats

2
推荐指数
1
解决办法
4947
查看次数

使用 STATSMODELS 的一种方差分析

我正在尝试在三组之间进行单向方差分析。我已经能够使用 SCIPY.STATS 获取 F 统计量和 F 分布的 p 值。然而,我更喜欢将方差分析表作为带有平方和的类似 R 的输出。下面给出了我的 SCIPY.STATS 一种方差分析代码。STATSMODELS ANOVA 的所有文档都使用 pandas 数据框。任何有关如何调整 STATSMODELS 现有代码的帮助将不胜感激。

import numpy as np
import pandas as pd
import scipy.stats as stats
from scipy.stats import f_oneway
data1= pd.read_table('/Users/Hrihaan/Desktop/Sample_A.txt', dtype=float, header=None, sep='\s+').values
data2= pd.read_table('/Users/Hrihaan/Desktop/Sample_B.txt', dtype=float, header=None, sep='\s+').values
data3= pd.read_table('/Users/Hrihaan/Desktop/Sample_C.txt', dtype=float, header=None, sep='\s+').values
Param_1=data1[:,0]
Param_2=data2[:,0]
Param_3=data3[:,0]
f_oneway(Param_1, Param_2, Param_3) 
Run Code Online (Sandbox Code Playgroud)

python anova statsmodels scipy.stats

1
推荐指数
1
解决办法
2526
查看次数

Scipy stats 概率大于 1

我正在计算二项式概率质量函数的值,发现当将极端参数传递给 pmf 时,它们的总和超过 1。

参见示例:

from scipy.stats import binom
n = 1541096362225563.0
p = 1.0477878413173978e-18
vals = [binom.pmf(n=n, p=p, k=i) for i in range(3)]
print(vals)  # -> [0.9983865609638467, 1.0, 0.060730098812886574]
Run Code Online (Sandbox Code Playgroud)

我可以看到如何将 1.0 作为错误过滤掉,但即使其余值的总和也超过 1。就我的目的而言,我不介意 之类的数值不精确性np.finfo(np.float16).eps,但该示例显然更加极端。有没有好的办法来处理这个问题呢?

python precision distribution scipy.stats

1
推荐指数
1
解决办法
242
查看次数