Задача с итерацией расчета перекрестного рекуррентного графика - PullRequest
0 голосов
/ 23 января 2019

Я хотел бы попросить Вас об одолжении:

У меня есть фрейм данных с переменной Электродермальной активности (EDA) от разных субъектов (eda1, eda2, eda3, ...). Я вручную вычисляю График перекрестной рекуррентной количественной оценки и показатель повторяемости для субъектов в качестве меры синхронизации.

from pyunicorn.timeseries import CrossRecurrencePlot, RecurrencePlot
from nolitsa import data, dimension, delay
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy import stats
import pylab

eda1 = data['eda1raw'] 
eda2 = data['eda2raw']

eda1z = stats.zscore(eda1)
eda2z = stats.zscore(eda2)

DIM = 5  
TAU = 10  
METRIC = "supremum" 
THRESHOLD=0.5 
crp = CrossRecurrencePlot(eda1z, eda2z, dim=DIM, tau=TAU, metric=METRIC, normalize=False, threshold=THRESHOLD) 
print "Recurrence rate - RReda1vs2z:", crp.recurrence_rate()

Но мне нужна автоматическая функция или итерация для функции частоты повторения (сокращение: RR) для всех предметов (eda1raw1, eda1raw2, ... eda1rawN). У меня много переменных EDA, и я не хочу писать:

crp = CrossRecurrencePlot(eda1z, eda2z, dim=DIM, tau=TAU, metric=METRIC, normalize=False, threshold=THRESHOLD) 
crp1 = CrossRecurrencePlot(eda3z, eda4z, dim=DIM, tau=TAU, metric=METRIC, normalize=False, threshold=THRESHOLD) 
...

Конечным результатом должна стать матрица рецидивов ЭДА для всех субъектов: enter image description here

Я что-то пробовал:

automaticcal = [dataWithEda] 
for i in automaticcal: 
      CrossRecurrencePlot(i, i, dim=3, tau=10, metric="supremum", normalize=False, threshold=0.5)
print(CrossRecurrencePlot)

Затем транспонировать в массив.

1 Ответ

0 голосов
/ 11 февраля 2019

Решение от Mikuláš Muroň:

# Save data to list
input_data = [xd, yd, cd, dd, ed, fd, gd, hd, iid, jd, kd, ld, md, nd, od, pd]
# transform to np.array
input_data_numpy_array = [np.array(x) for x in input_data]
# counting zscore
zscore_data = [stats.zscore(x) for x in input_data_numpy_array]
# counting phasic diemnsion of EDA
eda_data = [cvxEDA(x, delta=1) for x in zscore_data]

# processing data - actual and next element
for eda_data1,eda_data2 in zip(eda_data, eda_data[1:]):
    crp = CrossRecurrencePlot(eda_data1.next(), eda_data2.next(), dim=DIM, tau=TAU, metric=METRIC, normalize=False, threshold=THRESHOLD)
    pylab.imshow(crp.recurrence_matrix())
    pylab.xlabel("$n$")
    pylab.ylabel("$n$")
    pylab.show()

    print("Recurrence rate:", crp.recurrence_rate())
...