計量經濟學
R中的聯立方程模型
我使用該
systemfit
軟體包來評估聯立方程模型(例如 2SLS)。但是我不明白如何使用這個包使用外生變數的新值來預測內生變數。因此,我想知道如何使用“systemfit”包中的聯立方程模型或以其他方式進行預測(包括預測區間)(也許有人知道其他包)。
我也對如何計算模型的彈性係數感興趣。
我將感謝有關在 R 中建模聯立方程主題的文獻。
如果您在Econometrics Task View網頁中搜尋“聯立方程”,您可以找到兩個結果: systemfit和bimets包。
正如您所說,systemfit軟體包是一個強大的工具,用於計量線性和非線性方程聯立系統的計量經濟學估計,但它只提供擬合程序,因此不能在您的範例中使用它來進行預測。
另一方面,bimets包實現了模擬和預測程序以及乘數分析等;因此,您可以輕鬆計算彈性。
還可以查看有關 R 中 SEM 的 Rstudio 部落格文章: https ://rviews.rstudio.com/2021/01/22/sem-time-series-modeling/
R 中的簡單 Klein 模型範例如下:
#load library library(bimets) #define the Klein model kleinModelDef <- " MODEL COMMENT> Modified Klein Model 1 of the U.S. Economy with PDL, COMMENT> autocorrelation on errors, restrictions and conditional equation evaluations COMMENT> Consumption with autocorrelation on errors BEHAVIORAL> cn TSRANGE 1923 1 1940 1 EQ> cn = a1 + a2*p + a3*TSLAG(p,1) + a4*(wp+wg) COEFF> a1 a2 a3 a4 ERROR> AUTO(2) COMMENT> Investment with restrictions BEHAVIORAL> i TSRANGE 1923 1 1940 1 EQ> i = b1 + b2*p + b3*TSLAG(p,1) + b4*TSLAG(k,1) COEFF> b1 b2 b3 b4 RESTRICT> b2 + b3 = 1 COMMENT> Demand for Labor with PDL BEHAVIORAL> wp TSRANGE 1923 1 1940 1 EQ> wp = c1 + c2*(y+t-wg) + c3*TSLAG(y+t-wg,1) + c4*time COEFF> c1 c2 c3 c4 PDL> c3 1 2 COMMENT> Gross National Product IDENTITY> y EQ> y = cn + i + g - t COMMENT> Profits IDENTITY> p EQ> p = y - (wp+wg) COMMENT> Capital Stock with IF switches IDENTITY> k EQ> k = TSLAG(k,1) + i IF> i > 0 IDENTITY> k EQ> k = TSLAG(k,1) IF> i <= 0 END " #load the model kleinModel <- LOAD_MODEL(modelText = kleinModelDef) #define data kleinModelData <- list( cn =TIMESERIES(39.8,41.9,45,49.2,50.6,52.6,55.1,56.2,57.3,57.8, 55,50.9,45.6,46.5,48.7,51.3,57.7,58.7,57.5,61.6,65,69.7, START=c(1920,1),FREQ=1), g =TIMESERIES(4.6,6.6,6.1,5.7,6.6,6.5,6.6,7.6,7.9,8.1,9.4,10.7, 10.2,9.3,10,10.5,10.3,11,13,14.4,15.4,22.3, START=c(1920,1),FREQ=1), i =TIMESERIES(2.7,-.2,1.9,5.2,3,5.1,5.6,4.2,3,5.1,1,-3.4,-6.2, -5.1,-3,-1.3,2.1,2,-1.9,1.3,3.3,4.9, START=c(1920,1),FREQ=1), k =TIMESERIES(182.8,182.6,184.5,189.7,192.7,197.8,203.4,207.6, 210.6,215.7,216.7,213.3,207.1,202,199,197.7,199.8, 201.8,199.9,201.2,204.5,209.4, START=c(1920,1),FREQ=1), p =TIMESERIES(12.7,12.4,16.9,18.4,19.4,20.1,19.6,19.8,21.1,21.7, 15.6,11.4,7,11.2,12.3,14,17.6,17.3,15.3,19,21.1,23.5, START=c(1920,1),FREQ=1), wp =TIMESERIES(28.8,25.5,29.3,34.1,33.9,35.4,37.4,37.9,39.2,41.3, 37.9,34.5,29,28.5,30.6,33.2,36.8,41,38.2,41.6,45,53.3, START=c(1920,1),FREQ=1), y =TIMESERIES(43.7,40.6,49.1,55.4,56.4,58.7,60.3,61.3,64,67,57.7, 50.7,41.3,45.3,48.9,53.3,61.8,65,61.2,68.4,74.1,85.3, START=c(1920,1),FREQ=1), t =TIMESERIES(3.4,7.7,3.9,4.7,3.8,5.5,7,6.7,4.2,4,7.7,7.5,8.3,5.4, 6.8,7.2,8.3,6.7,7.4,8.9,9.6,11.6, START=c(1920,1),FREQ=1), time=TIMESERIES(NA,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0, 1,2,3,4,5,6,7,8,9,10, START=c(1920,1),FREQ=1), wg =TIMESERIES(2.2,2.7,2.9,2.9,3.1,3.2,3.3,3.6,3.7,4,4.2,4.8, 5.3,5.6,6,6.1,7.4,6.7,7.7,7.8,8,8.5, START=c(1920,1),FREQ=1) ); #load time series into the model object kleinModel <- LOAD_MODEL_DATA(kleinModel,kleinModelData) ## Load model data "kleinModelData" into model "kleinModelDef"... ## ...LOAD MODEL DATA OK #estimate the model kleinModel <- ESTIMATE(kleinModel) #In order to forecast the model up to 1944, #we need to extend exogenous variables up to 1944 kleinModel$modelData <- within(kleinModel$modelData,{ wg = TSEXTEND(wg, UPTO=c(1944,1),EXTMODE='CONSTANT') t = TSEXTEND(t, UPTO=c(1944,1),EXTMODE='LINEAR') g = TSEXTEND(g, UPTO=c(1944,1),EXTMODE='CONSTANT') k = TSEXTEND(k, UPTO=c(1944,1),EXTMODE='LINEAR') time = TSEXTEND(time,UPTO=c(1944,1),EXTMODE='LINEAR') }) #forecast model kleinModel <- SIMULATE(kleinModel ,simType='FORECAST' ,TSRANGE=c(1941,1,1944,1) ,simConvergence=0.00001 ,simIterLimit=100 ,quietly=TRUE ) #get forecasted GNP TABIT(kleinModel$simulation$y) ## ## DATE, PER, kleinModel$simulation$y ## ## 1941, 1 , 125.3 ## 1942, 1 , 172.5 ## 1943, 1 , 185.6 ## 1944, 1 , 141.1