R 预测时手动设置新因子级别的系数
我有一个线性模型,其中一个自变量是一个因子,我试图对一个包含新因子水平的数据集进行预测(该因子水平不在模型估计的数据集中)。我希望能够通过手动指定将应用于因子的系数,使用新因子级别对观测值进行预测。例如,假设我估计了三种类型商店的日销售额,并在数据集中引入了第四种类型的商店。我并没有关于它的历史数据,但我可能会假设它的行为类似于其他商店的加权组合,我有它们的模型系数 如果我尝试对新数据应用R 预测时手动设置新因子级别的系数,r,R,我有一个线性模型,其中一个自变量是一个因子,我试图对一个包含新因子水平的数据集进行预测(该因子水平不在模型估计的数据集中)。我希望能够通过手动指定将应用于因子的系数,使用新因子级别对观测值进行预测。例如,假设我估计了三种类型商店的日销售额,并在数据集中引入了第四种类型的商店。我并没有关于它的历史数据,但我可能会假设它的行为类似于其他商店的加权组合,我有它们的模型系数 如果我尝试对新数据应用predict.lm(),我会得到一个错误,告诉我该因子有新的级别(这是有意义的) df假设您希望级别5的权
predict.lm()
,我会得到一个错误,告诉我该因子有新的级别(这是有意义的)
df假设您希望级别5的权重相等,您可以转换为矩阵,插入25%,然后将其乘以模型中的系数
n.mat <- model.matrix(~x1, data=newdata)
n.mat[n.mat[,5] == 1, 2:4] <- .25
n.mat <- n.mat[,-5]
n.prediction <- n.mat %*% coef(lm1)
n.mat以下是您可以做的:
使用rbind对训练和测试数据集进行堆栈
将预测因子分解
将堆栈划分回训练和测试数据集
这样,所有级别都将出现在两个数据集中 ?更新
可能会向您展示如何通过编程操作公式,而无需使用string。您可以更详细地了解如何预测新级别。“某些加权组合”不是很精确。如果您想在许多模型上尝试此方法,并为您的附加因子级别使用不同的系数值,您可以编写一个函数来完成此操作。我将尝试从lm对象中提取模型.matrix
和系数
,插入因子级别和系数,然后使用矩阵乘法获得预测。
n.mat <- model.matrix(~x1, data=newdata)
n.mat[n.mat[,5] == 1, 2:4] <- .25
n.mat <- n.mat[,-5]
n.prediction <- n.mat %*% coef(lm1)