Создать функцию для автоматического создания набора данных из сводки (fit <- lm (y ~ x1 + x2 +… xn) - PullRequest
3 голосов
/ 14 октября 2011

Этот вопрос тесно связан с моим предыдущим вопросом . Единственное отличие состоит в том, что вместо построения данных мне нужны необработанные данные для подгонки. Я попытался решить это сам, следуя последнему ответу, но все еще застрял.

Итак, я хочу получить из аппроксимации линейной регрессии независимые переменные, подобранную переменную, остаток и стандартизированный остаток.

Я буду использовать пример, который был любезно создан Брайаном Диггсом. Так что спасибо тебе.

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]))

Любая помощь очень ценится. Да, я все еще учу Р.

1 Ответ

0 голосов
/ 14 октября 2011

Вы не можете связать вместе вещи, которые не имеют соответствующего измерения.Для этого вам нужен список.Вы также захотите поработать с объектом подгонки, так как объект сводки не имеет подгоночных значений (и, возможно, не будет работать с 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" ...
...