MediaWiki:Lékařská kalkulačka/PD-MCI.js
Z WikiSkript
Poznámka: Po zveřejnění musíte vyprázdnit cache vašeho prohlížeče, jinak změny neuvidíte.
- Firefox / Safari: Při kliknutí na Aktualizovat držte Shift nebo stiskněte Ctrl-F5 nebo Ctrl-R (na Macu ⌘-R)
- Google Chrome: Stiskněte Ctrl-Shift-R (na Macu ⌘-Shift-R)
- Internet Explorer / Edge: Při kliknutí na Aktualizovat držte Ctrl nebo stiskněte Ctrl-F5
- Opera: Stiskněte Ctrl-F5.
/**
* ReplaceAll by Fagner Brack (MIT Licensed)
* Replaces all occurrences of a substring in a string
*/
String.prototype.replaceAll = function(token, newToken, ignoreCase) {
var str, i = -1, _token;
if((str = this.toString()) && typeof token === "string") {
_token = ignoreCase === true? token.toLowerCase() : undefined;
while((i = (
_token !== undefined?
str.toLowerCase().indexOf(
_token,
i >= 0? i + newToken.length : 0
) : str.indexOf(
token,
i >= 0? i + newToken.length : 0
)
)) !== -1 ) {
str = str.substring(0, i)
.concat(newToken)
.concat(str.substring(i + token.length));
}
}
return str;
};
/**************** Převod do html podoby ****************/
var content = $( '#lekarska_kalkulacka_PDMCI-content' ).text();
$( '#lekarska_kalkulacka_PD-MCI' ).html( content.replaceAll('paragraph', 'p' ).replaceAll( 'resValue', 'span' ).replaceAll('breakline', 'br' ).replaceAll('division', 'div').replaceAll('orderedlist', 'ol').replaceAll('header3', 'h3') );
/**************** Pomocné funkce ****************/
function z2percentile(z) {
//z == number of standard deviations from the mean
//if z is greater than 6.5 standard deviations from the mean
//the number of significant digits will be outside of a reasonable
//range
if ( z < -6.5)
return 0.0;
if( z > 6.5)
return 1.0;
var factK = 1;
var sum = 0;
var term = 1;
var k = 0;
var loopStop = Math.exp(-23);
while(Math.abs(term) > loopStop)
{
term = .3989422804 * Math.pow(-1,k) * Math.pow(z,k) / (2 * k + 1) / Math.pow(2,k) * Math.pow(z,k+1) / factK;
sum += term;
k++;
factK *= k;
}
sum += 0.5;
return 100 * sum;
}
function lekarska_kalkulacka_PDMCI_round( num ) {
return Math.round( num * 100 )/100;
}
//list of all exams:
var lekarska_kalkulacka_PDMCI_exams = ['tmta', 'dsb', 'tol', 'sf', 'waisrsim', 'bnt', 'ravltdr', 'bvmtdr', 'jol', 'cloxi' ];
function lekarska_kalkulacka_PDMCI_calculate() {
//constants for mean, age, gender, education and root-mean-squared-error.
var params = {
'tmta': {'mean': 26.9158786733743, 'age': 0.79620528727942, 'gender': 4.74634500135709, 'education': -2.39555789653284, 'rmse': 21.5263435503107, 'sign': -1},
'dsb': {'mean': 6.22505145210761, 'age': -0.0353867065943914, 'gender': 0.0504968458243749, 'education': 0.145660577638105, 'rmse': 1.73431460274184, 'sign': 1},
'tol': {'mean': 26.212, 'age': -0.02, 'gender': 0.876, 'education': 0.123, 'rmse': 4.0180142746561, 'sign': 1},
'sf': {'mean': 23.264086457321, 'age': -0.120157685039321, 'gender': -1.44318686698752, 'education': 0.50860013280954, 'rmse': 5.25757400801454, 'sign': 1},
'waisrsim': {'mean': 16.1402735987095, 'age': 0.0110148506822712, 'gender': 0.406095078769549, 'education': 0.405391790083139, 'rmse': 2.90446499325018, 'sign': 1},
'bnt': {'mean': 28.914, 'age': -0.03, 'gender': 0.528, 'education': 0.118, 'rmse': 2.0352323641588, 'sign': 1},
'ravltdr': {'mean': 10.0782355220185, 'age': -0.0596358856716573, 'gender': -1.18442668955274, 'education': 0.177938240926311, 'rmse': 3.13935122843155, 'sign': 1},
'bvmtdr': {'mean': -7.894, 'age': 0.224, 'gender': -0.49, 'education': -0.081, 'rmse': 1.37805118389885, 'sign': 1},
'jol': {'mean': 21.265817188006, 'age': -0.00668162115988829, 'gender': 1.59561981002336, 'education': 0.298311430076549, 'rmse': 2.70879202666548, 'sign': 1},
'cloxi': {'mean': 14.0595765238921, 'age': -0.00607962563105891, 'gender': -0.125831401116365, 'education': 0.0256924652224113, 'rmse': 1.09114056301701, 'sign': 1}
}
var results = { 'very_superior': [], 'superior': [], 'high_average': [], 'average': [], 'low_average': [], 'midly_impaired': [], 'moderately_impaired': [], 'severely_impaired': []};
var fullnames = { 'tmta': 'TMT-A', 'dsb': 'DS backwards', 'tol': 'ToL', 'sf': 'Semantic fluency', 'waisrsim': 'WAIS-R Similarities', 'bnt': 'BNT-30', 'ravltdr': 'RAVLT-DR', 'bvmtdr': 'BVMT-DR', 'jol': 'JoL', 'cloxi': 'CLOX I' };
for (var i = 0; i < lekarska_kalkulacka_PDMCI_exams.length; i++) {
var exam = lekarska_kalkulacka_PDMCI_exams[i];
var value = $( '#lekarska_kalkulacka_PDMCI-' + exam + '-number' ).val();
var gender = $('input[name=gender]:checked', '#lekarska_kalkulacka_PDMCI-gender').val();
var age = $('#lekarska_kalkulacka_PDMCI-age-number').val();
var education = $('#lekarska_kalkulacka_PDMCI-education-number').val();
var mean = params[exam]['mean'];
var age_factor = params[exam]['age'];
var gender_factor = params[exam]['gender'];
var education_factor = params[exam]['education'];
var sign = params[exam]['sign'];
var rmse = params[exam]['rmse'];
var zscore = sign * ((value - (mean + age * age_factor + gender * gender_factor + education * education_factor))/rmse);
var perc = z2percentile( zscore );
$( '#lekarska_kalkulacka_PDMCI-' + exam + '-Z' ).val( lekarska_kalkulacka_PDMCI_round(zscore) );
$( '#lekarska_kalkulacka_PDMCI-' + exam + '-perc' ).val( lekarska_kalkulacka_PDMCI_round(perc) );
if ( zscore < -2.5 ) $( '#lekarska_kalkulacka_PDMCI-' + exam + '-SD' ).html( '-2.5 SD' );
else if ( zscore < -2 ) $( '#lekarska_kalkulacka_PDMCI-' + exam + '-SD' ).html( '-2 SD' );
else if ( zscore < -1.5 ) $( '#lekarska_kalkulacka_PDMCI-' + exam + '-SD' ).html( '-1.5 SD' );
else if ( zscore < -1 ) $( '#lekarska_kalkulacka_PDMCI-' + exam + '-SD' ).html( '-1 SD' );
else $( '#lekarska_kalkulacka_PDMCI-' + exam + '-SD' ).html( '' );
if (perc >= 98 ) {
results['very_superior'].push( fullnames[ exam ] );
} else if ( perc >= 91 ) {
results['superior'].push( fullnames[ exam ] );
} else if ( perc >= 75 ) {
results['high_average'].push( fullnames[ exam ] );
} else if ( perc >= 25 ) {
results['average'].push( fullnames[ exam ] );
} else if ( perc >= 9 ) {
results['low_average'].push( fullnames[ exam ] );
} else if ( perc >= 2 ) {
results['midly_impaired'].push( fullnames[ exam ] );
} else if ( perc >= 1 ) {
results['moderately_impaired'].push( fullnames[ exam ] );
} else {
results['severely_impaired'].push( fullnames[ exam ] );
}
}
var resulthtml = '';
if (results['very_superior'].length > 0) resulthtml += '<p><b>Very superior:</b> ' + results['very_superior'].join() + '</p>';
if (results['superior'].length > 0) resulthtml += '<p><b>Superior:</b> ' + results['superior'].join() + '</p>';
if (results['high_average'].length > 0) resulthtml += '<p><b>High average:</b> ' + results['high_average'].join() + '</p>';
if (results['average'].length > 0) resulthtml += '<p><b>Average:</b> ' + results['average'].join() + '</p>';
if (results['low_average'].length > 0) resulthtml += '<p><b>Low average:</b> ' + results['low_average'].join() + '</p>';
if (results['midly_impaired'].length > 0) resulthtml += '<p><b>Midly impaired:</b> ' + results['midly_impaired'].join() + '</p>';
if (results['moderately_impaired'].length > 0) resulthtml += '<p><b>Moderately impaired:</b> ' + results['moderately_impaired'].join() + '</p>';
if (results['severely_impaired'].length > 0) resulthtml += '<p><b>Severely impaired:</b> ' + results['severely_impaired'].join() + '</p>';
$( '#lekarska_kalkulacka_PDMCI-vysledek').html(resulthtml);
}
function lekarska_kalkulacka_PDMCI_set( name, value ) {
$('#lekarska_kalkulacka_PDMCI-' + name + '-range').val(value);
$('#lekarska_kalkulacka_PDMCI-' + name + '-number').val(value);
}
/**************** Vlastní výpočet ****************/
//list of all ids ('-range' and '-number' for each)
var lekarska_kalkulacka_PDMCI_ids = [
'lekarska_kalkulacka_PDMCI-tmta-range',
'lekarska_kalkulacka_PDMCI-tmta-number',
'lekarska_kalkulacka_PDMCI-dsb-range',
'lekarska_kalkulacka_PDMCI-dsb-number',
'lekarska_kalkulacka_PDMCI-tol-range',
'lekarska_kalkulacka_PDMCI-tol-number',
'lekarska_kalkulacka_PDMCI-sf-range',
'lekarska_kalkulacka_PDMCI-sf-number',
'lekarska_kalkulacka_PDMCI-waisrsim-range',
'lekarska_kalkulacka_PDMCI-waisrsim-number',
'lekarska_kalkulacka_PDMCI-bnt-range',
'lekarska_kalkulacka_PDMCI-bnt-number',
'lekarska_kalkulacka_PDMCI-ravltdr-range',
'lekarska_kalkulacka_PDMCI-ravltdr-number',
'lekarska_kalkulacka_PDMCI-bvmtdr-range',
'lekarska_kalkulacka_PDMCI-bvmtdr-number',
'lekarska_kalkulacka_PDMCI-jol-range',
'lekarska_kalkulacka_PDMCI-jol-number',
'lekarska_kalkulacka_PDMCI-cloxi-range',
'lekarska_kalkulacka_PDMCI-cloxi-number',
'lekarska_kalkulacka_PDMCI-age-range',
'lekarska_kalkulacka_PDMCI-age-number',
'lekarska_kalkulacka_PDMCI-education-range',
'lekarska_kalkulacka_PDMCI-education-number'
];
var lekarska_kalkulacka_PDMCI_id2name = {
'lekarska_kalkulacka_PDMCI-tmta-range': 'tmta',
'lekarska_kalkulacka_PDMCI-tmta-number': 'tmta',
'lekarska_kalkulacka_PDMCI-dsb-range': 'dsb',
'lekarska_kalkulacka_PDMCI-dsb-number': 'dsb',
'lekarska_kalkulacka_PDMCI-tol-range': 'tol',
'lekarska_kalkulacka_PDMCI-tol-number': 'tol',
'lekarska_kalkulacka_PDMCI-sf-range': 'sf',
'lekarska_kalkulacka_PDMCI-sf-number': 'sf',
'lekarska_kalkulacka_PDMCI-waisrsim-range': 'waisrsim',
'lekarska_kalkulacka_PDMCI-waisrsim-number': 'waisrsim',
'lekarska_kalkulacka_PDMCI-bnt-range': 'bnt',
'lekarska_kalkulacka_PDMCI-bnt-number': 'bnt',
'lekarska_kalkulacka_PDMCI-ravltdr-range': 'ravltdr',
'lekarska_kalkulacka_PDMCI-ravltdr-number': 'ravltdr',
'lekarska_kalkulacka_PDMCI-bvmtdr-range': 'bvmtdr',
'lekarska_kalkulacka_PDMCI-bvmtdr-number': 'bvmtdr',
'lekarska_kalkulacka_PDMCI-jol-range': 'jol',
'lekarska_kalkulacka_PDMCI-jol-number': 'jol',
'lekarska_kalkulacka_PDMCI-cloxi-range': 'cloxi',
'lekarska_kalkulacka_PDMCI-cloxi-number': 'cloxi',
'lekarska_kalkulacka_PDMCI-age-range': 'age',
'lekarska_kalkulacka_PDMCI-age-number': 'age',
'lekarska_kalkulacka_PDMCI-education-range': 'education',
'lekarska_kalkulacka_PDMCI-education-number': 'education'
};
$( 'input' ).change( function() {
//if an input that corresponds to an exam is changed, then run the calculation
if ( $.inArray( $(this).attr('id'), lekarska_kalkulacka_PDMCI_ids ) ) {
//1st argument is name of the input (mapped from id), 2nd argument is its value.
lekarska_kalkulacka_PDMCI_set( lekarska_kalkulacka_PDMCI_id2name[$(this).attr('id')], $(this).val() );
}
$('#lekarska_kalkulacka_PDMCI-tmta-number').val($('#lekarska_kalkulacka_PDMCI-tmta-range').val());
lekarska_kalkulacka_PDMCI_calculate();
});
/*
$( 'input' ).change( function() {
var result = 'result';
$( '#lekarska_kalkulacka_PDMCI-vysledek' ).html( result );
});
*/