Select your font size 
 
about us products & services consulting & support news & events contact us
The Bayes.php class implements the Bayes theorem calculation. An important aspect of Bayesian inference involves examining the effect of

Implementing the calculation with Bayes.php - SK

print this article 
 

The Bayes.php class implements the Bayes theorem calculation. The getPosterior method is where most of the mathematically interesting code resides.

Listing 5. Implementing the calculation with the Bayes.php class
<?php

/**
* Bayes
*
* Calculates posterior probabilities for m hypotheses and n evidence 
* alternatives.  The code was inspired by a procedural TrueBasic version 
* (Bayes.tru) bundled with Grimstead and Snell's excellent online 
* textbook "Introduction to Probability".
*/
class Bayes {

  /**
  * Number of evidence alternatives (that is, number of rows).
  */
  var $m;

  /**
  * Number of hypothesis alternatives (that is, number of columns).
  */
  var $n;

  /**
  * Output labels for evidence alternatives.
  */
  var $row_labels = array();
  
  /**
  * Output labels for hypothesis alternatives.
  */  
  var $column_labels = array();

  /**
  * Vector container for prior probabilities.
  */
  var $priors = array();

  /**
  * Matrix container for likelihood of evidence e given hypothesis h.
  */
  var $likelihoods = array();

  /**
  * Matrix container for posterior probabilties.
  */
  var $posterior = array();

  /**
  * Vector container for evidence probabilties.
  */
  var $evidence = array();

  /**
  * Initialize the Bayes algorithm by setting the priors, likelihoods 
  * and dimensions of the likelihood and posterior matrices.
  */
  function Bayes($priors, $likelihoods) {
    $this->priors = $priors;
    $this->likelihoods = $likelihoods;
    $this->m = count($this->likelihoods);  // num rows
    $this->n = count($this->likelihoods[0]); // num cols
    return true;
  }
  
  /**
  * Output method for setting row labels prior to display.
  */
  function setRowLabels($row_labels) {
    $this->row_labels = $row_labels;
    return true;
  }

  /**
  * Output method for setting column labels prior to display.
  */
  function setColumnLabels($column_labels) {
    $this->column_labels = $column_labels;
    return true;
  }

  /**
  * Compute the posterior probability matrix given the priors and 
  * likelihoods.
  *
  * The first set of loops computes the denominator of the canonical 
  * Bayes equation. The probability appearing in the denominator 
  * serves a normalizing role in the computation - it ensures that 
  * posterior probabilities sum to 1.
  *
  * The second set of loops:
  *
  *   1. multiplies the prior[$h] by the likelihood[$h][$e]
  *   2. divides the result by the denominator
  *   3. assigns the result to the posterior[$e][$h] probability matrix
  */
  function getPosterior() {
    // Find probability of evidence e
    for($e=0; $e < $this->n; $e++) {
      for ($h=0; $h < $this->m; $h++) {
        $this->evidence[$e] += $this->priors[$h]
           * $this->likelihoods[$h][$e];
      }
    }
    // Find probability of hypothesis given evidence
    for($e=0; $e < $this->n; $e++) {
      for ($h=0; $h < $this->m; $h++) {
        $this->posterior[$e][$h] = $this->priors[$h
           * $this->likelihoods[$h][$e] / $this->evidence[$e];
      }
    }
    return true;
  }
  
  /**
  * Output method for displaying posterior probability matrix
  */
  function toHTML($number_format="%01.3f") {
    ?>

    <table border='1' cellpadding='5' cellspacing='0'>
      <tr>
        <td> </td>
        <?php
        for ($h=0; $h < $this->m; $h++) {
          ?>

          <td align='center'>

             <b><?php echo $this->column_labels[$h] ?></b>
          </td>
          <?php
        }
        ?>
      </tr>

      <?php
      for($e=0; $e < $this->n; $e++) {
        ?>

        <tr>
          <td><b><?php echo $this->row_labels[$e] ?></b></td>

          <?php
          for ($h=0; $h < $this->m; $h++) {
            ?>

            <td align='right'>
               <?php printf($number_format, $this->posterior[$e][$h]) ?>
            </td>

            <?php
          }
          ?>
        </tr>
        <?php
      }
      ?>

    </table>
    <?php
  }
}
?>

Sensitivity analysis

An important aspect of Bayesian inference involves examining the effect of small changes to your prior and likelihood distributions. If the prior probability values you are using are viewed as best guesses, then you might want to see what happens when you adjust the prior probabilities of each hypothesis slightly. You may notice that this significantly changes the posterior distribution values or it might have little effect. It is good to know how sensitive your results are to the exact prior values (or likelihood values) used.

The final screen of the Bayes diagnosis wizard gives you the options to

  • Start again
  • Re-enter labels
  • Re-enter your priors
  • Re-enter your likelihoods

If you decide to re-enter your priors, the wizard remembers your previously entered likelihoods. After you re-enter your priors, you can click forward to Step 5 without having to re-enter your likelihood values (or you can modify the likelihoods as well). In other words, the design of the Bayes wizard encourages you to engage in sensitivity analysis prior to drawing any final conclusions.



Page:   1  2  3  4  5  6  7  8  9  10  11 Next Page: It's only a beginning

The content shown in this page was first published by IBM developerWorks and is reprinted with permission from Paul Meagher (www.datavore.com)


Most Recent Website and Regional Updates

 High Scalability - Large Systems Optimization
Transparen Corporation lends its expertise to clients experiencing rapid and sudden growth in traffic or server utilization, bottlenecks, systems instability, downtime during peak traffic, or which would like to plan to avoid such issues.

 
 Throughput (or Bandwidth) vs. Latency
This document uses the example of Bill Gates purchasing Google to explain the difference between bandwidth (or throughput) and latency.

 
 Avoidance of Magic - Informal Survey Results
Joe the IT Director phones up high-traffic websites to ask them if they used magic.

 
 Don't go take a walk in Saskatoon!
There's been a rash of pedestrians hit by autos in Saskatoon this year.  Rapid economic and population growth has resulted in an overloaded infrastructure.  Attempts to upgrade this infrastructure have closed down...read more

 
 Self checkout arrives at the grocery store!
Last night I went to my preferred grocery store for my shopping. On the way in I noticed a new thing.  At first I thought they'd replaced all the checkouts, then I saw it was just a few checkouts were brand new.  I...read more

 
 Canadian Fireball Remains Found
"University of Calgary researchers reported last Friday that they have found the remains of the meteor that streaked through Canadian skies in November The remains of the 10-ton meteor were densely strewn over a...read more

 
 Scientists Find Canadian Meteorite
Planetary scientist Alan Hildebrand and graduate student Ellen Milley from the University of Calgary discovered fragments of the ten ton meteorite that fell near the Alberta-Saskatchewan border on the evening of...read more

 
 UPDATED: Liberal Video Attacks Conservative Deficit, Canada Perilously Close to Budget Deficit, No Stimulus, No End in Sight
Update: " The Conservatives pledged during the election campaign never to run a deficit, but Flaherty said the sudden decline in the global and domestic economies has brought Ottawa perilously close to a budget...read more

 
 Meteorite Hunter Offers $10,000 Reward for Canadian Meteorite
A bright meteor streaked across the skies of Saskatchewan and Alberta, Canada on November 20, 2008 at approximately 5:26 PM MST, prompting telephone calls to police stations, NORAD, and news stations from North...read more

 
 Massive Fireball Falls Over Alberta and Saskatchewan, Canada
A bright meteor streaked across the skies of Saskatchewan and Alberta, Canada on November 20, 2008 at approximately 5:26 PM MST, prompting telephone calls to police stations, NORAD, and news...read more

 
 03/12/2008: Crime in Canada
The story of a long-standing family feud and what it says about the future of violent crime in Canada.

 
 02/12/2008: The Constitution and a Coalition Government
What does the Constitution say about coalitions? Today on the podcast, we'll conjure up the ghost of Mackenzie King to find the answers.

 
 01/12/2008: The Big Three & the Future of the Auto Industry
One way or another, the Big Three automakers will have a huge impact on Windsor's future. But the future of those companies is being decided by forces well beyond this city's borders.

 
 28/11/2008: Greenpeace and the DRC
For more than a decade, the Democratic Republic of Congo has seen one humanitarian disaster after another. But there's an environmental catastrophe as well. And Greenpeace thinks it deserves our attention too.

 
 27/11/2008: The Agony of Stephen Harper
Stephen Harper got into politics to make government smaller. Now he's facing an economic crisis that seems to cry out for big time public intervention.

 

Google
 
Web transparen.com

Contact Information

Related Information

 
  Saskatoon
Regina
Prince Albert
Moose Jaw
Yorkton
Swift Current
North Battleford
Estevan
Weyburn
Corman Park
 
 
E C M | © 2003-2007 Transparen Corp.      

Standardized Services: Data Recovery Service / Creative Services / Premium Web Hosting Services / System Administration Tech Support Services
Recent Projects: Full-Service Mortgage and Financing Company / System to manage flights from Vancouver to Tofino / Photo exchange verification service
Our Vancouver BC Server Proudly Hosts: automated parking and revenue control systems, leafside lane at southlands, cost effective alternative power sources, Higher Grade Learning Centres, pacific forage bag supply, sunburst medical, neosonic design, roger mahler photography - passionate, intriguing, desirable, the connection between east and west, affordable flights to victoria and tofino, low interest mortgage brokers in vancouver, richmond, surrey, toronto, Toronto Calgary and Vancouver IT staffing and talent search
Saskatoon, Regina, Prince Albert, Moose Jaw, Yorkton, Swift Current, North Battleford, Estevan, Weyburn, Corman Park