4

データセットから取得した 1000 を超えるサンプルに対してロジスティック回帰を複数回実行しています。私の質問は、私の結果を表示する最良の方法は何ですか? 適合曲線と予測曲線の両方の出力をプロットするにはどうすればよいですか?

これは、R の野球データセットを使用して、私が行っていることの例です。たとえば、モデルを 5 回当てはめて予測したいとします。(予測用に) 1 つのサンプルを取り出し、別のサンプルを当てはめに使用するたびに。

library(corrgram)
data(baseball)

#Exclude rows with NA values
dataset=baseball[complete.cases(baseball),]

#Create vector replacing the Leage (A our N) by 1 or 0.
PA=rep(0,dim(dataset)[1])
PA[which(dataset[,2]=="A")]=1

#Model the player be league A in function of the Hits,Runs,Errors and Salary  
fit_glm_list=list()
prd_glm_list=list()
for (k in 1:5){
  sp=sample(seq(1:length(PA)),30,replace=FALSE)
  fit_glm<-glm(PA[sp[1:15]]~baseball$Hits[sp[1:15]]+baseball$Runs[sp[1:15]]+baseball$Errors[sp[1:15]]+baseball$Salary[sp[1:15]])    
  prd_glm<-predict(fit_glm,baseball[sp[16:30],c(6,8,20,21)])
  fit_glm_list[[k]]=fit_glm;prd_glm_list[[k]]=fit_glm
}
4

1 に答える 1

1

ここにはいくつかの問題があります。

  • PAのサブセットですが、モデルはデータ フレームbaseball$League全体の列で構築されます 。つまり、それらは一致しません。baseball
  • PAは、デフォルト ファミリ (ガウス) を使用する場合に連続応答として扱われるため、因子および二項ファミリに変更する必要があります。
  • prd_glm_list[[k]]=fit_glmおそらくあるはずですprd_glm_list[[k]]=prd_glm
  • 予測のために真のクラス ラベルを保存する必要があります。保存しないと、比較するものがありません。

あなたのコードに対する私の見解は次のようになります。

library(corrgram)
data(baseball)

dataset <- baseball[complete.cases(baseball),]

fits <- preds <- truths <- vector("list", 5)
for (k in 1:5){
  sp <- sample(nrow(dataset), 30, replace=FALSE)
  fits[[k]] <- glm(League ~ Hits + Runs + Errors + Salary,
                   family="binomial", data=dataset[sp[1:15],])    
  preds[[k]] <- predict(fits[[k]], dataset[sp[16:30],], type="response")
  truths[[k]] <- dataset$League[sp[1:15]]
}
plot(unlist(truths), unlist(preds))

モデルのパフォーマンスはよくありませんが、少なくともコードは問題なく実行されます。プロットの y 軸は、例がリーグ N に属する推定確率を示します。つまり、理想的には、左側のボックスは 0 に近く、右側のボックスは 1 に近いはずです。

ここに画像の説明を入力

于 2013-07-03T12:31:56.310 に答える