#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