2012-07-03 2 views
0

Я пытаюсь вызвать rq() пакета квант пакета внутри функции. Ниже приведено упрощенное объяснение моей проблемы.R: вызов функции rq() внутри функции и определение линейного предиктора

Если я следовать рекомендациям, найденных в http://developer.r-project.org/model-fitting-functions.txt, у меня есть дизайн матрица после линии

x <- model.matrix(mt, mf, contrasts) 

с первой колонкой, полной 1, чтобы создать перехватывать.

Теперь, когда я называю RQ(), я вынужден использовать что-то вроде

fit <- rq (y ~ x [,2], tau = 0.5, ...) 

Моя проблема происходит, если есть больше чем 1 объясняющей переменной. Я не знаю, как найти автоматический способ, чтобы написать:

x [,2] + x [,3] + x [,4] + ... 

Вот полный упрощенный код:

ao_qr <- function (formula, data, method = "br",...) { 

cl <- match.call() 

## keep only the arguments which should go into the model 
## frame 

mf <- match.call (expand.dots = FALSE) 

m <- match (c ("formula", "data"), names (mf), 0) 

mf <- mf[c (1, m)] 

mf$drop.unused.levels <- TRUE 

mf[[1]] <- as.name ("model.frame") 

mf <- eval.parent (mf) 

if (method == "model.frame") return (mf) 

## allow model.frame to update the terms object before 
## saving it 

mt <- attr (mf, "terms") 

y <- model.response (mf, "numeric") 

x <- model.matrix (mt, mf, contrasts) 

## proceed with the quantile regression 

fit <- rq (y ~ x[,2], tau = 0.5, ...) 

print (summary (fit, se = "boot", R = 100)) 
} 

я вызываю функцию с:

ao_qr(pain ~ treatment + extra, data = data.subset) 

И здесь как получить данные:

require (lqmm) 
data(labor) 
data <- labor 

data.subset <- subset (data, time == 90) 
data.subset$extra <- rnorm (65) 

В этом случае, с этим кодом, мой линейный предиктор включает только «лечение». Если я хочу «лишний», мне нужно вручную добавить x [, 3] в линейный предиктор rq() в коде. Это не является автоматическим и не будет работать с другими наборами данных с неизвестным числом переменных. Кто-нибудь знает, как справиться с этим?

Любая помощь будет принята с благодарностью!

ответ

Смежные вопросы