yat/statistics/FoldChange.cc

Code
Comments
Other
Rev Date Author Line
414 01 Dec 05 peter 1 // $Id$
414 01 Dec 05 peter 2
675 10 Oct 06 jari 3 /*
831 27 Mar 07 peter 4   Copyright (C) 2005 Peter Johansson
4359 23 Aug 23 peter 5   Copyright (C) 2006 Jari Häkkinen, Peter Johansson
4359 23 Aug 23 peter 6   Copyright (C) 2007 Peter Johansson
4359 23 Aug 23 peter 7   Copyright (C) 2008 Jari Häkkinen, Peter Johansson
4359 23 Aug 23 peter 8   Copyright (C) 2012 Peter Johansson
414 01 Dec 05 peter 9
1437 25 Aug 08 peter 10   This file is part of the yat library, http://dev.thep.lu.se/yat
675 10 Oct 06 jari 11
675 10 Oct 06 jari 12   The yat library is free software; you can redistribute it and/or
675 10 Oct 06 jari 13   modify it under the terms of the GNU General Public License as
1486 09 Sep 08 jari 14   published by the Free Software Foundation; either version 3 of the
675 10 Oct 06 jari 15   License, or (at your option) any later version.
675 10 Oct 06 jari 16
675 10 Oct 06 jari 17   The yat library is distributed in the hope that it will be useful,
675 10 Oct 06 jari 18   but WITHOUT ANY WARRANTY; without even the implied warranty of
675 10 Oct 06 jari 19   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
675 10 Oct 06 jari 20   General Public License for more details.
675 10 Oct 06 jari 21
675 10 Oct 06 jari 22   You should have received a copy of the GNU General Public License
1487 10 Sep 08 jari 23   along with yat. If not, see <http://www.gnu.org/licenses/>.
675 10 Oct 06 jari 24 */
675 10 Oct 06 jari 25
2881 18 Nov 12 peter 26 #include <config.h>
2881 18 Nov 12 peter 27
680 11 Oct 06 jari 28 #include "FoldChange.h"
680 11 Oct 06 jari 29 #include "Score.h"
680 11 Oct 06 jari 30 #include "Averager.h"
680 11 Oct 06 jari 31 #include "AveragerWeighted.h"
675 10 Oct 06 jari 32 #include "yat/classifier/DataLookupWeighted1D.h"
675 10 Oct 06 jari 33 #include "yat/classifier/Target.h"
1120 21 Feb 08 peter 34 #include "yat/utility/VectorBase.h"
675 10 Oct 06 jari 35
1683 30 Dec 08 peter 36 #include <cmath>
1683 30 Dec 08 peter 37
414 01 Dec 05 peter 38 namespace theplu {
680 11 Oct 06 jari 39 namespace yat {
414 01 Dec 05 peter 40 namespace statistics {
414 01 Dec 05 peter 41
414 01 Dec 05 peter 42   FoldChange::FoldChange(bool absolute)
414 01 Dec 05 peter 43     : Score(absolute)
414 01 Dec 05 peter 44   {
414 01 Dec 05 peter 45   }
414 01 Dec 05 peter 46
4200 19 Aug 22 peter 47   double FoldChange::score(const classifier::Target& target,
1023 01 Feb 08 peter 48                            const utility::VectorBase& value) const
414 01 Dec 05 peter 49   {
414 01 Dec 05 peter 50     Averager pos;
414 01 Dec 05 peter 51     Averager neg;
414 01 Dec 05 peter 52
4200 19 Aug 22 peter 53     for (size_t i=0; i<value.size(); i++)
514 20 Feb 06 peter 54       if (target.binary(i))
475 22 Dec 05 peter 55         pos.add(value(i));
414 01 Dec 05 peter 56       else
475 22 Dec 05 peter 57         neg.add(value(i));
4200 19 Aug 22 peter 58
414 01 Dec 05 peter 59     if (absolute_)
1683 30 Dec 08 peter 60       return std::abs(pos.mean()-neg.mean());
414 01 Dec 05 peter 61     return pos.mean()-neg.mean();
414 01 Dec 05 peter 62   }
414 01 Dec 05 peter 63
4200 19 Aug 22 peter 64   double FoldChange::score(const classifier::Target& target,
779 05 Mar 07 peter 65                            const classifier::DataLookupWeighted1D& value) const
623 05 Sep 06 peter 66   {
623 05 Sep 06 peter 67     AveragerWeighted pos;
623 05 Sep 06 peter 68     AveragerWeighted neg;
623 05 Sep 06 peter 69
4200 19 Aug 22 peter 70     for (size_t i=0; i<value.size(); i++)
623 05 Sep 06 peter 71       if (target.binary(i))
623 05 Sep 06 peter 72         pos.add(value.data(i),value.weight(i));
623 05 Sep 06 peter 73       else
623 05 Sep 06 peter 74         neg.add(value.data(i),value.weight(i));
4200 19 Aug 22 peter 75
623 05 Sep 06 peter 76     if (absolute_)
1683 30 Dec 08 peter 77       return std::abs(pos.mean()-neg.mean());
623 05 Sep 06 peter 78     return pos.mean()-neg.mean();
623 05 Sep 06 peter 79   }
623 05 Sep 06 peter 80
4200 19 Aug 22 peter 81   double FoldChange::score(const classifier::Target& target,
1023 01 Feb 08 peter 82                            const utility::VectorBase& value,
1023 01 Feb 08 peter 83                            const utility::VectorBase& weight) const
414 01 Dec 05 peter 84   {
414 01 Dec 05 peter 85     AveragerWeighted pos;
414 01 Dec 05 peter 86     AveragerWeighted neg;
414 01 Dec 05 peter 87
4200 19 Aug 22 peter 88     for (size_t i=0; i<value.size(); i++)
514 20 Feb 06 peter 89       if (target.binary(i))
475 22 Dec 05 peter 90         pos.add(value(i),weight(i));
414 01 Dec 05 peter 91       else
475 22 Dec 05 peter 92         neg.add(value(i),weight(i));
4200 19 Aug 22 peter 93
414 01 Dec 05 peter 94     if (absolute_)
1683 30 Dec 08 peter 95       return std::abs(pos.mean()-neg.mean());
414 01 Dec 05 peter 96     return pos.mean()-neg.mean();
414 01 Dec 05 peter 97   }
414 01 Dec 05 peter 98
680 11 Oct 06 jari 99 }}} // of namespace statistics, yat, and theplu