我需要使用三個變數對變數“Life_expectancy”執行 GAM:“Adult_Mortality”、“HIV_AIDS”和“Schooling”。為了優化調整 GAM 模型,我需要為每個變數找到自由度的完美組合。為此,我需要在另一個回圈中創建一個 for 回圈以找到所有變數的最佳組合,例如在 3 個 for 回圈中運行以下命令,一個用于 i,一個用于 j,一個用于 k:
gam.fit <- gam(Life_expectancy ~ s(Adult_Mortality, df = i) s(HIV_AIDS, df = j) s(Schooling, df = k), data=train)
對于 i,j,k 的每個組合并計算每次的測驗誤差。最后,選擇測驗誤差最低的模型。我嘗試使用此代碼執行此操作:
test.err <- rep(0, 8)
for (i in 3:10) {
for (j in 3:10) {
for (k in 3:10) {
gam.fit <- gam(Life_expectancy ~ s(Adult_Mortality, df = i)
s(HIV_AIDS, df = j)
s(Schooling, df = k),
data=train)
gam.pred <- predict(gam.fit, test)
test.err[i-2] <- mean((test$Life_expectancy - gam.pred)^2)
}}}
但這對于從 3 到 10 的自由度 i 僅產生 8 個測驗錯誤。如何為 i、j、k 的每個組合輸出自由度?
uj5u.com熱心網友回復:
代碼可以修改為:
test.err <- array(0, c(8,8,8))
for (i in 3:10) {
for (j in 3:10) {
for (k in 3:10) {
gam.fit <- gam(Life_expectancy ~ s(Adult_Mortality, df = i)
s(HIV_AIDS, df = j)
s(Schooling, df = k),
data=train)
gam.pred <- predict(gam.fit, test)
test.err[i-2, j-2, k-2] <- mean((test$Life_expectancy - gam.pred)^2)
}}}
關于該方法的一些說明:
- 你還沒說這
gam作業,你曾經使用過,也有包裝的功能gam和mgcv和可能其他人。后者可以根據訓練集估計合適的自由度 - 您似乎是根據與測驗資料集的擬合度來估計自由度,這在某種程度上與擁有單獨的訓練和測驗資料集的想法背道而馳。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/384691.html
