如何在不知道方程的情况下,在最佳拟合直线的某一点处求导数?

4

型号:

mylogit <- glm(Result ~ kickLength, data = RegFg, family = "binomial") 

概率图:

plot.dat <- data.frame(prob = RegFg$NumMade/RegFg$NumKick, 
    kl = RegFg$kickLength, 
    fit = predict(mylogit, RegFg))

plot.dat$fit_prob <- exp(plot.dat$fit)/(1+exp(plot.dat$fit)) 

g1<-ggplot(plot.dat, aes(x=kl, y=prob)) +  
   geom_point() + geom_line(aes(x=kl, y=fit_prob)) 

概率拟合线(我认为):

geom_line(aes(x=kl, y=fit_prob))

我希望能够在每个踢球长度处找到相对于概率的导数。


我认为coef(mylogit)["kickLength"]*binomial()$mu.eta(predict(kickLength, type = "link")可以解决问题,但我需要再检查/思考一下... - Ben Bolker
1个回答

2

如果您想在不知道公式的情况下完成此操作,则需要使用数值微分。现在问题中缺少输入,因此让我们使用末尾注释中的示例以便能够实际运行——下次请提供完整可运行的示例。然后使用 numDeriv 包中的数值微分。

library(numDeriv)

prob <- function(x) predict(fm, list(x = x), type = "response")
grad1 <- grad(prob, x)  # find derivative at each x value

# check against formula in Ben Bolker's comment
grad2 <- coef(fm)["x"] * binomial()$mu.eta(predict(fm, list(x = x), type = "link"))
all.equal(grad1, grad2, check.attributes = FALSE)
## [1] TRUE

注意

set.seed(123)
success <- rep(0:1, each = 3)
x <- rnorm(6)
fm <- glm(success ~ x, family = binomial)

我输入了以下内容:prob <- function(x) predict(mylogit, list(x = x), type = "response")' 'grad1 <- grad(prob, x),结果输出了"找不到对象“kickLength”"。我不确定如何防止这种情况发生。现在,我只是卡在如何将最佳拟合线转换为踢球长度函数上。你之前建议我添加的原始输入是什么?也许那可以帮助我。 - Teddy Taylor
您已指定变量为 x,但在您的问题中没有名为 x 的变量。 - G. Grothendieck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接