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)