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

@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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.