我有一些由非r用户设置的logit模型的系数。我想将这些系数导入r并在相同的数据集(ROC和混淆矩阵)上生成一些拟合优度与我自己的模型。我的第一个想法是使用类似
之类的东西将系数强制转换为现有的GLM对象摘要(拟合)$ coefficients [,1]< -y
或
摘要(拟合)$ coefficients< - x
其中y和x是包含我试图用来预测和拟合的系数的矩阵,它是先前创建的适合数据集的虚拟glm对象。当然,这只给我带来了错误。
有没有办法将任意系数向量传递给predict()函数或指定模型中的系数?我可以通过将一个向量传递给GLM中的偏移量参数来以某种方式强制这个吗?感谢
编辑:正如评论中所提到的,使用任意系数的统计基础不多。我有一个商业伙伴,他们相信他/她'知道'正确的系数,并且我试图根据这些估计与适当模型产生的系数来量化预测能力的损失。
Edit2:Per BondedDust的答案,我能够强制系数,但无法清除由于强制而返回的forecast()错误消息,它会出现predict.lm,这是由谓词调用的,还会查看系数的等级,并导致错误。
答案 0 :(得分:5)
这不是你发布的问题的答案--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
将生成计算所需的虚拟变量 - 检查排序是否与系数向量的排序相同。
答案 1 :(得分:3)
如果您遵循通过predict.glm
的代码将对象传递给predict.lm
,那么模型列表中需要更改的节点似乎确实是fit$coefficients
。但是,更改summary()
- 对象将不起作用。 glm和lm对象中的[['coefficients']]
不是带列的矩阵:&#39; Estimate&#39;,&#39; Std。错误&#39;,&#39; t&#39;,&#39; Pr(&gt; | t |)&#39;例如由summary
产生的,而只是系数的矢量。
fit$coefficients <- y
newpred <- predict(fit)
如果您需要进一步使用fit
,可以制作副本并进行处理。
答案 2 :(得分:2)
或者,您可以使用以下内容:
fit&lt; - lm(Y~A + B + C,data = fakedata)
拟合$系数&lt; -c(1,2,3)#这将分别将A,B,C的系数改变为1,2和3。
Y_hat_new&lt; - predict(fit,new_fakedata)#此Y_hat_new将根据新系数和/或new_fakedata计算为新的预测结果。
如果您遵循model.matrix路线,结果应该相同。