在新数据上应用模型系数

时间:2017-02-28 07:54:58

标签: r

我有两个矩阵submacro_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]
}

实际上它有效,但这不是最好的解决方案,因为我想要一些通用的东西。有什么想法吗?

1 个答案:

答案 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)]