warning when calculating predicted values

20,498

Solution 1

Your variable names, as stored in the x.lm model, refer to the x dataframe. There are no variables of the same names in a, so it will use those 29 from x again, which is probably not what you wanted, thus the warning. You can do the following to always use an unqualified variable named Date in the model:

a <- seq(as.Date(tail(x, 1)$Date), by="month", length=5)
a <- data.frame(Date = a)
x.lm <- lm(Val ~ Date, data=x)
x.pre<-predict(x.lm, newdata=a)

Solution 2

Your data.frame a has a column named a. You created your model with columns named Val and Date so that is what its looking for.

when you make your data.frame a name that column Date and you're good to go:

a <- data.frame(Date=a)

Then it runs without the warning.

Per comment:

Edit your lm call to be:

lm(Val ~ Date, data=x)
Share:
20,498
user1471980
Author by

user1471980

Updated on July 14, 2020

Comments

  • user1471980
    user1471980 almost 4 years

    working with a data frame

    x
        Date      Val
        1/1/2012   7
        2/1/2012   9
        3/1/2012   20
        4/1/2012   24
        5/1/2012   50
    a <- seq(as.Date(tail(x, 1)$Date), by="month", length=5)
    a <- data.frame(a)
    x.lm <- lm(x$Val ~ x$Date)
    
    x.pre<-predict(x.lm, newdata=a)
    

    I am getting this erro:

    Warning message:
    'newdata' had 5 rows but variable(s) found have 29 rows 
    

    what am I doing wrong?

    here is the dput output:

    dput(x)
    structure(list(Date = structure(c(14610, 14641, 14669, 14700, 
    14730, 14761, 14791, 14822, 14853, 14883, 14914, 14944, 14975, 
    15006, 15034, 15065, 15095, 15126, 15156, 15187, 15218, 15248, 
    15279, 15309, 15340, 15371, 15400, 15431, 15461), class = "Date"), 
        Val = c(45, 51, 56, 56, 59, 60, 60, 60, 64, 65, 75, 73, 74, 
        80, 87, 91, 92, 96, 109, 108, 123, 129, 133, 143, 127, 127, 
        123, 121, 130)), .Names = c("Date", "Val"), row.names = c(NA, 
    29L), class = "data.frame")