统计测试(Kolmogorov和T-test)与Python和Rpy2
-
09-12-2019 - |
题
我已经运行了一些算法,并想对结果进行一些统计分析。我有两个向量与错误率的平均值。
使用R,使用下面的行我会得到一切。
t.test(methodresults1,methodresults2,var.equal=FALSE,paired=FALSE,alternative="less")
由于我使用Python,我想使用Rpy2项目。
我试过了:
import rpy2.robjects as R
# methodresults1 and methodresults2 are numpy arrays.
# kolmogorov test
normality_res = R.r['ks.test'](R.FloatVector(methodresults1.tolist()),'pnorm',mean=R.FloatVector(methodresults1.mean().tolist()),sd=R.FloatVector(methodresults1.std().tolist())))
# t-test
res = R.r['t.test'](R.FloatVector(methodresults1.tolist()),R.FloatVector(methodresults2.tolist()),alternative='two.sided',var.equal=FALSE,paired=FALSE)
res.rx('p.value')[0][0]
res.rx('statistic')[0][0]
res.rx('parameter')[0][0]
我无法执行这两个测试。
我还发现t检验的问题是var。平等的声明,它给了我一个 * 语法错误:关键字不能是表达式(,第1行)。
额外问题:有没有更好的方法来使用numpy和Rpy2?
解决方案
说:“ syntaxError:关键字不能是表达式(,第1行)。”
在python中,符号不能包含字符“。”。
.
from rpy2.robjects.packages import importr
from rpy2.robjects.vectors import StrVector
stats = importr("stats")
stats.t_test(methodresults1, methodresults2,
**{'var.equal': False,
'paired': False,
'alternative': StrVector(("less", ))})
检查 rpy2文档关于函数更多细节。
其他提示
要使用python执行ks测试,在两个样本测试的情况下,您可以
>>> from scipy.stats import ks_2samp
>>> import numpy as np
>>>
哪里 x
, y
是两个 nupmy.array
:
>>> ks_2samp(x, y)
(0.022999999999999909, 0.95189016804849658)
第一个值是测试统计信息,第二个值是p值。如果p值小于95(对于5%的显着性水平),这意味着您不能拒绝两个样本分布相同的空假设。
对于一个样本ks测试,例如见这里: http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kstest.html#scipy.stats.kstest
此检验允许您测试经验分布与给定概率分布的拟合优度。