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

Я выполняю одну и ту же регрессию с небольшими изменениями переменных x несколько раз. Моя цель - после определения соответствия и значимости каждой переменной для этой модели линейной регрессии для просмотра всех основных графиков. Вместо того, чтобы создавать каждый график один за другим, я хочу, чтобы функция перебирала мои переменные (x1 ... xn) из следующего списка.

подходит <-lm (у ~ х1 + х2 + ... хн)) </p>

Графики, которые я хочу создать для всех х, 1) «х против у» для всех х в функции выше 2) х против предсказанного у 3) х против остатков 4) x по сравнению со временем, где время не является переменной, используемой в регрессии, но предоставлено в кадре данных, из которого поступают данные.

Я знаю, как получить доступ к коэффициентам из соответствия, однако я не могу использовать имена коэффициентов из сводки и повторно использовать их в функции для создания графиков, поскольку имена являются символами.

Надеюсь, мой вопрос был четко описан и еще не задан.

Спасибо!

Ответы [ 3 ]

1 голос
/ 13 октября 2011

Три варианта прямого ответа на то, что я считаю вопросом: как получить доступ к коэффициентам, используя символьные аргументы:

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), позволяющая демонстрировать методы с хорошо определенным набором объектов.

1 голос
/ 13 октября 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)

Вычисление прогнозных значений

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)
1 голос
/ 13 октября 2011

Коэффициенты хранятся в подходящих объектах, как вы говорите, но вы можете получить к ним общий доступ в функции, ссылаясь на них следующим образом:

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] и т. Д. Вам не нужно указывать имя переменной в вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...