Калькулятор теста Краскела-Уоллиса
@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; }
words_table label, #words_table input {
display: inline-block; vertical-align: baseline; width: 350px; }
#buttonCalc { 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; } Этот калькулятор теста Крускала-Уоллиса сравнивает медианы трех или более независимых выборок. Это непараметрическая версия однофакторного дисперсионного анализа.
Просто введите значения для пяти образцов в ячейки ниже, затем нажмите кнопку «Рассчитать».
Образец 1
11, 12, 12, 14, 16, 19, 19, 20, 21, 21 Образец 2
16, 16, 16, 17, 18, 19, 22, 24, 25, 32 Образец 3
18, 18, 19, 21, 21, 22, 22, 23, 24, 26 Образец 4
Образец 5
H Статистика: 6,59806
p-значение: 0,03692
//create function that performs calculations function calc() {
//get raw data for each group var group_a = document.getElementById('a').value.split(',').map(Number); var group_b = document.getElementById('b').value.split(',').map(Number); var group_c = document.getElementById('c').value.split(',').map(Number); var group_d = document.getElementById('d').value.split(',').map(Number); var group_e = document.getElementById('e').value.split(',').map(Number);
//define addition function function add(a, b) { return a + b; }
//define function to perform kruskal-wallis test function kruskal() {
var ngroups = arguments.length, groupRankSums = new Array( ngroups ), groupsIndicators = [], i, j, arg, n = [], N, x = [], ranks, ties, tieSumTerm, key, s, stat_placeholder, stat, param, pval;
if ( ngroups < 2 ) { throw new Error( 'kruskal()::invalid number of input arguments. Must provide at least two array-like arguments. Value: ' + arg + '
.' ); }
for ( i = 0; i < ngroups; i++ ) { arg = arguments[ i ]; n[ i ] = arg.length; groupRankSums[ i ] = 0;
for ( j = 0; j < n[ i ]; j++ ) { groupsIndicators.push( i ); x.push( arg[ j ] ); } }
N = x.length; var sorted = x.slice().sort(function(a,b){return a-b}); var reversed = sorted.slice(0).reverse(); ranks = x.slice().map(function(v){ return ((sorted.indexOf(v) + 1) + (reversed.length - reversed.indexOf(v))) / 2;});
// calculate # ties for each value & rank sums per group ties = {};
for ( i = 0; i < N; i++ ) { groupRankSums[ groupsIndicators[ i ] ] += ranks[ i ]; if ( x[ i ] in ties ) { ties[ x[ i ] ] += 1; } else { ties[ x[ i ] ] = 1; } }
// calculate test statistic using short-cut formula rank_squares = groupRankSums.map(function(x) { return Math.pow(x, 2); }); rank_squares_sum = (rank_squares.map(function(x, i) { return x / n[i]; })).reduce(add, 0); stat = (12/(N*(N+1))) * rank_squares_sum - 3*(N+1);
param = ngroups - 1; pval = 1 - jStat.chisquare.cdf(stat, param);
return { 'H': stat, 'df': param, 'pValue': pval, };
} // end FUNCTION kruskal()
if (group_a.length > 1) { var flag_group_a = 1; } else { var flag_group_a = 0;}; if (group_b.length > 1) { var flag_group_b = 1; } else { var flag_group_b = 0;}; if (group_c.length > 1) { var flag_group_c = 1; } else { var flag_group_c = 0;}; if (group_d.length > 1) { var flag_group_d = 1; } else { var flag_group_d = 0;}; if (group_e.length > 1) { var flag_group_e = 1; } else { var flag_group_e = 0;};
var total_treatments = [flag_group_a, flag_group_b, flag_group_c, flag_group_d, flag_group_e].reduce(add, 0);
var out;
if (total_treatments == 2) { out = kruskal(group_a, group_b); } else if (total_treatments == 3) { out = kruskal(group_a, group_b, group_c); } else if (total_treatments == 4) { out = kruskal(group_a, group_b, group_c, group_d); } else if (total_treatments == 5){ out = kruskal(group_a, group_b, group_c, group_d, group_e); }
var H = out[Object.keys(out)[0]]; var p = out[Object.keys(out)[2]];
//--------------OUTPUT RESULTS-----------//
document.getElementById('H').innerHTML = H.toFixed(5); document.getElementById('p').innerHTML = p.toFixed(5); }