“预测”函数的逆

时间:2010-11-16 06:58:02

标签: r

使用predict()可以获得给定模型的自变量(y)的特定值的因变量(x)的预测值。是否有任何函数可以为给定的x预测y

例如:

kalythos <- data.frame(x = c(20,35,45,55,70), 
    n = rep(50,5), y = c(6,17,26,37,44))
kalythos$Ymat <- cbind(kalythos$y, kalythos$n - kalythos$y)
model <- glm(Ymat ~ x, family = binomial, data = kalythos)

如果我们想知道x=50的模型的预测值:

predict(model, data.frame(x=50), type = "response")

我想知道哪个xy=30

5 个答案:

答案 0 :(得分:9)

看到上一个答案被删除。在你的情况下,给定n = 50并且模型是二项式,你将使用:

计算给定y的x
f <- function (y,m) {
  (logit(y/50) - coef(m)[["(Intercept)"]]) / coef(m)[["x"]]
}
> f(30,model)
[1] 48.59833

但是这样做时,最好咨询一位统计学家,向您展示如何计算逆预测区间。请考虑VitoshKa的考虑因素。

答案 1 :(得分:1)

你只需要重新安排回归方程,但正如上面的评论所述,这可能证明是棘手的,不一定有一个有意义的解释。

但是,对于您提供的案例,您可以使用:

(1/coef(model)[2])*(model$family$linkfun(30/50)-coef(model)[1])

注意我首先按x系数进行除法,以使name属性正确。

答案 2 :(得分:1)

chemcal包具有inverse.predict()功能,适用于y ~ xy ~ x - 1

形式的拟合

答案 3 :(得分:1)

遇到这个旧线程,但我想我会添加一些其他信息。包MASS具有logit / probit模型的功能dose.p。 SE是通过delta方法。

> dose.p(model,p=.6)
             Dose       SE
p = 0.6: 48.59833 1.944772

拟合逆模型(x~y)在这里没有意义,因为正如@VitoshKa所说,我们假设x是固定的,而y(0/1响应)是随机的。此外,如果数据没有分组,你只有解释变量的2个值:0和1.但即使我们假设x是固定的,计算给定p的剂量x的置信区间仍然是有意义的,与@VitoshKa所说的相反。就像我们可以根据ED50重新参数化模型一样,我们可以对ED60或任何其他分位数进行重新参数化。参数是固定的,但我们仍然为它们计算CI。

答案 4 :(得分:0)

只需快速查看(无间隔并考虑其他问题),您可以使用TeachingDemos包中的TkPredict函数。它不会直接执行此操作,但允许您动态更改x值并查看预测的y值是什么,因此移动x直到找到所需的Y非常简单(对于给定的附加值) x's),这也将显示多个x的问题可能适用于相同的y。