Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

an R package for testing, estimating and evaluating the Panel Smooth Transition Regression (PSTR) model.

License

NotificationsYou must be signed in to change notification settings

yukai-yang/PSTR

Repository files navigation

CRAN_Status_Badge

The PSTR package implements the Panel Smooth Transition Regression(PSTR) modelling. You can find the package on CRAN, see

PSTR@CRAN

The modelling procedure consists of three stages: Specification,Estimation and Evaluation. The package offers tools helping the users toconduct model specification tests, to do PSTR model estimation, and todo model evaluation.

The cluster-dependency and heteroskedasticity-consistent tests areimplemented in the package.

The wild bootstrap and cluster wild bootstrap tests are alsoimplemented.

Parallel computation (as an option) is implemented in some functions,especially the bootstrap tests. Therefore, the package suits tasksrunning many cores on super-computation servers.

How to install

You can either install the stable version from CRAN

install.packages("PSTR")

or install the development version from GitHub

devtools::install_github("yukai-yang/PSTR")

provided that the package “devtools” has been installed beforehand.

Example

After installing the package, you need to load (attach better say) it byrunning the code

library(PSTR)

You can first check the information and the current version number byrunning

version()#> PSTR version 1.3.0 (Yellow Panel)

Then you can take a look at all the available functions and data in thepackage

ls( grep("PSTR", search()) )#>  [1] "EstPSTR"           "EvalTest"          "Hansen99"#>  [4] "LinTest"           "NewPSTR"           "plot_coefficients"#>  [7] "plot_response"     "plot_target"       "plot_transition"#> [10] "sunspot"           "version"           "WCB_HETest"#> [13] "WCB_LinTest"       "WCB_TVTest"

The data

In the package, a data set called “Hansen99” is offered to give promptexample. For details of the data set, you can run

?Hansen99

Initialization

You can create a new object of the class PSTR by doing

pstr= NewPSTR(Hansen99,dep='inva',indep=4:20,indep_k=c('vala','debta','cfa','sales'),tvars=c('vala'),im=1,iT=14)print(pstr)#> #################################################################################> ## PSTR 1.3.0 (Yellow Panel)#> #################################################################################> ********************************************************************************#> Summary of the model:#> --------------------------------------------------------------------------------#>   time horizon sample size = 14,  number of individuals = 560#> --------------------------------------------------------------------------------#> Dependent variable:  inva#> --------------------------------------------------------------------------------#> Explanatory variables in the linear part:#>   dt_75 dt_76 dt_77 dt_78 dt_79 dt_80 dt_81 dt_82 dt_83 dt_84 dt_85 dt_86 dt_87 vala debta cfa sales#> --------------------------------------------------------------------------------#> Explanatory variables in the non-linear part:#>   vala debta cfa sales#> --------------------------------------------------------------------------------#> Potential transition variable(s) to be tested:#>   vala#> #################################################################################> ********************************************************************************#> Results of the linearity (homogeneity) tests:#> ********************************************************************************#> Sequence of homogeneity tests for selecting number of switches 'm':#> ********************************************************************************#> ################################################################################

It says that the data set “Hansen99” is used, the dependent variable is“inva”, the variables in the data from column 4 to 20 are theexplanatory variables in the linear part (though you can write down thenames of them), the explanatory variables in the nonlinear part are thefour ones in “indep_k”, and the potential transition variable is “vala”(Tobin’s Q).

Now you can see that the “NewPSTR” is basically defining the settings ofthe model.

Note that you can print the object of the class PSTR. By default, itgives you a summary of the PSTR model. They are mainly about which oneis the dependent variable, which ones are explanatory variables andetc..

Specification

The following code does linearity tests

pstr= LinTest(use=pstr) print(pstr,"tests")#> #################################################################################> ## PSTR 1.3.0 (Yellow Panel)#> #################################################################################> ********************************************************************************#> Results of the linearity (homogeneity) tests:#> --------------------------------------------------------------------------------#> LM tests based on transition variable 'vala'#>   m  LM_X PV  LM_F PV HAC_X        PV HAC_F        PV#>   1 125.3  0 28.99  0 30.03 4.819e-06 6.952 1.396e-05#> ********************************************************************************#> Sequence of homogeneity tests for selecting number of switches 'm':#> --------------------------------------------------------------------------------#> LM tests based on transition variable 'vala'#>   m  LM_X PV  LM_F PV HAC_X        PV HAC_F        PV#>   1 125.3  0 28.99  0 30.03 4.819e-06 6.952 1.396e-05#> ********************************************************************************#> ################################################################################

You can see that the function “LinTest” takes the PSTR object “pstr” andoverwrites it when return. This is the way I recommend as the functionshandling the PSTR object in the package update the object by adding newatrributes or members. However, the same function will change the valuesof the attributes it adds. You can of course create new PSTR objects totake the return values in order to save the results from differentsettings of the model.

You can do the wild bootstrap and wild cluster bootstrap by running thefollowing code. (Warning! Don’t run it except that you have at least 50cores!)

iB=5000# the number of repetitions in the bootstraplibrary(snowfall)pstr= WCB_LinTest(use=pstr,iB=iB,parallel=T,cpus=50)

It takes a long long time to run the bootstrap. This function isdeveloped for those who work on some super-computation server with manycores and a large memory. Note that you will have to attach the“snowfall” package manually.

But of course, you can try the function on your personal computer byreducing the number of repetitions and the cores.

pstr= WCB_LinTest(use=pstr,iB=4,parallel=T,cpus=2)

Estimation

When you determine which transition variable to use for the estimation,in this case “inva”, you can estimate the PSTR model

pstr= EstPSTR(use=pstr,im=1,iq=1,useDelta=T,par=c(-0.462,0),vLower=4,vUpper=4)print(pstr,"estimates")

By default, the “optim” method “L-BFGS-B” is used, but you can changethe method for estimation by doing

pstr= EstPSTR(use=pstr,im=1,iq=1,useDelta=T,par=c(-0.462,0),method="CG")print(pstr,"estimates")#> #################################################################################> ## PSTR 1.3.0 (Yellow Panel)#> #################################################################################> ********************************************************************************#> Results of the PSTR estimation:#> --------------------------------------------------------------------------------#> Transition variable 'vala' is used in the estimation.#> --------------------------------------------------------------------------------#> Parameter estimates in the linear part (first extreme regime) are#>        dt_75_0   dt_76_0   dt_77_0   dt_78_0  dt_79_0  dt_80_0   dt_81_0#> Est  -0.002827 -0.007512 -0.005812 0.0003951 0.002464 0.006085 0.0004164#> s.e.  0.002431  0.002577  0.002649 0.0027950 0.002708 0.002910 0.0029220#>        dt_82_0   dt_83_0    dt_84_0  dt_85_0   dt_86_0   dt_87_0  vala_0#> Est  -0.007802 -0.014410 -0.0009146 0.003467 -0.001591 -0.008606 0.11500#> s.e.  0.002609  0.002701  0.0030910 0.003232  0.003202  0.003133 0.04073#>       debta_0   cfa_0  sales_0#> Est  -0.03392 0.10980 0.002978#> s.e.  0.03319 0.04458 0.008221#> --------------------------------------------------------------------------------#> Parameter estimates in the non-linear part are#>        vala_1 debta_1    cfa_1  sales_1#> Est  -0.10370 0.02892 -0.08801 0.005945#> s.e.  0.03981 0.04891  0.05672 0.012140#> --------------------------------------------------------------------------------#> Parameter estimates in the second extreme regime are#>      vala_{0+1} debta_{0+1} cfa_{0+1} sales_{0+1}#> Est    0.011300    -0.00500   0.02183    0.008923#> s.e.   0.001976     0.01739   0.01885    0.004957#> --------------------------------------------------------------------------------#> Non-linear parameter estimates are#>       gamma        c_1#> Est  0.6299 -0.0002008#> s.e. 0.1032  0.7252000#> --------------------------------------------------------------------------------#> Estimated standard deviation of the residuals is 0.04301#> ********************************************************************************#> ################################################################################

The argument “useDelta” determines the type of the initial value for thesmoothness parameter. By default “useDelta = F” means that the firstinitial value in “par” is the “gamma” instead of “delta”. Here we usethe settings “useDelta = T” and “par = c(1.6, .5)” means that the firstvalue of “par” is the “delta” and its value is 1.6. Note that “delta”and “gamma” has the relationship “gamma = exp(delta)”. Thus, thefollowing two sentences are equivalent

pstr= EstPSTR(use=pstr,im=1,iq=1,useDelta=T,par=c(-0.462,0),method="CG")pstr= EstPSTR(use=pstr,im=1,iq=1,par=c(exp(-0.462),0),method="CG")

Note that the estimation of a linear panel regression model is alsoimplemented. The user can do it by simply running

pstr0= EstPSTR(use=pstr)print(pstr0,"estimates")#> #################################################################################> ## PSTR 1.3.0 (Yellow Panel)#> #################################################################################> ********************************************************************************#> A linear panel regression with fixed effects is estimated.#> --------------------------------------------------------------------------------#> Parameter estimates are#>          dt_75     dt_76     dt_77    dt_78    dt_79    dt_80    dt_81#> Est  -0.007759 -0.008248 -0.004296 0.002356 0.004370 0.008246 0.004164#> s.e.  0.002306  0.002544  0.002718 0.002820 0.002753 0.002959 0.002992#>          dt_82     dt_83    dt_84    dt_85    dt_86     dt_87     vala#> Est  -0.005294 -0.010040 0.006864 0.009740 0.007027 0.0004091 0.008334#> s.e.  0.002664  0.002678 0.003092 0.003207 0.003069 0.0030080 0.001259#>          debta     cfa    sales#> Est  -0.016380 0.06506 0.007957#> s.e.  0.005725 0.01079 0.002412#> --------------------------------------------------------------------------------#> Estimated standard deviation of the residuals is 0.04375#> ********************************************************************************#> ################################################################################

Evaluation

The evaluation tests can be done based on the estimated model

## evaluatio testspstr1= EvalTest(use=pstr,vq=pstr$mQ[,1])

Note that in the “EvalTest”, only one transition variable is taken eachtime for the no remaining nonlinearity test. This is different from the“LinTest” function which can take several transition variables. This isthe reason why I save the results into new PSTR objects “pstr1” insteadof overwriting. By doing so, I can save more test results from differenttransition variables in new objects.

The user can also do the wild bootstrap and wild cluster bootstrap inthe following way, provided that he or she has the super-computationresources.

iB=5000cpus=50## wild bootstrap time-varyint evaluation testpstr= WCB_TVTest(use=pstr,iB=iB,parallel=T,cpus=cpus)## wild bootstrap heterogeneity evaluation testpstr1= WCB_HETest(use=pstr1,vq=pstr$mQ[,1],iB=iB,parallel=T,cpus=cpus)

Note that the evaluation functions do not accept the returned object“pstr0” from a linear panel regression model, as the evaluation testsare designed for the estimated PSTR model but not a linear one.

Plotting

After estimating the PSTR model, you can plot the estimated transitionfunction by running

plot_transition(pstr)

or a better plot with more arguments

plot_transition(pstr,fill='blue',xlim=c(-2,20),color="dodgerblue4",size=2,alpha=.3)+ggplot2::geom_vline(ggplot2::aes(xintercept=pstr$c- log(1/0.95-1)/pstr$gamma),color='blue')+ggplot2::labs(x="customize the label for x axis",y="customize the label for y axis",title="The Title",subtitle="The subtitle",caption="Make a caption here.")

You can also plot the curves of the coefficients, the standard errorsand the p-values against the transition variable.

ret= plot_coefficients(pstr,vars=1:4,length.out=100,color="dodgerblue4",size=2)ret[[1]]

The plotting functionplot_response, which depicts the relationshipbetween which I called response, some explanatory variablexi**t and the transition variableqi**t inthe PSTR model.

The response[ϕ0+ϕ1gi**t(qi**t;γ,c)]xi**tis actually the contribution that the varabilexi**tmakes to the conditional expectation of the dependentyi**t through the smooth transition mechanism.

We can see that the response against the variable is a straight line ifthere is no nonlinearity. We can plot a surface if the variablexi**t and the transition variableqi**tare distinct, with z-axis the response, x- and y- axises the twovariables. And it becomes a curve if the variablexi**tand the transition variableqi**t are identical.

We make the graph by running

ret= plot_response(obj=pstr,vars=1:4,log_scale= c(F,T),length.out=100)

ret takes the return value of the function. We make the graphs for allthe four variables in nonlinear part by usingvars=1:4 (variable namescan also be used for specification). Note that we do not do it for thevariables in the linear part, as they produce straight lines or planes.log_scale is a 2-vector of booleans specifying, for each graph,whether the first (some variable in the nonlinear part) or the second(the transition variable) should be log scaled.length.out gives thenumber of points in the grid for producing the surface or curve. Alength.out of 100 points looks fine enough.

You may think of “what if I don’t wanna make all the variables logscaled?”. The solution is to make the graphs separately by runningsomething like

ret1= plot_response(obj=pstr,vars=1,log_scale= c(F,T),length.out=100)ret2= plot_response(obj=pstr,vars=2,log_scale= c(T,T),length.out=100)

Let us take a look the elements inret

attributes(ret)#> $names#> [1] "vala"  "debta" "cfa"   "sales"

We see thatret is a list containing elements whose names are thevariables’ names that we specified when runningplot_response.

Yes, but they are now plottable objects in the sense that you can simplyplot them by running

ret$vala

The numbers on the x-axis look not so good as it is difficult to findwhere the turning-point is.

Theggplot2 package allows us to manually paint the numbers (the PSTRpackage collaborates very well with some prevailling packages), and eventhe label on x-axis (and many more).

ret$vala+ggplot2::scale_x_log10(breaks=c(.02,.05,.1,.2,.5,1,2,5,10,20))+ggplot2::labs(x="Tobin's Q")

Now we see very clearly that the turning-point approximately 0.5 cut thecurve into two regimes, and the two regimes behave so differently. Thisgraph is about the lagged Tobin’s Q’s contribution to the expectedinvestment. Low Q firms (whose potentials are evaluated to be low by thefinancial market) look rather reluctant to change their futureinvestment plan, or maybe get changed.

Then let us proceed to the surfaces. Check the response from the debtaby running

ret$debta

The graph is “living” and you can scracth on it by using your mouse.“vala_y” shows that the y-axis is the Q, and “debta_x” shows that thex-axis is the debt. The tool bar on up-right helps you to rotate, pan,zoom and save the graph.

Note that the transition variable Q is in log scale while debt is not.

It is very clear that low Q firms’ future investment will be affected bythe current debt situation. The more debt there is, the less investmentthere will be. However, it is not the case for high Q firms who has goodpotential and is not sensitive to the debt.

The following two living graphs are for the cash flow and the sales.

ret$cfa
ret$sales

Packages

No packages published

Contributors2

  •  
  •  

Languages


[8]ページ先頭

©2009-2025 Movatter.jp