Example #1
0
void BinomialDistTab::updateProbability() {
  double v2 = 0;
  if(kminSpinBox->value())
    v2 = gsl_cdf_binomial_P(kminSpinBox->value()-1, pDSpinBox->value(), nSpinBox->value());

  lcdNumber->display(gsl_cdf_binomial_P(kmaxSpinBox->value(), pDSpinBox->value(), nSpinBox->value())-v2);
}
Example #2
0
/* \adoc cdf At the moment, only implemented for the Binomial.
  Let the first element of the data set (top of the vector or point (0,0) in the
  matrix, your pick) be $L$; then I return the sum of the odds of a draw from the given
  Binomial distribution returning $0, 1, \dots, L$ hits.  */
static double binomial_cdf(apop_data *d, apop_model *est){
    Nullcheck_mpd(d, est, GSL_NAN)
    Get_vmsizes(d); //firstcol
    double hitcount = apop_data_get(d, .col=firstcol);
    double n = gsl_vector_get(est->parameters->vector, 0);
    double p = gsl_vector_get(est->parameters->vector, 1);
    return gsl_cdf_binomial_P(hitcount, p, n);
}
Example #3
0
void MainWindow::binom(){
    frmSettings *dlg = new frmSettings();

    QSettings settings(QSettings::IniFormat, QSettings::UserScope, "RJsoft", "ssconf");

    settings.beginGroup("CIprms");
    if(settings.contains("k")){
        dlg->m_ui->spinBox->setValue(settings.value("k").toInt());
    } else {
        dlg->m_ui->spinBox->setValue(0);
    }
    if(settings.contains("n")){
        dlg->m_ui->spinBox_2->setValue(settings.value("n").toInt());
    } else {
        dlg->m_ui->spinBox_2->setValue(0);
    }
    if(settings.contains("alpha")){
        dlg->m_ui->doubleSpinBox_3->setValue(settings.value("alpha").toDouble());
    } else {
        dlg->m_ui->doubleSpinBox_3->setValue(0.95);
    }
    if(settings.contains("Sp")){
        dlg->m_ui->doubleSpinBox_2->setValue(settings.value("Sp").toDouble());
    } else {
        dlg->m_ui->doubleSpinBox_2->setValue(1.0);
    }
    if(settings.contains("Se")){
        dlg->m_ui->doubleSpinBox->setValue(settings.value("Se").toDouble());
    } else {
        dlg->m_ui->doubleSpinBox->setValue(1.0);
    }
    if(settings.contains("method")){
        dlg->m_ui->comboBox->setCurrentIndex(dlg->m_ui->comboBox->findText(settings.value("method").toString(), Qt::MatchExactly));
    } else {
        dlg->m_ui->comboBox->setCurrentIndex(dlg->m_ui->comboBox->findText("Blaker", Qt::MatchExactly));
    }
    settings.endGroup();

    if (dlg->exec() == QDialog::Accepted ){

        QApplication::setOverrideCursor( Qt::WaitCursor );

        unsigned int k = dlg->m_ui->spinBox->value();
        unsigned int n = dlg->m_ui->spinBox_2->value();
        double conf    = dlg->m_ui->doubleSpinBox_3->value();
        double alpha   = 1-conf;
        double Se = dlg->m_ui->doubleSpinBox->value();
        double Sp = dlg->m_ui->doubleSpinBox_2->value();

        settings.beginGroup("CIprms");
        settings.setValue("k",     k);
        settings.setValue("n",     n);
        settings.setValue("alpha", dlg->m_ui->doubleSpinBox_3->value());
        settings.setValue("Sp",    Sp);
        settings.setValue("Se",    Se);
        settings.setValue("method",dlg->m_ui->comboBox->currentText());
        settings.endGroup();

        double pbal = 0, pjobb=1, sum=0;
        double prev = (double)k/(double)n;

        ui->plainTextEdit->appendPlainText(
            QString("Number of test positives:   %1  out of   %2\nSensitivity: %3     Specificity: %4     Confidence level: %5     Method: %6\n")
            .arg(k).arg(n).arg(Se).arg(Sp).arg(conf)
            .arg(dlg->m_ui->comboBox->currentText())
            );


        if (dlg->m_ui->comboBox->currentText()=="Sterne"){

        // ----------------------------------------------------------
        // -------------------- S T E R N E -------------------------
        // ----------------------------------------------------------

            //bal
            int z =0;
            for(double p=0.0001; p<=0.9999; p = p+0.0001){
                sum=0;
                double kp = gsl_ran_binomial_pdf(k, p, n);
                for(unsigned int x=0; x!=n+1; x++){
                    double xp = gsl_ran_binomial_pdf(x, p, n);
                    if (xp<=kp){
                        sum = sum+xp;
                    }
                }
                if (sum<alpha){
                    pbal = p;
    //                ui->plainTextEdit->appendPlainText(QString("sum: %1; p: %2").arg(sum).arg(p));
                } else {
                    break;
                }
                z++;
            }

            //jobb
            z =0;
            for(double p=0.9999; p>=0.0001; p = p-0.0001){
                sum=0;
                double kp = gsl_ran_binomial_pdf(k, p, n);
                for(unsigned int x=0; x!=n+1; x++){
                    double xp = gsl_ran_binomial_pdf(x, p, n);
                    if (xp<=kp){
                        sum = sum+xp;
                    }
                }
                if (sum<alpha){
                    pjobb = p;
                } else {
                    break;
                }
                z++;
            }

        } else if (dlg->m_ui->comboBox->currentText()=="Blaker"){

        // ----------------------------------------------------------
        // -------------------- B L A K E R -------------------------
        // ----------------------------------------------------------

            //bal
            int z =0;
            for(double p=0.0001; p<=0.9999; p = p+0.0001){
                sum=0;
                double kp = gsl_cdf_binomial_P(k, p, n);
                        // ui->plainTextEdit->appendPlainText(QString("k %1 p %2 n %3 kp %4\n").arg(k).arg(p).arg(n).arg(kp));
                double kp2 = gsl_cdf_binomial_Q(k, p, n) + gsl_ran_binomial_pdf(k, p, n);
                        // ui->plainTextEdit->appendPlainText(QString("k %1 p %2 n %3 kp2 %4\n").arg(k).arg(p).arg(n).arg(kp2));

                if (kp2 < kp) kp=kp2;
                for(unsigned int x=0; x!=n+1; x++){
                    double xp = gsl_cdf_binomial_P(x, p, n);
                           // ui->plainTextEdit->appendPlainText(QString("x %1 p %2 n %3 kp %4\n").arg(x).arg(p).arg(n).arg(xp));
                    double xp2 = gsl_cdf_binomial_Q(x, p, n) + gsl_ran_binomial_pdf(x, p, n);
                           // ui->plainTextEdit->appendPlainText(QString("x %1 p %2 n %3 kp2 %4\n").arg(x).arg(p).arg(n).arg(xp2));
                    if (xp2 < xp) xp=xp2;
                    double xxp = gsl_ran_binomial_pdf(x, p, n);
                            // ui->plainTextEdit->appendPlainText(QString("x %1 p %2 n %3 xxp %4\n").arg(x).arg(p).arg(n).arg(xxp));
                    if (xp<=kp){
                        sum = sum+xxp;
                    }
                            // ui->plainTextEdit->appendPlainText(QString("p %1 sum %2\n").arg(p).arg(sum));

                }
                if (sum<alpha){
                    pbal = p;
     //              ui->plainTextEdit->appendPlainText(QString("sum: %1; p: %2").arg(sum).arg(p));
                } else {
                    break;
                }
                z++;
            }

            //jobb
            z =0;
            for(double p=0.9999; p>=0.0001; p = p-0.0001){
                sum=0;
                double kp = gsl_cdf_binomial_P(k, p, n);
                double kp2 = gsl_cdf_binomial_Q(k, p, n) + gsl_ran_binomial_pdf(k, p, n);
                if (kp2 < kp) kp=kp2;
                for(unsigned int x=0; x!=n+1; x++){
                    double xp = gsl_cdf_binomial_P(x, p, n);
                    double xp2 = gsl_cdf_binomial_Q(x, p, n) + gsl_ran_binomial_pdf(x, p, n);
                    if (xp2 < xp) xp=xp2;
                    double xxp = gsl_ran_binomial_pdf(x, p, n);
                    if (xp<=kp){
                        sum = sum+xxp;
                    }
                }
                 // ui->plainTextEdit->appendPlainText(QString("p %1 sum %2\n").arg(p).arg(sum));
                if (sum<alpha){
                    pjobb = p;
                } else {
                    break;
                }
                z++;
            }
        } else if (dlg->m_ui->comboBox->currentText()=="Wilson"){

        // ----------------------------------------------------------
        // -------------------- W I L S O N -------------------------
        // ----------------------------------------------------------

            double zkrit = 1.96;
            double plusminus = zkrit * pow(pow(zkrit, 2.) + 4. * k * (n-k) / n, .5);
            double nevezo = 2.*(n + pow(zkrit, 2.));

            pbal = (2.*k + pow(zkrit, 2) - plusminus)/nevezo;
            pjobb = (2.*k + pow(zkrit, 2) + plusminus)/nevezo;

        } else if (dlg->m_ui->comboBox->currentText()=="Clopper-Pearson"){

        // ----------------------------------------------------------
        // ------------- C L O P P E R   P E A R S O N --------------
        // ----------------------------------------------------------

            //bal
            int z =0;
            for(double p=0.0001; p<=0.9999; p = p+0.0001){
                double kp = gsl_cdf_binomial_Q(k, p, n) + gsl_ran_binomial_pdf(k, p, n);
    //                ui->plainTextEdit->appendPlainText(QString("kp: %1; p: %2").arg(kp).arg(p));
                if (kp<0.5*alpha){
                    pbal = p;
              } else {
                    break;
                }
                z++;
            }

            //jobb
            z =0;
            for(double p=0.9999; p>=0.0001; p = p-0.0001){
                double kp = gsl_cdf_binomial_P(k, p, n);
                if (kp<0.5*alpha){
                    pjobb = p;
                } else {
                    break;
                }
                z++;
            }

        }

        kiir(pbal, pjobb, prev, Sp, Se);

        QApplication::restoreOverrideCursor();
    }    
}
Example #4
0
 double binomial_logcdf_gsl(unsigned k, double p, unsigned l)
 {
   return log(gsl_cdf_binomial_P(k, p, l));
 }
Example #5
0
void
sign_execute (const struct dataset *ds,
		  struct casereader *input,
		  enum mv_class exclude,
		  const struct npar_test *test,
		  bool exact UNUSED,
		  double timer UNUSED)
{
  int i;
  bool warn = true;
  const struct dictionary *dict = dataset_dict (ds);
  const struct two_sample_test *t2s = UP_CAST (test, const struct two_sample_test, parent);
  struct ccase *c;

  struct sign_test_params *stp = xcalloc (t2s->n_pairs, sizeof *stp);

  struct casereader *r = input;

  for (; (c = casereader_read (r)) != NULL; case_unref (c))
    {
      const double weight = dict_get_case_weight (dict, c, &warn);

      for (i = 0 ; i < t2s->n_pairs; ++i )
	{
	  variable_pair *vp = &t2s->pairs[i];
	  const union value *value0 = case_data (c, (*vp)[0]);
	  const union value *value1 = case_data (c, (*vp)[1]);
	  const double diff = value0->f - value1->f;

	  if (var_is_value_missing ((*vp)[0], value0, exclude))
	    continue;

	  if (var_is_value_missing ((*vp)[1], value1, exclude))
	    continue;

	  if ( diff > 0)
	    stp[i].pos += weight;
	  else if (diff < 0)
	    stp[i].neg += weight;
	  else
	    stp[i].ties += weight;
	}
    }

  casereader_destroy (r);

  for (i = 0 ; i < t2s->n_pairs; ++i )
    {
      int r = MIN (stp[i].pos, stp[i].neg);
      stp[i].one_tailed_sig = gsl_cdf_binomial_P (r,
						  0.5,
						  stp[i].pos + stp[i].neg);

      stp[i].point_prob = gsl_ran_binomial_pdf (r, 0.5,
						stp[i].pos + stp[i].neg);
    }

  output_frequency_table (t2s, stp, dict);

  output_statistics_table (t2s, stp);

  free (stp);
}