%-prediction analysis brain-behavioral % using brain imaging data to predict behavioral data clear all; close all; %clc; dp_beh = '/data';% path of behavioral data. cd(dp_beh); y = load('SMA_PCL_mask.mat');% grey matter volumes of mask y = y.SMA_GMV; x_data= load('BIS_BEH.mat');% BIS scale data x_data = x_data.BIS_BEH; % RUN fid = fopen(fullfile(dp_beh,'Predictions.txt'),'a+'); fprintf(fid,'====================================\n'); %fprintf('Predicting %s by %s:\n',['lambda_corr_' num2str(g)],['fc_corr_' mask{m} '_' num2str(g)]); % fid = fopen(fullfile(dp_beh,'Predictions.txt'),'a+'); %fprintf(fid,'=======\n'); %fprintf(fid,'%s\n',['fc_corr_' mask{m} '_' num2str(g)]); %y_data_total = y; %(:);%y changed to y(:)? y_data_total = x_data; x_data = y; pval = zeros(size(y_data_total, 2), size(x_data, 2)); corrval = zeros(size(y_data_total, 2), size(x_data, 2)); nsub = size(y_data_total,1); for iy = 1:size(y_data_total, 2) y_data = y_data_total(:,iy); my_data = mean(y_data); sy_data = std(y_data); y_data = (y_data - mean(y_data))./std(y_data); x_data = (x_data - repmat(mean(x_data), length(y_data), 1))./repmat(std(x_data), length(y_data), 1); num_boot = 1000; num_run = 100; nfold = 4; pthresh = 0.5; nobsv = length(y_data); nvar = size(x_data, 2); corr_val = cell(num_run, 1); diff_val = cell(num_run, 1); %parpool(10) for irun = 1:num_run corr_val_run = zeros(nvar, 1); diff_val_run = zeros(nvar, 1); for ivar = 1:nvar x = x_data(:, ivar); y = y_data(:); fold_idx = bcv_sample(x, y, nfold, pthresh); y_pred = zeros(nobsv, 1); y_predictions = zeros(nobsv, 1); for ifold = 1:nfold te_idx = find(fold_idx == ifold); tr_idx = find(fold_idx ~= ifold); est_beta = regress(y(tr_idx), x(tr_idx)); y_pred(te_idx) = x(te_idx)*est_beta; end corr_val_run(ivar) = corr(y_pred(:), y(:)); diff_val_run(ivar) = sum((y_pred(:) - y(:)).^2)/(nsub-length(est_beta)-1); %compute mean squared error (MSE) end corr_val{irun} = corr_val_run; diff_val{irun} = diff_val_run; end %delete(gcp('nocreate')); null_corr_val = cell(num_boot, 1); %parpool(10) parfor iboot = 1:num_boot null_corr_val_run = zeros(num_run, nvar); for ivar = 1:nvar x = x_data(:, ivar); y = y_data(:); null_y = y(randperm(length(y_data))); for irun = 1:num_run fold_idx = bcv_sample(x, null_y, nfold, pthresh); null_y_pred = zeros(nobsv, 1); for ifold = 1:nfold te_idx = find(fold_idx == ifold); tr_idx = find(fold_idx ~= ifold); est_beta = regress(null_y(tr_idx), x(tr_idx)); null_y_pred(te_idx) = x(te_idx)*est_beta; end null_corr_val_run(irun, ivar) = corr(null_y(:), null_y_pred(:)); end end null_corr_val{iboot} = null_corr_val_run; end delete(gcp('nocreate')); sum_corr_val = 0; sum_diff_val = 0; for irun = 1:num_run sum_corr_val = sum_corr_val + corr_val{irun}; sum_diff_val = sum_diff_val + diff_val{irun}; end corr_val = sum_corr_val/num_run; diff_vals = sum_diff_val/num_run; mean_null_corr_val = zeros(num_boot, nvar); for iboot = 1:num_boot mean_null_corr_val(iboot, :) = squeeze(mean(null_corr_val{iboot}, 1)); end null_corr_val = mean_null_corr_val; p_val = zeros(nvar,1); for i = 1:nvar p_val(i) = sum(null_corr_val(:,i) > corr_val(i))/num_boot; end pval(iy, :) = p_val(:)'; corrval(iy, :) = corr_val(:)'; end fprintf(fid,'r = %f,p = %f \n',corrval,pval); diff_vals pred_err = diff_vals*sy_data pval corrval fclose(fid);