Zum Hauptinhalt springen
clawam tools
Werkzeuge Dokumente Daoark EN Startseite Startseite / Calculadora › Startseite manifest.json = 1) throw new Error('p 必须在 0-1 之间'); var a = [-39.6968302866538, 220.946098424521, -275.928510446969, 138.357751867269, -30.6647980661472, 2.50662827745924]; var b = [-54.4760987982241, 161.585836858041, -155.698979859887, 66.8013118877197, -13.2806815528857]; var c = [-0.00778489400243029, -0.322396458041136, -2.40075827716184, -2.54973253934373, 4.37466414146497, 2.93816398269878]; var d = [0.00778469570904146, 0.32246712907004, 2.445134137143, 3.75440866190741]; var pLow = 0.02425, pHigh = 1 - pLow; var q, r; if (p < pLow) { q = Math.sqrt(-2 * Math.log(p)); return (((((c[0]*q + c[1])*q + c[2])*q + c[3])*q + c[4])*q + c[5]) / ((((d[0]*q + d[1])*q + d[2])*q + d[3])*q + 1); } else if (p <= pHigh) { q = p - 0.5; r = q * q; return (((((a[0]*r + a[1])*r + a[2])*r + a[3])*r + a[4])*r + a[5]) * q / (((((b[0]*r + b[1])*r + b[2])*r + b[3])*r + b[4])*r + 1); } else { q = Math.sqrt(-2 * Math.log(1 - p)); return -(((((c[0]*q + c[1])*q + c[2])*q + c[3])*q + c[4])*q + c[5]) / ((((d[0]*q + d[1])*q + d[2])*q + d[3])*q + 1); } } function refreshGroups() { var op = $('op').value; var isMean = op === 'mean' || op === 'mean2'; var isProp = op === 'prop' || op === 'prop2'; var is2 = op === 'mean2' || op === 'prop2'; $('g-mean').style.display = isMean ? 'block' : 'none'; $('g-sd').style.display = op === 'mean' ? 'block' : (op === 'mean2' ? 'block' : 'none'); $('g-n').style.display = (op === 'mean' || op === 'prop') ? 'block' : 'none'; $('g-p').style.display = op === 'prop' ? 'block' : 'none'; $('g-mean2').style.display = op === 'mean2' ? 'block' : 'none'; $('g-sd2').style.display = op === 'mean2' ? 'block' : 'none'; $('g-n2').style.display = is2 ? 'block' : 'none'; $('g-x2').style.display = op === 'prop2' ? 'block' : 'none'; } function doProcess() { try { var op = $('op').value; var conf = parseFloat(getVal('conf')); if (!(conf > 0 && conf < 1)) { showError('置信水平 0-1'); return; } var z = stdNormInv((1 + conf) / 2); var alpha = 1 - conf; var out = ''; if (op === 'mean') { var x = parseFloat(getVal('xbar')); var s = parseFloat(getVal('sd')); var n = parseInt(getVal('n'), 10); if (!(s > 0) || !(n >= 2)) { showError('σ>0, n≥2'); return; } var me = z * s / Math.sqrt(n); out = '点估计 x̄ = ' + x + '\n边际误差 ME = z · σ/√n = ' + z.toFixed(4) + ' × ' + s + '/' + Math.sqrt(n).toFixed(2) + ' = ' + me.toFixed(4) + '\n' + conf * 100 + '% 置信区间: (' + (x - me).toFixed(4) + ', ' + (x + me).toFixed(4) + ')\n' + '解释:重复抽样 100 次,有 ' + (conf * 100) + ' 次的区间会覆盖真值 μ'; showResult(out, '单均值 n=' + n + ', ' + conf * 100 + '% CI'); } else if (op === 'prop') { var x = parseInt(getVal('x'), 10); var n = parseInt(getVal('n'), 10); if (!(n >= 2) || x < 0 || x > n) { showError('0 ≤ x ≤ n, n≥2'); return; } var p = x / n; var me = z * Math.sqrt(p * (1 - p) / n); out = '点估计 p̂ = ' + p.toFixed(6) + '\n边际误差 ME = ' + me.toFixed(6) + '\n' + conf * 100 + '% 置信区间: (' + Math.max(0, p - me).toFixed(6) + ', ' + Math.min(1, p + me).toFixed(6) + ')'; showResult(out, '单比例 n=' + n + ', ' + conf * 100 + '% CI'); } else if (op === 'mean2') { var x1 = parseFloat(getVal('xbar')), s1 = parseFloat(getVal('sd')), n1 = parseInt(getVal('n'), 10); var x2 = parseFloat(getVal('xbar2')), s2 = parseFloat(getVal('sd2')), n2 = parseInt(getVal('n2'), 10); if (!(s1 > 0) || !(s2 > 0) || n1 < 2 || n2 < 2) { showError('σ>0, n≥2'); return; } var diff = x1 - x2; var me = z * Math.sqrt(s1 * s1 / n1 + s2 * s2 / n2); out = '点估计 x̄₁ - x̄₂ = ' + diff + '\n边际误差 ME = ' + me.toFixed(4) + '\n' + conf * 100 + '% 置信区间: (' + (diff - me).toFixed(4) + ', ' + (diff + me).toFixed(4) + ')\n' + (diff - me > 0 ? '区间不含 0 → 组 1 均值显著大于组 2' : (diff + me < 0 ? '区间不含 0 → 组 1 均值显著小于组 2' : '区间含 0 → 无显著差异')); showResult(out, '双均值差 n₁=' + n1 + ', n₂=' + n2 + ', ' + conf * 100 + '% CI'); } else { var x1 = parseInt(getVal('x'), 10), n1 = parseInt(getVal('n'), 10); var x2 = parseInt(getVal('x2'), 10), n2 = parseInt(getVal('n2'), 10); if (n1 < 2 || n2 < 2 || x1 > n1 || x2 > n2) { showError('0≤x≤n, n≥2'); return; } var p1 = x1 / n1, p2 = x2 / n2; var diff = p1 - p2; var me = z * Math.sqrt(p1 * (1 - p1) / n1 + p2 * (1 - p2) / n2); out = '点估计 p̂₁ - p̂₂ = ' + diff.toFixed(6) + '\n边际误差 ME = ' + me.toFixed(6) + '\n' + conf * 100 + '% 置信区间: (' + (diff - me).toFixed(6) + ', ' + (diff + me).toFixed(6) + ')'; showResult(out, '双比例差 n₁=' + n1 + ', n₂=' + n2 + ', ' + conf * 100 + '% CI'); } } catch (e) { showError('计算失败: ' + (e.message || e)); } } $('op').addEventListener('change', refreshGroups); refreshGroups(); $('btn-main').addEventListener('click', function(e) { e.preventDefault(); doProcess(); }); $('btn-clear').addEventListener('click', function() { var inputs = document.querySelectorAll('input,textarea,select'); for (var i = 0; i < inputs.length; i++) { if (inputs[i].tagName === 'SELECT') inputs[i].selectedIndex = 0; else inputs[i].value = inputs[i].defaultValue; } refreshGroups(); var ra = $('result-area'); ra.hidden = true; ra.style.display = 'none'; var em = $('error-msg'); em.hidden = true; em.style.display = 'none'; }); })();