Pergunta

Executei alguns algoritmos e queria fazer algumas análises estatísticas com os resultados.Tenho dois vetores com as médias da taxa de erro.

Com R, usando a linha abaixo eu conseguiria tudo.

t.test(methodresults1,methodresults2,var.equal=FALSE,paired=FALSE,alternative="less")

Como estou usando Python, queria usar o projeto Rpy2.

Eu tentei isso:

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]

Não consegui realizar os dois testes.

Descobri também que o problema com o teste t está na instrução var.equal e isso me dá uma * Erro de sintaxe:a palavra-chave não pode ser uma expressão (, linha 1).

Pergunta extra:Existe uma maneira melhor de trabalhar com numpy e Rpy2?

Foi útil?

Solução

Como diz:"Erro de sintaxe:a palavra-chave não pode ser uma expressão (, linha 1)."

Em Python, os símbolos não podem conter o caractere ".".

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", ))})

Verifica a Documentação rpy2 sobre funções para mais detalhes.


Outras dicas

para realizar o teste ks com python, no caso de um teste de duas amostras, você pode

>>> from scipy.stats import ks_2samp
>>> import numpy as np
>>> 

onde x, y são dois nupmy.array:

>>> ks_2samp(x, y)
(0.022999999999999909, 0.95189016804849658)

o primeiro valor são as estatísticas de teste e o segundo valor é o valor p.se o valor p for inferior a 95 (para um nível de significância de 5%), isso significa que não é possível rejeitar a hipótese nula de que as duas distribuições amostrais são idênticas.

para um teste ks de amostra, veja por exemplo aqui: http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kstest.html#scipy.stats.kstest

este teste permite testar a qualidade do ajuste de sua distribuição empírica a uma determinada distribuição de probabilidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top