插入符号的“gam”模型没有返回fit.values

时间:2013-04-03 15:56:51

标签: r regression gam mgcv

我在gam中使用caret.train模型(caret使用来自包gam的{​​{1}}):

mgcv

我上面没有看到> 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 - http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/gam/html/gam.html 因此,我无法绘制拟合vs残差,而其他一些函数也失败了。解决方法是直接使用fitted.values而不是gam,但我也计划使用其他模型,并且需要一致的界面。

请告知。

编辑:

  1. 数据快照 - caret输出:

    dput(head(training))
  2. 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") 根据@nograpes的建议在str(fit)内显示fitted.values

    finalModel

2 个答案:

答案 0 :(得分:4)

如果您提供了一些样本数据,那么这个问题会更容易回答。

检查对象的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)

答案 1 :(得分:1)

请参阅http://caret.r-forge.r-project.org/modelList.html

使用method =“gam”从mgcv包中获取gam()并使用“gamLoess”和“gamSpline”使用gam包中的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 

最高