3

这个问题与我之前的问题密切相关。唯一的区别是,我想要拟合的原始数据,而不是绘制数据。我试图按照最后一个答案自己解决它,但仍然卡住了。

所以我想从线性回归的拟合中检索自变量、拟合变量、残差和标准化残差。

我将使用由 Brian Diggs 创建的示例。所以谢谢。

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)  # fit
dat$resid <- residuals(fit)
vars <- names(coef(fit))[-1]

下一步我像以前一样被卡住了。我试图仅获取用于回归的变量并将它们绑定到新数据集。我尝试了以下操作,但它不起作用。这一步是错误的。我可以绑定残差,拟合但不能绑定使用的变量。

fit.data <- cbind(predict(fit),as.name(names(coef(fit))[2]))

非常感谢任何帮助。是的,我自己还在教 R。

4

1 回答 1

0

您不能将不属于相应维度的事物绑定在一起。为此,您需要一份清单。您还需要使用 fit 对象,因为 summary 对象没有拟合值(并且可能不适用于 rstandard() 但我不确定)。

mod.results <- list(vars = names(coef(fit))[-1],
                    fitted.values=fit$fitted.values, 
                    residuals = residuals(fit), 
                    std.resid = rstandard(fit))

把它放在一个函数中是微不足道的:

> extr.res <- function(fit) {mod.results <- list(vars = names(coef(fit)), 
fitted.values=fit$fitted.values, residuals = residuals(fit), std.resid = rstandard(fit)) }
> str(extr.res(fit))
List of 4
 $ vars         : chr [1:5] "(Intercept)" "x1" "x2" "x3" ...
 $ fitted.values: Named num [1:100] -36.19 31.4 -2.59 -130.03 -1.12 ...
  ..- attr(*, "names")= chr [1:100] "1" "2" "3" "4" ...
 $ residuals    : Named num [1:100] -71.6 -21.2 -50.7 19 -58.5 ...
  ..- attr(*, "names")= chr [1:100] "1" "2" "3" "4" ...
 $              : Named num [1:100] -1.608 -0.487 -1.175 0.435 -1.297 ...
  ..- attr(*, "names")= chr [1:100] "1" "2" "3" "4" ...
于 2011-10-14T12:02:31.980 回答