我有两个矩阵sub
和macro_data
。它们分别包括模型的估计系数和宏数据
> sub
coeff varname
1 -1.50 gdp
2 0.005 inflation
3 -2.4 constant
> macro_data
gdp inflation
1 18.0 -0.17
2 15.8 -0.14
3 17.7 -0.15
我想应用以下公式:-1.5 * gdp + 0.005 * inflation-2.4以获得分数。
我试过了
for (i in 1:1){
sub$coeff[i]*macro_data[,1]+sub$coeff[i+1]*macro_data[,sub$coeff[i+1]]+sub$coeff[i+2]
}
实际上它有效,但这不是最好的解决方案,因为我想要一些通用的东西。有什么想法吗?
答案 0 :(得分:1)
你可以进行矩阵乘法:
cbind(macro_data, 1) %*% sub[, "coeff", drop=FALSE]
如果您的系数来自估算模型,那么通常函数predict.~()
可以使用参数newdata=
来计算新数据的估算值。
对于您的示例数据,这不起作用,因为您有数据帧。这样做:
sub <- read.table(header=TRUE, text=
"coeff varname
-1.50 gdp
0.005 inflation
-2.4 constant ")
macro_data <- read.table(header=TRUE, text=
"gdp inflation
1 18.0 -0.17
2 15.8 -0.14
3 17.7 -0.15")
m <- cbind(macro_data, constant=1)
C <- sub$coeff
names(C) <- sub$varname
m$gdp*C["gdp"] + m$inflation*C["inflation"] + m$constant*C["constant"]
最后一行可缩短为:
as.matrix(m) %*% C[names(m)]