Contents

CRFB2_Stevens_fun.m

Examine the concern that the ARLs are systematically biased because the exponent of the Stevens function for motion and texture differs from 1.

File: work/MLExper/CRFeedback2/analysis/CRFB2_Stevens_fun.m
Usage: publish('CRFB2_Stevens_fun.m','html') ;    % 'latex','doc','ppt'
Date: 2010-06-02
% 1.0.0 2010-06-02 AP: Wrote it

Get started

cd(fullfile(CRFeedback2_pathstr,'analysis')) ;
fprintf('\n\nCRFB2_Stevens_fun executed on %s.\n\n',datestr(now)) ;
fprintf('cd %s\n',pwd) ;

clear all ;

CRFB2_Stevens_fun executed on 02-Jun-2010 15:15:02.

cd /Users/apetrov/a/r/w/work/MLExper/CRFeedback2/analysis

Load the data

H_filename = fullfile(CRFeedback2_pathstr,'data','H.mat') ;
D_filename = fullfile(CRFeedback2_pathstr,'data','D.mat') ;

%recalculatep = true ;
recalculatep = false ;
if (recalculatep || ~exist(H_filename,'file'))
    if (recalculatep || ~exist(D_filename,'file'))
        %- Write down repository revision number
        fprintf('!/usr/local/bin/svn info \n') ;
        !/usr/local/bin/svn info

        %- Concatenate the individual data files into one master ASCII file
        fprintf('!cat sbj*.dat > raw_data.dat \n') ;
        !cat sbj*.dat > raw_data.dat

        %- Import the ASCII data files to Matlab
        fprintf('\nD=CRFB2_import_data ...') ;
        g = fullfile(CRFeedback2_pathstr,'data','raw_data.dat') ;
        D = CRFB2_import_data(g,[],P) ;
        %- Save D for future use
        save(D_filename,'D') ;
        fprintf('\nsave %s \n',D_filename) ;
    else
        fprintf('load %s \n',D_filename) ;
        load(D_filename) ;
    end
    assert(exist('D','var')==1) ;

    %- Calculate the average response levels
    fprintf('\nH = CRFB2_data_by_sbj(D) ...\n') ;
    [H,P,ARL_params] = CRFB2_data_by_sbj(D,1,P) ;
    %- Save H for future use
    save(H_filename,'H') ;
    fprintf('\nsave %s \n\n',H_filename) ;
else
    fprintf('load %s \n\n',H_filename) ;
    load(H_filename) ;
end
assert(exist('H','var')==1) ;

N_trials = 350 ;   % per stimulus type
N_sbj = length(H) ;
load /Users/apetrov/a/r/w/work/MLExper/CRFeedback2/data/H.mat 

Isolate the MOTION stimulus-response pairs

S_mot = zeros(N_trials,N_sbj) ;
R_mot = zeros(size(S_mot)) ;
for k=1:N_sbj
    S_mot(:,k) = H(k).MOTION_data(:,4) ;   % categ == fdbk
    R_mot(:,k) = H(k).MOTION_data(:,7) ;   % resp
end

xtab2(S_mot(:),R_mot(:))
         |     1     2     3     4     5     6     7 | Total Percent
---------+-------------------------------------------+--------------
       1 |  1014   605   289   106    61     8     3 |  2086    14.5
       2 |   443   638   542   298   123    27     3 |  2074    14.5
       3 |   121   379   552   581   317    99    13 |  2062    14.4
       4 |    33   143   409   601   499   295    70 |  2050    14.3
       5 |     8    60   175   418   607   481   289 |  2038    14.2
       6 |     5    13    75   226   397   649   661 |  2026    14.1
       7 |     3     5    19    76   233   517  1161 |  2014    14.0
---------+-------------------------------------------+--------------
 Total   |  1627  1843  2061  2306  2237  2076  2200 | 14350
 Percent |  11.3  12.8  14.4  16.1  15.6  14.5  15.3 |         100.0

Isolate the TEXTURE stimulus-response pairs

S_txt = zeros(N_trials,N_sbj) ;
R_txt = zeros(size(S_mot)) ;
for k=1:N_sbj
    S_txt(:,k) = H(k).TEXTURE_data(:,4) ;   % categ == fdbk
    R_txt(:,k) = H(k).TEXTURE_data(:,7) ;   % resp
end

xtab2(S_txt(:),R_txt(:))
         |     1     2     3     4     5     6     7 | Total Percent
---------+-------------------------------------------+--------------
       1 |  1829   171     8     3     2           1 |  2014    14.0
       2 |   635  1159   191    26    12     1     2 |  2026    14.1
       3 |   162   662   905   243    52    11     3 |  2038    14.2
       4 |    44   223   708   746   258    65     6 |  2050    14.3
       5 |    13    60   260   595   790   300    44 |  2062    14.4
       6 |     5     1    45   193   544   949   337 |  2074    14.5
       7 |     3     2     4    34   104   360  1579 |  2086    14.5
---------+-------------------------------------------+--------------
 Total   |  2691  2278  2121  1840  1762  1686  1972 | 14350
 Percent |  18.8  15.9  14.8  12.8  12.3  11.7  13.7 |         100.0

Stevens functions

[s,S] = split(R_mot(:),S_mot(:)) ;
mR_mot = aggreg(s) ;

s = split(R_txt(:),S_txt(:)) ;
mR_txt = aggreg(s) ;

plot(S,mR_mot,'bo-',S,mR_txt,'rs-') ;
grid on
legend('MOTION','TEXTURE','location','NorthWest') ;
xlabel('Stimulus') ;  ylabel('Mean Response') ;

Correlations:

R070 = 1.6*S.^0.70 ;       % n=0.70 -- arbitrarily chosen, not fit to data
R140 = .7+(S.^1.4)./2.5 ;  % n=1.40 -- arbitrarily chosen, not fit to data

corrcoef([S mR_mot mR_txt R070 R140])

plot(S,mR_mot,'bo-',S,mR_txt,'rs-',S,R070,'k:',S,R140,'k--') ;
grid on
legend('MOTION','TEXTURE','n=0.70','n=1.40','location','NorthWest') ;
xlabel('Stimulus') ;  ylabel('Mean Response') ;
ans =

    1.0000    0.9987    0.9980    0.9970    0.9956
    0.9987    1.0000    0.9946    0.9982    0.9909
    0.9980    0.9946    1.0000    0.9902    0.9994
    0.9970    0.9982    0.9902    1.0000    0.9854
    0.9956    0.9909    0.9994    0.9854    1.0000

Clean up

clear k s

Conclusion:

Even if the Stevens function is not linear, it is locally linear. The nonlinearity is negligible for the purposes of calculating the ARL. The correlation between the mean response (conditional on the stimuli) and the categories 1-7 is >.998 for both MOTION and TEXTURE.

% 2010-06-02