#!/usr/bin/perl

use 5.010;
use warnings;
#use autodie qw(:all);
use PDL::LiteF;
use PDL::Stats;

my ($b,$w) = @ARGV;  # no. of levels of the between and within var, respectively

my $Nper = 18;  # participants per group

my $N = $Nper*$b;
my @participants   = map "name$_" ,1..$N;
my @between_levels = map "group$_",1..$b;
my @within_levels  = map "cond$_" ,1..$w;

my @data = map {rand(10)} (1..$N*$w);
my $data = pdl(@data);
my $subject = [map {($_) x $w} @participants];
my $between_level =
  [map {($_) x ($Nper*$w)} @between_levels];
my $within_level = [(@within_levels) x $N];

say join("\t",qw/SUB BTWN WTHN DATA/);
foreach my $i (0..$#data) {
    say join("\t",
    $$subject[$i],$$between_level[$i],$$within_level[$i],$data[$i]);
}

my %anova = $data->anova_rptd($subject,
     $between_level,
     $within_level,
     {IVNM=>[qw/group cond/],
      BTWN=>[0],
      PLOT=>0,
     },
    );
foreach (sort keys %anova) {
    say "$_: $anova{$_}" if /F/;  # just to make sure it ran
}

