パラメータlm
を使用せずにモデルを構築しました:data=
m1 <- lm( mdldvlp.trim$y ~ gc.pc$scores[,1] + gc.pc$scores[,2] + gc.pc$scores[,3] +
gc.pc$scores[,4] + gc.pc$scores[,5] + gc.pc$scores[,6] + predict(gc.tA))
m1
ここで、使用を予測したいので、上記の呼び出しnewdata
で使用された変数と一致するように新しい data.frame に名前を付けます。lm()
newComps
私の新しいものとしてgc.pc
(予測と同様に、新しいdata.framegc.tA
を使用して問題なく予測されました)、私は試しました
newD <- data.frame( newComps[1:100,1:6] ,
predict(gc.tA , newdata = mdldvlp[1:100,predKept]))
names(newD) <- names(m1$coefficients)[-1]
names(newD) <- names(m1$model)[-1]
names(newD) <- c( "gc.pc$scores[, 1]" , "gc.pc$scores[, 2]" , "gc.pc$scores[, 3]" ,
"gc.pc$scores[, 4]" , "gc.pc$scores[, 5]" , "gc.pc$scores[, 6]" ,
"predict(gc.tA)" )
names(newD) <- c( "gc.pc$scores[,1]" , "gc.pc$scores[,2]" , "gc.pc$scores[,3]" ,
"gc.pc$scores[,4]" , "gc.pc$scores[,5]" , "gc.pc$scores[,6]" ,
"predict(gc.tA)" )
残念ながら、predict.lm
上記の命名戦略を受け入れず、newdata
ビルドされた元の data.frame からの予測とともに恐ろしい警告を返しm1
ます。
Warning message:
'newdata' had 100 rows but variable(s) found have 1414 rows
呼び出しを機能newD
させるには、列にどのように名前を付ける必要がありますか? predict
ありがとう。
以下のコードは、問題を再現します。
require(rpart)
set.seed(123)
X <- matrix(runif(200) , 20 , 10)
gc.pc <- princomp(X)
y <- runif(20)
mdldvlp.trim <- data.frame(y,X)
names(mdldvlp.trim) <- c("y",paste("x",1:10,sep=""))
predKept <- paste("x",1:10,sep="")
gc.tA <- rpart( y ~ . , data = mdldvlp.trim)
m1 <- lm( mdldvlp.trim$y ~ gc.pc$scores[,1] + gc.pc$scores[,2] + gc.pc$scores[,3] +
gc.pc$scores[,4] + gc.pc$scores[,5] + gc.pc$scores[,6] + predict(gc.tA))
mdldvlp <- data.frame(matrix(runif(2000) , 200 , 10))
names(mdldvlp) <- predKept
newComps <- predict( gc.pc , newdata=mdldvlp )
newD <- data.frame( newComps[1:100,1:6] ,
predict(gc.tA , newdata = mdldvlp[1:100,predKept]))
# enter newD naming strategy here
predict( m1 , newdata=newD )
4/20 フォローアップ:
回答ありがとうございます。最初に適切な名前の予測子を含む data.frame を作成することで、物事がより簡単になることを理解しています。という事は承知しています。私の質問は、モデリングデータフレームが実際に名前gc.pc$scores[,1]
などの変数を持つデータフレームに評価される場合、上記で使用された命名「戦略」が機能しないのはなぜpredict.lm
ですか? つまり、lm
モデリング データ フレームgc.pc$scores[,1]
などを本当に評価しますか? もしそうなら、上記の名前変更戦略は で機能しpredict.lm
ませんか?