Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中矩阵与列表的乘法问题_R_Matrix Multiplication - Fatal编程技术网

R中矩阵与列表的乘法问题

R中矩阵与列表的乘法问题,r,matrix-multiplication,R,Matrix Multiplication,我通过每年执行汇总回归开发了一个预测模型,因此我有不同的模型系数。我用lappy(myregressions,coef)将不同的系数存储在一个列表中,我想使用模型系数对子样本(SS)进行预测 因此,我有一个DF和我想要预测的对象(SS),以及一个“列表”,其中包含每年不同的模型系数: SS id time inc ta div acc dd neg 9 1 1995 10.3995 234.4126 2.5155 3.6462 2

我通过每年执行汇总回归开发了一个预测模型,因此我有不同的模型系数。我用lappy(myregressions,coef)将不同的系数存储在一个列表中,我想使用模型系数对子样本(SS)进行预测

因此,我有一个DF和我想要预测的对象(SS),以及一个“列表”,其中包含每年不同的模型系数:

SS

  id time      inc       ta    div      acc   dd     neg
9   1 1995  10.3995 234.4126 2.5155   3.6462 2.5155   0
10  1 1996  10.6098 245.7136 2.7936  -3.8121 2.7936   0
11  1 1997   9.9005 271.3418 2.6359  13.7573 2.6359   0
12  1 1998   8.4780 231.6341 2.6580 -19.0560 2.6580   0
13  1 1999  14.2969 293.2106 2.6992  11.7852 2.6992   0
14  1 2000 159.1115 374.4408 2.7745 223.5071 2.7745   0
15  1 2001 -10.2167 315.3258 4.2379   5.8569 4.2379   1
16  1 2002 -10.8737 207.4538 3.2023 -36.4547 3.2023   1
17  1 2003  10.7719 195.9657 3.0622 -12.2817 3.0622   0
18  1 2004   4.6669 269.0332 3.7677  -6.0882 3.7677   0
19  1 2005   5.5542 235.2783 3.9230 -10.7087 3.9230   0
20  1 2006   5.2375 300.8294 3.8623 -18.7482 3.8623   0
21  1 2007  15.1524 305.0057 3.8131  -9.9801 3.8131   0
22  1 2008  20.8307 307.4744 4.3381 -25.4373 4.3381   0
23  1 2009  33.5010 329.3090 5.2710 -16.7450 5.2710   0
24  1 2010   4.5180 344.7620 5.5650 -15.9290 5.5650   0
25  1 2011   5.7310 330.4060 6.1180  -3.2060 6.1180   0
26  1 2012   9.4360 505.8150 2.8510 -14.9710 2.8510   0
73  3 2007   5.4877 240.1564 1.8500  29.3132 1.8500   0
74  3 2008  14.9182 222.5949 0.0000 -76.0916 0.0000   0
以及以下模型系数:

> COEF
            Year_1995    Year_1996    Year_1997    Year_1998    Year_1999    Year_2000    Year_2001    Year_2002    Year_2003    Year_2004   Year_2005
(Intercept) -1.416094e+02 -82.29723152 -34.48711235  -6.75285267  39.78186661  51.89597510  23.17918777   6.86072515   5.23465497  -5.08239969  -7.6220984
inc          1.117437e-03  -0.02122991  -0.02947603  -0.05828917  -0.16953822  -0.17572781   0.04419688   0.35492978   0.16529339   0.38122280   0.7805206
ta           9.491843e-02   0.07728032   0.08736790   0.07941649   0.05278938   0.04884008   0.04428136   0.02858724   0.02813507   0.01588882   0.0168884
div         -2.110746e+00  -0.41682760  -0.28204986   0.63646277   2.40335454   2.47957711   1.75339550   1.15411677   1.85791345   1.43288590   0.2259217
acc         -2.925896e-01  -0.08831186   0.06483823   0.15384923   0.15693459   0.08828990  -0.04028631  -0.04648089   0.03157282  -0.23257706  -0.2823107
dd           8.246035e+01  30.23337379 -23.72154753 -47.38041382 -84.13134965 -95.56086167 -58.06399289 -21.61298500 -12.11352064 -15.77302514 -26.3842782
neg         -1.381479e+02  25.15047622  31.05613176  60.76519163  56.06664314 -36.13696534 -27.42185598 -24.58473166 -38.36806501 -25.03186619  17.3447807
           Year_2006    Year_2007    Year_2008    Year_2009     Year_2010   Year_2011
(Intercept) -17.46962445 -12.99847554 -32.75957413 -20.99868791 -16.816973260  4.20348639
inc           0.92593004   0.77045742   0.78774688   0.85185356   0.784377210  0.63716695
ta            0.01374169   0.02841329   0.02729613   0.01045620   0.005867683 -0.00203465
div          -0.29770950  -0.20114307  -0.18070822   0.04780002   0.310500463  0.69699053
acc          -0.23553147  -0.18337198  -0.11535837  -0.12223995  -0.083179505 -0.08493535
dd           12.00464005 -15.31475612  18.57613650   8.13129910   8.855194809  0.86265216
neg          13.84589134  -6.42677325  24.44777629  39.13989889  31.941025536  5.76845025
然而,我对如何通过代码来实现这一点非常迷茫

我试图将时间变量设置为一个因子(级别),然后以某种方式将其与正确的模型(年份)联系起来,但没有成功。以下是我到目前为止的想法:

as.factor(SS$time)
for (f in levels(SS$time)) {
SS$Forecast<-NA
  SS[which(set$time == f),]$Forecast <- c(SS[which(SS$time == f),]$SS[,cbind("inc","ta","div","acc","dd","neg"] %*% COEF$Year_(f)[-1,])

如果您想对每年的系数进行不同的估计,那么没有理由对每年的各个模型进行拟合,您只需在所有系数中添加一个交互项即可。例如,这里有一个简化的示例数据集

set.seed(15)
dd<-data.frame(
    year=factor(sample(2001:2005, 50, replace=T)),
    inc = runif(50),
    tc=runif(50),
    y=rnorm(50)
)
返回相同的预测

         3          6          7         10         15 
 1.0488444  0.2317228  1.4672413  0.8638882  0.5296259 
        16         18         21         29         41 
 0.4944689  1.2231755  0.7690225  0.6869038 -0.5844771 
        43         49 
 0.5610021  0.3552466 

但是当然,
m1
的优点是能够预测任何一年,而不必为每一年拟合
m2
类型的模型。

如果不存储系数,而是实际存储模型对象,则会更容易。然后您可以使用标准的
predict()
函数。你不这样做有什么原因吗?我也存储了回归,但是我不知道预测函数。我现在会很快读到它。谢谢你的建议,因为预测函数也允许我使用新数据,我想我也可以使用该函数。因此,我执行了以下操作:预测在我看来,使用预测函数(至少在我使用它的方式上)会丢失索引(id、时间)信息。我想我仍然不清楚您到底在做什么,或者您最初是如何生成模型的。所以你希望每年每个变量有不同的斜率?似乎你应该有一个模型,其中包含一年的交互项。t如果我只是每年做一次简单的回归,我相信你的模型和我的模型是等价的(当然你的模型更简单、更方便)。但我是根据从t-5年到t年的6个汇总回归,而不仅仅是从t年,来估计t年的不同斜率。如果我错了,请纠正我再次感谢你的回答。我只是想让你们知道,我重新制定了这个问题,重点放在预测函数上,但我犹豫是否删除这个问题,因为你们已经写了一个答案。你有什么建议?
set.seed(15)
dd<-data.frame(
    year=factor(sample(2001:2005, 50, replace=T)),
    inc = runif(50),
    tc=runif(50),
    y=rnorm(50)
)
m1 <- lm(y~(inc+tc)*year, dd)
m2 <- lm(y~inc+tc, subset(dd, year==2005))
predict(m1, subset(dd, year==2005))
predict(m2, subset(dd, year==2005))
         3          6          7         10         15 
 1.0488444  0.2317228  1.4672413  0.8638882  0.5296259 
        16         18         21         29         41 
 0.4944689  1.2231755  0.7690225  0.6869038 -0.5844771 
        43         49 
 0.5610021  0.3552466