User Tools

Site Tools


public:data_natneuro_2013_kahn:matlab_scripts:script_equivalence_to_exponential_models
script_equivalence_to_exponential_models.m
function script_equivalence_to_exponential_models()
%
%   This simulation aims to investigate the equivalence between the
%   drifting norm models and exponential decay models.
%   A number of time-series (data) is generated according to an exponential
%   integration model, and the drift covariate that best explains the data
%   is obtained for each generated dataset.
%   Finally, a curve displaying the match is plotted with the results
%   _______________________________________________
%   by Marcelo G Mattar (10/21/2013)
%   mattar@sas.upenn.edu

%% PARAMETERS
% Free-parameters of the model
adaptFactor = 1; % Magnitude of adaptation effects relative to direct effects. For large adaptFactor, adaptation will have large influence relative to main-effects, and vice-versa
convolve_data_and_covariates = false;
saveBool = false;
outputDir = './Figures/'; % Directory where output images will be saved

% Simulation and plotting parameters - do not affect the results
decayRange = [-1 1]; % Range of decay factors to test (10^decayFactor)
elasticity_coefficients_to_test = 0:0.01:1;
number_of_decay_factors_to_test = 1000;

%% INITIALIZE VARIABLES
baseDir = '/jet/aguirre/FaceSpace/';
REFsdir = [baseDir 'MDS_RGI/PrepScripts/REFs/'];
seqFile = [REFsdir 'MDS_RGI_Seq_Numerical.ref'];
stimSeq = [2,23,6,12,19,4,20,26,3,25,1,5,18,10,24,27,16,9,22,17,13,15,7,21,0,0,14,8,11,11,24,15,16,7,25,12,17,21,4,8,1,14,19,20,6,27,9,5,13,18,22,0,0,2,3,23,26,10,10,9,8,17,16,14,12,15,24,22,2,6,11,18,7,0,0,13,4,23,27,21,25,20,3,19,5,26,1,1,12,27,5,19,10,20,15,0,0,9,7,18,21,26,17,4,13,25,22,24,3,14,16,8,6,2,11,23,23,25,17,2,14,9,11,6,8,0,0,10,12,4,19,13,20,1,7,26,5,22,18,3,24,16,27,15,21,21,23,14,11,10,13,12,2,5,17,9,24,0,0,15,22,7,16,6,19,3,4,25,26,20,8,27,1,18,18,1,6,23,10,27,22,3,12,16,24,19,0,0,7,17,15,9,21,14,13,5,11,4,2,26,8,20,25,25,13,22,8,12,7,14,1,21,6,4,27,19,17,20,5,9,2,18,23,3,26,24,11,15,10,16,0,0,0,0,21,27,7,19,18,24,13,6,20,11,14,22,25,23,1,4,12,8,26,16,10,3,9,15,2,17,5,5,15,17,7,22,11,2,8,21,3,16,23,18,19,9,12,6,0,0,4,26,25,14,24,20,10,1,13,27,27,0,0,8,14,17,26,11,20,23,12,3,5,2,25,18,16,13,7,4,10,6,24,1,9,19,22,21,15,15,20,18,25,5,4,3,10,17,22,27,26,9,23,16,1,11,13,24,21,2,12,0,0,19,6,14,7,8,8,2,24,26,6,3,0,0,12,13,23,19,11,25,15,14,4,5,1,20,27,18,9,17,10,22,16,21,7,7,11,1,0,0,22,23,13,26,12,20,9,4,6,16,17,3,2,19,21,18,5,14,10,25,8,15,27,24,24,10,5,7,9,13,16,3,8,25,21,22,15,11,12,14,18,0,0,17,1,27,6,26,2,20,19,23,4,4,15,13,17,25,7,1,8,3,20,2,16,11,5,10,0,0,23,24,14,6,18,26,22,19,27,12,21,9,9,18,2,15,1,10,4,14,21,5,0,0,11,27,20,17,19,12,22,13,8,24,23,7,3,6,25,16,26,26,18,27,3,1,24,9,20,7,5,16,12,11,8,22,14,2,21,17,6,13,10,23,15,4,0,0,25,19,19,25,4,11,26,13,2,10,14,27,17,18,15,5,21,1,3,22,9,0,0,16,20,12,23,8,7,24,6,6,1,25,3,13,9,10,26,15,8,4,18,17,14,23,21,12,24,2,7,20,0,0,5,27,11,19,16,22,22,1,26,27,8,19,24,5,20,16,4,9,14,15,23,17,11,3,21,10,2,0,0,18,12,25,6,7,13,13,14,5,8,23,2,4,24,25,27,10,19,26,7,6,9,3,18,11,17,0,0,1,22,20,21,16,15,12,12,26,21,20,24,17,8,18,4,1,15,19,7,2,13,3,27,14,25,0,0,6,5,23,22,10,11,9,16,16,19,2,1,23,9,26,0,0,27,25,10,7,15,6,17,24,12,18,14,20,4,21,8,13,11,22,5,3,3,15,25,2,27,23,5,6,22,26,4,16,18,20,13,19,14,0,0,24,8,10,21,11,7,12,9,1,17,17,27,4,22,12,5,24,18,13,0,0,3,7,10,8,16,25,11,21,19,1,2,9,6,15,26,23,20,14,14,26,19,15,3,17,12,1,16,2,22,6,10,18,8,5,25,9,27,13,21,24,4,7,23,11,0,0,20,20,22,4,17,23,0,0,26,14,3,11,16,5,12,10,15,18,6,21,13,1,19,8,9,25,24,7,27,2,2,23,6,12,19,4,20,26,3,25,1,5,18,10,24,27,16,9,22,17,13,15,7,21,0,0,14,8,11,11,24,15,16,7,25,12,17,21,4,8,1,14,19,20,6,27,9,5,13,18,22,0,0,2,3,23,26,10,10,9,8,17,16,14,12,15,24,22,2,6,11,18,7,0,0,13,4,23,27,21,25,20,3,19,5,26,1,1,12,27,5,19,10,20,15,0,0,9,7,18,21,26,17,4,13,25,22,24,3,14,16,8,6,2,11,23,23,25,17,2,14,9,11,6,8,0,0,10,12,4,19,13,20,1,7,26,5,22,18,3,24,16,27,15,21,21,23,14,11,10,13,12,2,5,17,9,24,0,0,15,22,7,16,6,19,3,4,25,26,20,8,27,1,18,18,1,6,23,10,27,22,3,12,16,24,19,0,0,7,17,15,9,21,14,13,5,11,4,2,26,8,20,25,25,13,22,8,12,7,14,1,21,6,4,27,19,17,20,5,9,2,18,23,3,26,24,11,15,10,16,0,0,0,0,21,27,7,19,18,24,13,6,20,11,14,22,25,23,1,4,12,8,26,16,10,3,9,15,2,17,5,5,15,17,7,22,11,2,8,21,3,16,23,18,19,9,12,6,0,0,4,26,25,14,24,20,10,1,13,27,27,0,0,8,14,17,26,11,20,23,12,3,5,2,25,18,16,13,7,4,10,6,24,1,9,19,22,21,15,15,20,18,25,5,4,3,10,17,22,27,26,9,23,16,1,11,13,24,21,2,12,0,0,19,6,14,7,8,8,2,24,26,6,3,0,0,12,13,23,19,11,25,15,14,4,5,1,20,27,18,9,17,10,22,16,21,7,7,11,1,0,0,22,23,13,26,12,20,9,4,6,16,17,3,2,19,21,18,5,14,10,25,8,15,27,24,24,10,5,7,9,13,16,3,8,25,21,22,15,11,12,14,18,0,0,17,1,27,6,26,2,20,19,23,4,4,15,13,17,25,7,1,8,3,20,2,16,11,5,10,0,0,23,24,14,6,18,26,22,19,27,12,21,9,9,18,2,15,1,10,4,14,21,5,0,0,11,27,20,17,19,12,22,13,8,24,23,7,3,6,25,16,26,26,18,27,3,1,24,9,20,7,5,16,12,11,8,22,14,2,21,17,6,13,10,23,15,4,0,0,25,19,19,25,4,11,26,13,2,10,14,27,17,18,15,5,21,1,3,22,9,0,0,16,20,12,23,8,7,24,6,6,1,25,3,13,9,10,26,15,8,4,18,17,14,23,21,12,24,2,7,20,0,0,5,27,11,19,16,22,22,1,26,27,8,19,24,5,20,16,4,9,14,15,23,17,11,3,21,10,2,0,0,18,12,25,6,7,13,13,14,5,8,23,2,4,24,25,27,10,19,26,7,6,9,3,18,11,17,0,0,1,22,20,21,16,15,12,12,26,21,20,24,17,8,18,4,1,15,19,7,2,13,3,27,14,25,0,0,6,5,23,22,10,11,9,16,16,19,2,1,23,9,26,0,0,27,25,10,7,15,6,17,24,12,18,14,20,4,21,8,13,11,22,5,3,3,15,25,2,27,23,5,6,22,26,4,16,18,20,13,19,14,0,0,24,8,10,21,11,7,12,9,1,17,17,27,4,22,12,5,24,18,13,0,0,3,7,10,8,16,25,11,21,19,1,2,9,6,15,26,23,20,14,14,26,19,15,3,17,12,1,16,2,22,6,10,18,8,5,25,9,27,13,21,24,4,7,23,11,0,0,20,20,22,4,17,23,0,0,26,14,3,11,16,5,12,10,15,18,6,21,13,1,19,8,9,25,24,7,27,2]';
% these were taken directly from 'Eigenvectors and values for one perceptual matrix.xls'
coordinatelist = [NaN NaN NaN
    -0.43815233	0.043993216	0.000988356
    -0.16477091	-0.048723129	-0.090894096
    -0.24489513	-0.16840255	0.18525238
    -0.45287893	0.11428962	-0.009152772
    -0.1665505	-0.004077156	-0.10680729
    -0.1814501	-0.15005818	0.15631847
    -0.21176483	0.44336182	0.13605036
    0.10204564	0.37570476	0.03404298
    0.04136971	0.18141115	0.23324493
    -0.2850246	-0.020309502	-0.10849088
    0.032296558	-0.18105101	-0.14802057
    0.024659614	-0.30407585	0.13620073
    -0.29424431	0.051400923	-0.088352834
    0.12463116	-0.1310324	-0.10569481
    0.027527177	-0.29119301	0.18201885
    -0.061689789	0.39513857	-0.012518304
    0.30989956	0.22948687	-0.020096972
    0.31145212	0.10152802	0.1321107
    -0.089943402	-0.14891391	-0.15344147
    0.23075579	-0.21014674	-0.16836819
    0.14466016	-0.31300308	0.15095023
    -0.07980242	-0.053859279	-0.19630964
    0.23728748	-0.15372509	-0.14647582
    0.14153114	-0.31762302	0.058781603
    0.20348456	0.26825272	-0.067086623
    0.40232804	0.23268949	-0.11921149
    0.33723857	0.058936748	0.13496217];

decayFactor_list = logspace(decayRange(1),decayRange(2),number_of_decay_factors_to_test);
best_elasticity = zeros(size(decayFactor_list));
directEffect = 1; % Magnitude of a stimulus independent of adaptation effects

for d = 1:length(decayFactor_list)
    
    decayFactor = decayFactor_list(d);
    
    %% GENERATE DATA (TIME-SERIES)
    data = zeros(size(stimSeq));
    seqLen = length(stimSeq);
    
    % Create a sequence of 3-dimensional coordinates
    coordSeq = [coordinatelist(stimSeq+1,1) coordinatelist(stimSeq+1,2) coordinatelist(stimSeq+1,3)];
    
    % Construct the data, trial by trial
    for t=1:seqLen
        cummulativeAdaptation = 0;
        for i=1:(t-1)
            % temporalDecay is a multiplicative factor that attenuates
            % effects further back into the past
            temporalDecay = exp(decayFactor*(1+i-t));
            
            % distance is nan if it involves a blank
            distance = sqrt((coordSeq(t,1)-coordSeq(i,1))^2 + (coordSeq(t,2)-coordSeq(i,2))^2 + (coordSeq(t,3)-coordSeq(i,3))^2);
            % adaptEffect relates perceptual distance to adaptation
            adaptEffect = distance;
            
            %cummAdapt shows the cummulative adaptation over time
            if ~isnan(adaptEffect)
                cummulativeAdaptation = cummulativeAdaptation + temporalDecay*adaptEffect;
                % Notice that trials following a blank will have near-zero
                % cummulative adaptation, leading to small signal
            end
        end
        

        if stimSeq(t)==0
            data(t) = adaptFactor*cummulativeAdaptation;
            % However, in this case, cummulativeAdaptation=0, so data=0
        else
            data(t) = directEffect + adaptFactor*cummulativeAdaptation;
            % Notice the plus sign: large distances -> large recovery from
            % adaptation
        end
    end
    
    % Convolve simulated data with HRF
    if convolve_data_and_covariates
        data = downsample(hrfconv(data,1500),(length(hrfconv(data,1500)))/(length(data)));
    end
    
    
    %% FIND OPTIMAL ELASTICITY COEFFICIENT
    elasticity_coefficients = elasticity_coefficients_to_test;
    correlations_found = zeros(size(elasticity_coefficients));
    
    for i=1:length(elasticity_coefficients)
        drift_covariate = driftCov_simple(round(100*elasticity_coefficients(i)));
        
        % Convolve simulated data with HRF
        if convolve_data_and_covariates
            drift_covariate = downsample(hrfconv(drift_covariate,1500),(length(hrfconv(drift_covariate,1500)))/(length(drift_covariate)));
        end
        
        % Find correlation between data and covariate
        correlations_found(i) = corr2(drift_covariate,data);
    end
    
    [~, I] = max(correlations_found);
    best_elasticity(d) = elasticity_coefficients(I);
    
end

%% FINDS THE EXPONENTIAL CURVE CORRESPONDING TO ELASTICITY=0.40
[~,X] = min(abs(best_elasticity-0.4));
decayMatch = decayFactor_list(X);


%% PLOT THE RESULTS
figure(1);
hold on;
plot(1:0.01:11,adaptFactor*exp(10^decayRange(1)*(0:-0.01:-10)))
plot(1:0.01:11,adaptFactor*exp(10^(mean([decayRange(1),decayRange(2)]))*(0:-0.01:-10)),'g')
plot(1:0.01:11,adaptFactor*exp(10^decayRange(2)*(0:-0.01:-10)),'r')
plot(1:0.01:11,adaptFactor*exp(decayMatch*(0:-0.01:-10)),'k-')
title('Adaptation curves');
ylabel('Relative magnitude of attenuation');
xlabel('Number of trials back');
legend({['10^' num2str(decayRange(1))],['10^' num2str(mean([decayRange(1),decayRange(2)]))],['10^' num2str(decayRange(2))],'Matched adaptation to ec=0.4'});
ylim([0 1]);
xlim([1 10]);
if saveBool; print('-depsc',[outputDir 'Sample_adaptation_curves.eps']); end;
if saveBool; print('-dpng',[outputDir 'Sample_adaptation_curves.png']); end;

figure(2);
semilogx(decayFactor_list,best_elasticity);
title('Simulating the experiment sequence');
ylabel('Elasticity Coefficients');
xlabel('Adaptation curve decay factor');
ylim([0 1]);
h1=line([decayMatch decayMatch],get(gca,'YLim'),'Color','r');%h is the *handle*
set(h1,'LineStyle',':');%dash style
h2=line(get(gca,'XLim'),[0.4,0.4],'Color','r');%h is the *handle*
set(h2,'LineStyle',':');%dash style
if saveBool; print('-depsc',[outputDir 'Elasticity-decay_correspondence.eps']); end;
if saveBool; print('-dpng',[outputDir 'Elasticity-decay_correspondence.png']); end;

%{
figure(3);
plot(1:0.01:11,adaptFactor*exp(decayMatch*(0:-0.01:-10)))
title('Adaptation curve matching FFA optimal elasticity');
ylabel('Relative magnitude of attenuation');
xlabel('Number of trials back');
if saveBool; print('-depsc',[outputDir 'Matched_adaptation_curve.eps']); end;
if saveBool; print('-dpng',[outputDir 'Matched_adaptation_curve.png']); end;
ylim([0 1]);
xlim([1 10]);
%}
end












function [evokedSignal stimContextSeq coordSeq stimSeq] = driftCov_simple(adaptFactor)
%
%	adaptFactor should be between 0 and 100
%   _______________________________________________
%   by Marcelo G Mattar (05/24/2013)
%   mattar@sas.upenn.edu


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% INITIALIZE ALL VARIABLES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

baseDir = '/jet/aguirre/FaceSpace/';

stimSeq = [2,23,6,12,19,4,20,26,3,25,1,5,18,10,24,27,16,9,22,17,13,15,7,21,0,0,14,8,11,11,24,15,16,7,25,12,17,21,4,8,1,14,19,20,6,27,9,5,13,18,22,0,0,2,3,23,26,10,10,9,8,17,16,14,12,15,24,22,2,6,11,18,7,0,0,13,4,23,27,21,25,20,3,19,5,26,1,1,12,27,5,19,10,20,15,0,0,9,7,18,21,26,17,4,13,25,22,24,3,14,16,8,6,2,11,23,23,25,17,2,14,9,11,6,8,0,0,10,12,4,19,13,20,1,7,26,5,22,18,3,24,16,27,15,21,21,23,14,11,10,13,12,2,5,17,9,24,0,0,15,22,7,16,6,19,3,4,25,26,20,8,27,1,18,18,1,6,23,10,27,22,3,12,16,24,19,0,0,7,17,15,9,21,14,13,5,11,4,2,26,8,20,25,25,13,22,8,12,7,14,1,21,6,4,27,19,17,20,5,9,2,18,23,3,26,24,11,15,10,16,0,0,0,0,21,27,7,19,18,24,13,6,20,11,14,22,25,23,1,4,12,8,26,16,10,3,9,15,2,17,5,5,15,17,7,22,11,2,8,21,3,16,23,18,19,9,12,6,0,0,4,26,25,14,24,20,10,1,13,27,27,0,0,8,14,17,26,11,20,23,12,3,5,2,25,18,16,13,7,4,10,6,24,1,9,19,22,21,15,15,20,18,25,5,4,3,10,17,22,27,26,9,23,16,1,11,13,24,21,2,12,0,0,19,6,14,7,8,8,2,24,26,6,3,0,0,12,13,23,19,11,25,15,14,4,5,1,20,27,18,9,17,10,22,16,21,7,7,11,1,0,0,22,23,13,26,12,20,9,4,6,16,17,3,2,19,21,18,5,14,10,25,8,15,27,24,24,10,5,7,9,13,16,3,8,25,21,22,15,11,12,14,18,0,0,17,1,27,6,26,2,20,19,23,4,4,15,13,17,25,7,1,8,3,20,2,16,11,5,10,0,0,23,24,14,6,18,26,22,19,27,12,21,9,9,18,2,15,1,10,4,14,21,5,0,0,11,27,20,17,19,12,22,13,8,24,23,7,3,6,25,16,26,26,18,27,3,1,24,9,20,7,5,16,12,11,8,22,14,2,21,17,6,13,10,23,15,4,0,0,25,19,19,25,4,11,26,13,2,10,14,27,17,18,15,5,21,1,3,22,9,0,0,16,20,12,23,8,7,24,6,6,1,25,3,13,9,10,26,15,8,4,18,17,14,23,21,12,24,2,7,20,0,0,5,27,11,19,16,22,22,1,26,27,8,19,24,5,20,16,4,9,14,15,23,17,11,3,21,10,2,0,0,18,12,25,6,7,13,13,14,5,8,23,2,4,24,25,27,10,19,26,7,6,9,3,18,11,17,0,0,1,22,20,21,16,15,12,12,26,21,20,24,17,8,18,4,1,15,19,7,2,13,3,27,14,25,0,0,6,5,23,22,10,11,9,16,16,19,2,1,23,9,26,0,0,27,25,10,7,15,6,17,24,12,18,14,20,4,21,8,13,11,22,5,3,3,15,25,2,27,23,5,6,22,26,4,16,18,20,13,19,14,0,0,24,8,10,21,11,7,12,9,1,17,17,27,4,22,12,5,24,18,13,0,0,3,7,10,8,16,25,11,21,19,1,2,9,6,15,26,23,20,14,14,26,19,15,3,17,12,1,16,2,22,6,10,18,8,5,25,9,27,13,21,24,4,7,23,11,0,0,20,20,22,4,17,23,0,0,26,14,3,11,16,5,12,10,15,18,6,21,13,1,19,8,9,25,24,7,27,2,2,23,6,12,19,4,20,26,3,25,1,5,18,10,24,27,16,9,22,17,13,15,7,21,0,0,14,8,11,11,24,15,16,7,25,12,17,21,4,8,1,14,19,20,6,27,9,5,13,18,22,0,0,2,3,23,26,10,10,9,8,17,16,14,12,15,24,22,2,6,11,18,7,0,0,13,4,23,27,21,25,20,3,19,5,26,1,1,12,27,5,19,10,20,15,0,0,9,7,18,21,26,17,4,13,25,22,24,3,14,16,8,6,2,11,23,23,25,17,2,14,9,11,6,8,0,0,10,12,4,19,13,20,1,7,26,5,22,18,3,24,16,27,15,21,21,23,14,11,10,13,12,2,5,17,9,24,0,0,15,22,7,16,6,19,3,4,25,26,20,8,27,1,18,18,1,6,23,10,27,22,3,12,16,24,19,0,0,7,17,15,9,21,14,13,5,11,4,2,26,8,20,25,25,13,22,8,12,7,14,1,21,6,4,27,19,17,20,5,9,2,18,23,3,26,24,11,15,10,16,0,0,0,0,21,27,7,19,18,24,13,6,20,11,14,22,25,23,1,4,12,8,26,16,10,3,9,15,2,17,5,5,15,17,7,22,11,2,8,21,3,16,23,18,19,9,12,6,0,0,4,26,25,14,24,20,10,1,13,27,27,0,0,8,14,17,26,11,20,23,12,3,5,2,25,18,16,13,7,4,10,6,24,1,9,19,22,21,15,15,20,18,25,5,4,3,10,17,22,27,26,9,23,16,1,11,13,24,21,2,12,0,0,19,6,14,7,8,8,2,24,26,6,3,0,0,12,13,23,19,11,25,15,14,4,5,1,20,27,18,9,17,10,22,16,21,7,7,11,1,0,0,22,23,13,26,12,20,9,4,6,16,17,3,2,19,21,18,5,14,10,25,8,15,27,24,24,10,5,7,9,13,16,3,8,25,21,22,15,11,12,14,18,0,0,17,1,27,6,26,2,20,19,23,4,4,15,13,17,25,7,1,8,3,20,2,16,11,5,10,0,0,23,24,14,6,18,26,22,19,27,12,21,9,9,18,2,15,1,10,4,14,21,5,0,0,11,27,20,17,19,12,22,13,8,24,23,7,3,6,25,16,26,26,18,27,3,1,24,9,20,7,5,16,12,11,8,22,14,2,21,17,6,13,10,23,15,4,0,0,25,19,19,25,4,11,26,13,2,10,14,27,17,18,15,5,21,1,3,22,9,0,0,16,20,12,23,8,7,24,6,6,1,25,3,13,9,10,26,15,8,4,18,17,14,23,21,12,24,2,7,20,0,0,5,27,11,19,16,22,22,1,26,27,8,19,24,5,20,16,4,9,14,15,23,17,11,3,21,10,2,0,0,18,12,25,6,7,13,13,14,5,8,23,2,4,24,25,27,10,19,26,7,6,9,3,18,11,17,0,0,1,22,20,21,16,15,12,12,26,21,20,24,17,8,18,4,1,15,19,7,2,13,3,27,14,25,0,0,6,5,23,22,10,11,9,16,16,19,2,1,23,9,26,0,0,27,25,10,7,15,6,17,24,12,18,14,20,4,21,8,13,11,22,5,3,3,15,25,2,27,23,5,6,22,26,4,16,18,20,13,19,14,0,0,24,8,10,21,11,7,12,9,1,17,17,27,4,22,12,5,24,18,13,0,0,3,7,10,8,16,25,11,21,19,1,2,9,6,15,26,23,20,14,14,26,19,15,3,17,12,1,16,2,22,6,10,18,8,5,25,9,27,13,21,24,4,7,23,11,0,0,20,20,22,4,17,23,0,0,26,14,3,11,16,5,12,10,15,18,6,21,13,1,19,8,9,25,24,7,27,2]';
% these were taken directly from 'Eigenvectors and values for one perceptual
% matrix.xls'
coordinatelist = [NaN NaN NaN
    -0.43815233	0.043993216	0.000988356
    -0.16477091	-0.048723129	-0.090894096
    -0.24489513	-0.16840255	0.18525238
    -0.45287893	0.11428962	-0.009152772
    -0.1665505	-0.004077156	-0.10680729
    -0.1814501	-0.15005818	0.15631847
    -0.21176483	0.44336182	0.13605036
    0.10204564	0.37570476	0.03404298
    0.04136971	0.18141115	0.23324493
    -0.2850246	-0.020309502	-0.10849088
    0.032296558	-0.18105101	-0.14802057
    0.024659614	-0.30407585	0.13620073
    -0.29424431	0.051400923	-0.088352834
    0.12463116	-0.1310324	-0.10569481
    0.027527177	-0.29119301	0.18201885
    -0.061689789	0.39513857	-0.012518304
    0.30989956	0.22948687	-0.020096972
    0.31145212	0.10152802	0.1321107
    -0.089943402	-0.14891391	-0.15344147
    0.23075579	-0.21014674	-0.16836819
    0.14466016	-0.31300308	0.15095023
    -0.07980242	-0.053859279	-0.19630964
    0.23728748	-0.15372509	-0.14647582
    0.14153114	-0.31762302	0.058781603
    0.20348456	0.26825272	-0.067086623
    0.40232804	0.23268949	-0.11921149
    0.33723857	0.058936748	0.13496217];



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% CREATE CONTEXT SEQUENCE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

k = adaptFactor/100; % k is the drifting factor, now scaled between 0 and 1

% Create a sequence of 3-dimensional coordinates
coordSeq = [coordinatelist(stimSeq+1,1) coordinatelist(stimSeq+1,2) coordinatelist(stimSeq+1,3)];
seqLen = size(coordSeq,1);
stimContextSeq = zeros(size(coordSeq));

% Start in the state [0 0 0]
stimContextSeq(1,:) = [0 0 0];

% Now, drift in the perceptual space depending on presented stimulus
for i=2:seqLen
    % When the current trial is a NaN (blank) trial
    if any(isnan(coordSeq(i-1,:)))
        % Model in which the context drifts back to the center (prototype)
        %stimContextSeq(i,:) = stimContextSeq(i-1,:) + k*([0 0 0] - stimContextSeq(i-1,:));
        % Model in which the contexts stays where it was
        stimContextSeq(i,:) = stimContextSeq(i-1,:);
    else % When the current trial is a regular (stimulus) trial
        stimContextSeq(i,:) = stimContextSeq(i-1,:) + k*(coordSeq(i-1,:) - stimContextSeq(i-1,:));
    end
end



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% CREATE EVOKED SIGNAL SEQUENCE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

coordSeq_noNaNs = coordSeq;
coordSeq_noNaNs(isnan(coordSeq)) = 0;
evokedSignal3D = abs(coordSeq_noNaNs - stimContextSeq);
evokedSignal = sqrt(evokedSignal3D(:,1).^2 + evokedSignal3D(:,2).^2 + evokedSignal3D(:,3).^2);



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% MEAN-CENTER AND NORMALIZE TO HAVE VARIANCE 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Mean center
evokedSignal = evokedSignal - mean(evokedSignal);
% Correct blank trials to have value of zero
evokedSignal(isnan(coordSeq(:,1))) = 0;

% Normalize evokedSignal
evokedSignal = evokedSignal / std(evokedSignal);

end
public/data_natneuro_2013_kahn/matlab_scripts/script_equivalence_to_exponential_models.txt · Last modified: 2013/10/30 23:06 by mattar