Learn R Programming

momentfit (version 1.0)

restModel-methods: ~~ Methods for Function restModel in Package momentfit ~~

Description

It converts momentModel objects into its restricted counterpart.

Usage

# S4 method for linearModel
restModel(object, R, rhs=NULL)

# S4 method for slinearModel restModel(object, R, rhs=NULL)

# S4 method for snonlinearModel restModel(object, R, rhs=NULL)

# S4 method for nonlinearModel restModel(object, R, rhs=NULL)

# S4 method for formulaModel restModel(object, R, rhs=NULL)

# S4 method for functionModel restModel(object, R, rhs=NULL)

Arguments

object

An object of class "momentModel" or "sysModel".

R

Either a matrix or a vector of characters for linear models and a list of formulas for nonlinear models. See details below.

rhs

The right hand side of the linear restrictions. It is ignored for nonlinear models.

Methods

signature(object = "linearModel")

Method for object of class linearModel.

signature(object = "linearGel")

Method for all classes related to linearGel.

signature(object = "slinearModel")

Method for object of class slinearModel.

signature(object = "snonlinearModel")

Method for object of class snonlinearModel.

signature(object = "nonlinearModel")

Method for object of class nonlinearModel.

signature(object = "nonlinearGel")

Method for object of class nonlinearGel.

signature(object = "functionModel")

Method for object of class functionModel.

signature(object = "functionGel")

Method for object of class functionGel.

signature(object = "formulaModel")

Method for object of class formulaModel.

signature(object = "formulaGel")

Method for object of class formulaGel.

Details

For linear models and linear restrictions, R is in general a matrix. In that case, the restrictions are in the form \(R\theta=q\), where \(\theta\) is the vector of coefficients. It is also possible, for linear models, to define R as a character vector with the restrictions being expressed explicitly. In that case, the names of the coefficients are the names of the variables. For example, if we want the sum of the coefficients of the variables x1 and x2 to be equal to 0, we can set R to "x1+x2=0".

Nonlinear restrictions are not allowed for linear models. However, it is possible by converting linear models into nonlinear models before imposing the nonlinear restrictions. This is done by using the as method. For example, we can convert the linear model mod to a nonlinear model using the command mod <- as(mod, "nonlinearModel").

For all other types (nonlinearModel, formulaModel and functionModel), restrictions in R must be in the form: one coefficient as a function of the others. We can express the restriction as a formula (or a list of formula for more than one restriction) or a character vector. Note that it is the names of the coefficients that appear in the R, not the names of the variables. For example, the following is a valid restriction: "theta1=theta2*theta3+1". Although the following is the same restriction, it is not a valid entry for R: "theta1-theta2*theta3=1". This condition is part of the validity test when restricted model are created. If it is not satisfied, an error message is returned.

Examples

Run this code
data(simData)
theta <- c(beta0=1,beta1=2)

## Unrestricted model
model1 <- momentModel(y~x1+x2+x3+z1, ~x1+x2+z1+z2+z3+z4, data=simData)

## Using matrix R
R <- matrix(c(1,1,0,0,0,0,0,2,0,0,0,0,0,1,-1),3,5, byrow=TRUE)
q <- c(0,1,3)

rmodel1 <- restModel(model1, R, q)
rmodel1

## Using character
## Many ways to write the constraints

R1 <- c("x1","2*x2+z1=2", "4+x3*5=3")
rmodel1 <- restModel(model1, R1)
rmodel1

## Works with interaction and identity function I()

model1 <- momentModel(y~x1*x2+exp(x3)+I(z1^2), ~x1+x2+z1+z2+z3+z4, data=simData)
R1 <- c("x1","exp(x3)+2*x1:x2", "I(z1^2)=3")
rmodel1 <- restModel(model1, R1)
rmodel1

## nonlinear constraints on a linear model
## we need to convert the linear model into a nonlinear one

model <- momentModel(y~x1+x2+x3+z1, ~x1+x2+z1+z2+z3+z4, data=simData)
NLmodel <- as(model, "nonlinearModel")

## To avoid having unconventional parameter names, which happens
## when I() is used or with interaction, the X's and coefficients are
## renamed

NLmodel@parNames

## Restriction can be a list of formula or vector of characters
## For the latter, it will be converted into a list of formulas

R1 <- c("theta2=2", "theta3=theta4^2")
rmod1 <- restModel(NLmodel, R1)
res1 <- gmmFit(rmod1)
res1
## recover the orignial form
coef(rmod1, coef(res1))

## with formulas

R2 <- list(theta2~2, theta3~1/theta4)
rmod2 <- restModel(NLmodel, R2)
res2 <- gmmFit(rmod2)
res2
coef(rmod2, coef(res2))

## The same can be done with function based models

Run the code above in your browser using DataLab