PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Tuesday, August 16, 2022

[FIXED] Why the output of the following Javascript code is NaN?

 August 16, 2022     javascript, nan, output     No comments   

Issue

I am new to JavaScript. I am trying to write a code to find correlation coefficient by using Pearson Correlation coefficient formula on a very small set of data. Here is the formula for Pearson Correlation Coefficient.

Text](https://stackoverflow.com/image.jpg)[![enter image description here

var dataSet = {
  bath: [30, 29, 20, 28, 12, 30],
  disease: [2, 5, 9, 3, 8]
};
const corRelate = () => {
  var m1 = 0,
    m2 = 0,
    m3 = 0,
    m4 = 0,
    m5 = 0;
  for (var i = 0; i < dataSet.bath.length; i++) {
    m2 = m2 + dataSet.bath[i];
    m4 = m4 + dataSet.bath[i] * dataSet.bath[i];
  }

  for (var i = 0; i < dataSet.disease.length; i++) {
    m3 = m3 + dataSet.disease[i];
    m5 = m5 + dataSet.disease[i] * dataSet.disease[i];
  }

  for (var i = 0; i < dataSet.bath.length; i++) {
    for (var j = 0; j < dataSet.disease.length; j++) {
      m1 = m1 + dataSet.bath[i] * dataSet.disease[j];
    }
  }
  const val = (m1 - m2 * m3) / (Math.sqrt(m4 - m2 * m2) * Math.sqrt(m5 - m3 * m3));
  return val;
};

const val = corRelate();
console.log(val);

The output of this code is NaN . I think the output from the calculation should be an integer or a floating point number,I don't understand why I am getting NaN as output.


Solution

You are mistaken in your formula, I rewrote your snippet:

const dataSet = {
  bath: [30, 29, 20, 28, 12, 30],
  disease: [2, 5, 9, 3, 8]
};

const corRelate = () => {
  const m1 = dataSet.bath.reduce((m1, bath) => {
    return dataSet.disease.reduce((m1, disease) => m1 + bath * disease, m1);
  }, 0);

  const m2 = dataSet.bath.reduce((m2, item) => m2 + item, 0);
  const m4 = dataSet.bath.reduce((m4, item) => m4 + item * item, 0);
  const m3 = dataSet.disease.reduce((m3, item) => m3 + item, 0);
  const m5 = dataSet.disease.reduce((m5, item) => m5 + item * item, 0);

  // here u used Math.sqrt twice "Math.sqrt(m4 - m2 * m2) * Math.sqrt(m5 - m3 * m3)" 
  return (m1 - m2 * m3) / Math.sqrt((m4 - m2 * m2) * (m5 - m3 * m3));
};

console.log(corRelate());



Answered By - sonnenhaft
Answer Checked By - Marilyn (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing