支持多个类的单向ANOVA,无论是matlab还是python

lf5gs5x2  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(105)

我有4个大小为(72,22,22)的班级,我想为这些班级中的(22,22)每一对做ANOVA1。例如,我想获取每个类中的(2,3)对,并对4个数组中的每个对进行方差分析,因此输出将是一个由(22,22)组成的数组,表示4个类中每对的P值。我的代码解释了我想要说的:)我已经尝试了这段代码,但我不确定,因为结果有点奇怪;我想问题出在2for循环中。下面的代码是我的代码:

x = load("plv_8_12.mat");

x = x.plv;

size(x)

ans =
        2592          22          22

S1C1 =x(1:72,:,:);

S1C2 = x(649:720,:,:);

S1C3 = x(1297:1368,:,:);

S1C4 = x(1945:2016,:,:);

p_all = [];

for x =1:22

    for y=1:22
        
        tc1 = S1C1(:,x,y);
        tc2 = S1C2(:,x,y);
        tc3 = S1C3(:,x,y);
        tc4 = S1C4(:,x,y);
        temp = [tc1 tc2 tc3 tc4];
        
        %p_all(x,y) = anova1(temp);
        [p,tbl,stats]=anova1(temp);
        
        close all
    end
end
taor4pac

taor4pac1#

由于观测是以数组的形式组织起来的,人们强烈怀疑它们与每个“类”中的每个元素(z、x、y)有关,即成对的。如果是这种情况,则常规的ANOVA是无效的检验,可能需要重复测量的ANOVA(在下面的代码中要慢得多)。对于常规的方差分析,所有的观察都需要独立于另一组。我没有任何MAT文件,所以我无法验证代码的第一部分。如果不起作用,请让我知道。

import numpy as np
import pandas as pd
import scipy.io as sio
from scipy.stats import f_oneway
from statsmodels.stats.anova import AnovaRM

mat_contents = sio.loadmat("plv_8_12.mat")
data = sorted(mat_contents.keys())[-1]
data = mat_contents[data]
print(data.shape)

#data = np.random.normal(loc=0, scale=1, size=(2016, 22, 22))

S1C1 = data[0:72,:,:]
S1C2 = data[648:720,:,:]
S1C3 = data[1296:1368,:,:]
S1C4 = data[1944:2016,:,:]

p_all_paired = np.zeros((22,22))
p_all_indipendent = np.zeros((22,22))

for x in range(data.shape[1]):
    for y in range(data.shape[1]):
        df = pd.DataFrame({'ID': np.arange(72), 'S1C1': S1C1[:,x,y], 'S1C2': S1C2[:,x,y], 'S1C3': S1C3[:,x,y], 'S1C4': S1C4[:,x,y]}).melt(id_vars='ID', var_name='Class', value_name='Measurement')
        p_all_indipendent[x,y] = f_oneway(S1C1[:,x,y], S1C2[:,x,y], S1C3[:,x,y], S1C4[:,x,y])[1]
        p_all_paired[x,y] = AnovaRM(df, 'Measurement', 'ID', ['Class']).fit().anova_table.loc['Class','Pr > F']
        
print("Unpaired p-values")
print(p_all_indipendent)
print("\n\nPaired p-values")
print(p_all_paired)

相关问题