Re: [R] System GMM yields identical results for any weighting matrix

2024-04-23 Thread Bert Gunter
Sorry, my advice is incorrect (and I should have known better!). Task
views are to search for relevant packages, not for posting questions.
R "special interest groups" (SIGs) are for the latter, which in your
case might be this one:
https://stat.ethz.ch/mailman/listinfo/r-sig-finance .

Cheers,
Bert


On Tue, Apr 23, 2024 at 11:45 AM Bert Gunter  wrote:
>
> Generally speaking, this sort of detailed statistical question about a
> speccial package in R does not get a reply on this general R
> programming help list. Instead, I suggest you either email the
> maintainer (found by ?maintainer) or ask a question on a relevant R
> task view, such as
> https://cran.r-project.org/web/views/Econometrics.html . (or any other
> that you judge to be more appropriate).
>
> Cheers,
> Bert
>
> On Tue, Apr 23, 2024 at 9:41 AM Richard Hardy  wrote:
> >
> > A copy of this question can be found on Cross Validated:
> > https://stats.stackexchange.com/questions/645362
> >
> > I am estimating a system of seemingly unrelated regressions (SUR) in R.
> > Each of the equations has one unique regressor and one common regressor. I
> > am using `gmm::sysGmm` and am experimenting with different weighting
> > matrices. I get the same results (point estimates, standard errors and
> > anything else that I can see (**except** for the value of the $J$-test)
> > regardless of the weighting matrix. I do not think this is correct.
> > The phenomenon persists regardless of what type of covariance matrix
> > estimator I use: `MDS`, `CondHom` or `HAC`.
> > It also persists regardless of whether I use unrestricted estimation or
> > restrict the coefficients on one of the variables (the common regressor) to
> > be equal across equations.
> >
> > **Question:** Why does system GMM via `gmm::sysGmm` yield identical results
> > for any weighting matrix? How can I make it yield proper results that vary
> > with the weighting matrix (if that makes sense and I am not mistaken, of
> > course)?
> >
> > -- R code for a reproducible example
> >
> > library(gmm)
> > library(systemfit)
> >
> > # Generate and prepare the data
> > n <- 1000 # sample size
> > m <- 100  # length of the "second part" of the sample
> > N <- 3# number of equations
> > set.seed(321); x <- matrix(rnorm(n*N),ncol=N); colnames(x) <-
> > paste0("x",1:N) # generate regressors
> > dummy <- c( rep(0,n-m), rep(1,m) ) # generate a common regressor
> > x <- cbind(x,dummy)# include the common regressor with the
> > rest of the regressors
> > set.seed(123); y <- matrix(rnorm(n*N),ncol=N); colnames(y) <-
> > paste0("y",1:N) # a placeholder for dependent variables
> > for(i in 1:N){
> >  y[,i] <- i + sqrt(i)*x[,i] - i*dummy + y[,i]*15*sqrt(i)
> >  # y[,i] is a linear function of x[,i] and dummy,
> >  # plus an error term with equation-specific variance
> > }
> > data1 <- as.data.frame(cbind(y,x)) # create a data frame of all data (y and
> > x)
> >
> > # Create the model equations and moment conditions
> > ES_g = ES_h <- list() # ES ~ equation system
> > for(i in 1:N){
> >  ES_g[[i]] <- as.formula(assign(paste0("eq",i), value=paste0("y",i," ~
> > x",i," + dummy"))) # define linear equations of SUR
> >  ES_h[[i]] <- as.formula(assign(paste0("eq",i), value=paste0(   "~
> > x",i," + dummy"))) # define the moment conditions for GMM
> > }
> >
> > # Estimate a WLS-type weighting matrix to use as a user-specified weighting
> > matrix in GMM
> > m0 <- systemfit(formula=ES_g, method="OLS", data=data1)
> > OLSmat <- diag(diag(m0$residCov)); Wmat <- solve(OLSmat)
> >
> > # Choose the type of covariance matrix in GMM
> > vc1 <- "MDS"
> > vc1 <- "CondHom"
> > vc1 <- "HAC"
> > #vc1 <- "TrueFixed"
> >
> > # Choose between restricted and unrestricted estimation
> > cec1=NULL # unrestricted
> > cec1=3# restrict the coefficient on the dummy to be equal across
> > equations
> >
> > # Estimate the model with `sysGmm` using different weighting matrices:
> > identity, "optimal" and manually specified
> > m1a <- sysGmm(g=ES_g, h=ES_h, wmatrix="ident"  , weightsMatrix=NULL,
> > vcov=vc1, crossEquConst=cec1, data=data1); summary(m1a)
> > m1b <- sysGmm(g=ES_g, h=ES_h, wmatrix="optimal", weightsMatrix=NULL,
> > vcov=vc1, crossEquConst=cec1, data=data1); summary(m1b)
> > m1c <- sysGmm(g=ES_g, h=ES_h,weightsMatrix=Wmat,
> > vcov=vc1, crossEquConst=cec1, data=data1); summary(m1c)
> >
> > -- R session info:
> >
> > R version 4.3.3 (2024-02-29 ucrt)
> > Platform: x86_64-w64-mingw32/x64 (64-bit)
> > Running under: Windows 10 x64 (build 19045)
> >
> > Matrix products: default
> >
> > locale:
> > [1] LC_COLLATE=English_United States.utf8  LC_CTYPE=English_United
> > States.utf8
> > [3] LC_MONETARY=English_United States.utf8 LC_NUMERIC=C
> >
> > [5] LC_TIME=English_United States.utf8
> >
> > time zone: Europe/Berlin
> > tzcode source: internal
> >
> > attached base packages:
> > [1] stats graphics  grDevices utils datasets  

Re: [R] System GMM yields identical results for any weighting matrix

2024-04-23 Thread Bert Gunter
Generally speaking, this sort of detailed statistical question about a
speccial package in R does not get a reply on this general R
programming help list. Instead, I suggest you either email the
maintainer (found by ?maintainer) or ask a question on a relevant R
task view, such as
https://cran.r-project.org/web/views/Econometrics.html . (or any other
that you judge to be more appropriate).

Cheers,
Bert

On Tue, Apr 23, 2024 at 9:41 AM Richard Hardy  wrote:
>
> A copy of this question can be found on Cross Validated:
> https://stats.stackexchange.com/questions/645362
>
> I am estimating a system of seemingly unrelated regressions (SUR) in R.
> Each of the equations has one unique regressor and one common regressor. I
> am using `gmm::sysGmm` and am experimenting with different weighting
> matrices. I get the same results (point estimates, standard errors and
> anything else that I can see (**except** for the value of the $J$-test)
> regardless of the weighting matrix. I do not think this is correct.
> The phenomenon persists regardless of what type of covariance matrix
> estimator I use: `MDS`, `CondHom` or `HAC`.
> It also persists regardless of whether I use unrestricted estimation or
> restrict the coefficients on one of the variables (the common regressor) to
> be equal across equations.
>
> **Question:** Why does system GMM via `gmm::sysGmm` yield identical results
> for any weighting matrix? How can I make it yield proper results that vary
> with the weighting matrix (if that makes sense and I am not mistaken, of
> course)?
>
> -- R code for a reproducible example
>
> library(gmm)
> library(systemfit)
>
> # Generate and prepare the data
> n <- 1000 # sample size
> m <- 100  # length of the "second part" of the sample
> N <- 3# number of equations
> set.seed(321); x <- matrix(rnorm(n*N),ncol=N); colnames(x) <-
> paste0("x",1:N) # generate regressors
> dummy <- c( rep(0,n-m), rep(1,m) ) # generate a common regressor
> x <- cbind(x,dummy)# include the common regressor with the
> rest of the regressors
> set.seed(123); y <- matrix(rnorm(n*N),ncol=N); colnames(y) <-
> paste0("y",1:N) # a placeholder for dependent variables
> for(i in 1:N){
>  y[,i] <- i + sqrt(i)*x[,i] - i*dummy + y[,i]*15*sqrt(i)
>  # y[,i] is a linear function of x[,i] and dummy,
>  # plus an error term with equation-specific variance
> }
> data1 <- as.data.frame(cbind(y,x)) # create a data frame of all data (y and
> x)
>
> # Create the model equations and moment conditions
> ES_g = ES_h <- list() # ES ~ equation system
> for(i in 1:N){
>  ES_g[[i]] <- as.formula(assign(paste0("eq",i), value=paste0("y",i," ~
> x",i," + dummy"))) # define linear equations of SUR
>  ES_h[[i]] <- as.formula(assign(paste0("eq",i), value=paste0(   "~
> x",i," + dummy"))) # define the moment conditions for GMM
> }
>
> # Estimate a WLS-type weighting matrix to use as a user-specified weighting
> matrix in GMM
> m0 <- systemfit(formula=ES_g, method="OLS", data=data1)
> OLSmat <- diag(diag(m0$residCov)); Wmat <- solve(OLSmat)
>
> # Choose the type of covariance matrix in GMM
> vc1 <- "MDS"
> vc1 <- "CondHom"
> vc1 <- "HAC"
> #vc1 <- "TrueFixed"
>
> # Choose between restricted and unrestricted estimation
> cec1=NULL # unrestricted
> cec1=3# restrict the coefficient on the dummy to be equal across
> equations
>
> # Estimate the model with `sysGmm` using different weighting matrices:
> identity, "optimal" and manually specified
> m1a <- sysGmm(g=ES_g, h=ES_h, wmatrix="ident"  , weightsMatrix=NULL,
> vcov=vc1, crossEquConst=cec1, data=data1); summary(m1a)
> m1b <- sysGmm(g=ES_g, h=ES_h, wmatrix="optimal", weightsMatrix=NULL,
> vcov=vc1, crossEquConst=cec1, data=data1); summary(m1b)
> m1c <- sysGmm(g=ES_g, h=ES_h,weightsMatrix=Wmat,
> vcov=vc1, crossEquConst=cec1, data=data1); summary(m1c)
>
> -- R session info:
>
> R version 4.3.3 (2024-02-29 ucrt)
> Platform: x86_64-w64-mingw32/x64 (64-bit)
> Running under: Windows 10 x64 (build 19045)
>
> Matrix products: default
>
> locale:
> [1] LC_COLLATE=English_United States.utf8  LC_CTYPE=English_United
> States.utf8
> [3] LC_MONETARY=English_United States.utf8 LC_NUMERIC=C
>
> [5] LC_TIME=English_United States.utf8
>
> time zone: Europe/Berlin
> tzcode source: internal
>
> attached base packages:
> [1] stats graphics  grDevices utils datasets  methods   base
>
> other attached packages:
> [1] systemfit_1.1-30 lmtest_0.9-40zoo_1.8-12   car_3.1-2
>  carData_3.0-5Matrix_1.6-1
> [7] gmm_1.8  sandwich_3.0-2
>
> loaded via a namespace (and not attached):
> [1] MASS_7.3-60.0.1   compiler_4.3.3tools_4.3.3   abind_1.4-5
> rstudioapi_0.15.0 grid_4.3.3
> [7] lattice_0.22-5
>
> --
>
> Kind regards,
> Richard
>
> [[alternative HTML version deleted]]
>
> __
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, 

[R] System GMM yields identical results for any weighting matrix

2024-04-23 Thread Richard Hardy
A copy of this question can be found on Cross Validated:
https://stats.stackexchange.com/questions/645362

I am estimating a system of seemingly unrelated regressions (SUR) in R.
Each of the equations has one unique regressor and one common regressor. I
am using `gmm::sysGmm` and am experimenting with different weighting
matrices. I get the same results (point estimates, standard errors and
anything else that I can see (**except** for the value of the $J$-test)
regardless of the weighting matrix. I do not think this is correct.
The phenomenon persists regardless of what type of covariance matrix
estimator I use: `MDS`, `CondHom` or `HAC`.
It also persists regardless of whether I use unrestricted estimation or
restrict the coefficients on one of the variables (the common regressor) to
be equal across equations.

**Question:** Why does system GMM via `gmm::sysGmm` yield identical results
for any weighting matrix? How can I make it yield proper results that vary
with the weighting matrix (if that makes sense and I am not mistaken, of
course)?

-- R code for a reproducible example

library(gmm)
library(systemfit)

# Generate and prepare the data
n <- 1000 # sample size
m <- 100  # length of the "second part" of the sample
N <- 3# number of equations
set.seed(321); x <- matrix(rnorm(n*N),ncol=N); colnames(x) <-
paste0("x",1:N) # generate regressors
dummy <- c( rep(0,n-m), rep(1,m) ) # generate a common regressor
x <- cbind(x,dummy)# include the common regressor with the
rest of the regressors
set.seed(123); y <- matrix(rnorm(n*N),ncol=N); colnames(y) <-
paste0("y",1:N) # a placeholder for dependent variables
for(i in 1:N){
 y[,i] <- i + sqrt(i)*x[,i] - i*dummy + y[,i]*15*sqrt(i)
 # y[,i] is a linear function of x[,i] and dummy,
 # plus an error term with equation-specific variance
}
data1 <- as.data.frame(cbind(y,x)) # create a data frame of all data (y and
x)

# Create the model equations and moment conditions
ES_g = ES_h <- list() # ES ~ equation system
for(i in 1:N){
 ES_g[[i]] <- as.formula(assign(paste0("eq",i), value=paste0("y",i," ~
x",i," + dummy"))) # define linear equations of SUR
 ES_h[[i]] <- as.formula(assign(paste0("eq",i), value=paste0(   "~
x",i," + dummy"))) # define the moment conditions for GMM
}

# Estimate a WLS-type weighting matrix to use as a user-specified weighting
matrix in GMM
m0 <- systemfit(formula=ES_g, method="OLS", data=data1)
OLSmat <- diag(diag(m0$residCov)); Wmat <- solve(OLSmat)

# Choose the type of covariance matrix in GMM
vc1 <- "MDS"
vc1 <- "CondHom"
vc1 <- "HAC"
#vc1 <- "TrueFixed"

# Choose between restricted and unrestricted estimation
cec1=NULL # unrestricted
cec1=3# restrict the coefficient on the dummy to be equal across
equations

# Estimate the model with `sysGmm` using different weighting matrices:
identity, "optimal" and manually specified
m1a <- sysGmm(g=ES_g, h=ES_h, wmatrix="ident"  , weightsMatrix=NULL,
vcov=vc1, crossEquConst=cec1, data=data1); summary(m1a)
m1b <- sysGmm(g=ES_g, h=ES_h, wmatrix="optimal", weightsMatrix=NULL,
vcov=vc1, crossEquConst=cec1, data=data1); summary(m1b)
m1c <- sysGmm(g=ES_g, h=ES_h,weightsMatrix=Wmat,
vcov=vc1, crossEquConst=cec1, data=data1); summary(m1c)

-- R session info:

R version 4.3.3 (2024-02-29 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19045)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.utf8  LC_CTYPE=English_United
States.utf8
[3] LC_MONETARY=English_United States.utf8 LC_NUMERIC=C

[5] LC_TIME=English_United States.utf8

time zone: Europe/Berlin
tzcode source: internal

attached base packages:
[1] stats graphics  grDevices utils datasets  methods   base

other attached packages:
[1] systemfit_1.1-30 lmtest_0.9-40zoo_1.8-12   car_3.1-2
 carData_3.0-5Matrix_1.6-1
[7] gmm_1.8  sandwich_3.0-2

loaded via a namespace (and not attached):
[1] MASS_7.3-60.0.1   compiler_4.3.3tools_4.3.3   abind_1.4-5
rstudioapi_0.15.0 grid_4.3.3
[7] lattice_0.22-5

--

Kind regards,
Richard

[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.