簡體   English   中英

回歸 model 與 r 中所有可能的雙向交互項

[英]Regression model with all possible two way interaction terms in r

我有一個包含 8 個變量的數據集。 我需要所有可能的雙向交互項以及每個 model 中的七個預測變量。 因此,在我的例子中,總共將有 7C2 = 21 個模型,每個模型一次包含 7 個預測變量和一個雙向交互項。

我嘗試使用 for 循環生成 21 個模型,但是當我嘗試在 for 循環中使用該代碼時,代碼似乎在 lm() function 處失敗。 在我的問題中,返回的是我數據第 5 列的響應變量。

colnames(dt) = c("assets","turnover_ratio","SD","sharpe_ratio","return",
                 "expense_ratio","fund_dummy","risk_dummy")
vars=colnames(dt)[-5] 
for (i in vars)  {
  for (j in vars) {
    if (i != j) {
      factor= paste(i,j,sep='*')}
    lm.fit <- lm(paste("return ~", factor), data=dt)
    print(summary(lm.fit))
  }}

下面給出了代碼的錯誤消息:

粘貼錯誤(“return ~”,因子):無法將“閉包”類型強制轉換為“字符”類型的向量

這是我的數據集:數據集

下面的 output 應該是所需的 output 並且需要另外 20 個這樣的模型以及其他可能的雙向交互項。 每個 model 中都應存在所有 7 個預測變量。 唯一應該改變的是雙向交互項。

這是所需的 21 個中我想要的 output:21 個所需輸出中的一個所需輸出

您的問題是 if 語句的結尾。 此代碼應該可以工作:

colnames(dt) = c("assets","turnover_ratio","SD","sharpe_ratio","return",
                 "expense_ratio","fund_dummy","risk_dummy")
vars=colnames(dt)[-5] 
for (i in vars)  {
  for (j in vars) {
    if (i != j) {
      factor= paste(i,j,sep='*')
      lm.fit <- lm(paste0("return ~", factor), data=dt)
      print(summary(lm.fit))
    }
  }
}

問題是對於第一次迭代,變量因子沒有定義。 也盡量不要命名變量因子,因為因子是 R 中的 function。

以下apply循環獲取 7 個變量之間的所有成對交互。 首先使用combn獲得 21 對。

vars <- colnames(dt)[-5] 
resp <- colnames(dt)[5] 

cmb <- combn(vars, 2)

lm_list <- apply(cmb, 2, function(regrs){
  inter_regrs <- paste(regrs, collapse = "*")
  other_regrs <- setdiff(vars, regrs)
  all_regrs <- paste(other_regrs, collapse = "+")
  all_regrs <- paste(all_regrs, inter_regrs, sep = "+")
  fmla <- as.formula(paste(resp, all_regrs, sep = "~"))
  lm(fmla, data = dt)
})

lapply(lm_list, summary)

數據創建代碼。

set.seed(1234)
dt <- replicate(8, rnorm(100))
dt <- as.data.frame(dt)

colnames(dt) <- c("assets","turnover_ratio","SD",
              "sharpe_ratio","return","expense_ratio",
              "fund_dummy","risk_dummy")

我認為這應該可以讓你擺脫循環:

lm.fit = lm(return ~ (.)^2, data=dt)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM