首页 文章

用r中的任意系数预测()

提问于
浏览
2

我有一些由非r用户设置的logit模型的系数 . 我想将这些系数导入r并在相同的数据集(ROC和混淆矩阵)上生成一些拟合优度与我自己的模型 . 我的第一个想法是使用类似的东西将系数强制转换为现有的GLM对象

摘要(拟合)$ coefficients [,1] < - y

要么

summary(fit)$ coefficients < - x

其中y和x是包含我试图用来预测和拟合的系数的矩阵,它是先前创建的适合数据集的虚拟glm对象 . 当然,这只给我带来了错误 .

有没有办法将任意系数向量传递给predict()函数或指定模型中的系数?我可以通过将一个向量传递给GLM中的偏移量参数来以某种方式强制这个吗?谢谢

编辑:正如评论中所提到的,使用任意系数的统计基础不多 . 我有一个商业伙伴,他们相信他/她'知道'正确的系数,并且我试图根据这些估计与适当模型产生的系数来量化预测能力的损失 .

Edit2:Per BondedDust的答案,我能够强制系数,但无法清除由于强制而返回的forecast()错误消息,看起来是由预测调用的predict.lm,也看起来在系数的等级和导致错误 .

3 回答

  • 3

    这不是您发布的问题的答案--BonddedDust回答 - 但描述了自己计算预测概率的另一种方法,这可能有助于这种情况 .

    # Use the mtcars dataset for a minimum worked example
    data(mtcars)
    
    # Run a logistic regression and get predictions 
    mod <- glm(vs ~ mpg + factor(gear) + factor(am), mtcars, family="binomial")
    p1 <- predict(mod, type="response")
    
    # Calculate predicted probabilities manually
    m <- model.matrix(~ mpg + factor(gear) + factor(am), mtcars)[,]
    p2 <- coef(mod) %*% t(m)
    p2 <- plogis(p2)
    
    all(p1 == p2)
    #identical(as.numeric(p1), as.numeric(p2))
    

    您可以将 coef(mod) 替换为给定的系数向量 . model.matrix 将生成计算所需的虚拟变量 - 检查排序是否与系数向量的排序相同 .

  • 5

    如果您通过 predict.glm 将代码传递给 predict.lm ,则看起来需要更改的模型列表的节点确实是 fit$coefficients . 但是,更改 summary() 对象将无效 . glm和lm对象中的 [['coefficients']] 不是具有列的矩阵:'Estimate','Std. Error','t value','Pr(>|t|)',例如由 summary 生成的,而是仅仅是系数的向量 .

    fit$coefficients <- y
     newpred <- predict(fit)
    

    如果您需要进一步使用 fit ,您可以复制并处理它 .

  • 2

    或者,你可以使用这样的东西:

    fit < - lm(Y~A B C,data = fakedata)拟合$系数< - c(1,2,3)#这将分别将A,B,C的系数改变为1,2和3 . Y_hat_new < - predict(fit,new_fakedata)#此Y_hat_new将根据新系数和/或new_fakedata计算为新的预测结果 .

    如果您遵循model.matrix路由,结果应该相同 .

相关问题