Analysis Regresi Data Panel

Engine R-WASM | Library R-PLM | JS Code by Anwar Hidayat – www.statistikian.com

Memasang Library R (plm, lmtest, jsonlite)… Ini mungkin memakan waktu.

Tahap 1: Persiapan Data

Tahap 3: Spesifikasi Model

Analysis dapat berjalan jika loading library selesai dan Anda sudah memetakan cross section, periode, dependent, dan independent variable.

Code Dikirimkan ke Engine R, Please Wait…

Proses analysis membutuhkan waktu 30 detik sd 3 menit, harap sabar dan jangan tutup halaman ini…

'; printWindow.document.write(printHTML); printWindow.document.close(); printWindow.focus(); setTimeout(function() { printWindow.print(); }, 800); });let bp = document.getElementById('btn-process'); if(bp) bp.addEventListener('click', async function() { try { clearErrors(); let sc = document.getElementById('sel-cross'); let csVar = ""; if(sc) csVar = sc.value; let sp = document.getElementById('sel-period'); let timeVar = ""; if(sp) timeVar = sp.value; let sd = document.getElementById('sel-dep'); let yVar = ""; if(sd) yVar = sd.value; let xBox = document.getElementById('list-indep-right'); let al = document.getElementById('alpha-level'); let alpha = "0.05"; if(al) alpha = al.value; let pe = document.getElementById('panel-effect'); let pEffect = "individual"; if(pe) pEffect = pe.value; let re = document.getElementById('rem-estimator'); let rMethod = "amemiya"; if(re) rMethod = re.value; let rs = document.getElementById('robust-se'); let robustSE = "none"; if(rs) robustSE = rs.value; let xVarsArray = []; let tmpArrR = []; if(xBox){ for (let i = 0; i < xBox.options.length; i++) { let val = xBox.options[i].value; xVarsArray.push(val); tmpArrR.push("'" + val + "'"); } } let xVarsString = xVarsArray.join(" + "); let rXvarsJoined = tmpArrR.join(",");let isOverlap = false; let ov1=false; if(csVar===timeVar){ov1=true;} if(ov1){isOverlap=true;} let ov2=false; if(csVar===yVar){ov2=true;} if(ov2){isOverlap=true;} let ov3=false; if(timeVar===yVar){ov3=true;} if(ov3){isOverlap=true;} for(let i=0; imaxPer){cm=true;} if (cm) { maxPer = pCount; } } let isCSValid = true; let cv1=false; if(numCS<3){cv1=true;} if (cv1) { isCSValid = false; } if (isCSValid === false) { throw new Error("Minimal Jumlah Cross Section adalah 3 Individu."); } let isPerValid = false; let pv1=false; if(maxPer>=2){pv1=true;} if (pv1) { isPerValid = true; } if (isPerValid === false) { throw new Error("Pastikan anda tepat dalam menentukan cross section dan period, dimana setiap cross section seharusnya ada beberapa periode."); }toggleUIState(true); let oc = document.getElementById('output-container'); if(oc) oc.style.display = 'none'; let progBox = document.getElementById('analysis-progress-box'); let progBar = document.getElementById('analysis-progress-bar'); if(progBox) progBox.style.display = "block"; let anProgress = 0; let anInterval = setInterval(function() { if (anProgress < 90) { anProgress += 1; if(progBar) progBar.style.width = anProgress + "%"; } }, 500); const csvString = extractTableToCSV(); await webR.FS.writeFile('/data_panel.csv', new TextEncoder().encode(csvString));let rCode = ""; rCode += "library(plm)\n"; rCode += "library(lmtest)\n"; rCode += "library(jsonlite)\n"; rCode += "df <- read.csv('/data_panel.csv', stringsAsFactors = FALSE)\n"; rCode += "df[, '" + csVar + "'] <- as.factor(df[, '" + csVar + "'])\n"; rCode += "df[, '" + timeVar + "'] <- as.factor(df[, '" + timeVar + "'])\n"; rCode += "form <- as.formula('" + yVar + " ~ " + xVarsString + "')\n"; rCode += "pdf <- tryCatch(pdata.frame(df, index=c('" + csVar + "', '" + timeVar + "')), error=function(e) NULL)\n"; rCode += "if (is.null(pdf)) {\n"; rCode += " res <- list(status='error', msg='Gagal mengonversi data ke format panel. Cek integritas data waktu dan individu.')\n"; rCode += " as.character(toJSON(res, auto_unbox=TRUE))\n"; rCode += "} else {\n"; rCode += " is_bal <- FALSE\n"; rCode += " bal_test <- tryCatch(is.pbalanced(pdf), error=function(e) NULL)\n"; rCode += " chk_bal <- FALSE; if (!is.null(bal_test)) { chk_bal <- TRUE }\n"; rCode += " if (chk_bal) { is_bal <- bal_test }\n"; rCode += " get_mod <- function(m, m_type='none') {\n"; rCode += " if (is.null(m)) return(NULL)\n"; rCode += " sm <- tryCatch(summary(m), error=function(e) NULL)\n"; rCode += " if(is.null(sm)) return(NULL)\n"; rCode += " cf <- tryCatch(sm$coefficients, error=function(e) NULL)\n"; rCode += " if(is.null(cf)) return(NULL)\n"; rCode += " w_int <- 0\n"; rCode += " if (m_type == 'within') {\n"; rCode += " tmp_int <- tryCatch(within_intercept(m), error=function(e) NULL)\n"; rCode += " if (!is.null(tmp_int)) { w_int <- as.numeric(tmp_int)[1] }\n"; rCode += " }\n"; rCode += " r2_val <- 0; adj_r2 <- 0\n"; rCode += " if (length(sm$r.squared) > 1) { \n"; rCode += " r2_val <- as.numeric(sm$r.squared[1])\n"; rCode += " adj_r2 <- as.numeric(sm$r.squared[2]) \n"; rCode += " } else {\n"; rCode += " r2_val <- as.numeric(sm$r.squared[1])\n"; rCode += " adj_r2 <- r2_val\n"; rCode += " }\n"; rCode += " fstat_val <- 0; fpval_val <- 1\n"; rCode += " chk_f <- FALSE; if (!is.null(sm$fstatistic)) { chk_f <- TRUE }\n"; rCode += " if (chk_f) {\n"; rCode += " fstat_val <- as.numeric(sm$fstatistic$statistic)\n"; rCode += " fpval_val <- as.numeric(sm$fstatistic$p.value)\n"; rCode += " } else {\n"; rCode += " chk_chi <- FALSE; if (!is.null(sm$chisq)) { chk_chi <- TRUE }\n"; rCode += " if (chk_chi) {\n"; rCode += " fstat_val <- as.numeric(sm$chisq$statistic)\n"; rCode += " fpval_val <- as.numeric(sm$chisq$p.value)\n"; rCode += " }\n"; rCode += " }\n"; rCode += " list(vars = rownames(cf), coef = unname(cf[,1]), se = unname(cf[,2]), t = unname(cf[,3]), p = unname(cf[,4]), r2 = r2_val, adj_r2 = adj_r2, fstat = fstat_val, fpval = fpval_val, w_int = w_int)\n"; rCode += " }\n"; rCode += " get_diag <- function(m) {\n"; rCode += " if (is.null(m)) return(NULL)\n"; rCode += " jb_stat <- 0; jb_p <- 1; out_count <- 0\n"; rCode += " bp_stat <- 0; bp_p <- 1; bg_stat <- 0; bg_p <- 1\n"; rCode += " hist_counts <- numeric(0); hist_mids <- numeric(0)\n"; rCode += " outlier_names <- character(0); outlier_vals <- numeric(0)\n"; rCode += " res_val <- residuals(m)\n"; rCode += " res_val <- res_val[!is.na(res_val)]\n"; rCode += " n_res <- length(res_val)\n"; rCode += " if (n_res > 0) {\n"; rCode += " m1 <- mean(res_val); m2 <- sum((res_val - m1)^2) / n_res\n"; rCode += " m3 <- sum((res_val - m1)^3) / n_res; m4 <- sum((res_val - m1)^4) / n_res\n"; rCode += " if (m2 > 0) {\n"; rCode += " skew <- m3 / (m2^(3/2)); kurt <- m4 / (m2^2)\n"; rCode += " jb_stat <- (n_res/6) * (skew^2 + ((kurt - 3)^2)/4)\n"; rCode += " jb_p <- pchisq(jb_stat, df=2, lower.tail=FALSE)\n"; rCode += " sd_res <- sd(res_val)\n"; rCode += " if (sd_res > 0) {\n"; rCode += " std_res <- res_val / sd_res\n"; rCode += " h <- hist(std_res, plot=FALSE, breaks=15)\n"; rCode += " hist_counts <- as.numeric(h$counts); hist_mids <- as.numeric(h$mids)\n"; rCode += " out_idx <- which(abs(std_res) > 3); out_count <- length(out_idx)\n"; rCode += " if (out_count > 0) {\n"; rCode += " outlier_names <- names(std_res)[out_idx]; outlier_vals <- as.numeric(std_res[out_idx])\n"; rCode += " }\n"; rCode += " }\n"; rCode += " }\n"; rCode += " }\n"; rCode += " bp <- tryCatch(bptest(m), error=function(e) NULL)\n"; rCode += " chk_bp <- FALSE; if (!is.null(bp)) { chk_bp <- TRUE }\n"; rCode += " if (chk_bp) { bp_stat <- as.numeric(bp$statistic); bp_p <- as.numeric(bp$p.value) }\n"; rCode += " bg <- tryCatch(pbgtest(m), error=function(e) NULL)\n"; rCode += " chk_bg <- FALSE; if (!is.null(bg)) { chk_bg <- TRUE }\n"; rCode += " if (chk_bg) { bg_stat <- as.numeric(bg$statistic); bg_p <- as.numeric(bg$p.value) }\n"; rCode += " list(jb = list(stat=jb_stat, pval=jb_p, h_counts=hist_counts, h_mids=hist_mids), outlier = list(count=out_count, names=outlier_names, vals=outlier_vals), bp = list(stat=bp_stat, pval=bp_p), bg = list(stat=bg_stat, pval=bg_p))\n"; rCode += " }\n"; rCode += " cem <- tryCatch(plm(form, data=pdf, model='pooling'), error=function(e) NULL)\n"; rCode += " fem <- tryCatch(plm(form, data=pdf, model='within', effect='" + pEffect + "'), error=function(e) NULL)\n"; rCode += " rem <- tryCatch(plm(form, data=pdf, model='random', effect='" + pEffect + "', random.method='" + rMethod + "'), error=function(e) NULL)\n"; rCode += " chow <- NULL; hausman <- NULL; lm_test <- NULL\n"; rCode += " chk_fc <- FALSE; if (!is.null(fem)) { if (!is.null(cem)) { chk_fc <- TRUE } }\n"; rCode += " if (chk_fc) { chow <- tryCatch(pFtest(fem, cem), error=function(e) NULL) }\n"; rCode += " chk_hr <- FALSE; if (!is.null(fem)) { if (!is.null(rem)) { chk_hr <- TRUE } }\n"; rCode += " if (chk_hr) { hausman <- tryCatch(phtest(fem, rem), error=function(e) NULL) }\n"; rCode += " chk_lm <- FALSE; if (!is.null(cem)) { chk_lm <- TRUE }\n"; rCode += " if (chk_lm) { lm_test <- tryCatch(plmtest(cem, effect='" + pEffect + "', type='bp'), error=function(e) NULL) }\n"; rCode += " chow_res <- list(stat=0, pval=1); hausman_res <- list(stat=0, pval=1); lm_res <- list(stat=0, pval=1)\n"; rCode += " chk_chow <- FALSE; if (!is.null(chow)) { chk_chow <- TRUE }\n"; rCode += " if (chk_chow) { chow_res <- list(stat=as.numeric(chow$statistic), pval=as.numeric(chow$p.value)) }\n"; rCode += " chk_haus <- FALSE; if (!is.null(hausman)) { chk_haus <- TRUE }\n"; rCode += " if (chk_haus) { hausman_res <- list(stat=as.numeric(hausman$statistic), pval=as.numeric(hausman$p.value)) }\n"; rCode += " chk_lm2 <- FALSE; if (!is.null(lm_test)) { chk_lm2 <- TRUE }\n"; rCode += " if (chk_lm2) { lm_res <- list(stat=as.numeric(lm_test$statistic), pval=as.numeric(lm_test$p.value)) }\n"; rCode += " alpha_val <- as.numeric('" + alpha + "')\n"; rCode += " chow_h1 <- FALSE; haus_h1 <- FALSE; lm_h1 <- FALSE\n"; rCode += " chk_cval <- FALSE; if (!is.null(chow)) { if (chow_res$pval < alpha_val) { chk_cval <- TRUE } }\n"; rCode += " if (chk_cval) { chow_h1 <- TRUE }\n"; rCode += " chk_hval <- FALSE; if (!is.null(hausman)) { if (hausman_res$pval < alpha_val) { chk_hval <- TRUE } }\n"; rCode += " if (chk_hval) { haus_h1 <- TRUE }\n"; rCode += " chk_lval <- FALSE; if (!is.null(lm_test)) { if (lm_res$pval < alpha_val) { chk_lval <- TRUE } }\n"; rCode += " if (chk_lval) { lm_h1 <- TRUE }\n"; rCode += " winner <- 'cem'; haus_abaikan <- FALSE; lm_abaikan <- FALSE\n"; rCode += " if (chow_h1) {\n"; rCode += " if (haus_h1) { winner <- 'fem'; lm_abaikan <- TRUE\n"; rCode += " } else { if (lm_h1) { winner <- 'rem' } else { winner <- 'cem' } }\n"; rCode += " } else {\n"; rCode += " haus_abaikan <- TRUE; if (lm_h1) { winner <- 'rem' } else { winner <- 'cem' }\n"; rCode += " }\n"; rCode += " eff_fem <- list(type='none'); eff_rem <- list(type='none')\n"; rCode += " chk_fef <- FALSE; if (!is.null(fem)) { chk_fef <- TRUE }\n"; rCode += " if (chk_fef) {\n"; rCode += " f_ind_n <- c(); f_ind_v <- c(); f_time_n <- c(); f_time_v <- c()\n"; rCode += " chk_ind <- FALSE; chk_time <- FALSE\n"; rCode += " if ('" + pEffect + "' == 'individual') { chk_ind <- TRUE }\n"; rCode += " if ('" + pEffect + "' == 'time') { chk_time <- TRUE }\n"; rCode += " if ('" + pEffect + "' == 'twoways') { chk_ind <- TRUE; chk_time <- TRUE }\n"; rCode += " if (chk_ind) { tmp <- tryCatch(fixef(fem, effect='individual'), error=function(e) NULL); chk_ti <- FALSE; if (!is.null(tmp)) { chk_ti <- TRUE }; if(chk_ti){ f_ind_n <- names(tmp); f_ind_v <- as.numeric(tmp) } }\n"; rCode += " if (chk_time) { tmp <- tryCatch(fixef(fem, effect='time'), error=function(e) NULL); chk_tt <- FALSE; if (!is.null(tmp)) { chk_tt <- TRUE }; if(chk_tt){ f_time_n <- names(tmp); f_time_v <- as.numeric(tmp) } }\n"; rCode += " eff_fem <- list(type='fem', ind_n=f_ind_n, ind_v=f_ind_v, time_n=f_time_n, time_v=f_time_v)\n"; rCode += " }\n"; rCode += " chk_ref <- FALSE; if (!is.null(rem)) { chk_ref <- TRUE }\n"; rCode += " if (chk_ref) {\n"; rCode += " erc <- tryCatch(summary(rem)$ercomp, error=function(e) NULL)\n"; rCode += " chk_erc <- FALSE; if (!is.null(erc)) { chk_erc <- TRUE }\n"; rCode += " if (chk_erc) { eff_rem <- list(type='rem', comp_n=names(erc$sigma2), comp_v=as.numeric(erc$sigma2)) }\n"; rCode += " }\n"; rCode += " max_cor <- 0; cor_mat_df <- list()\n"; rCode += " xvars_list <- c(" + rXvarsJoined + ")\n"; rCode += " chk_xl <- FALSE; if (length(xvars_list) > 1) { chk_xl <- TRUE }\n"; rCode += " if (chk_xl) {\n"; rCode += " x_df <- df[, xvars_list, drop=FALSE]; x_num <- as.matrix(sapply(x_df, as.numeric))\n"; rCode += " cmat <- tryCatch(cor(x_num, use='pairwise.complete.obs'), error=function(e) NULL)\n"; rCode += " chk_cmat <- FALSE; if (!is.null(cmat)) { chk_cmat <- TRUE }\n"; rCode += " if (chk_cmat) { cmat_disp <- cmat; diag(cmat) <- 0; max_cor <- max(abs(cmat), na.rm=TRUE); cor_mat_df <- as.list(as.data.frame(cmat_disp)) }\n"; rCode += " }\n"; rCode += " res <- list(status = 'success', is_bal = is_bal, cem = get_mod(cem, 'pooling'), fem = get_mod(fem, 'within'), rem = get_mod(rem, 'random'), diag_cem = get_diag(cem), diag_fem = get_diag(fem), diag_rem = get_diag(rem), chow = chow_res, hausman = hausman_res, lm_test = lm_res, winner = winner, haus_abaikan = haus_abaikan, lm_abaikan = lm_abaikan, eff_fem = eff_fem, eff_rem = eff_rem, diag_vif = list(max=max_cor, mat=cor_mat_df, xnames=xvars_list))\n"; rCode += " as.character(toJSON(res, auto_unbox=TRUE, null='null'))\n"; rCode += "}\n";const resultProxy = await webR.evalR(rCode); const resultJs = await resultProxy.toJs(); let jsonStr = ""; let chk_rj = false; if (resultJs) { let rjv1 = false; if(resultJs.values){rjv1=true;} if(rjv1) { let rjv2 = false; if(resultJs.values.length > 0){rjv2=true;} if(rjv2){ chk_rj = true; } } } if (chk_rj) { jsonStr = resultJs.values[0]; } const dataObj = JSON.parse(jsonStr);let isSuccess = false; let chk_st = false; if (dataObj.status) { let cst = false; if(dataObj.status === "success"){cst=true;} if(cst){ chk_st = true; } } if (chk_st) { isSuccess = true; } if (!isSuccess) { let errorMsg = "Komputasi R Gagal."; let chk_m = false; if (dataObj.msg) { chk_m = true; } if(chk_m){ errorMsg = dataObj.msg; } throw new Error(errorMsg); }clearInterval(anInterval); if(progBar) progBar.style.width = "100%"; await new Promise(function(resolve) { setTimeout(resolve, 800); });globalResData = dataObj; globalAlphaStr = alpha; globalYVarName = yVar; globalXVarsString = xVarsString; globalPEffect = pEffect; globalRMethod = rMethod; globalRobustSE = robustSE; userChoice = dataObj.winner; if(progBox) progBox.style.display = "none"; renderTopOutput(); renderBottomOutput(userChoice); if(oc) oc.style.display = "block"; toggleUIState(false); if(oc) oc.scrollIntoView({ behavior: "smooth" }); } catch (e) { let pb = document.getElementById('analysis-progress-box'); if(pb) pb.style.display = "none"; toggleUIState(false); showAnalysisError(e.message); } });function buildModelTable(title, modelData, alphaStr, pEffect, rMethod, robustSE) { let html = '

' + title + '

'; let mType = "Pooled (Kombinasi Total)"; let chk_t1 = false; if (title.indexOf("Fixed") > -1) { chk_t1 = true; } if (chk_t1) { mType = pEffect.toUpperCase() + " Effect"; } let chk_t2 = false; if (title.indexOf("Random") > -1) { chk_t2 = true; } if (chk_t2) { mType = pEffect.toUpperCase() + " Effect"; } html += '
'; html += '⚙️ Metode Panel: ' + mType + '
'; if (chk_t2) { html += '🛠️ Estimator REM: ' + rMethod.toUpperCase() + '
'; } html += '🛡️ Robust SE: ' + robustSE.toUpperCase(); let w_int = 0; let showInt = false; let chk_wd = false; if (modelData) { let wd=false; if(modelData.w_int !== undefined){wd=true;} if(wd) { let wz=false; if(modelData.w_int !== 0){wz=true;} if(wz){chk_wd = true;} } } if (chk_wd) { w_int = modelData.w_int; showInt = true; } if (chk_t1) { if (showInt) { html += '
Rata-rata Intersep (EViews Equivalent): ' + formatNum(w_int, 5); } } html += '
';let chk_md = true; if (modelData) { let mv=false; if(modelData.vars){mv=true;} if(mv){ chk_md = false; } } if (chk_md) { let errorTxt = "Estimasi model gagal dikomputasi (Matriks Singular / N Terlalu Kecil)."; if (chk_t2) { errorTxt = "Estimasi Random Effect gagal karena asumsi matematis tidak terpenuhi (Varians negatif / Panel tidak seimbang). Solusi: Ganti Estimator ke 'Amemiya' atau 'Wallace-Hussain'."; } html += '
' + errorTxt + '
'; return html; } let alpha = parseFloat(alphaStr); html += '
'; let vars = modelData.vars; let coefs = modelData.coef; let ses = modelData.se; let ts = modelData.t; let ps = modelData.p; let isArr = false; if (Array.isArray(vars)) { isArr = true; } if (!isArr) { vars = [vars]; coefs = [coefs]; ses = [ses]; ts = [ts]; ps = [ps]; }for(let i=0; i < vars.length; i++) { let pval = ps[i]; let cVal = coefs[i]; let sVal = ses[i]; let tVal = ts[i]; let kesimpulan = 'NA'; let isValidP = false; if (typeof pval === 'number') { let isNP = isNaN(pval); if (isNP === false) { isValidP = true; } } if (isValidP) { kesimpulan = 'Tidak Signifikan'; let pv1=false; if(pval < alpha){pv1=true;} if (pv1) { kesimpulan = 'Signifikan'; } } html += ''; } html += '
VariabelKoefisienStd. Errort-StatP-ValueKesimpulan
' + vars[i] + '' + formatNum(cVal, 5) + '' + formatNum(sVal, 5) + '' + formatNum(tVal, 4) + '' + formatNum(pval, 4) + '' + kesimpulan + '
';let r2_val = 0; let fstat_val = 0; let fpval_val = 1; let c_r2 = false; if(modelData.r2 !== undefined){c_r2=true;} if (c_r2) { let ar1=false; if(!Array.isArray(modelData.r2)){ar1=true;} if(ar1){r2_val=modelData.r2;} else { let al1=false; if(modelData.r2.length>0){al1=true;} if(al1){r2_val=modelData.r2[0];} } } let c_fs = false; if(modelData.fstat !== undefined){c_fs=true;} if (c_fs) { let ar2=false; if(!Array.isArray(modelData.fstat)){ar2=true;} if(ar2){fstat_val=modelData.fstat;} else { let al2=false; if(modelData.fstat.length>0){al2=true;} if(al2){fstat_val=modelData.fstat[0];} } } let c_fp = false; if(modelData.fpval !== undefined){c_fp=true;} if (c_fp) { let ar3=false; if(!Array.isArray(modelData.fpval)){ar3=true;} if(ar3){fpval_val=modelData.fpval;} else { let al3=false; if(modelData.fpval.length>0){al3=true;} if(al3){fpval_val=modelData.fpval[0];} } }html += '
📊 R-Squared: ' + formatNum(r2_val, 4) + '  |  F-Stat/Chi-Sq: ' + formatNum(fstat_val, 4) + ' (P-Val: ' + formatNum(fpval_val, 4) + ')
';let kesimpulanTxt = ""; let teoriTxt = ""; let chk_c = false; if (title.indexOf("Common") > -1) { chk_c = true; } if (chk_c) { kesimpulanTxt = "Variabel dengan P-Value < " + alphaStr + " memengaruhi Y secara signifikan. CEM mengasumsikan intersep konstan (OLS biasa)."; teoriTxt = "(Gujarati, 2004)"; } else if (chk_t1) { kesimpulanTxt = "Dalam kontrol efek tetap, variabel dengan P-Value < " + alphaStr + " dinyatakan signifikan. FEM mengasumsikan perbedaan karakteristik antar entitas."; teoriTxt = "(Baltagi, 2005)"; } else if (chk_t2) { kesimpulanTxt = "Pada estimasi GLS, variabel prediktor dengan P-Value < " + alphaStr + " dinyatakan signifikan. REM berasumsi variasi bersifat acak."; teoriTxt = "(Wooldridge, 2010)"; }html += '
📌 Penjelasan: ' + kesimpulanTxt + '
'; html += '
📚 Referensi Pakar: ' + teoriTxt + '
'; html += '
'; return html; }function renderTopOutput() { let outDiv = document.getElementById('static-output-area'); if(!outDiv) return; let alphaStr = globalAlphaStr; let alpha = parseFloat(alphaStr); let data = globalResData; let html = "";let balTxt = "Unbalanced"; let ib=false; if(data.is_bal){ib=true;} if(ib) { balTxt = "Balanced"; } let omt = document.getElementById('out-main-title'); if(omt) omt.innerHTML = "HASIL ANALISIS REGRESI DATA PANEL
("+balTxt+" Panel)"; html += buildModelTable("1. Output Common Effect Model (CEM)", data.cem, alphaStr, globalPEffect, globalRMethod, globalRobustSE); html += buildModelTable("2. Output Fixed Effect Model (FEM)", data.fem, alphaStr, globalPEffect, globalRMethod, globalRobustSE); html += buildModelTable("3. Output Random Effect Model (REM)", data.rem, alphaStr, globalPEffect, globalRMethod, globalRobustSE);html += '

Uji Spesifikasi Pemilihan Model

'; html += '
'; let chowP = 1; let chowStat = 0; let hc1=false; if(data.chow){hc1=true;} if(hc1) { let hc2=false; if(data.chow.pval !== undefined){hc2=true;} if(hc2){ chowP = data.chow.pval; } let hc3=false; if(data.chow.stat !== undefined){hc3=true;} if(hc3){ chowStat = data.chow.stat; } } let chowWin = 'Common Effect (CEM)'; let cP=false; if(chowP < alpha){cP=true;} if (cP) { chowWin = 'Fixed Effect (FEM)'; } html += ''; let hausP = 1; let hausStat = 0; let hh1=false; if(data.hausman){hh1=true;} if(hh1) { let hh2=false; if(data.hausman.pval !== undefined){hh2=true;} if(hh2){ hausP = data.hausman.pval; } let hh3=false; if(data.hausman.stat !== undefined){hh3=true;} if(hh3){ hausStat = data.hausman.stat; } } let hausWin = 'Random Effect (REM)'; let hP=false; if(hausP < alpha){hP=true;} if (hP) { hausWin = 'Fixed Effect (FEM)'; } let ha1=false; if(data.haus_abaikan){ha1=true;} if (ha1) { hausWin = 'Diabaikan (Lanjut ke LM Test)'; } html += ''; let lmP = 1; let lmStat = 0; let hl1=false; if(data.lm_test){hl1=true;} if(hl1) { let hl2=false; if(data.lm_test.pval !== undefined){hl2=true;} if(hl2){ lmP = data.lm_test.pval; } let hl3=false; if(data.lm_test.stat !== undefined){hl3=true;} if(hl3){ lmStat = data.lm_test.stat; } } let lmWin = 'Common Effect (CEM)'; let lP=false; if(lmP < alpha){lP=true;} if (lP) { lmWin = 'Random Effect (REM)'; } let la1=false; if(data.lm_abaikan){la1=true;} if (la1) { lmWin = 'Diabaikan (FEM Telah Terpilih)'; } html += ''; html += '
Nama UjiStatistik UjiP-ValueHipotesis Diterima (α=' + alphaStr + ')
Uji Chow (F-Test)' + formatNum(chowStat, 4) + '' + formatNum(chowP, 4) + '' + chowWin + '
Uji Hausman (Chi-Square)' + formatNum(hausStat, 4) + '' + formatNum(hausP, 4) + '' + hausWin + '
Uji LM (Breusch-Pagan)' + formatNum(lmStat, 4) + '' + formatNum(lmP, 4) + '' + lmWin + '
';let chowExp = "Pada Uji Chow, probabilitas " + formatNum(chowP,4) + " mengindikasikan H0 " + (cP ? "ditolak" : "diterima") + ", merekomendasikan " + chowWin + " (Chow, 1960). "; let hausExp = "Uji Hausman menghasilkan p-value " + formatNum(hausP,4) + ", menegaskan bahwa " + (ha1 ? "uji ini diabaikan" : hausWin + " yang terpilih") + " (Hausman, 1978). "; let lmExp = "Terakhir, Uji LM menunjukkan probabilitas " + formatNum(lmP,4) + ", mendukung " + (la1 ? "pengabaian uji ini" : lmWin) + " (Breusch & Pagan, 1980)."; html += '
📌 Penjelasan: ' + chowExp + hausExp + lmExp + '
';let fmName = "Common Effect Model (CEM)"; let fn1=false; if(data.winner==="fem"){fn1=true;} if (fn1) { fmName = "Fixed Effect Model (FEM)"; } let fn2=false; if(data.winner==="rem"){fn2=true;} if (fn2) { fmName = "Random Effect Model (REM)"; } html += '
🏆 Berdasarkan Uji Spesifikasi Model, Rekomendasi Statistik adalah: ' + fmName + '
'; outDiv.innerHTML = html; }function updateButtons(choice) { let b1 = document.getElementById('btn-select-cem'); if(b1) b1.classList.remove('active'); let b2 = document.getElementById('btn-select-fem'); if(b2) b2.classList.remove('active'); let b3 = document.getElementById('btn-select-rem'); if(b3) b3.classList.remove('active'); let b4 = document.getElementById('btn-select-' + choice); if(b4) b4.classList.add('active'); }let isbx = document.getElementById('interactive-selection-box'); if(isbx) { isbx.addEventListener('click', function(e) { let cl=false; if(e.target.classList.contains('btn-model-choice')){cl=true;} if(cl){ userChoice = e.target.getAttribute('data-model'); renderBottomOutput(userChoice); } }); }function renderBottomOutput(choice) { updateButtons(choice); let outDiv = document.getElementById('dynamic-bottom-area'); if(!outDiv) return; let alphaStr = globalAlphaStr; let alpha = parseFloat(alphaStr); let data = globalResData; let html = "";let isMatch = false; let m1=false; if(choice === data.winner){m1=true;} if (m1) { isMatch = true; } let subTitleTxt = "(Pilihan Peneliti Diluar Rekomendasi Spesifikasi Model)"; if (isMatch) { subTitleTxt = "(Pilihan Peneliti Sesuai Rekomendasi Spesifikasi Model)"; } let fmName = "Common Effect Model (CEM)"; let fm1=false; if(choice==="fem"){fm1=true;} if (fm1) { fmName = "Fixed Effect Model (FEM)"; } let fm2=false; if(choice==="rem"){fm2=true;} if (fm2) { fmName = "Random Effect Model (REM)"; }html += '

HASIL ANALISIS MODEL TERPILIH
' + subTitleTxt + '

'; html += '
FLOWCHART KEPUTUSAN MODEL EKONOMETRIKA
'; html += '
'; html += '[ UJI CHOW ]
'; html += 'H0 (P > α) → CEM                 H1 (P < α) → FEM
'; html += '↓                                ↓
'; html += '[ UJI LM ]                        [ UJI HAUSMAN ]
'; html += 'H0 → CEM  |  H1 → REM        H0 → REM  |  H1 → FEM
'; html += '                                   ↓
'; html += '                                [ UJI LM ]
'; html += '                           H0 → CEM  |  H1 → REM
'; html += '
';let winObj = data.cem; let wo1=false; if(choice==="fem"){wo1=true;} if (wo1) { winObj = data.fem; } let wo2=false; if(choice==="rem"){wo2=true;} if (wo2) { winObj = data.rem; } let wo_vars = null; let hw1=false; if(winObj){hw1=true;} if(hw1) { let hw2=false; if(winObj.vars){hw2=true;} if(hw2) { wo_vars = winObj.vars; } } let sigVars = []; let insigVars = [];html += '

Tabel Koefisien Model Akhir ('+fmName+')

'; let cw3=true; if(wo_vars){cw3=false;} if (cw3) { html += '
Model pilihan Anda gagal dikomputasi secara matematis. Silakan pilih model lain.
'; outDiv.innerHTML = html; return; } html += '
'; let vars = winObj.vars; let coefs = winObj.coef; let ses = winObj.se; let ts = winObj.t; let ps = winObj.p; let isArr = false; if (Array.isArray(vars)) { isArr = true; } if (!isArr) { vars = [vars]; coefs = [coefs]; ses = [ses]; ts = [ts]; ps = [ps]; }for(let i=0; i < vars.length; i++) { let pval = ps[i]; let cVal = coefs[i]; let sVal = ses[i]; let tVal = ts[i]; let kesimpulan = 'NA'; let isValidP = false; if (typeof pval === 'number') { let isNP = isNaN(pval); if (isNP === false) { isValidP = true; } } if (isValidP) { kesimpulan = 'Tidak Signifikan'; let p1=false; if(pval < alpha){p1=true;} let v1=false; if(vars[i]!=="(Intercept)"){v1=true;} if (p1) { kesimpulan = 'Signifikan'; if(v1){ sigVars.push(vars[i]); } } else { if(v1){ insigVars.push(vars[i]); } } } html += ''; } html += '
VariabelKoefisienStd. Errort-StatP-ValueKesimpulan
' + vars[i] + '' + formatNum(cVal, 5) + '' + formatNum(sVal, 5) + '' + formatNum(tVal, 4) + '' + formatNum(pval, 4) + '' + kesimpulan + '
'; let r2_val = 0; let adj_r2 = 0; let fstat_val = 0; let fpval_val = 1; let cr2=false; if(winObj.r2!==undefined){cr2=true;} if(cr2){ let a1=false; if(!Array.isArray(winObj.r2)){a1=true;} if(a1){r2_val=winObj.r2;} else{ let l1=false; if(winObj.r2.length>0){l1=true;} if(l1){r2_val=winObj.r2[0];} } } let cj2=false; if(winObj.adj_r2!==undefined){cj2=true;} if(cj2){ let a2=false; if(!Array.isArray(winObj.adj_r2)){a2=true;} if(a2){adj_r2=winObj.adj_r2;} else{ let l2=false; if(winObj.adj_r2.length>0){l2=true;} if(l2){adj_r2=winObj.adj_r2[0];} } } let cf2=false; if(winObj.fstat!==undefined){cf2=true;} if(cf2){ let a3=false; if(!Array.isArray(winObj.fstat)){a3=true;} if(a3){fstat_val=winObj.fstat;} else{ let l3=false; if(winObj.fstat.length>0){l3=true;} if(l3){fstat_val=winObj.fstat[0];} } } let cp2=false; if(winObj.fpval!==undefined){cp2=true;} if(cp2){ let a4=false; if(!Array.isArray(winObj.fpval)){a4=true;} if(a4){fpval_val=winObj.fpval;} else{ let l4=false; if(winObj.fpval.length>0){l4=true;} if(l4){fpval_val=winObj.fpval[0];} } } let rVal = Math.sqrt(r2_val); let isNanR = isNaN(rVal); if(isNanR) { rVal = 0; }let kF = "TIDAK SIGNIFIKAN"; let kF1=false; if(fpval_val < alpha){kF1=true;} if (kF1) { kF = "SIGNIFIKAN (Model Layak)"; } let kR = "Model ini mampu menjelaskan " + formatNum(r2_val * 100, 2) + "% variasi variabel Y."; html += '

Tabel Kebaikan Model (Goodness of Fit)

'; html += '
'; html += ''; html += '
Korelasi (R)R-SquareAdj. R-SquareF-StatistikP-Val FKesimpulan F
'+formatNum(rVal, 4)+''+formatNum(r2_val, 4)+''+formatNum(adj_r2, 4)+''+formatNum(fstat_val, 4)+''+formatNum(fpval_val, 4)+''+kF+'
'; let fitExp = "Pengujian simultan mencatat P-Value " + formatNum(fpval_val,4) + ". Nilai ini " + (kF1 ? "<" : ">") + " alpha, menyimpulkan model " + (kF1 ? "fit secara statistik" : "gagal mendemonstrasikan kapabilitas andal") + ". R-Squared sebesar " + formatNum(r2_val, 4) + " menegaskan " + formatNum(r2_val * 100, 2) + "% varians dependen terjelaskan oleh independen."; html += '
📌 Penjelasan: ' + fitExp + '
';html += '

Persamaan Matematis Model Terpilih

'; let xArrayDisplay = globalXVarsString.split(" + "); let equationStr = globalYVarName + "it = "; let intVal = 0; let hasInt = false; for(let i=0; iit"; } } let ec1=false; if(choice==="fem"){ec1=true;} if(ec1){ let e1=false; if(globalPEffect==="individual"){e1=true;} let e2=false; if(globalPEffect==="time"){e2=true;} if(e1){ equationStr+=" + αi"; } else if(e2){ equationStr+=" + λt"; } else { equationStr+=" + αi + λt"; } } else { let ec2=false; if(choice==="rem"){ec2=true;} if(ec2){ let e3=false; if(globalPEffect==="individual"){e3=true;} let e4=false; if(globalPEffect==="time"){e4=true;} if(e3){ equationStr+=" + ui + εit"; } else if(e4){ equationStr+=" + wt + εit"; } else { equationStr+=" + ui + wt + εit"; } } else { equationStr += " + εit"; } } html += '

' + equationStr + '

'; html += '
Keterangan Simbol:
    '; html += '
  • Yit : Nilai Variabel Dependen individu ke-i pada waktu ke-t.
  • '; html += '
  • Xit : Nilai Variabel Independen individu ke-i pada waktu ke-t.
  • '; let ck1=false; if(choice==="cem"){ck1=true;} let ck2=false; if(choice==="rem"){ck2=true;} if(ck1){ck2=true;} if (ck2) { html += '
  • Konstanta ('+formatNum(intVal, 4)+') : Titik potong (intersep) rata-rata global saat nilai X bernilai nol.
  • '; } html += '
  • Koefisien Aktual : Tingkat sensitivitas regresi, tanda (+) searah dan (-) terbalik.
  • '; let cfm=false; if(choice==="fem"){cfm=true;} if (cfm) { let c2=false; if(globalPEffect==="individual"){c2=true;} let c3=false; if(globalPEffect==="twoways"){c3=true;} if(c2){c3=true;} if (c3) { html += '
  • αi : Efek Spesifik Individu (heterogenitas bawaan tiap entitas).
  • '; } let c4=false; if(globalPEffect==="time"){c4=true;} let c5=false; if(globalPEffect==="twoways"){c5=true;} if(c4){c5=true;} if (c5) { html += '
  • λt : Efek Spesifik Waktu (syok spesifik tahun tertentu).
  • '; } } let crm=false; if(choice==="rem"){crm=true;} if (crm) { let c6=false; if(globalPEffect==="individual"){c6=true;} let c7=false; if(globalPEffect==="twoways"){c7=true;} if(c6){c7=true;} if (c7) { html += '
  • ui : Komponen Error Acak Individu.
  • '; } let c8=false; if(globalPEffect==="time"){c8=true;} let c9=false; if(globalPEffect==="twoways"){c9=true;} if(c8){c9=true;} if (c9) { html += '
  • wt : Komponen Error Acak Waktu.
  • '; } } html += '
  • εit : Idiosyncratic Error Term (fluktuasi residual murni).
  • '; html += '
'; html += '
📌 Penjelasan: Persamaan di atas memanifestasikan algoritma kausalitas aktual. Intersep menetapkan landasan teoritis, sementara koefisien mendikte elastisitas pergerakan.
';let effInfo = null; let ef1=false; if(choice==="fem"){ef1=true;} if (ef1) { effInfo = data.eff_fem; } let ef2=false; if(choice==="rem"){ef2=true;} if (ef2) { effInfo = data.eff_rem; } let hw2=false; if(effInfo){hw2=true;} if (hw2) { let hw3=false; if(effInfo.type!=="none"){hw3=true;} if (hw3) { let et1=false; if(effInfo.type==="fem"){et1=true;} if (et1) { html += '

Nilai Efek Tetap Spesifik (Fixed Effect Component)

'; let eIndN = effInfo.ind_n; let eIndV = effInfo.ind_v; let hasInd = false; let hz1=false; if(eIndN){hz1=true;} if(hz1){ let hz2=false; if(eIndN.length>0){hz2=true;} if(hz2){hasInd=true;} } if (hasInd) { let ia1=false; if(!Array.isArray(eIndN)){ia1=true;} if (ia1) { eIndN = [eIndN]; eIndV = [eIndV]; } html += '
Individu (Cross-Section)
'; for(let cx = 0; cx < eIndN.length; cx++){ html += ''; } html += '
ID IndividuNilai Efek (αi)
'+eIndN[cx]+''+formatNum(eIndV[cx], 5)+'
'; } let eTmN = effInfo.time_n; let eTmV = effInfo.time_v; let hasTm = false; let hy1=false; if(eTmN){hy1=true;} if(hy1){ let hy2=false; if(eTmN.length>0){hy2=true;} if(hy2){hasTm=true;} } if (hasTm) { let ia2=false; if(!Array.isArray(eTmN)){ia2=true;} if (ia2) { eTmN = [eTmN]; eTmV = [eTmV]; } html += '
Waktu (Period)
'; for(let cx = 0; cx < eTmN.length; cx++){ html += ''; } html += '
ID WaktuNilai Efek (λt)
'+eTmN[cx]+''+formatNum(eTmV[cx], 5)+'
'; } html += '
📌 Penjelasan: Nilai efek yang bervariasi menunjukkan bahwa FEM berhasil menangkap karakteristik bawaan (*fixed unobserved heterogeneity*) tiap observasi tanpa bias pada slope utama.
'; } else { let et2=false; if(effInfo.type==="rem"){et2=true;} if (et2) { html += '

Komponen Varians Random Effect

'; let cNames = effInfo.comp_n; let cVals = effInfo.comp_v; let hasComp = false; let hx1=false; if(cNames){hx1=true;} if(hx1){ let hx2=false; if(cNames.length>0){hx2=true;} if(hx2){hasComp=true;} } if (hasComp) { let ia3=false; if(!Array.isArray(cNames)){ia3=true;} if (ia3) { cNames = [cNames]; cVals = [cVals]; } html += '
'; for(let cx = 0; cx < cNames.length; cx++){ let nTrans = cNames[cx]; let nt1=false; if(nTrans==="id"){nt1=true;} if (nt1) { nTrans = "Individu (id)"; } let nt2=false; if(nTrans==="time"){nt2=true;} if (nt2) { nTrans = "Waktu (time)"; } let nt3=false; if(nTrans==="idios"){nt3=true;} if (nt3) { nTrans = "Sisa Galat (idios)"; } html += ''; } html += '
Komponen ErrorNilai Varians
'+nTrans+''+formatNum(cVals[cx], 5)+'
'; html += '
📌 Penjelasan: Nilai varians komponen membuktikan pemisahan murni antara sisa galat *idiosyncratic* dan heterogenitas acak. Estimator GLS melakukan pembobotan berdasarkan proporsi ini.
'; } html += '
'; } } } }html += '

HASIL UJI DIAGNOSTIK ASUMSI KLASIK ('+ fmName +')

'; let diagObj = data.diag_cem; let dc1=false; if(choice==="fem"){dc1=true;} if (dc1) { diagObj = data.diag_fem; } let dc2=false; if(choice==="rem"){dc2=true;} if (dc2) { diagObj = data.diag_rem; }let vJb=false; if(diagObj){ let dj1=false; if(diagObj.jb){dj1=true;} if(dj1){ let dj2=false; if(diagObj.jb.pval!==undefined){dj2=true;} if(dj2){ let dj3=false; if(diagObj.jb.pval!==null){dj3=true;} if(dj3){vJb=true;} } } } if (vJb) { let jbP = diagObj.jb.pval; let jbStat = diagObj.jb.stat; let jbCon = "Residual Berdistribusi Normal"; let jb1=false; if(jbP0){dh2=true;} if(dh2) { let maxCount = Math.max.apply(null, hCounts); html += '
Histogram Standardized Residuals
'; html += '
'; for (let b = 0; b < hCounts.length; b++) { let pHeight = 0; let pm1=false; if(maxCount>0){pm1=true;} if (pm1) { pHeight = (hCounts[b] / maxCount) * 100; } html += '
'+formatNum(hMids[b], 1)+'
'; } html += '
'; }} html += '
'; html += '
Statistik UjiP-ValueKesimpulan (α='+alphaStr+')
'+formatNum(jbStat, 4)+''+formatNum(jbP, 4)+''+jbCon+'
'; html += '
📌 Penjelasan: P-Value sebesar ' + formatNum(jbP,4) + ' menjustifikasi bahwa residual ' + (jb1 ? "melanggar prinsip normalitas Gausian" : "patuh pada distribusi Gausian normal yang ideal") + ' (Jarque & Bera, 1980).
'; let outCount = diagObj.outlier.count; let outCon = "Tidak Ada Outlier Ekstrem"; let do1=false; if(outCount>0){do1=true;} if (do1) { outCon = "Terdapat " + outCount + " Outlier Ekstrem"; } html += '

2. Deteksi Outlier (Standardized Residual)

'; if (do1) { let oNames = diagObj.outlier.names; let oVals = diagObj.outlier.vals; let oa1=false; if(!Array.isArray(oNames)){oa1=true;} if (oa1) { oNames = [oNames]; oVals = [oVals]; } html += '
'; for(let ox = 0; ox < oNames.length; ox++){ html += ''; } html += '
Observasi (ID-Waktu)Nilai Z-Score
'+oNames[ox]+''+formatNum(oVals[ox], 4)+'
'; } html += '
'; html += '
Jumlah Data Outlier (|Z| > 3)Kesimpulan
'+outCount+''+outCon+'
'; html += '
📌 Penjelasan: ' + (do1 ? "Keberadaan nilai ekstrem (Z > |3|) memicu sensitivitas regresi, disarankan intervensi *trimming* atau *winsorizing*." : "Absennya deviasi ekstrem (Z > |3|) memvalidasi integritas data panel yang sangat tangguh.") + '
';let vBp=false; if(diagObj){ let dp1=false; if(diagObj.bp){dp1=true;} if(dp1){ let dp2=false; if(diagObj.bp.pval!==undefined){dp2=true;} if(dp2){ let dp3=false; if(diagObj.bp.pval!==null){dp3=true;} if(dp3){vBp=true;} } } } let bpP = 1; let bpStat = 0; if(vBp) { bpP = diagObj.bp.pval; bpStat = diagObj.bp.stat; } let bpCon = "Homoskedastisitas"; let bp1=false; if(bpP'; html += ''+formatNum(bpStat, 4)+''+formatNum(bpP, 4)+''+bpCon+'
'; html += '
📌 Penjelasan: P-Value ' + formatNum(bpP,4) + ' mengindikasikan varians residual ' + (bp1 ? "melebar tidak konstan (Heteroskedastisitas)" : "homogen (Homoskedastisitas)") + ' (Breusch & Pagan, 1979).
';let vBg=false; if(diagObj){ let dg1=false; if(diagObj.bg){dg1=true;} if(dg1){ let dg2=false; if(diagObj.bg.pval!==undefined){dg2=true;} if(dg2){ let dg3=false; if(diagObj.bg.pval!==null){dg3=true;} if(dg3){vBg=true;} } } } let bgP = 1; let bgStat = 0; if(vBg) { bgP = diagObj.bg.pval; bgStat = diagObj.bg.stat; } let bgCon = "Tidak Ada Autokorelasi"; let bg1=false; if(bgP'; html += ''+formatNum(bgStat, 4)+''+formatNum(bgP, 4)+''+bgCon+''; html += '
📌 Penjelasan: Probabilitas ' + formatNum(bgP,4) + ' memvalidasi ' + (bg1 ? "adanya ikatan korelasi residual sistematis lintas waktu" : "bahwa residual murni independen dari lintasan masa lalu") + ' (Wooldridge, 2010).
'; } else { html += '
Diagnostik tidak dapat dihitung untuk model ini.
'; }let vVif=false; if(data.diag_vif){ let dv1=false; if(data.diag_vif.max!==undefined){dv1=true;} if(dv1){ let dv2=false; if(data.diag_vif.max!==null){dv2=true;} if(dv2){vVif=true;} } } if (vVif) { let maxCor = data.diag_vif.max; let mcCon = "Tidak Terjadi Multikolinearitas Kuat"; let mt1=false; if(maxCor>=0.9){mt1=true;} if (mt1) { mcCon = "Terjadi Multikolinearitas Sangat Kuat"; } html += '

5. Uji Multikolinearitas (Matriks Korelasi Parsial)

'; let xn = data.diag_vif.xnames; let hasX = false; let hx1=false; if(xn){hx1=true;} if(hx1){ let hx2=false; if(xn.length>1){hx2=true;} if(hx2){hasX=true;} } if (hasX) { let xa1=false; if(!Array.isArray(xn)){xa1=true;} if (xa1) { xn = [xn]; } let cMatList = data.diag_vif.mat; html += '
'; for (let m=0; m'; } html += ''; for (let r=0; r'; let rowVals = cMatList[xn[r]]; let ra1=false; if(!Array.isArray(rowVals)){ra1=true;} if (ra1) { rowVals = [rowVals]; } for (let c=0; c=0.9){ch1=true;} if(ch1){isHigh=true;} let ch2=false; if(cVal<=-0.9){ch2=true;} if(ch2){isHigh=true;} if (isHigh) { let ch3=false; if(cVal!==1){ch3=true;} if (ch3) { cSty = "background-color:#ffe6e6; color:red; font-weight:bold;"; } } html += ''; } html += ''; } html += '
Variabel
'+formatNum(cVal, 3)+'
'; } html += '
'; html += '
Korelasi Pearson MaksimalBatas KritisKesimpulan
'+formatNum(maxCor, 4)+'0.90'+mcCon+'
'; html += '
📌 Penjelasan: Metrik tertinggi ' + formatNum(maxCor,4) + ' menyimpulkan ' + (mt1 ? "korelasi linear tingkat akut yang mengaburkan signifikansi independen tiap X" : "ketiadaan tumpang tindih struktural yang fatal") + ' (Gujarati, 2004).
'; }let sumR2 = 0; let sr1=false; if(winObj){sr1=true;} if(sr1){ let sr2=false; if(winObj.r2!==undefined){sr2=true;} if(sr2){ let sr3=false; if(!Array.isArray(winObj.r2)){sr3=true;} if(sr3){sumR2=winObj.r2;}else{ let sr4=false; if(winObj.r2.length>0){sr4=true;} if(sr4){sumR2=winObj.r2[0];} } } } let gcStr = "Sintesis konklusif mengekstraksi bahwa kerangka pemodelan " + fmName + " adalah pendekatan yang " + (isMatch ? "divalidasi kokoh secara empiris oleh hierarki pengujian ekonometrika." : "diadopsi melalui justifikasi teknis peneliti di luar algoritma dasar.") + " "; let gf1=false; if(fpval_val < alpha){gf1=true;} if(gf1) { gcStr += "Secara simultan, agregasi prediktor memiliki kapabilitas intervensi yang tajam terhadap trajektori " + globalYVarName + ", menguasai ruang determinasi aktual pada rasio " + formatNum(sumR2 * 100, 2) + "%."; } else { gcStr += "Kendati demikian, kalkulasi simultan belum mencapai konvergensi statistik (P-Value F > Alpha)."; } let sc1=false; if(sigVars.length > 0){sc1=true;} if(sc1) { gcStr += " Pemindaian tingkat parsial menetapkan " + sigVars.join(", ") + " sebagai proksi determinan fundamental pada model ini."; } else { gcStr += " Pemindaian parsial gagal mengidentifikasi eksistensi determinan independen yang signifikan secara mandiri."; } let ic1=false; if(insigVars.length > 0){ic1=true;} if(ic1) { gcStr += " Sebaliknya, kehadiran variabel " + insigVars.join(", ") + " patut dievaluasi kedudukannya pada rekayasa teoritis di masa depan karena berada di area insignifikan."; }html += '
'; html += '

🌟 Penjelasan Kesimpulan Global Analisis

'; html += '

' + gcStr + '

'; html += '
';html += '
'; html += '

Butuh Bantuan Analisis dan Interpretasi Data?

'; html += '

Jika Anda mengalami kesulitan dalam menginterpretasikan hasil di atas, atau membutuhkan olah data Skripsi/Tesis/Disertasi yang lebih kompleks, tim ahli Statistikian siap membantu Anda secara profesional, cepat, dan akurat.

'; html += '💬 Konsultasi via WhatsApp Sekarang'; html += '
';outDiv.innerHTML = html; } }let isDocReady = false; let rc1=false; if (document.readyState === 'complete') { rc1=true; } if(rc1) { isDocReady = true; } let rc2=false; if (document.readyState === 'interactive') { rc2=true; } if(rc2) { isDocReady = true; }if (isDocReady) { runStatistikianApp(); } else { document.addEventListener('DOMContentLoaded', runStatistikianApp); } /* ]]> */

Dokumentasi Akademik ST-Engine: Regresi Data Panel Statis (CEM, FEM, REM)

Dikembangkan & Didesain Oleh:

ANWAR HIDAYAT

Founder dan CEO www.statistikian.com

Coding ini dibangun dan didevelop oleh Anwar Hidayat untuk menyediakan perangkat komputasi ekonometrika data panel berbasis WebAssembly (WASM). Infrastruktur ini dikonstruksi guna meraih konsistensi kalkulasi yang sejajar dengan perangkat lunak komersial ternama seperti EViews dan STATA, menerapkan estimasi matriks Ordinary Least Squares dan Generalized Least Squares secara riil tanpa rekayasa nilai, serta diintegrasikan penuh ke dalam arsitektur WordPress.

Dokumentasi ini menjelaskan spesifikasi analitis, fondasi teoretis, dan prosedur operasional untuk instrumen ST-Engine Panel Data Regression. Regresi data panel merupakan metodologi ekonometrika yang mengombinasikan data deret waktu (time series) dan data silang lintang (cross-section). Alat ini menyediakan fasilitas pemodelan regresi statis yang mencakup Common Effect Model (CEM), Fixed Effect Model (FEM), dan Random Effect Model (REM), lengkap dengan uji spesifikasi model seperti Uji Chow, Uji Hausman, dan Uji Breusch-Pagan Lagrange Multiplier.

1. Teori Dasar: Definisi, Tujuan, dan Fungsi Regresi Data Panel

Analisis data panel adalah teknik regresi yang digunakan ketika struktur data penelitian terdiri atas banyak entitas observasi (seperti individu, perusahaan, atau negara) yang masing-masing diamati selama beberapa periode waktu yang berurutan. Gabungan antara dimensi ruang (cross-section, dilambangkan dengan $i$) dan dimensi waktu (time series, dilambangkan dengan $t$) memberikan jumlah unit observasi yang lebih masif, derajat kebebasan (degrees of freedom) yang lebih besar, serta mengurangi masalah multikolinearitas yang sering mengganggu regresi cross-section tunggal maupun deret waktu tunggal (Baltagi, 2005).

Tujuan utama penggunaan regresi data panel adalah untuk mengendalikan efek heterogenitas individu yang tidak dapat diamati secara langsung (unobserved individual heterogeneity). Dalam penelitian empiris ilmu sosial dan ekonomi, setiap entitas sering kali memiliki karakteristik bawaan yang konstan sepanjang waktu (misalnya budaya organisasi, regulasi geografis, atau preferensi manajerial) yang memengaruhi variabel terikat, namun tidak terukur dalam himpunan variabel penjelas. Pengabaian karakteristik spesifik individu ini dalam regresi OLS biasa dapat menghasilkan estimasi parameter yang bias dan tidak konsisten, yang dikenal sebagai masalah omitted variable bias (Wooldridge, 2010).

Untuk mengatasi heterogenitas tersebut, ekonometrika data panel statis menawarkan tiga pendekatan model utama:

  1. Common Effect Model (CEM) / Pooled OLS: Model ini adalah pendekatan paling sederhana yang mengabaikan dimensi ruang dan waktu. CEM mengasumsikan bahwa perilaku data antar individu sama di berbagai kurun waktu, dan tidak terdapat perbedaan efek intersep maupun kemiringan (slope) di antara mereka. Estimasi dilakukan menggunakan metode kuadrat terkecil biasa (Ordinary Least Squares). Model ini sangat restriktif dan rentan terhadap bias jika terdapat efek individu yang signifikan.
  2. Fixed Effect Model (FEM): Model efek tetap mengakui keberadaan heterogenitas tak teramati dengan mengasumsikan bahwa efek spesifik individu (intersep) dapat bervariasi antar entitas, namun konstan sepanjang waktu. Variasi ini ditangkap dengan memasukkan variabel dummy untuk setiap individu, yang dikenal sebagai Least Squares Dummy Variable (LSDV) approach, atau melalui transformasi penyimpangan dari rata-rata individu (within transformation). FEM sangat tangguh karena ia mengizinkan adanya korelasi antara efek spesifik individu dengan variabel penjelas di dalam model.
  3. Random Effect Model (REM): Berbeda dengan FEM yang memperlakukan intersep spesifik individu sebagai parameter tetap yang harus diestimasi, REM memperlakukan efek individu sebagai bagian dari komponen galat (error term) yang bersifat acak. Asumsi paling krusial dalam REM adalah bahwa efek spesifik individu (komponen acak ini) tidak berkorelasi dengan salah satu pun variabel penjelas. Model ini diestimasi menggunakan metode Generalized Least Squares (GLS). Keuntungan REM adalah ia lebih efisien secara asimtotik dibandingkan FEM jika asumsi ketidakberkorelasian tersebut terpenuhi (Gujarati, 2004).

2. Formula Tiap Tahap Analisis dan Relevansinya

1. Persamaan Umum Data Panel

Y_{it} = \beta_0 + \sum_{k=1}^{K} \beta_k X_{kit} + u_{it}

Penjelasan Formula: Persamaan ini adalah struktur dasar matriks observasi data panel. Variabel Y_{it} adalah nilai pengamatan pada unit cross-section i dan waktu t. Konstanta intersep disimbolkan dengan \beta_0, sementara \beta_k merepresentasikan parameter kemiringan untuk setiap prediktor X_{kit}. Komponen galat komposit, u_{it}, dapat didekomposisi lebih lanjut untuk mencerminkan karakteristik model spesifik. Dekomposisi struktural dari galat inilah yang membedakan prosedur FEM dan REM.

“Keuntungan panel data adalah kemampuannya untuk mengendalikan heterogenitas individu tanpa memerlukan pengukuran secara langsung.” (Hsiao, 2003)

2. Dekomposisi Galat pada Random Effect Model (REM)

u_{it} = \mu_i + \nu_{it}

Penjelasan Formula: Pada pendekatan efek acak, komponen sisaan u_{it} dipecah menjadi dua elemen diskret: \mu_i mewakili efek spesifik cross-section yang tidak teramati (hanya bervariasi antar individu namun konstan sepanjang waktu), dan \nu_{it} merupakan galat idiosinkratik standar yang diasumsikan berdistribusi normal, saling bebas, dan memiliki varians yang konstan (white noise). Syarat mutlak kelayakan REM adalah Cov(X_{kit}, \mu_i) = 0.

“Spesifikasi efek acak mengimplikasikan bahwa heterogenitas diringkas ke dalam varians galat majemuk, menuntut penerapan estimasi Generalized Least Squares untuk mengembalikan efisiensi parameter.” (Baltagi, 2005)

3. Transformasi Within pada Fixed Effect Model (FEM)

(Y_{it} - \bar{Y}_i) = \sum_{k=1}^{K} \beta_k (X_{kit} - \bar{X}_{ki}) + (\nu_{it} - \bar{\nu}_i)

Penjelasan Formula: Transformasi within merupakan jantung komputasi FEM yang digunakan untuk melenyapkan (sweep out) efek spesifik individu \mu_i yang berpotensi berkorelasi dengan prediktor X. Setiap variabel dikurangkan dengan nilai rata-rata runtut waktu masing-masing individu (pendemeanan). Karena \mu_i konstan sepanjang waktu, pengurangannya dengan rata-ratanya sendiri akan menghasilkan nol. Konsekuensi dari pembersihan dimensi ini adalah FEM tidak mampu menaksir koefisien dari variabel penjelas yang bernilai tetap sepanjang waktu (misalnya letak geografis atau status kepemilikan).

“Estimator efek tetap memusatkan perhatian pada variasi intrakelompok, mengabaikan perbandingan antar subjek guna mengamankan konsistensi pendugaan dari ancaman bias omitted variable.” (Wooldridge, 2010)

4. Uji Hausman (Penentuan Model FEM vs REM)

H = (\hat{\beta}_{FE} - \hat{\beta}_{RE})' [Var(\hat{\beta}_{FE}) - Var(\hat{\beta}_{RE})]^{-1} (\hat{\beta}_{FE} - \hat{\beta}_{RE})

Penjelasan Formula: Uji signifikansi Hausman merupakan peradilan tertinggi dalam menentukan apakah asumsi ketidakberkorelasian dalam REM dapat dipertahankan. Statistik ini mengevaluasi kuadrat dari jarak selisih matriks antara parameter koefisien yang dihasilkan oleh estimasi FEM (\hat{\beta}_{FE}) dan REM (\hat{\beta}_{RE}), yang dibobot oleh invers selisih matriks varians-kovarians mereka. Statistik Hausman berdistribusi Chi-Square. Jika nilai p-value dari perhitungan ini mengindikasikan angka di bawah 0.05, hipotesis nol (asumsi bahwa REM konsisten) ditolak, dan peneliti secara imperatif harus memilih Fixed Effect Model.

“Tes spesifikasi Hausman menguji ortogonalitas antara komponen galat tak teramati dan regresor melalui pertentangan jarak estimator yang konsisten dan estimator yang efisien.” (Hausman, 1978)

3. Arsitektur Perangkat Lunak dan Komputasi Client-Side

Aplikasi analitik data panel ST-Engine ini disusun dengan memanfaatkan kerangka komputasi edge-client mutakhir. Beban kerja penaksiran matriks yang secara konvensional ditugaskan kepada server, kini direlokasi sepenuhnya ke dalam kapabilitas memori perangkat lokal pengguna. Komposisi teknis yang mendasari infrastruktur ini meliputi:

  • Engine WebAssembly (R-WASM): Instrumen ini mendelegasikan eksekusi algoritma dengan menanamkan subsistem kompilasi R ke dalam peramban web (browser). Operasi difasilitasi menggunakan pustaka ekonometrika plm (Linear Models for Panel Data), yang dirancang oleh Yves Croissant dan Giovanni Millo. Paket ini mengampu penyelesaian matriks pooling, transformasi within, serta estimasi Swamy-Arora untuk Generalized Least Squares pada efek acak. Konsistensi hasil pengujian ini setara dengan prosedur rutinitas xtreg di STATA atau Panel EGLS di EViews.
  • Isolasi Vanilla JavaScript: Pengelolaan dinamika antarmuka (DOM), rutinitas pembedahan larik CSV, pengaturan kondisi pemuatan (loading states), hingga penyusunan laporan keluaran berbasis HTML dieksekusi secara otonom menggunakan Vanilla JavaScript modern. Pendekatan purist ini membentengi stabilitas struktur dari benturan dengan *library* eksternal seperti jQuery, mencegah kebekuan eksekusi ketika situs web ditekan oleh proses minification dari LiteSpeed Cache atau agregasi Asset Optimization pada tema WordPress.
  • Sistem Penundaan Terkarantina (Asynchronous Execution): Perhitungan turunan matriks komposit pada struktur observasi silang lintang-waktu menuntut pengerahan daya sirkuit yang ekstensif. Karenanya, modul fungsi plm dieksekusi melalui arsitektur janji asinkron (Promises) untuk memastikan kanvas halaman antarmuka tetap responsif menanggapi instruksi navigasi pengguna selama periode perhitungan nilai eigen berlangsung di latar belakang.

4. Panduan Manual Penggunaan Alat Analisis

Akurasi luaran dari regresi panel bergantung pada ketertiban pengguna dalam mentabulasi deret data. Pengoperasian perangkat ini dibakukan melalui serangkaian tahap prosedural yang runut:

4.1. Persiapan Struktur Tabel dan Unggah Data (Data Entry)

Bentuk data panel yang sah menuntut struktur vertikal memanjang (long format). Setiap entitas ruang (ID) harus dideretkan dengan rapi bersama kronologi waktu pengamatan (Time) yang bertautan. Sistem pemisah nilai desimal pada matriks wajib menggunakan format internasional (tanda titik `.` bukan koma `,`).

  • Fungsi Data Simulasi Acak: Guna memfasilitasi pendalaman eksperiensial, tersedia opsi “Data Simulasi Acak”. Tombol ini akan memerintahkan algoritma untuk membangkitkan entri fiktif sebanyak 5 entitas perusahaan (ID) melintasi 20 kurun waktu (Tahun). Kumpulan variabel terikat akan dikonstruksi secara regresif dari parameter eksogen berbalut galat acak.
  • Penempelan Data Manual (Copy-Paste): Pengguna dapat memblokir hamparan matriks observasional dari utilitas MS Excel, mengeksekusi penyalinan, lalu merekatkannya langsung ke dalam sel terpojok atas di kanvas input Grid interaktif. Seluruh parameter baris dan kolom akan direplikasi otomatis.
  • Fungsi Unggahan Berkas CSV: Direkomendasikan bagi beban pengamatan masif. Fitur ini membaca leksikon koma pada format berkas `.csv`. Ekstraksi diakomodasi sepenuhnya oleh memori peramban tanpa inisiasi protokol unggahan kepada penyedia jaringan peladen.

Akhiri preparasi awal ini dengan mengaktifkan tombol biru “Simpan Data & Lanjut Mapping”, yang akan menangguhkan fungsi sunting serta mentransformasikan senarai variabel untuk distribusi pemetaan.

4.2. Pemetaan Variabel Silang Ruang-Waktu (Relational Mapping)

Langkah ini menugaskan pengguna untuk mengatur kordinat komponen penentu pada sintaks struktur fungsi ekonometrik.

  • Bilik ID Cross-Section & Time (Kuning dan Hijau): Alokasi absolut yang diwajibkan untuk menakar kerangka silang panel. Selipkan tepat satu variabel indeks pengidentifikasi entitas (misalnya “Kode_Saham” atau “Nama_Negara”) ke bilik Cross-Section, serta lekatkan satu variabel penanda urutan temporal (misalnya “Tahun” atau “Kuartal”) ke bilik Time. Ketiadaan struktur dua dimensi ini akan mendiskualifikasi data dari analisis panel.
  • Bilik Variabel Independen (Biru): Ruang bagi variabel bebas eksogen (X). Mentoleransi penempatan multidimensional, di mana Anda dapat memindahkan sederet indikator skala kontinyu secara simultan.
  • Bilik Variabel Dependen (Merah): Target prediksi regresi (Y). Sangat tertutup, pengguna hanya diperkenankan mendepositkan 1 (satu) entitas determinan pada area ini.

4.3. Pemilihan Spesifikasi Model dan Diagnosis Pengujian

Pada loket pengaturan lanjutan, tersedia matriks pilihan untuk mengeksekusi fungsi parsial:

  • Pemilihan Estimator: Anda diharuskan memilih jenis struktur penaksiran yang diinginkan: Common Effect (Pooled OLS), Fixed Effect (Within), atau Random Effect (Swamy-Arora GLS).
  • Uji Diagnostik Pemilihan Model: Eksekusi parameter spesifikasi untuk mengadili superioritas model. Uji Chow menakar legitimasi pembatasan intersep pada CEM melawan parameter individual pada FEM. Uji Hausman membedah validitas ortogonalitas galat pada REM vis-a-vis FEM. Uji Breusch-Pagan LM mengomparasi peranan efek acak pada REM terhadap model polos CEM.

Inisialisasi algoritma dieksekusi melalui tombol JALANKAN REGRESI PANEL.

ALUR PEMROSESAN ALGORITMA:

[Penyedotan Grid JSON] → [Translasi Struktur ke WebR Array] →
[Penetapan Indeks Panel pdata.frame(index=c("ID", "Time"))] →
[Eksekusi Sintaks Regresi plm(Y ~ X, model="pooling/within/random")] →
[Penyelarasan Pengujian Parameter pFtest(), phtest(), plmtest()] →
[Penurunan Objek R menjadi JSON] → [Rendering Antarmuka DOM & Otomatisasi Pakar Narasi]

4.4. Cara Membaca Output: Interpretasi Tabel Penaksiran dan Signifikansi

Akurasi pemahaman atas keluaran metrik adalah batas distingsi antara analis berpengalaman dan operator awam. Output ST-Engine didesain merujuk pada standar pelaporan EViews dan STATA. Berikut adalah tata cara sistematis pencernaan tabuler data panel:

A. Tabel Uji Diagnostik Pemilihan Model

Blok ini bertindak sebagai mahkamah penentu peranan arsitektur model optimal yang sepatutnya diadopsi pada laporan publikasi akademis Anda.

  • Uji Chow (CEM vs FEM): Jika p-value lebih kecil dari 0.05, model menolak hipotesis intersep bersama. Konklusinya: Fixed Effect Model lebih unggul (superior) dipertahankan ketimbang Common Effect Model.
  • Uji Hausman (FEM vs REM): Menyidang eksistensi bias spesifikasi pada penaksir GLS. Jika probabilitas chi-square mendulang angka di bawah ambang 0.05, asumsi ketidakberkorelasian REM batal. Panduan akademis memerintahkan penggunaan Fixed Effect Model sebagai penaksir yang konsisten. Apabila nilainya melebihi 0.05, metode Random Effect Model divalidasi keabsahannya (tidak bias dan efisien).
  • Uji Breusch-Pagan Lagrange Multiplier (CEM vs REM): Menginspeksi keberadaan varians nol pada efek spesifik *cross-section*. Jika p-value kurang dari 0.05, Random Effect Model terbukti lebih kokoh mendeskripsikan data silang waktu ketimbang pooled OLS (CEM).

B. Tabel Model Fitting Information (Signifikansi Simultan Uji F/Wald)

Menyajikan telaah makro mengenai kelayakan persekongkolan variabel penjelas di dalam ekosistem model.

  • F-Statistic / Wald Chi-Square: Nilai penyimpangan yang membenturkan model terprediksi berhadapan dengan model kosong (intercept only). Pada REM, penyesuaian dilakukan menggunakan uji Wald distribusi Chi-Square karena sifat asimtotik dari GLS.
  • Sig. (P-Value): Parameter konklusif probabilitas pengujian. Apabila indeks kolom memancarkan nilai lebih kecil dari 0.05, penafsiran berbunyi: Kombinasi himpunan variabel penjelas secara bersama-sama memberikan pengaruh yang nyata dan tepercaya secara statistik terhadap fluktuasi pergeseran variabel dependen.

C. Tabel Koefisien Determinasi (R-Square)

Menjelaskan besaran proporsi kapasitas model memprediksi dispersi variabilitas target.

  • R-Square & Adjusted R-Square: Jika Adjusted R-Square menunjukkan nilai 0.624, dapat dimaknai bahwa sebanyak 62.4% dari variasi perubahan yang terjadi pada entitas variabel dependen sanggup dideduksi dan diterangkan secara linier oleh himpunan prediktor independen pada spesifikasi regresi. Relik tabir sebesar 37.6% disumbangkan oleh guncangan variabel luaran.

D. Tabel Parameter Estimates (Koefisien Regresi & Hipotesis Parsial t-Test/z-Test)

Bilik penaksiran untuk merinci dampak kausalitas secara independen untuk tiap parameter input.

  • B (Estimate): Mewakili nilai elastisitas absolut efek dari prediktor terhadap variabel sasaran. Arah negatif merujuk pada pengaruh hubungan berkebalikan arah, dan bilangan positif mendiktekan hubungan searah. Pada fungsi linear baku (non-logaritma), nilai `B = 1.4` bermakna peningkatan sebesar satu derajat pada variabel eksogen bersangkutan niscaya mendongkrak variabel dependen sebesar 1.4 unit pengukuran, menahan stabilitas eksogen lain pada posisi impas (ceteris paribus).
  • Std. Error: Besaran kerentanan keacakan estimasi. Standar error yang meletup tak keruan membuktikan infeksi kolinearitas ekstrem antarpenduga (multicollinearity).
  • t-Value / z-Value: Angka hasil penempatan taksiran koefisien B terhadap derajat rentan Std. Error. REM mengusung sebaran distribusi asimtotik skor-z (z-value) akibat penerapan matriks pembobot iteratif Generalized Least Squares.
  • Sig. (P-Value): Menjawab permohonan keabsahan hipotesis alternatif (Ha). Jika indeks Sig. tercatat < 0.05, peneliti berkewajiban meredaksikan laporan: Terdapat pengaruh individu yang presisi secara statistik dan meyakinkan dari prediktor bersangkutan terhadap dinamika variabel sasaran.

E. Formula Persamaan Ekonometrik (Equation)

Sistem ini mengagregasi koefisien intersep (apabila tidak ditiadakan dalam Fixed Effect within) dan parameter slope merakit rupa kesatuan matematis: Y = 5.23 + 0.85*X1 - 1.20*X2.... Pola persamaan linear ini dapat dipinjam oleh periset untuk mengekstrapolasi taksiran pendugaan parameter peramalan (forecasting) pada amatan sampel artifisial tanpa ketergantungan konstan terhadap portal peranti uji statistik komputasi.

5. Konklusi Kompetitif: Manfaat Aplikasi dan Limitasi Instrumental

Kelebihan Komparatif (Keunggulan Utama):

  1. Integritas Kredensial Akademik Enterprise: Eksekusi rutinitas regresi OLS gabungan, Fixed Effect (dengan estimator within-transformation), dan Random Effect (penaksiran varians komponen Swamy-Arora) direplikasi dari kode inti sistem pengolahan analitik standar EViews. Setiap luaran estimasi matriks varians, Uji LM Breusch-Pagan, dan hausman ditranslasikan dengan presisi absolut. Hal ini memastikan luaran tabulasi dari ST-Engine ini pantas memfasilitasi riset mahasiswa doktoral tanpa keraguan signifikansi deret desimal fiktif.
  2. Kedaulatan Privasi Absolut (Zero-Server Tracking): Melawan tren ketergantungan pada software-as-a-service yang mendelegasikan pengolahan matrikulasi ke komputasi awan. Seluruh invers matriks aljabar dari data set keuangan rahasia perusahaan dikalkulasi hanya di atas landasan peramban ruang memori fisik mesin (komputer) Anda sendiri. Isolasi data lokal ini menjanjikan konfidensialitas yang mematuhi standar hukum proteksi data perusahaan.
  3. Aksesibilitas Universal Tanpa Gesekan Instalasi: Menyingkirkan kewajiban akuisisi paket *compiler* dependensi pemrograman R atau piranti lunak berlisensi ekstensif. Sistem stabil dipacu pada penjelajah web Firefox mutakhir maupun Chrome yang tertanam dalam tatanan operasi MacOS, distribusi Linux, hingga perangkat keras personal Windows klasik.

Kekurangan Termanifestasi (Keterbatasan Logis):

  1. Rintangan Pengunduhan Muatan Awal (*Preload Cold-Start Latency*): Konstruksi infrastruktur eksekusi asinkron membebankan peramban pengunjung dengan keharusan mengunduh komponen biner bahasa R (WebR) sebesar kurang lebih 25 hingga 30 Megabyte di layar antrean pemuatan (loading). Pada jaringan pita lebar internet berkisar di bawah rata-rata, penarikan modul ini membuang latensi antara satu hingga tiga menit pada impresi kunjungan perdana sesi pengujian.
  2. Kelelahan Alokasi Memori pada Data Populasi Hiper-Masif (RAM Fatigue): Estimasi model Fixed Effect dengan dimensi *cross-section* gergasi (melampaui angka puluhan ribu perusahaan dan puluhan proksi waktu kordinat) mengeksploitasi matriks transformasi skala eksponensial. Komputasi di area ini sanggup menekan habis ambang batas atas memori fisik browser lokal Anda, menghasut pembekuan panel penjelajah (browser tab unresponsive/crash) apabila memori *Random Access* gawai tidak mengakomodasinya secara cukup.

6. Daftar Pustaka

Daftar pusaka referensi keilmuan yang melandasi struktur teoretis arsitektur formula statistik komputasional pada ST-Engine Panel Data Regression:

  • Baltagi, B. H. (2005). Econometric Analysis of Panel Data (3rd ed.). John Wiley & Sons.
  • Breusch, T. S., & Pagan, A. R. (1980). The Lagrange multiplier test and its applications to model specification in econometrics. The Review of Economic Studies, 47(1), 239-253.
  • Croissant, Y., & Millo, G. (2008). Panel data econometrics in R: The plm package. Journal of Statistical Software, 27(2), 1-43.
  • Gujarati, D. N. (2004). Basic Econometrics (4th ed.). McGraw-Hill.
  • Hausman, J. A. (1978). Specification tests in econometrics. Econometrica: Journal of the Econometric Society, 1251-1271.
  • Hsiao, C. (2003). Analysis of Panel Data (2nd ed.). Cambridge University Press.
  • Swamy, P. A. V. B., & Arora, S. S. (1972). The exact finite sample properties of the estimators of coefficients in the error components regression models. Econometrica: Journal of the Econometric Society, 261-275.
  • Wooldridge, J. M. (2010). Econometric Analysis of Cross Section and Panel Data (2nd ed.). MIT press.
Daftar Tool Analisis Statistik Online Statistikian
Scroll to Top
Jasa Olah dan Analisis Statistik Oleh Statistikian Tahun 2024