この質問はパッケージ固有すぎるかもしれませんがpredict
、データセットで関数を使用する際に何が間違っている可能性があるかについての入力を重視します.
私が使用している手順は次のとおりです。
require(penalized)
# neg contains negative data
# pos contains positive data
ここで、以下の手順は、比較可能な (ポジティブ ケースとネガティブ ケースに関してバランスのとれた) トレーニングおよび検証データ セットを構築することを目的としています。
# 50% negative training set
negSamp <- neg %>% sample_frac(0.5) %>% as.data.frame()
# Negative validation set
negCompl <- neg[setdiff(row.names(neg),row.names(negSamp)),]
# 50% positive training set
posSamp <- pos %>% sample_frac(0.5) %>% as.data.frame()
# Positive validation set
posCompl <- pos[setdiff(row.names(pos),row.names(posSamp)),]
# Combine sets
validat <- rbind(negSamp,posSamp)
training <- rbind(negCompl,posCompl)
わかりました、これで 2 つの比較可能なセットができました。
[1] FALSE TRUE
> dim(training)
[1] 1061 381
> dim(validat)
[1] 1060 381
> identical(names(training),names(validat))
[1] TRUE
モデルをトレーニング セットに問題なく適合させました (ここでは Lambda1 値の範囲を使用してみました)。しかし、検証データセットへのモデルのフィッティングは失敗し、奇妙なエラーの説明が表示されます。
> fit <- penalized(VoiceTremor,training[-1],data=training,lambda1=40,standardize=TRUE)
# nonzero coefficients: 13
> fit2 <- predict(fit, penalized=validat[-1], data=validat)
Error in .local(object, ...) :
row counts of "penalized", "unpenalized" and/or "data" do not match
これがデータセット内の一部の NA によるものではないことを確認するためだけに:
> identical(validat,na.omit(validat))
[1] TRUE
奇妙なことに、適切なデータセットに匹敵する新しいデータを生成することがあります。
data.frame(VoiceTremor="NVT",matrix(rnorm(380000),nrow=1000,ncol=380) ) -> neg
data.frame(VoiceTremor="VT",matrix(rnorm(380000),nrow=1000,ncol=380) ) -> pos
> dim(pos)
[1] 1000 381
> dim(neg)
[1] 1000 381
上記の手順を実行すると、2 番目のフィットが機能します。どうして?2 番目の (トレーニングではない) データセットの何が問題になっている可能性がありますか?