ichG
- gtichG
Dies gibt Ihnen die geschätzte Varianz für diese abhängige Variable. Nehmen Sie die Quadratwurzel, um die geschätzte Standardabweichung zu erhalten. dann sind die Konfidenzgrenzen der vorhergesagte Wert + - zwei Standardabweichungen. Dies ist Standard Likelihood Zeug. Für den Sonderfall einer nichtlinearen Regression können Sie die Freiheitsgrade korrigieren. Sie haben 10 Beobachtungen und 4 Parameter, sodass Sie die Schätzung der Varianz im Modell durch Multiplikation mit 10/6 erhöhen können. Mehrere Softwarepakete erledigen dies für Sie. Ich habe Ihr Modell in AD Model in AD Model Builder geschrieben und angepasst und die (unveränderten) Abweichungen berechnet. Sie werden sich geringfügig von Ihren unterscheiden, da ich die Werte etwas erraten musste.
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
Dies kann für jede abhängige Variable in AD Model Builder durchgeführt werden. Man deklariert eine Variable an der entsprechenden Stelle im Code wie folgt
sdreport_number dep
und schreibt den Code, um die abhängige Variable wie folgt auszuwerten
dep=sqrt(V0-cube(Bp0)/(1+2*max(V)));
Beachten Sie, dass dies für einen Wert der unabhängigen Variablen ausgewertet wird, der doppelt so groß ist wie der größte Wert, der in der Modellanpassung beobachtet wurde. Passen Sie das Modell an und Sie erhalten die Standardabweichung für diese abhängige Variable
19 dep 7.2535e+00 1.0980e-01
Ich habe das Programm so geändert, dass es Code zur Berechnung der Konfidenzgrenzen für die Enthalpie-Volumen-Funktion enthält. Die TPL-Datei (Code) sieht aus
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)));
Dann habe ich das Modell umgerüstet, um die Standardentwickler für die Schätzungen von H zu erhalten.
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
Diese werden für Ihre beobachteten V-Werte berechnet, können jedoch leicht für jeden Wert von V berechnet werden.
Es wurde darauf hingewiesen, dass dies tatsächlich ein lineares Modell ist, für das es einen einfachen R-Code gibt, um die Parameterschätzung über OLS durchzuführen. Dies ist besonders für naive Benutzer sehr ansprechend. Seit der Arbeit von Huber vor über dreißig Jahren wissen wir jedoch oder sollten wissen, dass man OLS wahrscheinlich fast immer durch eine mäßig robuste Alternative ersetzen sollte. Der Grund, warum dies meiner Meinung nach nicht routinemäßig gemacht wird, ist, dass robuste Methoden von Natur aus nichtlinear sind. Unter diesem Gesichtspunkt sind die einfachen ansprechenden OLS-Methoden in R eher eine Falle als ein Merkmal. Ein Vorteil des AD Model Builder-Ansatzes ist die integrierte Unterstützung für nichtlineare Modellierung. Um den Code der kleinsten Quadrate in eine robuste normale Mischung zu ändern, muss nur eine Codezeile geändert werden. Die Linie
f=0.5*nobs*log(v)+sum(r2)/(2.0*v);
wird geändert in
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))));
Das Ausmaß der Überdispersion in den Modellen wird durch den Parameter a gemessen. Wenn a gleich 1,0 ist, ist die Varianz dieselbe wie für das normale Modell. Wenn die Varianz durch Ausreißer aufgeblasen wird, erwarten wir, dass a kleiner als 1,0 ist. Für diese Daten beträgt die Schätzung von a ungefähr 0,23, so dass die Varianz ungefähr 1/4 der Varianz für das normale Modell beträgt. Die Interpretation ist, dass Ausreißer die Varianzschätzung um einen Faktor von ungefähr 4 erhöht haben. Dies hat zur Folge, dass die Konfidenzgrenzen für Parameter für das OLS-Modell vergrößert werden. Dies bedeutet einen Effizienzverlust. Für das normale Mischungsmodell betragen die geschätzten Standardabweichungen für die Enthalpievolumenfunktion
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
Man sieht, dass sich die Punktschätzungen geringfügig ändern, während die Konfidenzgrenzen auf etwa 60% der von OLS erstellten Grenzwerte gesenkt wurden.
Der wichtigste Punkt, den ich ansprechen möchte, ist, dass alle geänderten Berechnungen automatisch erfolgen, sobald die eine Codezeile in der TPL-Datei geändert wird.