3

これが以前に尋ねられた場合、または明らかな何かを見逃している場合は、事前にお詫び申し上げます。

「olddata」と「newdata」の 2 つのデータ セットがあります。

set.seed(0)
olddata <- data.frame(x = rnorm(10, 0,5), y = runif(10, 0, 5), z = runif(10,-10,10))
newdata <- data.frame(x = -5:5, z = -5:5)

古いデータからモデルを作成し、新しいデータから値を予測したい

mymodel <- lm(y ~ x+z, data = olddata)
predict.lm(mymodel, newdata)

ただし、「newdata」の変数の範囲を、モデルがトレーニングされた変数の範囲に制限したいと思います。

もちろん、私はこれを行うことができます:

 newnewdata <- subset(newdata, 
                      x < max(olddata$x) & x > min(olddata$x) &
                      z < max(olddata$z) & z > max(olddata$z))

しかし、これは多くの次元で扱いにくくなります。これを行うための繰り返しの少ない方法はありますか?

4

2 に答える 2

2

*apply ファミリーを使用したアプローチを次に示します (SchaunW の newdata を使用)。

set.seed(0)
olddata <- data.frame(x = rnorm(10, 0, 5), y = runif(10, 0, 5), z = runif(10,-10,10))
newdata <- data.frame(x = -10:10, z = -10:10)

minmax <- sapply(olddata[-2], range)
newdata[apply(newdata, 1, function(a) all(a > minmax[1,] & a < minmax[2,])), ]

olddataの列(2 番目の列を削除した後) は と同一であると想定しているため、注意が必要ですnewdata

簡潔さにはスピードが犠牲になります。nrow(newdata)私が見つけた違いを強調するために2000に増やした後:

       test replications elapsed relative user.self sys.self user.child sys.child
1  orizon()          100   2.193   27.759     2.191    0.002          0         0
2 SchaunW()          100   0.079    1.000     0.075    0.004          0         0

私の推測では、主な原因は、繰り返しサブセット化することで、行が除外された後に検査基準を満たすかどうかのテストが回避されることです。

于 2013-05-02T04:33:12.770 に答える