#Upload the data
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
ageandheight <- read_excel("Z:/Data_Mining/AgeHeight.xlsx", sheet = "Hoja")
#Create the linear regression with on independent variable age
lmHeight <- lm(height~age, data = ageandheight)
#Review the resultswd
summary(lmHeight)
## 
## Call:
## lm(formula = height ~ age, data = ageandheight)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.27238 -0.24248 -0.02762  0.16014  0.47238 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  64.9283     0.5084  127.71  < 2e-16 ***
## age           0.6350     0.0214   29.66 4.43e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.256 on 10 degrees of freedom
## Multiple R-squared:  0.9888, Adjusted R-squared:  0.9876 
## F-statistic:   880 on 1 and 10 DF,  p-value: 4.428e-11
#Create the linear regression with two independent variables age and no_siblings
lmHeight2 <- lm(height~age+no_siblings, data = ageandheight)
#Review the resultswd
summary(lmHeight2)
## 
## Call:
## lm(formula = height ~ age + no_siblings, data = ageandheight)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.26297 -0.22462 -0.02021  0.16102  0.49752 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 64.90554    0.53526 121.260 8.96e-16 ***
## age          0.63751    0.02340  27.249 5.85e-10 ***
## no_siblings -0.01772    0.04735  -0.374    0.717    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2677 on 9 degrees of freedom
## Multiple R-squared:  0.9889, Adjusted R-squared:  0.9865 
## F-statistic: 402.2 on 2 and 9 DF,  p-value: 1.576e-09
library(readr)
## Warning: package 'readr' was built under R version 4.3.3
insurance <- read_csv("Z:/Data_Mining/insurance.csv")
## Rows: 1338 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): sex, smoker, region
## dbl (4): age, bmi, children, charges
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
insurance$sex <- as.factor(insurance$sex)
insurance$smoker <- as.factor(insurance$smoker)
insurance$region <- as.factor(insurance$region)
str(insurance)
## spc_tbl_ [1,338 × 7] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ age     : num [1:1338] 19 18 28 33 32 31 46 37 37 60 ...
##  $ sex     : Factor w/ 2 levels "female","male": 1 2 2 2 2 1 1 1 2 1 ...
##  $ bmi     : num [1:1338] 27.9 33.8 33 22.7 28.9 ...
##  $ children: num [1:1338] 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 ...
##  $ charges : num [1:1338] 16885 1726 4449 21984 3867 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   age = col_double(),
##   ..   sex = col_character(),
##   ..   bmi = col_double(),
##   ..   children = col_double(),
##   ..   smoker = col_character(),
##   ..   region = col_character(),
##   ..   charges = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
summary(insurance)
##       age            sex           bmi           children     smoker    
##  Min.   :18.00   female:662   Min.   :15.96   Min.   :0.000   no :1064  
##  1st Qu.:27.00   male  :676   1st Qu.:26.30   1st Qu.:0.000   yes: 274  
##  Median :39.00                Median :30.40   Median :1.000             
##  Mean   :39.21                Mean   :30.66   Mean   :1.095             
##  3rd Qu.:51.00                3rd Qu.:34.69   3rd Qu.:2.000             
##  Max.   :64.00                Max.   :53.13   Max.   :5.000             
##        region       charges     
##  northeast:324   Min.   : 1122  
##  northwest:325   1st Qu.: 4740  
##  southeast:364   Median : 9382  
##  southwest:325   Mean   :13270  
##                  3rd Qu.:16640  
##                  Max.   :63770
hist(insurance$charges)
summary(insurance$sex)
## female   male 
##    662    676
summary(insurance$smoker)
##   no  yes 
## 1064  274
summary(insurance$region)
## northeast northwest southeast southwest 
##       324       325       364       325
# Finding relationships among features - the correlation matrix
# If cor(x,y) > 0.5, there is strong correlation
# If cor(x,y) > 0.2 and <0.5, there is minor correlation
# If cor(x,y) > 0.2 , there is no correlation and x and y are independent variables
cor(insurance[c("age", "bmi", "children", "charges")])
##                age       bmi   children    charges
## 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
## charges  0.2990082 0.1983410 0.06799823 1.00000000
library(psych)
## Warning: package 'psych' was built under R version 4.3.3

pairs(insurance[c("age", "bmi", "children", "charges")])

#pairs.panels(insurance[c("age", "bmi", "children", "charges")])

ins_model <- lm(charges ~ age + sex + smoker, data = insurance)
ins_model
## 
## Call:
## lm(formula = charges ~ age + sex + smoker, data = insurance)
## 
## Coefficients:
## (Intercept)          age      sexmale    smokeryes  
##    -2433.56       274.93        81.82     23847.63
lm(formula = charges ~., data=insurance)
## 
## Call:
## lm(formula = charges ~ ., data = insurance)
## 
## Coefficients:
##     (Intercept)              age          sexmale              bmi  
##        -11938.5            256.9           -131.3            339.2  
##        children        smokeryes  regionnorthwest  regionsoutheast  
##           475.5          23848.5           -353.0          -1035.0  
## regionsouthwest  
##          -960.1
summary(ins_model)
## 
## Call:
## lm(formula = charges ~ age + sex + smoker, data = insurance)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -16122.4  -2048.5  -1318.9   -228.2  28725.3 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -2433.56     558.26  -4.359 1.41e-05 ***
## age           274.93      12.46  22.061  < 2e-16 ***
## sexmale        81.82     350.98   0.233    0.816    
## smokeryes   23847.63     434.89  54.836  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 6399 on 1334 degrees of freedom
## Multiple R-squared:  0.7214, Adjusted R-squared:  0.7208 
## F-statistic:  1151 on 3 and 1334 DF,  p-value: < 2.2e-16
insurance$age2<-insurance$age^2

insurance$bmi30<-ifelse(insurance$bmi>=30, 1, 0)

charges ~bmi30*smoker
## charges ~ bmi30 * smoker
charges~bmi30 + smokeryes + bmi30:smokeryes
## charges ~ bmi30 + smokeryes + bmi30:smokeryes
ins_model2<-lm(charges~age+age2+children+bmi+sex+bmi30*smoker+region,data = insurance)
summary(ins_model2)
## 
## Call:
## lm(formula = charges ~ age + age2 + children + bmi + sex + bmi30 * 
##     smoker + region, data = insurance)
## 
## 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    
## age2                3.7316     0.7463   5.000 6.50e-07 ***
## children          678.5612   105.8831   6.409 2.04e-10 ***
## bmi               120.0196    34.2660   3.503 0.000476 ***
## sexmale          -496.8245   244.3659  -2.033 0.042240 *  
## bmi30           -1000.1403   422.8402  -2.365 0.018159 *  
## 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 ***
## bmi30:smokeryes 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
#making predictions
predict(ins_model2, data.frame(age= 30, age2 = 30^2, children = 2, bmi=30, sex='male', bmi30=1, smoker='no',region='northeast'))
##        1 
## 5972.859