Aligned Rank Transform with Matlab

This function is written to do aligned rank transform using matlab

for a data with heavy tail, this function could be used for getting the aligned rank transformed data and implementing Analysis of variance and mixed effect models
This is an approach used when the data has non-normal distribution

function Raligned = Aligned_Rank_Transform(Arg)
% INPUT: Arg: Arg should be a n * 3 matrix
% columns of Arg:
% ------------------ 1- first categorical variable 
% ------------------ 2- 2nd categorical variable
% ------------------ 3- dependent variable
% This function is used to do aligned rank transform for a data with
% using Analysis of variance..
% This is an approach used when the data has non-normal distribution
% Reference:
% Wobbrock, J.O., Findlater, L., Gergle, D. and Higgins, J.J. (2011). 
% The Aligned Rank Transform for nonparametric factorial analyses using only ANOVA procedures. 
% Proceedings of the ACM Conference on Human Factors in Computing Systems (CHI '11). 
% Vancouver, British Columbia (May 7-12, 2011). New York: ACM Press, pp. 143-146. Honorable Mention Paper. 
% by: AbuAli Amin 
r1 = Arg(:,1);
r2 = Arg(:,2);
R = Arg(:,3);
q1 = unique(r1);
q2 = unique(r2);
if isnumeric(q1)
 q1 = cellstr(num2str(q1));r1 = cellstr(num2str(r1));
if isnumeric(q2)
 q2 = cellstr(num2str(q2));r2 = cellstr(num2str(r2));
Z = zeros(size(R));
Yaligned1 = zeros(size(R));
Yaligned2 = zeros(size(R));
Yaligned3 = zeros(size(R));
mu = nanmean(R);
for i = 1:size(q1,1)
 ME1 = nanmean(R(strcmp(r1,q1{i}))) - mu;
 for j = 1:size(q2,1)
 Z(strcmp(r1,q1{i}) & strcmp(r2,q2{j})) = R(strcmp(r1,q1{i}) & strcmp(r2,q2{j})) - nanmean(R(strcmp(r1,q1{i}) & strcmp(r2,q2{j})));
 ME2 = nanmean(R(strcmp(r2,q2{j}))) - mu;
 ME12 = nanmean(R(strcmp(r1,q1{i}) & strcmp(r2,q2{j}))) - mu;
 MEI = ME12 - ME1 - ME2 + mu; 
 Yaligned1(strcmp(r1,q1{i}) & strcmp(r2,q2{j})) = Z(strcmp(r1,q1{i}) & strcmp(r2,q2{j})) + ME1;
 Yaligned2(strcmp(r1,q1{i}) & strcmp(r2,q2{j})) = Z(strcmp(r1,q1{i}) & strcmp(r2,q2{j})) + ME2;
 Yaligned3(strcmp(r1,q1{i}) & strcmp(r2,q2{j})) = Z(strcmp(r1,q1{i}) & strcmp(r2,q2{j})) + MEI;

R1 = tiedrank(Yaligned1);
R2 = tiedrank(Yaligned2);
R3 = tiedrank(Yaligned3);
Raligned = [R1,R2,R3];

4 comments / Add your comment below

  1. Hey man,

    I not quite sure of what each of the three columns in R represents. The same way, how should I use it to run the ANOVA test?

    Best regards,


    1. Hello Fernando, R include 3 columns, each are aligned and rank transformed in the appropriate effect. It has 2 main effects and 1 interaction effect. so the first 2 columns are for the main effects and the last column is for interaction effect.
      After using this function you can run ordinary Two way Analysis of variance three times.
      1- using column 1 for only first main effect.
      2- using column 2 for only 2nd main effect.
      3- using 3rd column for only interaction effect.

      Note: in each of these 3 ANOVA test, the F value for other effects should be approximately close to zero..


  2. Dear AbuAli Amin,

    Could you clarify if this algorithm can be used for repeated measures ANOVA.

    In our case there are numerous subjects and 4 measures for each subject. Those four measures comprise the combinations of two factors, A and B, two levels each: A1B1, A1B2, A2B1, A2B2. We need the effect of each factor and interaction but not of subjects.

    Thank you in advance!

    Sincerely yours,

Leave a Reply

Your email address will not be published. Required fields are marked *