Porównywanie dwóch krzywych

0

Mam dwie krzywe. Chcę je porównać ze sobą przy użyciu np. testu t-studenta. Chcę jednak mieć dostęp do informacji dla jakich "x-ów" wartość testu t jest istotna statystycznie, a dla jakich nie. Ilustruje to świetnie poniższa figura wraz z opisem:

Fig-1-Statistical-testing-of-evoked-responses-at-a-single-sensor-In-panel-a-the.png

Fig. 1. Statistical testing of evoked responses at a single sensor. In panel a, the evoked responses are shown, separately for congruent (dotted line) and incongruent (solid line) sentence endings. In panel b, the time series of sample-specific t -values is shown. And in panel c, the significant samples are shown, separately for each of three statistical procedures: (1) sample-specific t -tests at the uncorrected 0.05-level (two-sided), (2) sample-specific t -tests at the Bonferroni- corrected level of 0 . 05 / 600 = 0 . 00008 (two-sided), and (3) the cluster-based nonparametric test.

W jaki sposób mogę coś takiego osiągnąć? Znacie jakieś funkcje, które umożliwiają wyliczenie wielu wartości statystyki t dla wielu par y'ów dwóch krzywych?

0

Zaiste. Szampan czyni cuda. Szczególnie jego duże ilości. Ale nie za duże, bo wtedy robi się... dziwnie. Tak, czy siak, rozwiązanie okazało się jak zwykle - dość proste. Cała magia sprowadza się do tego, że każda z tych dwóch krzywych pochodzi z uśrednienia, powiedzmy, 100 krzywych. I tak, mając dwa dwuwymiarowe sety danych, gdzie na jeden set składa się X krzywych składowych o długości Y możemy zrobić taki cusik:

(PS trial jest tutaj rozumiany jako krzywa składowa; sample to pojedyncza wartość krzywej składowej)

from scipy.stats import ttest_ind

def calculate_ttest(experimental_data, control_data):

    number_of_experimental_trials = np.shape(experimental_data)[0]
    number_of_control_trials = np.shape(control_data)[0]
    number_of_samples_in_trial = np.shape(experimental_data)[1]

    t_values = np.zeros(number_of_samples_in_trial)
    p_values = np.zeros(number_of_samples_in_trial)

    # If number of experimental trials and number of control trials
    # are different, perform Welch’s t-test, which does not assume
    # equal population variance.
    for sample in np.arange(number_of_samples_in_trial):
        X = experimental_data[:, sample]
        Y = control_data[:, sample]
        if number_of_experimental_trials != number_of_control_trials:
            t, p = ttest_ind(X, Y, equal_var=False)
        else:
            t, p = ttest_ind(X, Y, equal_var=True)
        t_values[sample] = t
        p_values[sample] = p

    return t_values, p_values

Dostajemy cudownusie dwa wektorki, które po krótkiej zabawie i korekcie Bonferroniego mogą uroczyć nasze oczęta czymś takim:

figure_1.jpg

Wiem, że to dziwnie zabrzmi, ale nie ma nic lepszego niż sylwester z Pythonem. Don't blame me :P

0

Fajne, co te krzywe przedstawiają, napięcie czego? Jakieś bio-sygnały?

0

Tak, podejrzewałem, że to biosygnały.

1 użytkowników online, w tym zalogowanych: 0, gości: 1