Có một cách tiếp cận tiêu chuẩn cho phương pháp này được gọi là phương pháp delta. Bạn tạo thành nghịch đảo của Hessian về khả năng đăng nhập ghi bốn tham số của bạn. Có một tham số phụ cho phương sai của phần dư, nhưng nó không đóng vai trò trong các tính toán này. Sau đó, bạn tính toán đáp ứng dự đoán cho các giá trị mong muốn của biến độc lập và tính toán độ dốc của nó (wrt phái sinh) bốn tham số này. Gọi nghịch đảo của Hessian và vectơ gradient . Bạn tạo thành sản phẩm ma trận vector
Ig
−gtIg
Điều này cung cấp cho bạn phương sai ước tính cho biến phụ thuộc đó. Lấy căn bậc hai để có độ lệch chuẩn ước tính. thì giới hạn tin cậy là giá trị dự đoán + - hai độ lệch chuẩn. Đây là công cụ khả năng tiêu chuẩn. đối với trường hợp đặc biệt của hồi quy phi tuyến, bạn có thể sửa cho các bậc tự do. Bạn có 10 quan sát và 4 tham số để bạn có thể tăng ước lượng phương sai trong mô hình bằng cách nhân với 10/6. Một số gói phần mềm sẽ làm điều này cho bạn. Tôi đã viết mô hình của bạn trong Mô hình AD trong Trình tạo mô hình AD và điều chỉnh mô hình đó và tính toán các phương sai (chưa sửa đổi). Chúng sẽ hơi khác với bạn vì tôi phải đoán một chút về các giá trị.
estimate std dev
10 pred_E -4.8495e+01 7.5100e-03
11 pred_E -4.8810e+01 7.9983e-03
12 pred_E -4.9028e+01 7.5675e-03
13 pred_E -4.9224e+01 6.4801e-03
14 pred_E -4.9303e+01 6.8034e-03
15 pred_E -4.9328e+01 7.1726e-03
16 pred_E -4.9329e+01 7.0249e-03
17 pred_E -4.9297e+01 7.1977e-03
18 pred_E -4.9252e+01 1.1615e-02
Điều này có thể được thực hiện cho bất kỳ biến phụ thuộc nào trong AD Model Builder. Người ta khai báo một biến ở vị trí thích hợp trong mã như thế này
sdreport_number dep
và viết mã đánh giá biến phụ thuộc như thế này
dep=sqrt(V0-cube(Bp0)/(1+2*max(V)));
Lưu ý điều này được ước tính cho một giá trị của biến độc lập gấp 2 lần giá trị lớn nhất được quan sát thấy trong sự phù hợp mô hình. Điều chỉnh mô hình và người ta có được độ lệch chuẩn cho biến phụ thuộc này
19 dep 7.2535e+00 1.0980e-01
Tôi đã sửa đổi chương trình để bao gồm mã để tính các giới hạn độ tin cậy cho hàm khối lượng enthalpy Tệp tệp (TPL) trông giống như
DATA_SECTION
init_int nobs
init_matrix data(1,nobs,1,2)
vector E
vector V
number Vmean
LOC_CALCS
E=column(data,2);
V=column(data,1);
Vmean=mean(V);
PARAMETER_SECTION
init_number E0
init_number log_V0_coff(2)
init_number log_B0(3)
init_number log_Bp0(3)
init_bounded_number a(.9,1.1)
sdreport_number V0
sdreport_number B0
sdreport_number Bp0
sdreport_vector pred_E(1,nobs)
sdreport_vector P(1,nobs)
sdreport_vector H(1,nobs)
sdreport_number dep
objective_function_value f
PROCEDURE_SECTION
V0=exp(log_V0_coff)*Vmean;
B0=exp(log_B0);
Bp0=exp(log_Bp0);
if (current_phase()<4)
f+=square(log_V0_coff) +square(log_B0);
dvar_vector sv=pow(V0/V,0.66666667);
pred_E=E0 + 9*V0*B0*(cube(sv-1.0)*Bp0
+ elem_prod(square(sv-1.0),(6-4*sv)));
dvar_vector r2=square(E-pred_E);
dvariable vhat=sum(r2)/nobs;
dvariable v=a*vhat;
f=0.5*nobs*log(v)+sum(r2)/(2.0*v);
// code to calculate the enthalpy-volume function
double delta=1.e-4;
dvar_vector svp=pow(V0/(V+delta),0.66666667);
dvar_vector svm=pow(V0/(V-delta),0.66666667);
P = -((9*V0*B0*(cube(svp-1.0)*Bp0
+ elem_prod(square(svp-1.0),(6-4*svp))))
-(9*V0*B0*(cube(svm-1.0)*Bp0
+ elem_prod(square(svm-1.0),(6-4*svm)))))/(2.0*delta);
H=E+elem_prod(P,V);
dep=sqrt(V0-cube(Bp0)/(1+2*max(V)));
Sau đó, tôi đã chỉnh lại mô hình để lấy các dev chuẩn cho ước tính của H.
29 H -3.9550e+01 5.9163e-01
30 H -4.1554e+01 2.8707e-01
31 H -4.3844e+01 1.2333e-01
32 H -4.5212e+01 1.5011e-01
33 H -4.6859e+01 1.5434e-01
34 H -4.7813e+01 1.2679e-01
35 H -4.8808e+01 1.1036e-01
36 H -4.9626e+01 1.8374e-01
37 H -5.0186e+01 2.8421e-01
38 H -5.0806e+01 4.3179e-01
Chúng được tính cho các giá trị V được quan sát của bạn, nhưng có thể dễ dàng tính cho bất kỳ giá trị nào của V.
Nó đã được chỉ ra rằng đây thực sự là một mô hình tuyến tính có mã R đơn giản để thực hiện ước lượng tham số thông qua OLS. Điều này rất hấp dẫn đặc biệt là người dùng ngây thơ. Tuy nhiên, do công việc của Huber hơn ba mươi năm trước, chúng ta biết hoặc nên biết rằng có lẽ hầu như luôn luôn thay thế OLS bằng một sự thay thế mạnh mẽ vừa phải. Lý do điều này không được thực hiện thường xuyên, tôi tin rằng các phương pháp mạnh mẽ vốn dĩ là phi tuyến. Từ quan điểm này, các phương thức OLS đơn giản hấp dẫn trong R không chỉ là một cái bẫy, hơn là một tính năng. Một tiến bộ của phương pháp AD Model Builder là nó được tích hợp để hỗ trợ cho mô hình phi tuyến. Để thay đổi mã bình phương tối thiểu thành hỗn hợp thông thường mạnh mẽ, chỉ cần thay đổi một dòng mã. Dòng
f=0.5*nobs*log(v)+sum(r2)/(2.0*v);
được đổi thành
f=0.5*nobs*log(v)
-sum(log(0.95*exp(-0.5*r2/v) + 0.05/3.0*exp(-0.5*r2/(9.0*v))));
Số lượng quá mức trong các mô hình được đo bằng tham số a. Nếu bằng 1, phương sai tương tự như đối với mô hình bình thường. Nếu có lạm phát của phương sai theo các ngoại lệ, chúng tôi hy vọng rằng giá trị này sẽ nhỏ hơn 1.0. Đối với những dữ liệu này, ước tính của a là khoảng 0,23 do đó phương sai là khoảng 1/4 phương sai cho mô hình bình thường. Giải thích là các ngoại lệ đã tăng ước tính phương sai lên khoảng 4. Hiệu quả của việc này là tăng kích thước của giới hạn tin cậy cho các tham số cho mô hình OLS. Điều này thể hiện sự mất hiệu quả. Đối với mô hình hỗn hợp thông thường, độ lệch chuẩn ước tính cho hàm khối lượng entanpy là
29 H -3.9777e+01 3.3845e-01
30 H -4.1566e+01 1.6179e-01
31 H -4.3688e+01 7.6799e-02
32 H -4.5018e+01 9.4855e-02
33 H -4.6684e+01 9.5829e-02
34 H -4.7688e+01 7.7409e-02
35 H -4.8772e+01 6.2781e-02
36 H -4.9702e+01 1.0411e-01
37 H -5.0362e+01 1.6380e-01
38 H -5.1114e+01 2.5164e-01
Người ta thấy rằng có những thay đổi nhỏ trong ước tính điểm, trong khi giới hạn độ tin cậy đã giảm xuống còn khoảng 60% so với những gì được tạo ra bởi OLS.
Điểm chính tôi muốn thực hiện là tất cả các tính toán được sửa đổi sẽ tự động xảy ra khi một thay đổi một dòng mã trong tệp TPL.