mgcv::s() does not appear to work with objects of class "Date". E.g.,
> d <- data.frame(date=seq(as.Date("2018-12-20"),len=10,by="week"), response=log2(1:10)%%1) > model <- gam(data=d, response ~ s(date)) Error in names(dat) <- object$term : 'names' attribute [1] must be the same length as the vector [0] > traceback() 6: ExtractData(object, data, knots) 5: smooth.construct3(object, data, knots) 4: smoothCon(split$smooth.spec[[i]], data, knots, absorb.cons, scale.penalty = scale.penalty, null.space.penalty = select, sparse.cons = sparse.cons, diagonal.penalty = diagonal.penalty, apply.by = apply.by, modCon = modCon) 3: gam.setup(formula = list(pf = response ~ 1, pfok = 1, smooth.spec = list( list(term = "date", bs.dim = -1, fixed = FALSE, dim = 1L, p.order = NA, by = "NA", label = "s(date)", xt = NULL, id = NULL, sp = NULL)), fake.formula = response ~ 1 + date, response = "response", fake.names = "date", pred.names = "date", pred.formula = ~date), pterms = response ~ 1, data = list( response = c(0, 0, 0.584962500721156, 0, 0.321928094887362, 0.584962500721156, 0.807354922057604, 0, 0.169925001442312, 0.321928094887362), date = c(17885L, 17892L, 17899L, 17906L, 17913L, 17920L, 17927L, 17934L, 17941L, 17948L)), knots = NULL, sp = NULL, min.sp = NULL, H = NULL, absorb.cons = TRUE, sparse.cons = 0, select = FALSE, idLinksBases = TRUE, scale.penalty = TRUE, paraPen = NULL, drop.intercept = FALSE) 2: do.call(gsname, list(formula = gp, pterms = pterms, data = mf, knots = knots, sp = sp, min.sp = min.sp, H = H, absorb.cons = TRUE, sparse.cons = 0, select = select, idLinksBases = control$idLinksBases, scale.penalty = control$scalePenalty, paraPen = paraPen, drop.intercept = drop.intercept)) 1: gam(data = d, response ~ s(date)) You might work around this by using as.numeric(date) instead of date. Bill Dunlap TIBCO Software wdunlap tibco.com On Fri, Jan 4, 2019 at 12:29 AM 王 嘉炜 <wangjiawe...@hotmail.com> wrote: > Dear R users, > > > I am using the *mgcv package* to model the ozone pollution concentration > according to some environmental covariates. The model takes the form : > > model1 > <-gam(O3~s(X,Y,bs="tp",k=10)+wd+s(date,bs="cc",k=100)+district,data=mydata,family= > gaussian(link ="log" ),na.action="na.omit", method="REML") > > And here is the strcture of covariates > > str(mydata) > 'data.frame': 7100 obs. of 286 variables: > $ date : Date, format: "2016-01-01" "2016-01-01" "2016-01-01" > ... > $ O3 : num 0.0141 0.0149 0.0102 0.0159 0.0186 ... > $ district : Factor w/ 10 levels "bc","bh","dl",..: 1 8 7 8 2 6 4 > 4 10 2 ... > $ wd : Factor w/ 16 levels "E","ENE","ESE",..: 13 13 13 13 > 13 2 9 9 11 13 ... > $ X : num 0.389 0.365 1 0.44 0.892 ... > $ Y : num 0.311 0.204 0.426 0.223 0.162 ... > > I am stuck on an error in R: 'names' attribute [1] must be the same length > as the vector [0]. > > I try to find where the problem is by delete the term of > "s(date,bs="cc",k=100)" from the fomular and it could work well. It seems > like there is something wrong with date field. > > I'm not exactly sure how to fix this problem. Any advice would be greatly > appreciated! > Jiawei Wang > 发自 Outlook<http://aka.ms/weboutlook> > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.