2015-03-06 2 views
1

Я хочу, чтобы вычислить коэффициент Фи в Java для Путаница матрицы 2 х 2 где код до сих пор, как показано ниже:Вычислить коэффициент Фи в Java

double str= (trueP + falseP) *(trueP + falseN) * (trueN + falseP) * (trueN + falseN); 
       double output= Math.sqrt(str); 
       if (output!= 0.0) 
       return (trueP * trueN)/output; 
      else return 0.0; 

где trueP = 6930, trueN = 6924, falseP = 0 и falseN = 0, выход этого кода 3629.03401901938. я вычислил коэффициент Phi в первенствует возвращает значение для тех же значений

Что такое неправильно?

Любая помощь будет высоко оценен

+0

Вы можете посмотреть https://en.wikipedia.org/wiki/Confusion_matrix и сообщить нам, что соответствует Phi (например, позитивное предсказательное значение или истинная положительная ставка)? Это может облегчить кому-то помощь. – sova

+1

sova .. посмотрите на этот вопрос http://stackoverflow.com/questions/26323481/explain-how-the-phi-coefficient-function-works-in-eloquent-javascript i –

ответ

3

если каждая переменная является двойной код производит желаемый результат 1.0:

просто скомпилировать и запустить следующий класс Java, который присваивает значения, которые должны быть назначены trueP, trueN, falseP и falseN:

class confusion { 
    public static void main(String[] args) { 
    double trueP=6930; 
    double trueN=6924; 
    double falseP=0; 
    double falseN=0; 
    double str= (trueP + falseP) *(trueP + falseN) * (trueN + falseP) * (trueN + falseN); 
       double output= Math.sqrt(str); 
       if (output!= 0.0) { 
        double output2 =(trueP * trueN)/output; 
        System.out.println(output2); 
      } 
       else { 
       System.out.println(output); // Display the string. 
      } 
    } 
} 

причина заключается в том, что двойной может содержать значение максимального достаточно большой для вашего случая:

static double MAX_VALUE 
A constant holding the largest positive finite value of type double, (2-2-52)·21023. 

, как вы можете увидеть здесь: http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html

+0

Это не отвечает на вопрос. –

+0

adrCoder ... большое спасибо.теперь ясно –

+0

@DavidWallace отвечает на вопрос, потому что он не использовал двойной ранее ... очевидно ... – adrCoder

10

я могу дублировать эту ошибку, но только если trueP, trueN, falseP и falseN являются int s.

Если они int s, то эта линия переполняет диапазон int, прежде чем назначить его на double.

double str= (trueP + falseP) *(trueP + falseN) * (trueN + falseP) * (trueN + falseN); 

Это значение только 1.74822976E8, когда она должна быть 2.3023989982224E15, который больше, чем Integer.MAX_VALUE, немного больше, чем 2 миллиарда (2E9).

Передача первого значения в double для принудительной арифметики с плавающей запятой для всего выражения, поскольку double имеет гораздо больший диапазон допустимых значений.

double str= ((double) trueP + falseP) *(trueP + falseN) * (trueN + falseP) * (trueN + falseN); 

Когда я делаю это, я получить желаемый выход 1.0.

Для обеспечения достоверных расчетов в целом, использовать double с для всех 4-х переменных: trueP, trueN, falseP и falseN.

+0

rgettman ... большое спасибо он работает сейчас –

Смежные вопросы