2017-02-01 4 views
2

Я хотел бы иметь дело с результатом nan в тесте Spearman. выглядит как nan_policy parameter is broken. Как я могу исправить эту проблему?Как бороться с ошибкой nan_policy в тесте Spearman в python

from scipy import stats 
pvalue=stats.spearmanr([10,100],[1,100])[1] 
print(pvalue) 

возвращает nan

pvalue=stats.spearmanr([10,100],[1,100],nan_policy='omit')[1] 
print(pvalue) 

возвращает nan

link to связанный с этим вопрос, который не решает эту проблему. link to Как проверить на nan в python.

ответ

2

Я не уверен, что ваш пример демонстрирует ошибку в параметре nan_policy, который относится к входам не выходов и не находятся в вашем входе нет nans.

Вы получаете nan, потому что ваши образцы слишком коротки для значимой статистики. Технически вы, вероятно, правы, значение p всегда должно быть конечным, так что это ошибка.

Сказанное, если я не полностью неправильно понимаю, что такое cc cear spearman, функция возвращает неправильные значения p.

>>> stats.spearmanr(np.arange(4.),np.arange(4.)) 
SpearmanrResult(correlation=1.0, pvalue=0.0) 

, имеющий четыре образца с одинаковым порядком ранга, действительно не так маловероятен.

Редактировать: Приведенные выше запахи для меня похожи на формулу приближения для распределения ранга cc, которая не работает слишком хорошо для небольших n. Так что ты можешь сделать? Если ваш n невелик, не используйте эту функцию (извините, я не могу быть более конструктивным, вы можете вычислить распределение ранга cc с помощью грубой силы, а затем вычислить p -значение); если ваши фактические образцы велики, вы, вероятно, прекрасны, но я бы перекрестно проверил несколько примеров против некоторых других программ статистики.

+2

«Если * n * является маленьким, не используйте эту функцию», это хороший совет, хотя я был бы менее строгим. Хорошо использовать функцию даже при малом * n *, чтобы получить * r *, но значение * p * не имеет смысла. Это то, что документация должна сказать о значениях p и размере выборки: * значения p не являются полностью надежными, но, вероятно, разумны для наборов данных, превышающих ** 500 ** или около того. * – kazemakase