2

我已经运行了一些算法,并希望对结果进行一些统计分析。我有两个具有错误率平均值的向量。

使用 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-test 的问题在于 var.equal 语句,它给了我一个* SyntaxError: keyword can't be an expression (, line 1)。

额外的问题:有没有更好的方法来使用 numpy 和 Rpy2?

4

2 回答 2

7

正如它所说:“ 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 文档以获取更多详细信息。


于 2012-03-08T07:26:04.050 回答
0

使用 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

此测试可让您测试经验分布与给定概率分布的拟合优度。

于 2013-10-06T07:20:26.370 回答