获取线性模型的参数个数

机器算法验证 r 回归
2022-04-11 18:40:35

有没有办法获得这样的线性模型的参数数量?

model <- lm(Y~X1+X2)

我想以某种方式获得数字 3(拦截 + X1 + X2)。lm我在 that和return的结构中寻找类似的东西summary(model)anova(model)但我没有弄明白。如果我没有得到答案,我会坚持下去

dim(model.matrix(model))[2]

谢谢

4个回答

尝试类似:

> x <- replicate(2, rnorm(100))
> y <- 1.2*x[,1]+rnorm(100)
> summary(lm.fit <- lm(y~x))
> length(lm.fit$coefficients)
[1] 3
> # or
> length(coef(lm.fit))
[1] 3

您可以更好地了解 R 对象包含的内容

> str(lm.fit)

更通用的方法是使用该logLik()函数。它返回一个对象,该对象具有df赋予拟合模型自由度的属性。这种方法的好处是它可以与许多其他模型类(包括glm)一起使用。在普通线性回归 ( lm) 的情况下,这对应于用于估计误差方差的参数数量 + 1。

logLik文档中:

对于“lm”拟合,假设已估计尺度(通过最大似然或 REML),并且包括对数似然中的所有常数。

您也可以通过这种方式获得观察次数。

> X1 <- rnorm(10)
> X2 <- rnorm(10)
> Y <- X1 + X2 + rnorm(10)
> model <- lm(Y~X1+X2)
> ll <- logLik(model)
> attributes(ll)
$nall
[1] 10

$nobs
[1] 10

$df
[1] 4

$class
[1] "logLik"

可能有点骇人听闻,但您可以这样做:

n <- length(coefficients(model))

我认为您可以使用该组件lm.fit$rank或从样本量中减去lm.fit$df.residual来获得您想要的东西。(我假设你想要自由参数的数量。)