[R] Error in names(x) <- value: 'names' attribute must be the same length as the vector in gam function

William Dunlap wdunl@p @ending from tibco@com
Fri Jan 4 17:06:14 CET 2019


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 王 嘉炜 <wangjiawei92 using 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 using 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]]



More information about the R-help mailing list