Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Calculate jackknife error from of each column of a multi-column file

by BillKSmith (Monsignor)
on Dec 15, 2020 at 19:31 UTC ( [id://11125252]=note: print w/replies, xml ) Need Help??


in reply to Calculate jackknife error from of each column of a multi-column file

Your program would be much simpler if you reversed the order of your subscripts. Each column of your data is a set of data. It is convenient to have each set stored as its own array.
use strict; use warnings; use List::Util qw(sum); my @raw; my $n; while (my $line = <DATA>) { my @cols = split / /, $line; foreach my $j (0..$#cols) { push @{$raw[$j]}, $cols[$j]; } } { local $, = ' '; print process_column($_), "\n" foreach @raw; } sub process_column { my @x = @{$_[0]}; my $n = @x; my $x_tot = sum( @x ); my @x_jack = map { ($x_tot - $_) / ($n - 1) } @x; my $g_jack_av; my $g_jack_err; #foreach my $dg (@x) { foreach my $dg (@x_jack) { #UPDATE $g_jack_av += $dg; $g_jack_err += $dg**2; } $g_jack_av /= $n; $g_jack_err /= $n; $g_jack_err = sqrt(($n-1)*abs($g_jack_err-$g_jack_av**2)); return ($g_jack_av, $g_jack_err); } __DATA__ 1.1 2.1 3.1 4.1 1.2 2.2 3.2 4.2 1.3 2.3 3.3 4.3 1.4 2.4 3.4 4.4

OUTPUT

1.25 0.193649167310372 2.25 0.193649167310365 3.25 0.193649167310338 4.25 0.193649167310365

OUTPUT (with correction)

1.25 0.064549722436785 2.25 0.0645497224367747 3.25 0.0645497224367334 4.25 0.064549722436816

UPDATE: Corrected error reported by AnomalousMonk in Re^2: Calculate jackknife error from of each column of a multi-column file

Bill

Replies are listed 'Best First'.
Re^2: Calculate jackknife error from of each column of a multi-column file
by AnomalousMonk (Archbishop) on Dec 15, 2020 at 21:14 UTC

    Your code produces the same average values as the the OPed code, but the error values differ: 0.193649167310365 versus 6.454972e-002 for the OPed code.

    I'm not familiar with jackknife averages/errors (update: in fact, I don't even know if pyari_billi's code yields the correct error values), so I don't know if this is significant.

    However, I certainly agree that the OPed code can be considerably simplified.


    Give a man a fish:  <%-{-{-{-<

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11125252]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (7)
As of 2024-03-19 11:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found