2016-12-05 3 views
4

Я ищу, чтобы рассчитать intraclass correlation (ICC) в Python. Я не смог найти существующий модуль, который имеет эту функцию. Есть ли альтернативное имя, или я должен делать это сам? Я знаю, что этот вопрос задан a year ago on Cross Проверен другим пользователем, но ответов не было. Я хочу сравнить непрерывные оценки между двумя оценщиками.Внутренняя корреляция в модуле Python?

+0

Возможно, вы захотите также просмотреть [этот] (http://stats.stack.change.com/q/63368/61867) вопрос, который включает в себя некоторый код. Я знаком с множеством функций в numpy, но раньше я не видел ICC. Возможно, вам также захочется найти в документах пакеты scikit-learn и statsmodels. Это не слишком сложно реализовать вручную в любом случае. Учтите использование numpy, особенно если скорость важна для вас. Не забудьте опубликовать свой ответ здесь, чтобы помочь другим в поиске этого в будущем! – Praveen

+0

Спасибо, Правээн. Это то, что предоставил WalR. На данный момент было бы быстрее написать его сам. При поиске реализации в python большинство результатов для ICC были Intel C++ Compiler. Я не нашел его погребенным в нейролеарне. Кому-то может показаться полезным реализовать ICC полностью в scipy/numpy. Я буду следить за реализацией или кодом, который я использую. – Hector

ответ

3

Вы можете найти реализацию на ICC или Brain_Data.icc

+0

Я этого раньше не нашел. Это конкретная реализация ICC (3,1). Я хотел бы посмотреть, существует ли в модуле реализация всех вариантов ICC. Я считаю, что мне нужен ICC (2,2), который я могу кодировать, если реализация не существует. – Hector

+0

@Hector Существует другая реализация для 'icc2' проверки моего редактирования и удачи. – Zety

+0

Отличная находка, спасибо! – Hector

3

Есть несколько реализаций ICC в R. Они могут использоваться с Python через пакет rpy2. Пример:

from rpy2.robjects import DataFrame, FloatVector, IntVector 
from rpy2.robjects.packages import importr 
from math import isclose 

groups = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 
      4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8] 
values = [1, 2, 0, 1, 1, 3, 3, 2, 3, 8, 1, 4, 6, 4, 3, 
      3, 6, 5, 5, 6, 7, 5, 6, 2, 8, 7, 7, 9, 9, 9, 9, 8] 

r_icc = importr("ICC") 
df = DataFrame({"groups": IntVector(groups), 
       "values": FloatVector(values)}) 
icc_res = r_icc.ICCbare("groups", "values", data=df) 
icc_val = icc_res[0] # icc_val now holds the icc value 

# check whether icc value equals reference value 
print(isclose(icc_val, 0.728, abs_tol=0.001)) 
Смежные вопросы