2016-09-23 8 views
-2

編集複数の回帰を実行し...は私が既に持っているコードを表示するための係数を抽出するために14個のデータフレームを使用してRMSEの

私の仕事は、ムービーは、ケーブル・プラットフォーム上で、その最初の15週間にわたって行いますどのくらいのお金を予測することです。私は、最初の14週間に毎週回帰を使用してこれを行います。しかし、私は各回帰を計算するステップを自動化する必要があります:

  1. サブセットの合計データセットは週(合計14週間)です。したがって、14の異なるデータフレーム。トレーニングとテストセットに

    df.names = paste("data",1:14,sep="") for(i in 1:14){ d.frame = subset(myData,Week==i) assign(df.names[i],d.frame) }

  2. サブセット毎週のデータフレーム。

    set.seed(101) train_idx = sample(1:nrow(data1),round(0.7 * nrow(data1)),replace=FALSE) data1_train = data1[train_idx,] data1_test = data1[-train_idx,]

  3. 各週のトレーニングセットの線形回帰を実行します。

    Week1_Regress = lm(x ~ coef1 + coef 2 + ... + coefi, data = data1_train)

  4. CSVファイルに各回帰の係数を抽出します。

    write.csv(Week1_Regress$coef,"Selected Folder")

  5. テストセットを使用してRMSEを計算し、CSVにそれを抽出します。

    test = predict(Week1_Regress, data1_test) rmse = function(test,obs) { sqrt(sum((obs - test)^2)/length(test)) }

私が個別に各ステップを行うことができますが、私は5つのステップの14件のバージョンを入力する必要がないように、私はループまたはlapply解決策を探しています。

+0

最も簡単な解決策は、その後、1つのバージョンのためにあなたの手順を書き留め、あなたのデータを反復処理が設定されたループですべてをラップすることです。たとえば、列に変数があり、行に週(または週のサブ間隔)がある表形式のデータセットがあるとします。次に、あなたのループは、現在の週を指すカウンタを増加させるだけです。それはあなたの5つのステップを14回、またはあなたが望むだけ繰り返すでしょう。また、あなたが試したことをあなたの質問に含めるべきです。この場合、少なくとも1週間はステップ(実際のコード)を挿入することになります。 – iled

+0

私の迷惑なアドバイスをお詫び申し上げます。テレビの役員は、データ科学者を雇うという比較優位性から利益を得ることができると私には思えます。 – shayaa

+0

lapplyのアイデアは、あなたの場合には 'data.frame'を入力して関数' lapply(df、some_function) 'を適用することです。あなたの関数を書いて、ヘルプを依頼してください。これまでのところ、これは本当の質問ではなく、閉じられ、downvotedされます。 – marbel

答えて

0

SOを通してトロール後、私はかなりうまく動作するようです、次の解決策が出ている:

df.names = paste("models",1:14,sep="") 
for(i in 1:14){ 
    set.seed(101) 
    data = subset(MyData,Week==i) 
    data_select = sample(1:nrow(data),round(0.7 * nrow(data)),replace = FALSE) 
    d.frame = data[data_select,] 
    model = lm(y ~ independent variables,data=d.frame) 
    assign(df.names[i],model$coef) 
} 

coefficients = data.frame(models1,models2,...,models14) 
write.csv(coefficients, "folder destinaton/filename.csv") 

その後、私は、上記と同様の構造を複製14週間ごとにRMSE年代を取得するには、しかしでassign(df.names[i],model$coef)を交換してテストセットを使用します。

d.frame.test = data[-data_select,] 
    test = predict(model,d.frame.test) 
    rmse = sqrt(sum(d.frame.test$dependent_variable - test))/nrow(d.frame.test) 
    assign(df.names[i],rmse) 
} 

errors = data.frame(rmse1,rmse2,...,rmse14) 
    write.csv(errors,"folder destinaton/errors.csv" 
関連する問題