首页 文章

在SQL Server R服务中使用lm-model进行预测时,“因素具有新级别”错误

提问于
浏览
0

我是R的新手,但试图将它与SQL Server R服务一起使用 .

作为R脚本的输入,我选择几个数字列和一个带有分类数据的文本列 . 让它成为“company_name” .

然后我执行:

declare @script_r nvarchar(max) 
    = '
dat <- InputDataSet;
model <- lm(first_commission_received_delay ~ ., data = dat);
print(coef(model));
predict(model, dat);
'
EXEC sp_execute_external_script
        @language =N'R'
        , @script = @script_r 
        , @input_data_1 = @script_txt

但我收到错误:

发生外部脚本错误:model.frame.default中的错误(条款,newdata,na.action = na.action,xlev = object $ xlevels):factor company_name具有新级别XXX调用:source ... predict - > predict .lm - > model.frame - > model.frame.default

在用“print(coef(model))”函数显示的系数列表中,没有虚拟变量“company_nameXXX”,但存在所有其他 . 据我所知,由于多重共线性,未创建虚拟变量“company_nameXXX” .

但是如何使用计算模型进行预测?即使对于同一组数据......如何修复该错误?

1 回答

  • 0

    我可以自己使用额外创建虚拟变量来修复该错误:

    dat <- InputDataSet;
    
    FactoredVariable = factor(dat$company_name) 
    dumm = as.data.frame(model.matrix(~FactoredVariable)[,-1])
    datWithDummies = cbind(dat[, -2], dumm) #join 2 tables except 2nd column (company_name) from dat #print(colnames(dat))
    
    model <- lm(first_commission_received_delay ~ ., data = datWithDummies);
    predicted.delay <- predict(model, datWithDummies);
    
    print(cbind(predicted.delay, datWithDummies[, 1]))
    

    但我仍然不知道,为什么我的初始代码返回错误...

相关问题