创建从摘要中自动创建绘图的函数(fit< - lm(y~x1 + x2 + ... xn))

时间:2011-10-12 23:08:02

标签: r loops plot summary linear-regression

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

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

我想为所有x创建的图表是 1)上述函数中所有x的'x对y' 2)'x与预测的y 3)x与残差 4)x与时间的关系,其中时间不是回归中使用的变量,而是在数据框中提供的数据来源。

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

我希望我的问题已经清楚地描述过,而且还没有被问过。

谢谢!

3 个答案:

答案 0 :(得分:1)

如你所说,系数存储在拟合对象中,但你可以通过这样的方式在函数中一般地访问它们:

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]等,您不必在函数中包含变量的名称。

答案 1 :(得分: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中),以便演示具有明确指定的对象集的方法。

答案 2 :(得分: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)