getwd()
## [1] "F:/Seminar"
df <-  read.csv(file = "Insurance.csv")
str(df)
## 'data.frame':    1338 obs. of  7 variables:
##  $ age     : int  19 18 28 33 32 31 46 37 37 60 ...
##  $ Gender  : Factor w/ 2 levels "female","male": 1 2 2 2 2 1 1 1 2 1 ...
##  $ bmi     : num  27.9 33.8 33 22.7 28.9 ...
##  $ children: int  0 1 3 0 0 0 1 3 2 0 ...
##  $ smoker  : Factor w/ 2 levels "no","yes": 2 1 1 1 1 1 1 1 1 1 ...
##  $ region  : Factor w/ 4 levels "northeast","northwest",..: 4 3 3 2 2 3 3 2 1 2 ...
##  $ Expences: num  16885 1726 4449 21984 3867 ...
# age = An integer indicating the age of the primary beneficiary
# Gender = The policy holder's gender 
# bmi = The body mass index
# children = An integer indicating the num of children
# smoker = Whether the insured smokes or not
# region = Place of residence

colnames(df)[7] <- "Expences"

str(df)
## 'data.frame':    1338 obs. of  7 variables:
##  $ age     : int  19 18 28 33 32 31 46 37 37 60 ...
##  $ Gender  : Factor w/ 2 levels "female","male": 1 2 2 2 2 1 1 1 2 1 ...
##  $ bmi     : num  27.9 33.8 33 22.7 28.9 ...
##  $ children: int  0 1 3 0 0 0 1 3 2 0 ...
##  $ smoker  : Factor w/ 2 levels "no","yes": 2 1 1 1 1 1 1 1 1 1 ...
##  $ region  : Factor w/ 4 levels "northeast","northwest",..: 4 3 3 2 2 3 3 2 1 2 ...
##  $ Expences: num  16885 1726 4449 21984 3867 ...
table(df$region)
## 
## northeast northwest southeast southwest 
##       324       325       364       325
hist(df$Expences)
summary(df$Expences)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1122    4740    9382   13270   16640   63770
cor(df[-c(2,5,6)])
##                age       bmi   children   Expences
## age      1.0000000 0.1092719 0.04246900 0.29900819
## bmi      0.1092719 1.0000000 0.01275890 0.19834097
## children 0.0424690 0.0127589 1.00000000 0.06799823
## Expences 0.2990082 0.1983410 0.06799823 1.00000000
library(psych)
## Warning: package 'psych' was built under R version 3.5.3

pairs.panels(df[-c(2,5,6)])

attach(df)
model <- lm(Expences ~ age + children + bmi + Gender + smoker + region, data = df)

model
## 
## Call:
## lm(formula = Expences ~ age + children + bmi + Gender + smoker + 
##     region, data = df)
## 
## Coefficients:
##     (Intercept)              age         children              bmi  
##        -11938.5            256.9            475.5            339.2  
##      Gendermale        smokeryes  regionnorthwest  regionsoutheast  
##          -131.3          23848.5           -353.0          -1035.0  
## regionsouthwest  
##          -960.1
summary(model)
## 
## Call:
## lm(formula = Expences ~ age + children + bmi + Gender + smoker + 
##     region, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11304.9  -2848.1   -982.1   1393.9  29992.8 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     -11938.5      987.8 -12.086  < 2e-16 ***
## age                256.9       11.9  21.587  < 2e-16 ***
## children           475.5      137.8   3.451 0.000577 ***
## bmi                339.2       28.6  11.860  < 2e-16 ***
## Gendermale        -131.3      332.9  -0.394 0.693348    
## smokeryes        23848.5      413.1  57.723  < 2e-16 ***
## regionnorthwest   -353.0      476.3  -0.741 0.458769    
## regionsoutheast  -1035.0      478.7  -2.162 0.030782 *  
## regionsouthwest   -960.0      477.9  -2.009 0.044765 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6062 on 1329 degrees of freedom
## Multiple R-squared:  0.7509, Adjusted R-squared:  0.7494 
## F-statistic: 500.8 on 8 and 1329 DF,  p-value: < 2.2e-16
df$age2 <- df$age^2

df$bmi30 <- ifelse(test = df$bmi >= 30, yes =  1,no = 0)

model2 <- lm(Expences ~ age + children + bmi + Gender + smoker + region + age2 +bmi30*smoker,
             data = df)
summary(model2)
## 
## Call:
## lm(formula = Expences ~ age + children + bmi + Gender + smoker + 
##     region + age2 + bmi30 * smoker, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -17296.4  -1656.0  -1263.3   -722.1  24160.2 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       134.2509  1362.7511   0.099 0.921539    
## age               -32.6851    59.8242  -0.546 0.584915    
## children          678.5612   105.8831   6.409 2.04e-10 ***
## bmi               120.0196    34.2660   3.503 0.000476 ***
## Gendermale       -496.8245   244.3659  -2.033 0.042240 *  
## smokeryes       13404.6866   439.9491  30.469  < 2e-16 ***
## regionnorthwest  -279.2038   349.2746  -0.799 0.424212    
## regionsoutheast  -828.5467   351.6352  -2.356 0.018604 *  
## regionsouthwest -1222.6437   350.5285  -3.488 0.000503 ***
## age2                3.7316     0.7463   5.000 6.50e-07 ***
## bmi30           -1000.1403   422.8402  -2.365 0.018159 *  
## smokeryes:bmi30 19810.7533   604.6567  32.764  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4445 on 1326 degrees of freedom
## Multiple R-squared:  0.8664, Adjusted R-squared:  0.8653 
## F-statistic: 781.7 on 11 and 1326 DF,  p-value: < 2.2e-16
test <- data.frame(35,"female",32,2,"no","northeast",30000,1225,1)

colnames(test) <- c("age","Gender","bmi","children","smoker","region","Expences","age2","bmi30")

pred <- predict(object = model2 , newdata = test)

pred
##        1 
## 7759.058