2012-03-07 2 views
2

Я запустил некоторые алгоритмы и хотел сделать некоторый статистический анализ с результатами. У меня есть два вектора со средним значением частоты ошибок.Статистические тесты (Колмогоров и Т-тест) с Python и Rpy2

С 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.equal, и это дает мне * СинтаксисError: ключевое слово не может быть выражением (, строка 1).

Дополнительный вопрос: есть ли лучший способ работы с numpy и Rpy2?

+1

Поскольку 'var.equal' и' парные' по умолчанию являются ЛОЖНЫМИ, почему они даже ставят значения? –

+0

Я получил то, что вы сказали, и именно так я использую его в данный момент. Проблема в том, что, например, если я хочу var.equal = True. Я не знаю, как я могу установить это в Rpy. Я пробовал var_equal = True, «var.equal» = True и никакого эффекта. Также есть много вариантов, таких как var.equal (na.action, lower.tail ...), которые я бы хотел использовать. –

ответ

6

Как говорится: "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 documentation about functions.


+0

Работал нормально. знак равно –

0

выполнить тест К.С. с питоном, в случае испытания двух образцов, вы можете

>>> 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%), это означает, что вы не можете отклонить Null-Hypothese, что два распределения выборки идентичны.

для одного теста К.С. образца, см, например, здесь: http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kstest.html#scipy.stats.kstest

этот тест позволяет проверить степень согласия вашего эмпирического распределения к заданному распределению вероятностей.

Смежные вопросы