2013-04-03 37 views
2

我使用caret.traingam模型(caret使用gam從包mgcv):「GAM」 的模式沒有返回fitted.values

> fit <- train(P~II+TH+DR+TT,data=training,method="gam",trControl=ctrl,metric="Rsquared",preProc=c("center","scale")) 
> names(fit) 
[1] "method"  "modelType" "results"  "pred"   "bestTune"  "call"   
[7] "dots"   "metric"  "control"  "finalModel" "preProcess" "trainingData" 
[13] "resample"  "resampledCM" "perfNames" "maximize"  "yLimits"  "times"  
[19] "terms"  "coefnames" "xlevels" 

我沒有看到上面fitted.values,但gam對象應該返回fitted.values - http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/gam/html/gam.html 因此,我不能繪製擬合vs殘差,而其他一些函數也失敗了。解決方法是直接使用gam而不是caret,但我也計劃使用其他模型,並且需要一致的接口。

請指教。

編輯:

  1. 數據快照 - dput(head(training))輸出:

    structure(list(TT = c(1.810376, 0.089206, 0.623906, 0.676775, 
    0.206524, 1.014849), P = c(682L, 674L, 681L, 679L, 655L, 682L 
    ), II = c(846000000L, 4790000L, 38600000L, 40600000L, 1379632L, 
    7526080L), WSM = c(5272L, 144L, 576L, 576L, 2336L, 18696L), TSM = c(168704L, 
    4608L, 18432L, 18432L, 74752L, 598272L), L2M = c(1.49e+09, 12600000, 
    85700000, 1.24e+08, 4214560, 33560200), DR = c(2.52e+09, 18400000, 
    1.3e+08, 1.8e+08, 5559030, 44681000), DW = c(11600000L, 5440000L, 
    39600000L, 46400000L, 4920550L, 36812430L), TH = c(32.032843125, 
    0.1880727305, 0.2003506939, 0.1983195715, 0.558498625, 0.495952125 
    )), .Names = c("TT", "P", "II", "WSM", "TSM", "L2M", "DR", "DW", 
    "TH"), row.names = c(3L, 5L, 7L, 8L, 9L, 10L), class = "data.frame") 
    
  2. str(fit)顯示fitted.values內部finalModel通過@nograpes的建議。

    $ finalModel :List of 50 
    ..$ coefficients  : Named num [1:37] 761 -1839 -377 745 -473 ... 
    .. ..- attr(*, "names")= chr [1:37] "(Intercept)" "s(II).1" "s(II).2" "s(II).3" ... 
    ..$ residuals  : num [1:44] -8.229 0.402 -11.41 -26.357 -8.202 ... 
    ..$ fitted.values : Named num [1:44] 690 674 683 707 687 ... 
    
+0

是不存在的最後一個星期內提出了一個非常類似的問題? –

+0

你指的是這個嗎? - http://stackoverflow.com/questions/15584541/how-to-extract-fitted-splines-from-a-gam-mgcvgam – Sayan

+0

不,我指的是你問的兩個以前的問題:http:// stackoverflow .com/questions/15724807/error-in-r-caret-train-in-method-gam and http://stackoverflow.com/questions/15745300/error-in-caret-train-in-method-gam投票結果關。由於沒有數據,也沒有解決早期問題的解決辦法,所以這可能不會很有成效。您應該聯繫軟件包維護人員。 –

回答

3

它會作出這個問題容易得多,如果你已經提供了一些樣本數據來回答。

檢查對象的names不是查找內部內容的好方法。嘗試運行str(fit),你會看到你缺少的東西。

fitted.values對象嵌套更深一層。

library(mgcv) 
library(caret) 

dat <- gamSim(1,n=400,dist="normal",scale=2) 
test<-train(y~x1, data=dat, method='gam') # Next time, provide any data like this. 

test$finalModel$fitted.values # If that isn't what you want, try str(test) 
+0

對不起,我正在學習r,我編輯了我的問題。謝謝 – Sayan

1

參見http://caret.r-forge.r-project.org/modelList.html

從mgcv包使用方法= 「GAM」 獲取您GAM()和使用從GAM包 「gamLoess」 和 「gamSpline」 使用GAM()。

> library(gam) 
> data(kyphosis) 
> mod <- train(Kyphosis ~ Age + Number, data = kyphosis, method = "gamSpline") 
> mod$finalModel 
Call: 
gam:::gam(formula = smootherFormula(data[, !(names(data) %in% 
    ".outcome"), drop = FALSE], smoother = "s", df = tuneValue$.df), 
    family = if (type == "Regression") gaussian() else binomial(), 
    data = data) 

Degrees of Freedom: 80 total; 76.99992 Residual 
Residual Deviance: 64.9097 
> head(mod$finalModel$fitted.values) 
     1   2   3   4   5   6 
0.15217276 0.10961985 0.27168469 0.07017040 0.04072463 0.01414652 

最大