Как проводить ограниченную регрессию в R - PullRequest
0 голосов
/ 08 июня 2018

Скажем, у меня есть простое уравнение регрессии

lm(y~., newdata=df)

Я знаю, что если я хочу уменьшить перехват до 0, я пишу

lm(y+0., newdata=df)

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

step(lm(y~.>1000, newdata=df)

Вышеупомянутое не работает, но есть ли способ сказать, произвести регрессию, которая в основном производит наилучшее соответствие и заставляет каждый коэффициент быть больше 1000?Или меньше указанного диапазона.

#as per Gautam    
minfunc <- function(coefs){
      out <- sum(sapply(3:314, function(z) return(coefs[z]*test2[, z])))
      return(out)
    }


    par = c(1, 1, 30) # initial value
    lb = c(-1, -1, -300000) # lower bound for coefs
    ub = c(30, 30, 30000) # upper bound 

    result <- hjkb(par = par, fn = minfunc, lower = lb, upper = ub)

Спасибо,

1 Ответ

0 голосов
/ 08 июня 2018

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

library(data.table)
library(dfoptim)

minfunc <- function(coefs){
  # using mtcars as the sample data - you would read in your data here
  df <- as.data.table(mtcars)

  out <- (sum(coefs[1]*df$cyl + coefs[2]*df$wt + coefs[3]) - sum(df$mpg))^2
  return(out)
}


par = c(1, 1, 30) # initial value
lb = c(-1, -1, -300000) # lower bound for coefs
ub = c(30, 30, 30000) # upper bound 

result <- hjkb(par = par, fn = minfunc, lower = lb, upper = ub)

по сравнению с lm:

> lm(mpg ~ cyl + wt, data = mtcars)

Call:
lm(formula = mpg ~ cyl + wt, data = mtcars)

Coefficients:
(Intercept)          cyl           wt  
     39.686       -1.508       -3.191  

> result$par
[1]  0.00000 -1.00000 23.30788 
#        cyl       wt constant

Результаты отличаются, как и ожидалось.Сходимость и конечный результат зависят от выбора алгоритма оптимизации и исходного ввода.Я использовал hjkb в качестве примера, но это не лучший алгоритм.Вы можете попробовать другой алгоритм, основанный на ваших потребностях.

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