Matlab-如何分析二元行为反应序列?
在行为测试中,我对先前的反应对当前反应的影响感兴趣。例如,如果在我之前的三次试验中,参与者回答“否”、“是”、“是”,那么在当前试验中回答“是”的可能性与他们之前回答“是”、“是”、“否”等的可能性不同 为了分析这一点,我需要在我的数据集中找到特定响应序列的所有实例。e、 g.每次出现“是”时,每次出现“是”或“否…”时,依此类推所有可能的是/否序列排列 要做到这一点,我可以在Matlab中硬编码一长串if/else语句(用于之前固定数量的试验),或者我可以写出每个可能的序列并搜索它,但这两种方法编写起来都非常慢 有没有一个合理的解决方案来代替之前的n试验,而不是为固定数量的先前试验(即之前的三个响应)手工编码?i、 e.只要我想分析,比如说,前5次试验,而不是前3次试验,所需的if/else陈述链就变得难以忍受 注意。响应数据总是二进制的(即左对右,或是对否,等等) 非常感谢 编辑 下面的插图可能有助于澄清。这个快速示例按顺序遍历每个响应,如果当前响应为“y”,则统计前2次试验中每个是/否排列的实例数Matlab-如何分析二元行为反应序列?,matlab,sequence,analysis,Matlab,Sequence,Analysis,在行为测试中,我对先前的反应对当前反应的影响感兴趣。例如,如果在我之前的三次试验中,参与者回答“否”、“是”、“是”,那么在当前试验中回答“是”的可能性与他们之前回答“是”、“是”、“否”等的可能性不同 为了分析这一点,我需要在我的数据集中找到特定响应序列的所有实例。e、 g.每次出现“是”时,每次出现“是”或“否…”时,依此类推所有可能的是/否序列排列 要做到这一点,我可以在Matlab中硬编码一长串if/else语句(用于之前固定数量的试验),或者我可以写出每个可能的序列并搜索它,但这两种方
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,问题仍然存在)。这很好,谢谢。我需要花一点时间来弄清楚它到底是如何工作的(我对这个还是新手…),但它确实有效!