使用R中的一组beta进行预测

时间:2018-11-02 06:05:51

标签: r regression mcmc

假设我有使用MCMC的Beta版本。对于每一行,我都有一组beta。是否可以将这行beta转换为R中的模型对象,以便我可以使用predict()函数?具体来说,有些测试版用于分类随机变量,因此如果我想手动应用测试版,将会很困难。

我认为要手动执行此操作,必须将每个分类变量转换为指标变量的多列。

1 个答案:

答案 0 :(得分:1)

您可以通过构建模型矩阵并将其乘以系数向量来实现。

假设这是我们的模型公式。 Species是分类变量:

> m = Sepal.Length~Petal.Length+Petal.Width+Species

现在从中和数据创建一个模型矩阵:

> mm = model.matrix(m, data=iris)
> head(mm)
  (Intercept) Petal.Length Petal.Width Speciesversicolor Speciesvirginica
1           1          1.4         0.2                 0                0
2           1          1.4         0.2                 0                0
3           1          1.3         0.2                 0                0
4           1          1.5         0.2                 0                0
5           1          1.4         0.2                 0                0
6           1          1.7         0.4                 0                0

Species具有三个级别,您可以看到前两个行的两个物种列都为零,因此,它们属于其他物种。

要对一组5个系数进行预测,它们需要与行的顺序相同并且具有相同的“ constrast”,即,使用两个虚拟变量以相同的方式进行物种编码。因此,您的“β”值必须与您从数据上的lm获得的系数相同:

> mfit = lm(m, data=iris)
> mfit$coefficients
      (Intercept)      Petal.Length       Petal.Width Speciesversicolor 
      3.682982011       0.905945867      -0.005995401      -1.598361502 
 Speciesvirginica 
     -2.112646781 

现在您可以通过矩阵乘法获得任何系数集的预测:

> head(mm %*% mfit$coefficients)
      [,1]
1 4.950107
2 4.950107
3 4.859513
4 5.040702
5 4.950107
6 5.220692

如果我做对了,那么这些值应该等于predict的输出:

> head(predict(mfit))
       1        2        3        4        5        6 
4.950107 4.950107 4.859513 5.040702 4.950107 5.220692 

如果系数不同,则应该通过矩阵乘法得到不同的预测:

> head(mm %*% c(0,1,.2,.2,.4))
  [,1]
1 1.44
2 1.44
3 1.34
4 1.54
5 1.44
6 1.78