2017-02-28 86 views
0

我有兩個矩陣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 *通貨膨脹-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

爲什麼遍歷'i'單號?另外'我+ 3'會出界嗎?你可能想要:'sub $ coef [1] * macro_data $ gdp + sub $ coef [2] * macro_data $ inflation + sub $ coef [3]'。 – Axeman

+0

正確的,這是我+ 2,但我失去了我自己的循環,我不知道如何運用上述 – richpiana

+2

公式'cbind(macro_data,1)%*%子[「_係數」,降= FALSE]'常函數'predict。〜()'可以使用一個參數'newdata =' – jogo

回答

1

你可以做一個矩陣乘法:

cbind(macro_data, 1) %*% sub[, "coeff", drop=FALSE] 

如果你係數是從估計模型,然後正常功能predict.~()可以採取參數newdata=到claculate新的數據估算。

對於您的示例數據,這不會工作,因爲您有數據框。這將做到:

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