有没有办法获得这样的线性模型的参数数量?
model <- lm(Y~X1+X2)
我想以某种方式获得数字 3(拦截 + X1 + X2)。lm我在 that和return的结构中寻找类似的东西summary(model),anova(model)但我没有弄明白。如果我没有得到答案,我会坚持下去
dim(model.matrix(model))[2]
谢谢
有没有办法获得这样的线性模型的参数数量?
model <- lm(Y~X1+X2)
我想以某种方式获得数字 3(拦截 + X1 + X2)。lm我在 that和return的结构中寻找类似的东西summary(model),anova(model)但我没有弄明白。如果我没有得到答案,我会坚持下去
dim(model.matrix(model))[2]
谢谢
尝试类似:
> 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来获得您想要的东西。(我假设你想要自由参数的数量。)