Search code examples
rstatisticsprediction

Calculating predictions for multiple linear regression


I have data about insurance; age, sex, BMI, children, smoker, region and charges. Sex, smoker and region are factors. sex: male, female, smoker: yes, no, region: northeast, southeast, southwest, northwest.

m2 <- lm(charges ~ age + sex + bmi + children + smoker + region)

After fitting linear regression model with data I need to predict: male, age=40, bmi=30, smoker=yes, region=northwest. I have tried to factor categorical variables after reading the data

data$sex <- as.factor(data$sex)
data$region <- as.factor(data$region)

Using the predict function:

predict(m2, list(age=40, sex=factor(male), bmi=30, children=2, smoker=factor(yes), 
                 region=factor(northwest)), int="p", level=0.98)

I only get errors. Please help


Solution

  • Instead of redefining the factors, just use the factor level in quotation marks in predict.

    predict(m2, list(age=40, sex="male", bmi=30, children=2, smoker="yes", 
                     region="northwest"), int="p", level=0.98)
    #         fit       lwr      upr
    # 1 -1.978994 -9.368242 5.410254
    

    Data

    dat <- structure(list(charges = c(1.37095844714667, -0.564698171396089, 
    0.363128411337339, 0.63286260496104, 0.404268323140999, -0.106124516091484, 
    1.51152199743894, -0.0946590384130976, 2.01842371387704, -0.062714099052421
    ), age = c(20L, 58L, 44L, 53L, 22L, 51L, 20L, 75L, 59L, 41L), 
        sex = structure(c(2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("female", 
        "male"), class = "factor"), bmi = c(25.3024309248682, 24.6058854935878, 
        25.7881406228236, 25.6707038267505, 24.0508191903124, 25.036135738485, 
        27.115755613237, 25.1674409043556, 24.1201634714689, 25.9469131749433
        ), children = c(4L, 1L, 5L, 1L, 1L, 4L, 0L, 0L, 3L, 4L), 
        smoker = c("no", "yes", "yes", "no", "no", "yes", "yes", 
        "yes", "yes", "no"), region = structure(c(1L, 2L, 2L, 3L, 
        1L, 2L, 3L, 3L, 3L, 2L), .Label = c("northeast", "northwest", 
        "southeast"), class = "factor")), row.names = c(NA, -10L), class = "data.frame")