1

我多次运行相同的回归,并对 x 变量进行小幅改动。我的目标是在确定了该线性回归模型的每个变量的拟合度和显着性之后,以查看所有主要图。我不需要一个一个地创建每个图,而是希望一个函数从以下列表中循环遍历我的变量 (x1...xn)。

适合 <-lm( y ~ x1 + x2 +... xn))

我想为所有 x 创建的图是 1) 上述函数中所有 x 的“x 与 y” 2) 'x 与预测的 y 3) x 与残差 4) x 与时间的关系,其中时间不是用于回归,但在数据来自的数据框中提供。

我知道如何从拟合中访问系数,但是我无法使用摘要中的系数名称并在创建绘图的函数中重用它们,因为名称是字符。

我希望我的问题已经被清楚地描述并且还没有被问到。

谢谢!

4

3 回答 3

1

直接回答我认为的问题的三个选项:如何使用字符参数访问系数:

x <- 1:10
y <- x*3 + rnorm(1)
fit <- lm(y~x)
# 1
fit$coefficient["x"]
# 2
coefname <- "x"
fit$coefficient[coefname]
#3
coef(fit)[coefname]

如果问题是如何绘制各种函数,那么您应该提供一个足够复杂的构造(在 R 中),以允许使用一组明确指定的对象来演示方法。

于 2011-10-12T23:40:09.523 回答
1

正如您所说,系数存储在 fit 对象中,但是您可以通过以下方式在函数中一般地访问它们:

x <- 1:10
y <- x*3 + rnorm(1)
plot(x,y)

fit <- lm(y~x)
fit$coefficient[1] # intercept
fit$coefficient[2] # slope
str(fit) # a lot of info, but you can see how the fit is stored

我的猜测是,当您说您知道如何访问从摘要(拟合)中获取的系数时,这比直接从拟合中获取要难一些。通过使用 fit$coeff[1] 等,您不必在函数中使用变量的名称。

于 2011-10-12T23:23:14.867 回答
1

创建一些模拟数据

dat <- data.frame(x1=rnorm(100), x2=rnorm(100,4,5), x3=rnorm(100,8,27), 
  x4=rnorm(100,-6,0.1), t=(1:100)+runif(100,-2,2))
dat <- transform(dat, y=x1+4*x2+3.6*x3+4.7*x4+rnorm(100,3,50))

合身

fit <- lm(y~x1+x2+x3+x4, data=dat)

计算预测值

dat$yhat <- predict(fit)

计算残差

dat$resid <- residuals(fit)

获取变量名的向量

vars <- names(coef(fit))[-1]

如果您使用它来构建公式的字符串版本并翻译它,则可以使用名称的此字符表示来制作绘图。下面是四个图,它们被包裹在所有变量的循环中。此外,这被设置为包围,ask以便TRUE您有机会看到每个情节。或者,您可以在屏幕上安排多个绘图,或将它们全部写入文件以供稍后查看。

opar <- par(ask=TRUE)
for (v in vars) {
  plot(as.formula(paste("y~",v)), data=dat)
  plot(as.formula(paste("yhat~",v)), data=dat)
  plot(as.formula(paste("resid~",v)), data=dat)
  plot(as.formula(paste("t~",v)), data=dat)
}
par(opar)
于 2011-10-13T00:00:12.893 回答