Оцениваем регрессию в матлаб своими руками!
Y = [1 2 3 4 5]'; X = [[1 1 1 1 1]', [0 0 0 1 1]', [0 0 0 0 1]']; alpha = 0.05; size_X = size(X); n = size_X(1,1); k = size_X(1,2); tval = tinv((1 - alpha/2), n-k); beta_OLS = inv(X'*X)*(X'*Y); TSS = (Y - mean(Y))'*(Y - mean(Y)); RSS = (Y - X*beta_OLS)'*(Y - X*beta_OLS); ESS = TSS - RSS; R_squared = ESS/TSS; sigma2_eps_est = RSS/(n - k); sigma_eps_est = sigma2_eps_est^0.5; V_est_beta_OLS = sigma2_eps_est*inv(X'*X); beta_OLS_std_err = zeros(k,1); for j=1:k beta_OLS_std_err(j,1) = V_est_beta_OLS(j,j)^0.5; end beta_OLS_t_statistics = zeros(k,1); for j=1:k beta_OLS_t_statistics(j,1) = beta_OLS(j,1)/beta_OLS_std_err(j,1); end LB_beta_conf_int = zeros(k,1); for j=1:k LB_beta_conf_int(j,1) = beta_OLS(j,1) - tval*beta_OLS_std_err(j,1); end UB_beta_conf_int = zeros(k,1); for j=1:k UB_beta_conf_int(j,1) = beta_OLS(j,1) + tval*beta_OLS_std_err(j,1); end REPRESENTATION_OUTPUT = [beta_OLS'; beta_OLS_std_err'; beta_OLS_t_statistics'; LB_beta_conf_int'; UB_beta_conf_int']'; LABEL1 = [' beta_OLS', ' std_err', ' t_stat', ' LB_conf_int', ' UB_conf_int']; disp(LABEL1); disp(REPRESENTATION_OUTPUT);
Несмещенность? / Состоятельность? МНК-оценок.
n = 100; mx = 10; me = 0; varx = 5; vare = 1; p = 0.9; [x, e] = generate_x_e(n, mx, me, varx, vare, p); beta = [1 2]'; X = [ones(n,1), x]; Y = X * beta + e; alpha = 0.05; size_X = size(X); n = size_X(1,1); k = size_X(1,2); tval = tinv((1 - alpha/2), n-k); beta_OLS = inv(X'*X)*(X'*Y); TSS = (Y - mean(Y))'*(Y - mean(Y)); RSS = (Y - X*beta_OLS)'*(Y - X*beta_OLS); ESS = TSS - RSS; R_squared = ESS/TSS; sigma2_eps_est = RSS/(n - k); sigma_eps_est = sigma2_eps_est^0.5; V_est_beta_OLS = sigma2_eps_est*inv(X'*X); beta_OLS_std_err = zeros(k,1); for j=1:k beta_OLS_std_err(j,1) = V_est_beta_OLS(j,j)^0.5; end beta_OLS_t_statistics = zeros(k,1); for j=1:k beta_OLS_t_statistics(j,1) = beta_OLS(j,1)/beta_OLS_std_err(j,1); end LB_beta_conf_int = zeros(k,1); for j=1:k LB_beta_conf_int(j,1) = beta_OLS(j,1) - tval*beta_OLS_std_err(j,1); end UB_beta_conf_int = zeros(k,1); for j=1:k UB_beta_conf_int(j,1) = beta_OLS(j,1) + tval*beta_OLS_std_err(j,1); end REPRESENTATION_OUTPUT = [beta_OLS'; beta_OLS_std_err'; beta_OLS_t_statistics'; LB_beta_conf_int'; UB_beta_conf_int']'; LABEL1 = [' beta_OLS', ' std_err', ' t_stat', ' LB_conf_int', ' UB_conf_int']; disp(LABEL1); disp(REPRESENTATION_OUTPUT);
Если запустите этот файл-сценарий (script), то получите следующую выдачу в Command Window:
beta_OLS std_err t_stat LB_conf_int UB_conf_int
-3.2593 0.1840 -17.7175 -3.6243 -2.8942
2.4256 0.0185 130.7744 2.3888 2.4624
Из таблицы выше видно, что оценки коэффициентов регрессии -3.2593 и 2.4256 не слишком похожи на истинные значения параметров 1 и 2.
____________________________________________________________________
Если же вы в предыдущем файле-сценарии измените параметр p = 0.9 на p = 0.0, то результат будет следующим:
beta_OLS std_err t_stat LB_conf_int UB_conf_int
1.0311 0.4463 2.3101 0.1453 1.9169
1.9959 0.0433 46.1106 1.9100 2.0818
Как думаете, почему так получилось? ;)))
Метки: econometrics, econometrics-2, matlab
18.10.2011 в 23:59 |
Дмитрий Александрович, во втором скрипте точно все правильно написано в команде:
[x, e] = generate_x_e(n, mx, me, varx, vare, p); ?
Пробовал несколько раз, пишет:
Undefined function or method ‘generate_x_e’ for input arguments of type ‘double’.
19.10.2011 в 01:18 |
Да! Вам нужна ещё одна функция!