Skip to content

Commit c9889a1

Browse files
committed
cell means stop pointlessly adding a dim
1 parent d968643 commit c9889a1

File tree

2 files changed

+22
-44
lines changed

2 files changed

+22
-44
lines changed

lib/PDL/Stats/GLM.pd

Lines changed: 20 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -737,13 +737,9 @@ Usage:
737737
| apple | F 0.466666666666667
738738
| apple | F_p 0.648078345471096
739739
| apple | df 2
740-
| apple | m [
741-
[2.75 3 3.5]
742-
]
740+
| apple | m [2.75 3 3.5]
743741
| apple | ms 0.583333333333334
744-
| apple | se [
745-
[ 0.85391256 0.81649658 0.64549722]
746-
]
742+
| apple | se [0.85391256 0.81649658 0.64549722]
747743
| apple | ss 1.16666666666667
748744
| apple || err df 6
749745
| apple ~ bake | F 0.0666666666666671
@@ -763,13 +759,9 @@ Usage:
763759
| bake | F 11.2666666666667
764760
| bake | F_p 0.015294126084452
765761
| bake | df 1
766-
| bake | m [
767-
[ 2 4.1666667]
768-
]
762+
| bake | m [2 4.1666667]
769763
| bake | ms 14.0833333333333
770-
| bake | se [
771-
[ 0.36514837 0.40138649]
772-
]
764+
| bake | se [0.36514837 0.40138649]
773765
| bake | ss 14.0833333333333
774766
| bake || err df 6
775767

@@ -836,14 +828,12 @@ sub _cell_means {
836828
$_->where($_ == -1) .= 0;
837829
$_ = $_->glue(1, $last);
838830
my @v = split ' ~ ', $idv->[$i];
839-
my @shape = map { $pdl_ivs_raw->[$_]->uniq->nelem } @ind_id{@v};
831+
my @shape = map $pdl_ivs_raw->[$_]->uniq->nelem, @ind_id{@v};
840832
my ($m, $ss) = $data->centroid( $_ );
841833
$m = $m->slice($i_cmo_ref->[$i])->sever;
842834
$ss = $ss->slice($i_cmo_ref->[$i])->sever;
843835
$m = $m->reshape(@shape);
844-
$m->getndims == 1 and $m = $m->dummy(1);
845836
my $se = sqrt( ($ss/($_->sumover - 1)) / $_->sumover )->reshape(@shape);
846-
$se->getndims == 1 and $se = $se->dummy(1);
847837
$cm{ "| $idv->[$i] | m" } = $m;
848838
$cm{ "| $idv->[$i] | se" } = $se;
849839
$i++;
@@ -934,13 +924,9 @@ Usage:
934924
| Beer | F 9.39130434782609
935925
| Beer | F_p 0.0547977008378944
936926
| Beer | df 1
937-
| Beer | m [
938-
[ 10.916667 8.9166667]
939-
]
927+
| Beer | m [10.916667 8.9166667]
940928
| Beer | ms 24
941-
| Beer | se [
942-
[ 0.4614791 0.4614791]
943-
]
929+
| Beer | se [0.4614791 0.4614791]
944930
| Beer | ss 24
945931
| Beer || err df 3
946932
| Beer || err ms 2.55555555555556
@@ -966,13 +952,9 @@ Usage:
966952
| Wings | F 4.52851711026616
967953
| Wings | F_p 0.0632754786153548
968954
| Wings | df 2
969-
| Wings | m [
970-
[ 8.5 9.875 11.375]
971-
]
955+
| Wings | m [8.5 9.875 11.375]
972956
| Wings | ms 16.5416666666667
973-
| Wings | se [
974-
[0.67571978 0.67571978 0.67571978]
975-
]
957+
| Wings | se [0.67571978 0.67571978 0.67571978]
976958
| Wings | ss 33.0833333333333
977959
| Wings || err df 6
978960
| Wings || err ms 3.65277777777778
@@ -1278,19 +1260,17 @@ sub _add_errors {
12781260
sub _fix_rptd_se {
12791261
# if ivnm lvls_ref for within ss only this can work for mixed design
12801262
my ($cm_ref, $ret, $ivnm, $lvls_ref, $n) = @_;
1281-
my @se = grep /se$/, keys %$cm_ref;
1282-
@se = map { /^\| (.+?) \| se$/; $1; } @se;
1283-
my @n_obs
1284-
= map {
1285-
my @ivs = split / ~ /, $_;
1286-
my $i_ivs = which_id $ivnm, \@ivs;
1287-
my $icollapsed = setops pdl(0 .. $#$ivnm), 'XOR', $i_ivs;
1288-
my $collapsed = $icollapsed->nelem?
1289-
pdl( @$lvls_ref[(list $icollapsed)] )->prodover
1290-
: 1
1291-
;
1292-
$n * $collapsed;
1293-
} @se;
1263+
my @se = map /^\| (.+?) \| se$/ ? $1 : (), keys %$cm_ref;
1264+
my @n_obs = map {
1265+
my @ivs = split / ~ /, $_;
1266+
my $i_ivs = which_id $ivnm, \@ivs;
1267+
my $icollapsed = setops pdl(0 .. $#$ivnm), 'XOR', $i_ivs;
1268+
my $collapsed = $icollapsed->nelem?
1269+
pdl( @$lvls_ref[(list $icollapsed)] )->prodover
1270+
: 1
1271+
;
1272+
$n * $collapsed;
1273+
} @se;
12941274
for my $i (0 .. $#se) {
12951275
$cm_ref->{"| $se[$i] | se"}
12961276
.= sqrt( $ret->{"| $se[$i] || err ms"} / $n_obs[$i] );

t/glm.t

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,6 @@ like $@, qr/residual df = 0/, 'error when too few sample';
407407
my $d = pdl qw( 3 2 1 5 2 1 5 3 1 4 1 2 3 5 5 );
408408
my $a = qsort sequence(15) % 3;
409409
my %m = $d->anova($a, {plot=>0});
410-
$m{$_} = $m{$_}->squeeze for '| IV_0 | m';
411410
test_stats_cmp(\%m, {
412411
F => 0.160919540229886,
413412
ms_model => 0.466666666666669,
@@ -424,7 +423,7 @@ like $@, qr/residual df = 0/, 'error when too few sample';
424423
my $b = sequence(60) % 3;
425424
my $c = sequence(60) % 2;
426425
my %m = $d->anova(\@a, $b, $c, {IVNM=>[qw(A B C)], plot=>0, v=>0});
427-
$m{$_} = $m{$_}->slice(',(1)')->squeeze for '| A ~ B ~ C | m', '| A ~ B ~ C | se';
426+
$m{$_} = $m{$_}->slice(',(1)') for '| A ~ B ~ C | m', '| A ~ B ~ C | se';
428427
test_stats_cmp(\%m, {
429428
'| A | F' => 150.00306433446,
430429
'| A ~ B ~ C | F' => 0.17534855325553,
@@ -443,7 +442,7 @@ like $@, qr/residual df = 0/, 'error when too few sample';
443442
$d->setbadat(62);
444443
$b->setbadat(61);
445444
my %m = $d->anova(\@a, $b, $c, {IVNM=>[qw(A B C)], plot=>0, V=>0});
446-
$m{$_} = $m{$_}->slice(',(2)')->squeeze for '| A ~ B ~ C | m';
445+
$m{$_} = $m{$_}->slice(',(2)') for '| A ~ B ~ C | m';
447446
test_stats_cmp(\%m, {
448447
'| A | F' => 165.252100840336,
449448
'| A ~ B ~ C | F' => 0.0756302521008415,
@@ -603,7 +602,6 @@ is_pdl pdl([1,1,1], [2,2,2])->stddz, zeroes(3,2), 'stddz nan vs bad';
603602
[1 -1 -1 -1 -1 -1 -1]
604603
';
605604
my %m = $d->anova_rptd($s, $a, {plot=>0});
606-
$m{$_} = $m{$_}->squeeze for '| IV_0 | m';
607605
test_stats_cmp(\%m, {
608606
'| IV_0 | F' => 0.145077720207254,
609607
'| IV_0 | ms' => 0.466666666666667,

0 commit comments

Comments
 (0)