Chuck-Chae / RL_Abstraction_MC

0 stars 0 forks source link

main_VFA.m #19

Open LEEMINJIII opened 3 months ago

LEEMINJIII commented 3 months ago

clear;

rng(44501)

load('Mydata_Orderblk.mat') numSub = size(Mydata_Orderblk, 1); f = fieldnames(Mydata_Orderblk{1,1}); maxB = 20; Nmod = 2; % 4states와 8states 두 개 모델만 사용

nparm = [2 2]; % 4states와 8states 모델의 파라미터 개수

MF = nan(maxB, numSub, Nmod); NLL = nan(maxB, numSub, Nmod);

for i = 1:Nmod m = zeros(nparm(i), 1); v = 6.25; prior_RL(i) = struct('mean', m, 'variance', v); Theta{i} = nan(maxB, numSub, nparm(i)); end

fname_8states = 'vfa_8states.mat'; fname_4states = 'vfa_4states.mat';

fcbm_maps = {fname_8states, fname_4states}; % 8states와 4states 모델의 결과를 저장할 파일 이름

models = {@model_VFA_8states_v3, @model_VFA_4states_v3}; % 8states와 4states 모델만 사용

for tr = 1:maxB ctr = 1; Data = cell(numSub, 1); for j = 1:numSub subj = Mydata_Orderblk{j, tr}; if ~isempty(subj) Data{ctr} = subj; ctr = ctr + 1; end end Data = Data(1:ctr-1);

% 8states와 4states 모델에 대해 VFA 수행
CBM8states = cbm_lap(Data, @model_VFA_8states_v3, prior_RL(1), fname_8states);
CBM4states = cbm_lap(Data, @model_VFA_4states_v3, prior_RL(2), fname_4states);

% hbi 결과 저장
fname_hbi_blk = ['hbi_RL_blk_', num2str(tr), '.mat'];
cbm_hbi(Data, models, fcbm_maps, fname_hbi_blk);
load(fname_hbi_blk);

% 해당 블록에 대한 데이터가 있는 subjects의 인덱스 가져오기
subidx = find(~cellfun(@isempty, Mydata_Orderblk(:, tr)));

% MF, NLL, Theta에 결과 저장
MF(tr, subidx, 1)       = cbm.output.responsibility(:, 1);
MF(tr, subidx, 2)       = cbm.output.responsibility(:, 2);

NLL(tr, subidx, 1)      = -CBM8states.math.loglik;
Theta{1}(tr, subidx, :) = [CBM8states.math.theta{:}]';

NLL(tr, subidx, 2)      = -CBM4states.math.loglik;
Theta{2}(tr, subidx, :) = [CBM4states.math.theta{:}]';   

end

save('MF.mat', 'MF') save('NLL.mat', 'NLL') save('Theta.mat', 'Theta') delete hbi lap