Функция R и регрессия - PullRequest
       4

Функция R и регрессия

2 голосов
/ 25 июня 2019

У меня есть следующий DF с именем return_data:

date        Tech   Mining  Banks  Consumer One.Month FFMkt  FFSMB3F FFSMB5F FFHML  FFRMW  
1991-01-01   0.12   0.13    -0.4    0.5       0.01     0.12   0.5    0.9     0.2     0.2
1991-02-01   0.62   0.33    0.4     0.7       0.31     0.42   0.6    0.2     0.7     0.6
1991-03-01   0.12   0.13    -0.4    0.5       0.01     0.12   0.5    0.5   0.8

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

Я назвал это

 Portfolio = c (Tech, Mining, Banks, Consumer)

Я пытаюсь запустить следующую функцию

RegCoef <- function(returns_data, port_name, factor_choice){
  if(factor_choice == "3F"){
    reg_formula = as.formula(paste(port_name, "- One.Month ~ 
                                   FFMkt +
                                   FFSMB3F + 
                                   FFHML"))
  }else if(factor_choice == "5F"){
    reg_formula = as.formula(paste(port_name, "- One.Month ~ FFMkt + 
                                   FFSMB5F+ 
                                   FFHML + 
                                   FFRMW + 
                                   "))
  }

  reg = lm(reg_formula, data = returns_data)
  summary_output = c(portfolio = port_name, 
    intercept = summary(reg)$coef[1,1],
    intercept_tstat = summary(reg)$coef[1,2],
    summary(reg)$coef[-1, c("Estimate")], 
    Adj.R2 = summary(reg)$adj.r.squared) 

  return(summary_output)
  }

Я хотел бы применить функцию к списку портфелей

Portfolio = c (Tech, Mining, Banks, Consumer)

reg_summary_5F = cbind(sapply(Portfolio, function(port){RegCoef(returns_merged, port, "5F")})) 

Я получаю следующее сообщение об ошибке

Error in model.frame.default(formula = reg_formula, data = returns_data,  : 
  invalid type (list) for variable 'Tech - One.Month.US.Treasury.Bills' In addition: Warning message:
In Ops.factor(left, right) : ‘-’ not meaningful for factors

У меня не так много удачи. В данных есть еще много строк.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 25 июня 2019

Со следующими изменениями это работает для меня:

}else if(factor_choice == "5F"){    
reg_formula = as.formula(paste(port_name, "- One.Month ~ FFMkt + 
                                   FFSMB5F +  
                                   FFHML + 
                                   FFRMW")) # remove extra "+" sign
}

--------

Portfolio = c ('Tech', 'Mining', 'Banks', 'Consumer') # strings
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...