Skip to content

Instantly share code, notes, and snippets.

@itxtoledo
Created February 9, 2021 14:30
Show Gist options
  • Save itxtoledo/bdcce0230564ea8c21435e236bca8ced to your computer and use it in GitHub Desktop.
Save itxtoledo/bdcce0230564ea8c21435e236bca8ced to your computer and use it in GitHub Desktop.
Correlação de Pearson em JavaScript
<html>
<head>
<meta charset="utf-8">
<title>Correlação de Pearson</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
</head>
<body>
<div class="container-fluid">
<br />
<br />
<h2 align="center">Correlação de Pearson</h2>
<div class="form-group">
<form name="add_name" id="add_name">
<div class="table-responsive table-borderless">
<table class="table" id="dynamic_field">
<tr>
<td>
<h2>X</h2>
</td>
<td>
<h2>Y</h2>
</td>
<td>
<h2>X.Y</h2>
</td>
<td>
<h2>X²</h2>
</td>
<td>
<h2>Y²</h2>
</td>
<td><button type="button" name="add" id="add" class="btn btn-success">+</button></td>
</tr>
<tr id="row0">
<td>
<input type="number" id="x0" placeholder="Entre com o X" class="form-control name_list" />
</td>
<td>
<input type="number" id="y0" placeholder="Entre com o Y" class="form-control name_list" />
</td>
<td>
<input type="number" id="xy0" placeholder="xy" disabled class="form-control name_list" />
</td>
<td>
<input type="number" id="x20" placeholder="x²" disabled class="form-control name_list" />
</td>
<td>
<input type="number" id="y20" placeholder="y²" disabled class="form-control name_list" />
</td>
<td><button type="button" name="remove" id="0" class="btn btn-danger btn_remove">x</button></td>
</tr>
</table>
<table class="table">
<tr>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">Σ X</div>
</div>
<input type="text" id="Σx" disabled class="form-control name_list" />
</div>
</td>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">Σ Y</div>
</div>
<input type="text" id="Σy" disabled class="form-control name_list" />
</div>
</td>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">Σ xy</div>
</div>
<input type="text" id="Σxy" disabled class="form-control name_list" />
</div>
</td>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">Σ x²</div>
</div>
<input type="text" id="Σx2" disabled class="form-control name_list" />
</div>
</td>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">Σ y²</div>
</div>
<input type="text" id="Σy2" disabled class="form-control name_list" />
</div>
</td>
<td><button type="button" class="btn btn-warning">Σ</button></td>
</tr>
</table>
<hr>
<table class="table">
<tr>
<td>
<input type="button" name="send" id="send" class="btn btn-info btn-block" value="Calcular" />
</td>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">r</div>
</div>
<input type="text" id="R" placeholder="r" disabled class="form-control name_list" />
</div>
</td>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">CD</div>
</div>
<input type="text" id="CD" placeholder="CD" disabled class="form-control name_list" />
<div class="input-group-append">
<div class="input-group-text">%</div>
</div>
</div>
</td>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">a</div>
</div>
<input type="text" id="A" placeholder="a" disabled class="form-control name_list" />
</div>
</td>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">b</div>
</div>
<input type="text" id="B" placeholder="b" disabled class="form-control name_list" />
</div>
</td>
</tr>
<tr>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">!X</div>
</div>
<input type="text" id="notX" placeholder="!X" disabled class="form-control name_list" />
</div>
</td>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">!Y</div>
</div>
<input type="text" id="notY" placeholder="!Y" disabled class="form-control name_list" />
</div>
</td>
</tr>
</table>
<hr>
<h3>Estimar X ou Y</h3>
<table class="table">
<tr>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">x</div>
</div>
<input type="number" id="Xestimado" class="form-control name_list">
</div>
</td>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">y</div>
</div>
<input type="number" id="Yestimado" class="form-control name_list">
</div>
</td>
<td>
<input type="button" name="estimar" id="estimar" class="btn btn-info btn-block" value="Estimar" />
</td>
</tr>
</table>
<hr>
<h3>Atualizar valores</h3>
<table class="table">
<tr>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">x0</div>
</div>
<input type="number" id="xinicio" class="form-control name_list">
</div>
</td>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">y0</div>
</div>
<input type="number" id="yinicio" class="form-control name_list">
</div>
</td>
<td>
<input type="button" name="update" id="update" class="btn btn-info btn-block" value="Atualizar valores" />
</td>
</tr>
</table>
</div>
</form>
<p>Legenda: r - Coeficiente de Correlação de Pearson, CD - Coeficiente de Determinação, a - Inclinação, b - Intersepto, !X - Negação de X, !Y - Negação de Y</p>
</div>
</div>
</body>
</html>
<script>
rows = 1;
$('#add').click(function() {
$('#dynamic_field').append(`<tr id="row` + rows + `">
<td>
<input type="number" id="x` + rows + `" placeholder="Entre com o X" class="form-control name_list" />
</td>
<td>
<input type="number" id="y` + rows + `" placeholder="Entre com o Y" class="form-control name_list" />
</td>
<td>
<input type="number" id="xy` + rows + `" placeholder="xy" disabled class="form-control name_list" />
</td>
<td>
<input type="number" id="x2` + rows + `" placeholder="x²" disabled class="form-control name_list" />
</td>
<td>
<input type="number" id="y2` + rows + `" placeholder="y²" disabled class="form-control name_list" />
</td>
<td><button type="button" name="remove" id="` + rows + `" class="btn btn-danger btn_remove">x</button></td></tr>`);
rows++;
});
$(document).on('click', '.btn_remove', function() {
var button_id = $(this).attr("id");
$('#row' + button_id + '').remove();
rows--;
});
$('#send').click(function() {
calculateGrandTotal();
});
$('#estimar').click(function() {
estimar();
});
$('#update').click(function() {
updateVal();
});
function calculateGrandTotal() {
n = rows;
sumx = 0;
sumy = 0;
sumxy = 0;
sumx2 = 0;
sumy2 = 0;
for (var i = 0; i < rows; i++) {
$("#xy" + i).val(($("#x" + i).val() * $("#y" + i).val()).toFixed(2));
$("#x2" + i).val(($("#x" + i).val() * $("#x" + i).val()).toFixed(2));
$("#y2" + i).val(($("#y" + i).val() * $("#y" + i).val()).toFixed(2));
sumx += parseFloat($("#x" + i).val());
sumy += parseFloat($("#y" + i).val());
sumxy += parseFloat($("#xy" + i).val());
sumx2 += parseFloat($("#x2" + i).val());
sumy2 += parseFloat($("#y2" + i).val());
}
$("#Σx").val(sumx);
$("#Σy").val(sumy);
$("#Σxy").val(sumxy);
$("#Σx2").val(sumx2);
$("#Σy2").val(sumy2);
$("#R").val(pearson());
$("#CD").val(coeficienteDeterminacao(pearson()));
$("#A").val(inclination());
$("#B").val(intercepto());
$("#notX").val(notX);
$("#notY").val(notY);
}
function pearson() {
var calcUp = (n * sumxy) - (sumx * sumy);
var calcDown = Math.sqrt((n * sumx2 - (sumx * sumx)) * (n * sumy2 - (sumy * sumy)));
var calculo = calcUp / calcDown;
console.log(calcUp);
console.log(calcDown);
console.log(calculo);
return parseFloat(calculo.toFixed(3));
}
function coeficienteDeterminacao(pearson) {
return parseFloat((pearson * pearson * 100).toFixed(2));
}
function inclination() {
var calcUp = (n * sumxy) - (sumx * sumy);
var calcDown = (n * sumx2) - (sumx * sumx);
var calculo = calcUp / calcDown;
return parseFloat(calculo.toFixed(2));
}
function intercepto() {
notX = parseFloat((sumx / n).toFixed(2));
notY = parseFloat((sumy / n).toFixed(2));
var calculo = notY - ((inclination() * notX));
return parseFloat(calculo.toFixed(2));
}
function estimar() {
if ($("#Yestimado").val() == ''){
$("#Yestimado").val((((inclination() * parseFloat($("#Xestimado").val()))) + intercepto()).toFixed(2));
}else{
$("#Xestimado").val(((parseFloat($("#Yestimado").val()) - intercepto())/inclination()).toFixed(2));
}
}
function updateVal(){
var x0 = parseFloat($("#xinicio").val());
var y0 = parseFloat($("#yinicio").val());
for (var i = 0; i < rows; i++) {
$("#x"+i).val(parseFloat($("#x"+i).val()) - $("#xinicio").val());
$("#y"+i).val(parseFloat($("#y"+i).val()) - $("#yinicio").val());
}
}
</script>
@itxtoledo
Copy link
Author

Criei este código no início da faculdade então me perdoem rs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment