Matlab-如何分析二元行为反应序列?

Matlab-如何分析二元行为反应序列?,matlab,sequence,analysis,Matlab,Sequence,Analysis,在行为测试中,我对先前的反应对当前反应的影响感兴趣。例如,如果在我之前的三次试验中,参与者回答“否”、“是”、“是”,那么在当前试验中回答“是”的可能性与他们之前回答“是”、“是”、“否”等的可能性不同 为了分析这一点,我需要在我的数据集中找到特定响应序列的所有实例。e、 g.每次出现“是”时,每次出现“是”或“否…”时,依此类推所有可能的是/否序列排列 要做到这一点,我可以在Matlab中硬编码一长串if/else语句(用于之前固定数量的试验),或者我可以写出每个可能的序列并搜索它,但这两种方

在行为测试中,我对先前的反应对当前反应的影响感兴趣。例如,如果在我之前的三次试验中,参与者回答“否”、“是”、“是”,那么在当前试验中回答“是”的可能性与他们之前回答“是”、“是”、“否”等的可能性不同

为了分析这一点,我需要在我的数据集中找到特定响应序列的所有实例。e、 g.每次出现“是”时,每次出现“是”或“否…”时,依此类推所有可能的是/否序列排列

要做到这一点,我可以在Matlab中硬编码一长串if/else语句(用于之前固定数量的试验),或者我可以写出每个可能的序列并搜索它,但这两种方法编写起来都非常慢

有没有一个合理的解决方案来代替之前的n试验,而不是为固定数量的先前试验(即之前的三个响应)手工编码?i、 e.只要我想分析,比如说,前5次试验,而不是前3次试验,所需的if/else陈述链就变得难以忍受

注意。响应数据总是二进制的(即左对右,或是对否,等等)

非常感谢

编辑 下面的插图可能有助于澄清。这个快速示例按顺序遍历每个响应,如果当前响应为“y”,则统计前2次试验中每个是/否排列的实例数

mySequenceData = {'y' 'y' 'y' 'n' 'n' 'y' 'n' 'n' 'y' 'y' 'n' 'y'};
numPreviousTrials = 2;

yyCount = 0;
ynCount = 0;
nyCount = 0;
nnCount = 0;

for i = numPreviousTrials+1:length(mySequenceData)
    currentTrial = mySequenceData(i);
    if strcmp(mySequenceData(i), 'y')
        if strcmp(mySequenceData(i-1), 'y')
            if strcmp(mySequenceData(i-2), 'y')
                yyCount = yyCount+1;
            elseif strcmp(mySequenceData(i-2), 'n')
                nyCount = nyCount+1; 
            end
        elseif strcmp(mySequenceData(i-1), 'n')
            if strcmp(mySequenceData(i-2), 'y')
                ynCount = ynCount+1;
            elseif strcmp(mySequenceData(i-2), 'n')
                nnCount = nnCount+1; 
            end
        end
    end                       
end
如果我现在想计算前3次或5次试验中的y/n排列,等等,我必须全部重写,使用If/else语句几乎不可行

我的问题是试图找到一个从一开始就可以为n个试验编写的解决方案,而不是以前试验的具体数量


再次感谢。

它应该适合您:

mySequenceData = [1 1 1 0 0 1 0 0 0 0 0 0];

N = length(mySequenceData);
for j = 1:N-1 
n = j;
A1 = [0:2^n-1]'; %'
A2{j} = rem(floor(A1*pow2(-(n-1):0)),2);
for i = n:length(mySequenceData)
short_seq =  mySequenceData(i-n+1:i);   
out{i-n+1} = ismember(A2{j},short_seq,'rows');                     
end
counting      = cellfun(@find,out,repmat({1},1,length(out)));
counting_N{j} = histc(counting,[1:length(A2{j})]);
end
矩阵A2列出了所有可能的二进制组合。
矩阵计数\u N计算一个组合出现的时间。

发布一个包含输入和所需输出的示例,为了澄清您的需求Hanks Luis,我已经用一个示例更新了帖子。您有一个二进制选择:“是”或“否”,因此您最好使用1或0。@obchardon谢谢。我将使用1和0,我只使用上面的y/n来说明问题(即使数据编码为0/1而不是y/n,问题仍然存在)。这很好,谢谢。我需要花一点时间来弄清楚它到底是如何工作的(我对这个还是新手…),但它确实有效!