Калькулятор теста Фридмана

@import url('https://fonts.googleapis.com/css?family=Droid+Serif|Raleway');

.axis--y .domain { display: none; }

h1 { text-align: center; font-size: 50px; margin-bottom: 0px; font-family: 'Raleway', serif; }

p { color: black; text-align: center; margin-bottom: 15px; margin-top: 15px; font-family: 'Raleway', sans-serif; }

words {

color: black; font-family: Raleway; max-width: 550px; margin: 25px auto; line-height: 1.75; }

words_text_area {

display:inline-block; color: black; font-family: Raleway; max-width: 550px; margin: 25px auto; line-height: 1.75; padding-left: 100px; }

calcTitle {

text-align: center; font-size: 20px; margin-bottom: 0px; font-family: 'Raleway', serif; }

hr_top {

width: 30%; margin-bottom: 0px; border: none; height: 2px; color: black; background-color: black; }

hr_bottom {

width: 30%; margin-top: 15px; border: none; height: 2px; color: black; background-color: black; }

label, input { display: inline-block; vertical-align: baseline; width: 350px; }

#button { border: 1px solid; border-radius: 10px; margin-top: 20px;

cursor: pointer; outline: none; background-color: white; color: black; font-family: 'Work Sans', sans-serif; border: 1px solid grey; /* Green */ }

#button:hover { background-color: #f6f6f6; border: 1px solid black; }

.label_radio { text-align: center; }

td, tr, th { border: 1px solid black; } table { border-collapse: collapse; } td, th { min-width: 50px; height: 21px; } .table_span_a, .table_span_b, .table_span_c, .table_span_d, .table_span_e { width: 100%; display: block; }

words_table {

color: black; font-family: Raleway; max-width: 350px; margin: 25px auto; line-height: 1.75; }

summary_table {

color: black; font-family: Raleway; max-width: 550px; margin: 25px auto; line-height: 1.75; padding-left: 20px; }

.label_radio { text-align: center; } Критерий Фридмана — это непараметрическая альтернатива однофакторному дисперсионному анализу с повторными измерениями. Он используется для проверки различий между группами, когда зависимая переменная является порядковой.

Чтобы выполнить тест Фридмана для данного набора данных, просто введите значения для пяти образцов в ячейки ниже, затем нажмите кнопку «Рассчитать».

Калькулятор выведет тестовую статистику Q, p-значение теста и расчеты, которые использовались для получения тестовой статистики Q.

| Группа 1 | Группа 2 | Группа 3 | Группа 4 | Группа 5 | | --- | --- | --- | --- | --- | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  | |  |  |  |  |  |

Тестовая статистика Q:

р-значение:

Решение

Q =

Q =

Q =

//create function that performs calculations function calc() {

//define addition function function add(a, b) { return a + b; }

//define function that can flatten a multi-dimensional array function flatten(arr) { return arr.reduce(function (flat, toFlatten) { return flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten); }, []); }

//get total number of rows var row_input = document.getElementsByClassName('table_span_a'); var row_array = []; for (var i = 0; i < row_input.length; i++) { row_array[i] = row_input[i].innerText; } values_row = row_array.filter(n => n); var n = values_row.length;

//create massive for loop that gets ranks for every single row all_data = [];

for (var i = 0; i < n; i++) {

var p = "p" var p_number = i-(-1); var str = p.concat(p_number); str = str.replace(/ +/g, "");

//get row data var p1_input = document.getElementsByClassName(str); var p1_array = []; for (var j = 0; j < p1_input.length; j++) { p1_array[j] = p1_input[j].innerText; } values_p1 = p1_array.filter(n => n); var p1 = values_p1.map(Number);

//sort row data var sorted = p1.slice().sort(function(a,b){return a-b}) var reversed = sorted.slice(0).reverse(); var frac_rank = p1.slice().map(function(n) { return ( (sorted.indexOf(n) + 1) + (reversed.length - reversed.indexOf(n)) ) / 2 });

//push sorted row data to total data array all_data.push(frac_rank);

} //end massive for loop that ranks every row

//find total treatments var k = all_data[0].length;

//flatten multi-dimensional array into one long array flat_data = flatten(all_data);

//find sum of ranks for each treatment var a = [], b = [], c = [], d = [], e = [], total_squared_ranks;

if (k == 2) { for (i = 0; i < flat_data.length; i+= k) { a.push(flat_data[i]); } for (i = 1; i < flat_data.length; i+= k) { b.push(flat_data[i]); } var sum_a_squared = Math.pow(a.reduce(add, 0), 2); var sum_b_squared = Math.pow(b.reduce(add, 0), 2); total_squared_ranks = [sum_a_squared, sum_b_squared].reduce(add, 0); }

if (k == 3) { for (i = 0; i < flat_data.length; i+= k) { a.push(flat_data[i]); } for (i = 1; i < flat_data.length; i+= k) { b.push(flat_data[i]); } for (i = 2; i < flat_data.length; i+= k) { c.push(flat_data[i]); } var sum_a_squared = Math.pow(a.reduce(add, 0), 2); var sum_b_squared = Math.pow(b.reduce(add, 0), 2); var sum_c_squared = Math.pow(c.reduce(add, 0), 2); total_squared_ranks = [sum_a_squared, sum_b_squared, sum_c_squared].reduce(add, 0); }

if (k == 4) { for (i = 0; i < flat_data.length; i+= k) { a.push(flat_data[i]); } for (i = 1; i < flat_data.length; i+= k) { b.push(flat_data[i]); } for (i = 2; i < flat_data.length; i+= k) { c.push(flat_data[i]); } for (i = 3; i < flat_data.length; i+= k) { d.push(flat_data[i]); } var sum_a_squared = Math.pow(a.reduce(add, 0), 2); var sum_b_squared = Math.pow(b.reduce(add, 0), 2); var sum_c_squared = Math.pow(c.reduce(add, 0), 2); var sum_d_squared = Math.pow(d.reduce(add, 0), 2); total_squared_ranks = [sum_a_squared, sum_b_squared, sum_c_squared, sum_d_squared].reduce(add, 0); }

if (k == 5) { for (i = 0; i < flat_data.length; i+= k) { a.push(flat_data[i]); } for (i = 1; i < flat_data.length; i+= k) { b.push(flat_data[i]); } for (i = 2; i < flat_data.length; i+= k) { c.push(flat_data[i]); } for (i = 3; i < flat_data.length; i+= k) { d.push(flat_data[i]); } for (i = 4; i < flat_data.length; i+= k) { e.push(flat_data[i]); } var sum_a_squared = Math.pow(a.reduce(add, 0), 2); var sum_b_squared = Math.pow(b.reduce(add, 0), 2); var sum_c_squared = Math.pow(c.reduce(add, 0), 2); var sum_d_squared = Math.pow(d.reduce(add, 0), 2); var sum_e_squared = Math.pow(e.reduce(add, 0), 2); total_squared_ranks = [sum_a_squared, sum_b_squared, sum_c_squared, sum_d_squared, sum_e_squared].reduce(add, 0); }

//final calculations for critical value and p value q_term1 = 12 / (n*k*(k-(-1))); q_term3 = 3*n*(k-(-1)); q = (q_term1 * total_squared_ranks) - q_term3; p = 1 - jStat.chisquare.cdf(q, k-1);

//output results document.getElementById('q').innerHTML = q.toFixed(5); document.getElementById('p').innerHTML = p.toFixed(5); document.getElementById('solution1').innerHTML = "(12/(nk(k+1)) * (∑R2) - 3n(k+1)"; document.getElementById('solution2').innerHTML = q_term1 + " * " + total_squared_ranks.toFixed(1) + " - " + q_term3; document.getElementById('solution3').innerHTML = q.toFixed(5); } //end calc() function