Thamar
Thamar

Reputation: 19

Multiple regression predicting using R, predicting a data.frame

I have been given data in a data.frame called petrol which has 125 rows and the following columns:
hydrcarb, tanktemp, disptemp, tankpres, disppres, sqrtankpres, sqrdisppres

I have been asked to delete the last 25 rows from petrol, fit the model where hydrcarb is the response variable and the rest are the explanatory variables, and to do this for the first 100 rows. Then use the fitted model to predict for the remaining 25.

This is what I have done so far:

#make a new table that only contains first 100 
petrold <- petrol[-101:-125,]
petrold

#FITTING THE MODEL
petrol.lmB <- lm(hydrcarb~ tanktemp + disptemp + tankpres + disppres + sqrtankpres + sqrdisppres, data=petrol)

#SELECT LAST 25 ROWS FROM PETROL
last25rows <-petrol[101:125,c('tanktemp','disptemp','tankpres','disppres','sqrtankpres','sqrdisppres')]


#PREDICT LAST 25 ROWS
predict(petrold,last25rows[101,c('tanktemp','disptemp','tankpres','disppres','sqrtankpres','sqrdisppres')])

I know I have done something wrong for my predict command since R gives me the error message:

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "data.frame"

So I am not sure how to get predicted values for hydrcarb for 25 different sets of data.

Upvotes: 1

Views: 1087

Answers (1)

CL.
CL.

Reputation: 14987

Alex A. already pointed out that predict expects a model as first argument. In addition to this, you should pass predict all rows you want predict at once. Besides, I recommend that you subset your dataframe "on-the-fly" instead of creating unnecessary copies. Lastly, there's a shorter way to write the fromula you pass to lm:

# data for example
data(Seatbelts)
petrol <- as.data.frame(Seatbelts[1:125, 1:7])
colnames(petrol) <- c("hydrcarb", "tanktemp", "disptemp", "tankpres", "disppres", "sqrtankpres", "sqrdisppres")

# fit model using observations 1:100
petrol.lmB <- lm(hydrcarb ~ ., data = petrol[1:100,])

#predict last 25 rows
predict(petrol.lmB, newdata = petrol[101:125,])

Upvotes: 0

Related Questions