Data

The attached who.csv dataset contains real-world data from 2008. The variables included follow. Country: name of the country LifeExp: average life expectancy for the country in years InfantSurvival: proportion of those surviving to one year or more Under5Survival: proportion of those surviving to five years or more TBFree: proportion of the population without TB. PropMD: proportion of the population who are MDs PropRN: proportion of the population who are RNs PersExp: mean personal expenditures on healthcare in US dollars at average exchange rate GovtExp: mean government expenditures per capita on healthcare, US dollars at average exchange rate TotExp: sum of personal and government expenditures.

who<- read.csv(file="c:/Users/Ada/Desktop/CUNY_SPS_DA/605_02_Comp_Math_R/who.csv")
cars[!complete.cases(cars),] # check encompleted rows
str(who)
## 'data.frame':    190 obs. of  10 variables:
##  $ Country       : Factor w/ 190 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ LifeExp       : int  42 71 71 82 41 73 75 69 82 80 ...
##  $ InfantSurvival: num  0.835 0.985 0.967 0.997 0.846 0.99 0.986 0.979 0.995 0.996 ...
##  $ Under5Survival: num  0.743 0.983 0.962 0.996 0.74 0.989 0.983 0.976 0.994 0.996 ...
##  $ TBFree        : num  0.998 1 0.999 1 0.997 ...
##  $ PropMD        : num  2.29e-04 1.14e-03 1.06e-03 3.30e-03 7.04e-05 ...
##  $ PropRN        : num  0.000572 0.004614 0.002091 0.0035 0.001146 ...
##  $ PersExp       : int  20 169 108 2589 36 503 484 88 3181 3788 ...
##  $ GovtExp       : int  92 3128 5184 169725 1620 12543 19170 1856 187616 189354 ...
##  $ TotExp        : int  112 3297 5292 172314 1656 13046 19654 1944 190797 193142 ...
summary(who)
##                 Country       LifeExp      InfantSurvival  
##  Afghanistan        :  1   Min.   :40.00   Min.   :0.8350  
##  Albania            :  1   1st Qu.:61.25   1st Qu.:0.9433  
##  Algeria            :  1   Median :70.00   Median :0.9785  
##  Andorra            :  1   Mean   :67.38   Mean   :0.9624  
##  Angola             :  1   3rd Qu.:75.00   3rd Qu.:0.9910  
##  Antigua and Barbuda:  1   Max.   :83.00   Max.   :0.9980  
##  (Other)            :184                                   
##  Under5Survival       TBFree           PropMD              PropRN         
##  Min.   :0.7310   Min.   :0.9870   Min.   :0.0000196   Min.   :0.0000883  
##  1st Qu.:0.9253   1st Qu.:0.9969   1st Qu.:0.0002444   1st Qu.:0.0008455  
##  Median :0.9745   Median :0.9992   Median :0.0010474   Median :0.0027584  
##  Mean   :0.9459   Mean   :0.9980   Mean   :0.0017954   Mean   :0.0041336  
##  3rd Qu.:0.9900   3rd Qu.:0.9998   3rd Qu.:0.0024584   3rd Qu.:0.0057164  
##  Max.   :0.9970   Max.   :1.0000   Max.   :0.0351290   Max.   :0.0708387  
##                                                                           
##     PersExp           GovtExp             TotExp      
##  Min.   :   3.00   Min.   :    10.0   Min.   :    13  
##  1st Qu.:  36.25   1st Qu.:   559.5   1st Qu.:   584  
##  Median : 199.50   Median :  5385.0   Median :  5541  
##  Mean   : 742.00   Mean   : 40953.5   Mean   : 41696  
##  3rd Qu.: 515.25   3rd Qu.: 25680.2   3rd Qu.: 26331  
##  Max.   :6350.00   Max.   :476420.0   Max.   :482750  
## 
attach(who)

Assumptions of Multiple Linear Regression

  1. Y~X must be linear relationship
#check linear relationship between the LifeExp variable and other independent variables
#curvilinear relationship with LifeExp: InfantSurvival, Under5Survival and TBFree
plot(LifeExp,InfantSurvival)

plot(LifeExp,Under5Survival)

plot(LifeExp,TBFree)

#linear relationship with LifeExp: PropMD, PropRN
plot(LifeExp,PropMD)

plot(LifeExp,PropRN)

#linear relationship with LifeExp: PersExp, GovtExp, TotExpTotExp
plot(LifeExp,PersExp)

plot(LifeExp,GovtExp)

plot(LifeExp,TotExp)

  1. Multivariate Normality Analyst 5 variables which have linear relation with LiftExp. They are nearly normal but with long tails. I use boxplot to see whether I need to remove the outliners.
library("car")
## Warning: package 'car' was built under R version 3.4.4
## Loading required package: carData
## Warning: package 'carData' was built under R version 3.4.4
scatterplotMatrix(who[6:10])

#boxplot of variables for checking outliners
lmts<- range(who[6:10])
boxplot(who[6:10],ylim=lmts)

  1. No Multicollinearity Since TotExp is sum of PersExp and GovtExp, they are strong collinearity. Only one of these variables will be picked to constructe a regression model.

Same as TotExp, PropMD and PropRN are strong collinearity. So PropRN will be picked to a model since it has stronger correlation to LifeExp.

InfantSurvival, Under5Survival and TBFree are not linear related to LifeExp so they are not going to picked to a model.

#check by corrvariance matrix
res <- cor(who[2:10])
round(res, 2)
##                LifeExp InfantSurvival Under5Survival TBFree PropMD PropRN
## LifeExp           1.00           0.94           0.92   0.79   0.37   0.41
## InfantSurvival    0.94           1.00           0.99   0.75   0.32   0.37
## Under5Survival    0.92           0.99           1.00   0.74   0.30   0.35
## TBFree            0.79           0.75           0.74   1.00   0.29   0.31
## PropMD            0.37           0.32           0.30   0.29   1.00   0.71
## PropRN            0.41           0.37           0.35   0.31   0.71   1.00
## PersExp           0.54           0.43           0.39   0.37   0.34   0.55
## GovtExp           0.51           0.39           0.35   0.34   0.34   0.57
## TotExp            0.51           0.39           0.35   0.34   0.34   0.57
##                PersExp GovtExp TotExp
## LifeExp           0.54    0.51   0.51
## InfantSurvival    0.43    0.39   0.39
## Under5Survival    0.39    0.35   0.35
## TBFree            0.37    0.34   0.34
## PropMD            0.34    0.34   0.34
## PropRN            0.55    0.57   0.57
## PersExp           1.00    0.97   0.97
## GovtExp           0.97    1.00   1.00
## TotExp            0.97    1.00   1.00
  1. Homoscedasticity I picked the TotExp to estemate the life expection. Here I analyst residual. The residuals are equal across the regression line.
#model1:
simple_lm <-lm(LifeExp~TotExp)
plot(simple_lm)

#model2:
multip_lm <- lm(LifeExp~PropMD+TotExp)
plot(multip_lm)

  1. Simple Regression Model is better for the prediction basice on R square value in t test. It can be evalued at by test set result. But I don’t do it here this time.
par(mfrow=c(1,2))
#model1
summary(simple_lm)
## 
## Call:
## lm(formula = LifeExp ~ TotExp)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -24.764  -4.778   3.154   7.116  13.292 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 6.475e+01  7.535e-01  85.933  < 2e-16 ***
## TotExp      6.297e-05  7.795e-06   8.079 7.71e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.371 on 188 degrees of freedom
## Multiple R-squared:  0.2577, Adjusted R-squared:  0.2537 
## F-statistic: 65.26 on 1 and 188 DF,  p-value: 7.714e-14
LifeExp =simple_lm$coefficients[[1]] + simple_lm$coefficients[[1]]*TotExp

#model2
summary(multip_lm)
## 
## Call:
## lm(formula = LifeExp ~ PropMD + TotExp)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -23.996  -4.880   3.042   6.958  13.415 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 6.397e+01  7.706e-01  83.012  < 2e-16 ***
## PropMD      6.508e+02  1.946e+02   3.344 0.000998 ***
## TotExp      5.378e-05  8.074e-06   6.661 2.95e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.127 on 187 degrees of freedom
## Multiple R-squared:  0.2996, Adjusted R-squared:  0.2921 
## F-statistic: 39.99 on 2 and 187 DF,  p-value: 3.479e-15
LifeExp =multip_lm$coefficients[[1]] + multip_lm$coefficients[[2]]*PropMD + multip_lm$coefficients[[3]]*TotExp