我运行相同的回归,对x变量进行了几次小的改动。我的目标是确定这个线性回归模型的每个变量的拟合和重要性,以查看所有主要图。我不想一个一个地创建每个图,而是希望一个函数循环遍历以下列表中的变量(x1 ... xn)。
fit< -lm(y~x1 + x2 + ... xn))
我想为所有x创建的图表是 1)上述函数中所有x的'x对y' 2)'x与预测的y 3)x与残差 4)x与时间的关系,其中时间不是回归中使用的变量,而是在数据框中提供的数据来源。
我知道如何从fit中访问系数,但是我无法使用摘要中的系数名称,并在创建绘图的函数中重复使用它们,因为名称是字符。
我希望我的问题已经清楚地描述过,而且还没有被问过。
谢谢!
答案 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)