【问题标题】:apply model coefficients on new data对新数据应用模型系数
【发布时间】:2017-07-19 02:09:57
【问题描述】:

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

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

【问题讨论】:

  • 为什么要循环单个数量的i?还有i+3 会越界吗?您可能想要:sub$coef[1] * macro_data$gdp + sub$coef[2] * macro_data$inflation + sub$coef[3].
  • 正确,它是 i+2,但我迷失在自己的循环中,我不知道如何应用上面的公式
  • cbind(macro_data, 1) %*% sub[, "coeff", drop=FALSE] 通常函数predict.~()可以带参数newdata=
  • @jogo 非常感谢,它是否确保 colnames 匹配?

标签: r


【解决方案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)]

【讨论】:

    猜你喜欢
    • 2021-02-02
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    相关资源
    最近更新 更多