0

for ループを使用して、100 個の線形モデルと 100 個の二次モデルを同じ合成データに当てはめています。

(ランダムに) 5 つの線形近似と 5 つの二次近似を抽出し、これらの回帰関数を真のモデルの平均関数と共にプロットします。

これまでの私の考え:

  1. 乱数を10個選ぶ
  2. 10個のモデルを保持するコンテナ(データフレーム?)を作成します
  3. for ループに入り、フィットを取得します。i 回目の反復が乱数のセットからのものである場合は、そのモデルをコンテナーに保持します。
  4. ループを終了し、コンテナー内のすべての近似を真のモデルと一緒にプロットします

私が抱えている主な問題は、クラス「lm」の空のデータフレームを作成する方法を確認することです。

for ループの前に、コンテナーをビルドし、

fit.container.linear <- list()
fit.container.quadratic <- list()

そして、コンテナに入るモデルのインデックスをランダムに選択します

randy.linear <- sample(1:100,5,replace=F) 
randy.quadratic <- sample(1:100,5,replace=F) 

次に、for ループで、lm を使用して線形モデルと二次モデルを取得します。model.1 は線形です。model.2 は 2 次です。forループ内で、モデルをコンテナに保存します

for (k in 1:length(randy.linear)){
    if (i == randy.linear[k]){
        fit.container.linear <- list(fit.container.linear,model.1)
    }
    }

for (p in 1:length(randy.quadratic)) {
    if (i == randy.linear[p]){
        fit.container.quadratic <- list(fit.container.quadratic,model.2)
    }
}

for ループを終了します。

ここで、係数を保持するコンテナーにアクセスし、すべてを 1 つのグラフにプロットします。

4

1 に答える 1

0

すべてのモデルをリストに保存してから、インデックスを作成します。

lin_mods <- vector(mode = "list", length = 100)
quad_mods  <- vector(mode = "list", length = 100)

for(i in 1:100){
    # ....
    lin_mods[[i]]  <- model.1
    quad_mods[[i]] <- model.2
}

randy_linear    <- sample(1:100, 5, replace=F) 
randy_quadradic <- sample(1:100, 5, replace=F)

rand_lin_mods  <- lin_mods[randy_linear]
rand_quad_mods <- quad_mods[randy_quadradic]

それらをプロットすることに関しては、元のデータと予測子の感覚がなければ、良い答えを出すのは困難です. あなたが試すことができるのは:

pred_grid <- expand.grid(y = seq(min(data$y), max(data$y), length = 100)
get_fit <- function(model, newdata){
    newdata$fit <- predict(model, newdata = newdata)
    return(newdata)
}    

library(plyr)
names(randy_lin_mods) <- 1:5
names(randy_quad_mods) <- 1:5

lin_fits  <- ldply(randy_lin_mods,  get_fit, newdata = pred_grid)
quad_fits <- ldply(randy_quad_mods, get_fit, newdata = pred_grid)

lin_fitsquad_fitsは、モデルから予測されたフィットのデータ フレームです。

于 2013-11-11T00:52:39.760 に答える