我正在尝试使用 R 中的 GMM 库来估计模型。但是,当我运行代码时,我收到错误“需要数字/复杂矩阵/向量参数”。我按照多个类似问题中的建议将数据框转换为矩阵,但我仍然遇到相同的错误,关于如何解决该问题有什么想法吗?我知道该模型非常简单,但我试图了解该命令的工作原理。我加载的数据都是数字,我已经用 mode (X) 函数对其进行了测试。
library(gmm) # For gmm
data_r <- data.frame(replicate(7,sample(0:5,1000,rep=TRUE)))
g <- function(theta, data_r){
y <- as.numeric(data_r[, "X1"])
x <- as.matrix(data_r[,c("X2", "X3", "X4", "X5")])
z <- as.matrix(data_r[,c("X2", "X6", "X4", "X7")])
# Moment conditions
m1 <- z * as.vector(y - x %*% theta)
return(cbind(m1))
}
g_test <- gmm(g, data_r)
summary(g_test)
这会返回错误:
Error in x %*% theta: requires numeric/complex matrix/vector arguments
根据
gmm
的帮助页面
t0
A k × 1 k×1 起始值向量。 仅在以下情况下才需要 “g”是一个函数,因为只有这样才使用数值算法 最小化目标函数。 ...
因此,您需要提供起始值 (
t0
),其长度必须等于 x
的列数,即 4,因为您在函数中将 x
乘以 theta。
g_test <- gmm(g, data_r, t0 = rep(0, 4))
summary(g_test)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
Theta[1] -0.152082 0.322655 -0.471347 0.637393
Theta[2] -0.866059 3.465883 -0.249881 0.802679
Theta[3] -0.060006 0.099921 -0.600539 0.548147
Theta[4] 2.048832 3.735988 0.548404 0.583414
J-Test: degrees of freedom is 0
J-test P-value
Test E(g)=0: 0.00173925349613719 *******