假设我有使用MCMC的Beta版本。对于每一行,我都有一组beta。是否可以将这行beta转换为R中的模型对象,以便我可以使用predict()函数?具体来说,有些测试版用于分类随机变量,因此如果我想手动应用测试版,将会很困难。
我认为要手动执行此操作,必须将每个分类变量转换为指标变量的多列。
答案 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