who <- read.csv('who.csv')
head(who)
## Country LifeExp InfantSurvival Under5Survival TBFree
## 1 Afghanistan 42 0.835 0.743 0.99769
## 2 Albania 71 0.985 0.983 0.99974
## 3 Algeria 71 0.967 0.962 0.99944
## 4 Andorra 82 0.997 0.996 0.99983
## 5 Angola 41 0.846 0.740 0.99656
## 6 Antigua and Barbuda 73 0.990 0.989 0.99991
## PropMD PropRN PersExp GovtExp TotExp
## 1 0.000228841 0.000572294 20 92 112
## 2 0.001143127 0.004614439 169 3128 3297
## 3 0.001060478 0.002091362 108 5184 5292
## 4 0.003297297 0.003500000 2589 169725 172314
## 5 0.000070400 0.001146162 36 1620 1656
## 6 0.000142857 0.002773810 503 12543 13046
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
##
library(ggplot2)
lm <- lm(LifeExp ~ TotExp, data=who)
ggplot(who, aes(x=TotExp, y=LifeExp)) + geom_point() +geom_smooth(method='lm')
cor(who$TotExp,who$LifeExp)
## [1] 0.5076339
summary(lm)
##
## Call:
## lm(formula = LifeExp ~ TotExp, data = who)
##
## 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
The P-value for F-test is approximately 0, which is less than 0.05. We reject the null hypothesis,and accept that it is statistically significant. However the Adjusted R-squared is only 0.2537 ,which means it can only explain 25% of variability. the Standard error 9.371 is too high.
plot(lm$fitted.values, lm$residuals,
xlab="Fitted", ylab="Residuals",
main="Residuals Plot for Linear Model")
abline(h=0)
plot(lm)
According to the diagnostic plot. we found that the constant variance condition fails and both QQ plot and residual vs.fitted value tell us that the model is not normally distributed.
LifeExp_n <- who$LifeExp^4.6
TotExp_n <- who$TotExp^0.06
# Linear regression model build
lm_n <- lm(LifeExp_n ~ TotExp_n)
ggplot(who, aes(x=TotExp_n, y=LifeExp_n)) + geom_point() +geom_smooth(method='lm')
cor(LifeExp_n,TotExp_n)
## [1] 0.8542642
summary(lm_n)
##
## Call:
## lm(formula = LifeExp_n ~ TotExp_n)
##
## Residuals:
## Min 1Q Median 3Q Max
## -308616089 -53978977 13697187 59139231 211951764
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -736527910 46817945 -15.73 <2e-16 ***
## TotExp_n 620060216 27518940 22.53 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 90490000 on 188 degrees of freedom
## Multiple R-squared: 0.7298, Adjusted R-squared: 0.7283
## F-statistic: 507.7 on 1 and 188 DF, p-value: < 2.2e-16
plot(lm_n)
F−Statistic is 507.7 and the Standard Error is 90490000. The p−value is nearly 0. The correlation is 0.8543 which is much better than the previous case and R2 is 0.7298. There is a strong relationship between transformed variables TotExp and LifeExp. Therefore, we can say this transformed model is better than the previous model.
x = 1.5
le = (x * lm_n$coefficients[2] + lm_n$coefficients[1])^(1/4.6)
le
## TotExp_n
## 63.31153
x = 2.5
le = (x * lm_n$coefficients[2] + lm_n$coefficients[1])^(1/4.6)
le
## TotExp_n
## 86.50645
When totexp = 1.5 the forecast life expectancy is 63.31 years and when the totexp = 2.5, the life expectancy is 86.451 years.
lm_4 =lm(LifeExp ~ PropMD + TotExp + PropMD*TotExp, data = who)
summary(lm_4)
##
## Call:
## lm(formula = LifeExp ~ PropMD + TotExp + PropMD * TotExp, data = who)
##
## Residuals:
## Min 1Q Median 3Q Max
## -27.320 -4.132 2.098 6.540 13.074
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.277e+01 7.956e-01 78.899 < 2e-16 ***
## PropMD 1.497e+03 2.788e+02 5.371 2.32e-07 ***
## TotExp 7.233e-05 8.982e-06 8.053 9.39e-14 ***
## PropMD:TotExp -6.026e-03 1.472e-03 -4.093 6.35e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.765 on 186 degrees of freedom
## Multiple R-squared: 0.3574, Adjusted R-squared: 0.3471
## F-statistic: 34.49 on 3 and 186 DF, p-value: < 2.2e-16
ggplot(lm_4, aes(.fitted, .resid)) +
geom_point(color = "black", size=2) +
labs(title = "Fitted Values vs Residuals") +
labs(x = "Fitted Values") +
labs(y = "Residuals")
F−Statistic is 34.49 and the Standard Error is 8.765. The p−value is nearly 0. The R2 is 0.3574.
The model explains only 35.74% of variability.
In this new model, we notice that the residuals are not normally distributed.
This model is not a good model to describe the relationships between variables TotExp, PropMd and LifeExp.
propmd = 0.03
totexp = 14
y =lm_4$coefficients[1] +
lm_4$coefficients[2] * propmd +
lm_4$coefficients[3] * totexp +
lm_4$coefficients[4]*propmd * totexp
print(y)
## (Intercept)
## 107.696
When propmd = 0.03 and totexp = 14, the forecast value of life expectancy is 107.69 years which is unrealistic.