1. ホーム
  2. r

[解決済み] 動的な変数数を持つ数式

2023-05-17 08:39:33

質問

あるdata.frameがあったとします。 foo_data_frame で、対象列の回帰を求めたい場合 Y を他の列で回帰させたい。そのためには、通常、いくつかの式とモデルが使われる。例えば

linear_model <- lm(Y ~ FACTOR_NAME_1 + FACTOR_NAME_2, foo_data_frame)

式が静的にコード化されている場合、それはうまく機能します。もし、一定の従属変数の数(例えば、2)でいくつかのモデルにわたってルートすることが望まれるなら、それはそのように扱うことができます。

for (i in seq_len(factor_number)) {
  for (j in seq(i + 1, factor_number)) {
    linear_model <- lm(Y ~ F1 + F2, list(Y=foo_data_frame$Y,
                                         F1=foo_data_frame[[i]],
                                         F2=foo_data_frame[[j]]))
    # linear_model further analyzing...
  }
}

質問ですが、プログラム実行中に変数の数が動的に変化する場合、同じ効果を得るにはどうしたらよいでしょうか?

for (number_of_factors in seq_len(5)) {
   # Then root over subsets with #number_of_factors cardinality.
   for (factors_subset in all_subsets_with_fixed_cardinality) {
     # Here I want to fit model with factors from factors_subset.
     linear_model <- lm(Does R provide smth to write here?)
   }
}

どのように解決するのですか?

参照 ?as.formula を、例えば

factors <- c("factor1", "factor2")
as.formula(paste("y~", paste(factors, collapse="+")))
# y ~ factor1 + factor2

ここで factors はモデルで使用したい因子の名前を含む文字ベクトルです。これは lm モデルに貼り付けることができます。

set.seed(0)
y <- rnorm(100)
factor1 <- rep(1:2, each=50)
factor2 <- rep(3:4, 50)
lm(as.formula(paste("y~", paste(factors, collapse="+"))))

# Call:
# lm(formula = as.formula(paste("y~", paste(factors, collapse = "+"))))

# Coefficients:
# (Intercept)      factor1      factor2  
#    0.542471    -0.002525    -0.147433