gpt4 book ai didi

r - GLM 拟合中的截距是如何计算的?

转载 作者:行者123 更新时间:2023-12-05 01:27:40 24 4
gpt4 key购买 nike

我一直在阅读code R 使用它来拟合广义线性模型 (GLM),因为 R 的源代码是免费提供的。使用的算法称为迭代重新加权最小二乘法 (IRLS),这是一种有据可查的算法。对于每次迭代,都会调用 Fortran 函数来解决加权最小二乘问题。

从最终用户的角度来看,例如,对于逻辑回归,R 中的调用如下所示:

y <- rbinom(100, 1, 0.5)
x <- rnorm(100)
glm(y~x, family=binomial)$coefficients

如果您不想使用拦截,则可以使用以下任一调用:

glm(y~x-1, family=binomial)$coefficients
glm(y~x+0, family=binomial)$coefficients

但是,我无法理解公式(即 y~xy~x-1)如何有意义代码并被理解为是否使用拦截。我正在寻找代码的一部分,其中一列将绑定(bind)到 x,但似乎没有。

据我所知,出现在名为 glm.fit 的函数中的 bool 截距与我所指的截距不同。 偏移量也是如此。

关于glmglm.fit的文档是here .

最佳答案

您可能找错地方了。通常,在拟合函数中首先调用 model.matrix():

> D <- data.frame(x1=1:4, x2=4:1)
> model.matrix(~ x1 + x2, D)
(Intercept) x1 x2
1 1 1 4
2 1 2 3
3 1 3 2
4 1 4 1
attr(,"assign")
[1] 0 1 2
> model.matrix(~ x1 + x2 -1 , D)
x1 x2
1 1 4
2 2 3
3 3 2
4 4 1
attr(,"assign")
[1] 1 2
>

它是 model.matrix() 的输出,并被传递到 Fortran。 lm() 和其他模型拟合器就是这种情况。

对于glm(),它是不同的,仅调用model.frame(),而添加拦截列。为什么会出现这种情况与广义线性模型和标准线性模型之间的差异有关,并且超出了本文的范围。

关于r - GLM 拟合中的截距是如何计算的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3119635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com