install.packages(‘statsr’)
library(tidyverse)
## -- Attaching packages ------------------------------------------------------------------------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.2 v purrr 0.3.4
## v tibble 3.0.3 v dplyr 1.0.2
## v tidyr 1.1.2 v stringr 1.4.0
## v readr 1.3.1 v forcats 0.5.0
## -- Conflicts ---------------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(openintro)
## Loading required package: airports
## Loading required package: cherryblossom
## Loading required package: usdata
library(statsr)
## Warning: package 'statsr' was built under R version 4.0.3
##
## Attaching package: 'statsr'
## The following objects are masked from 'package:openintro':
##
## calc_streak, evals, nycflights, present
## R Markdown
1. What are the dimensions of the dataset?
```r
data(hfi)
dim(hfi)
## [1] 1458 123
What type of plot would you use to display the relationship between the personal freedom score, pf_score
, and one of the other numerical variables? Plot this relationship using the variable pf_expression_control
as the predictor. Does the relationship look linear? If you knew a country’s pf_expression_control
, or its score out of 10, with 0 being the most, of political pressures and controls on media content, would you be comfortable using a linear model to predict the personal freedom score?
Scatterplot will be used to display the relationship between the personal freedom score, pf_score, and one of the other numerical variables. linear is the appearance of this relationship. If you knew a country’s pf_expression_control,or its score out of 10, with 0 being the most, of political pressures and controls on media content, I would be comfortable using a linear model to predict the personal freedom score.
we can quantify the strength of the relationship with the correlation coefficien being that relationship is linear
```r
plot(hfi$pf_score ~ hfi$pf_expression_control)
```
<img src="lab-8---data606_files/figure-html/unnamed-chunk-3-1.png" width="672" />
If the relationship looks linear, we can quantify the strength of the relationship with the correlation coefficient.
hfi %>%
summarise(cor(pf_expression_control, pf_score, use = "complete.obs"))
## # A tibble: 1 x 1
## `cor(pf_expression_control, pf_score, use = "complete.obs")`
## <dbl>
## 1 0.796
The is a correlation between the two variables, the relationship between those two variables appears to be linear. It is a moderately strong correlation appearing positive. As the pf_expression_control increases, the pf_score increases as well.
We could also say that there are outliers or some points which predicted values would be far off from the observed values.
hfi1 <- hfi[c("pf_score", "pf_expression_control")]
hfi1 <- drop_na(hfi1)
row.names <- NULL
plot(hfi$pf_score ~ hfi$pf_expression_control,
xlab = "Expression control", ylab = "Pf score", col = "red")
The relationship appears linear, If you knew a country’s pf_expression_control, or its score out of 10, with 0 being the most, of political pressures and controls on media content, I would assume to using a linear model to predict the personal score.
plot_ss(x = pf_expression_control, y = pf_score, data = hfi, showSquares = TRUE)
plot_ss
, choose a line that does a good job of minimizing the sum of squares. Run the function several times. What was the smallest sum of squares that you got? How does it compare to your neighbors?plot_ss(x = pf_expression_control, y = pf_score, data = hfi1)
## Click two points to make a line.
## Call:
## lm(formula = y ~ x, data = pts)
##
## Coefficients:
## (Intercept) x
## 4.6171 0.4914
##
## Sum of Squares: 952.153
m1 <- lm(pf_score ~ pf_expression_control, data = hfi)
summary(m1)
##
## Call:
## lm(formula = pf_score ~ pf_expression_control, data = hfi)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.8467 -0.5704 0.1452 0.6066 3.2060
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.61707 0.05745 80.36 <2e-16 ***
## pf_expression_control 0.49143 0.01006 48.85 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8318 on 1376 degrees of freedom
## (80 observations deleted due to missingness)
## Multiple R-squared: 0.6342, Adjusted R-squared: 0.634
## F-statistic: 2386 on 1 and 1376 DF, p-value: < 2.2e-16
pf_expression_control
to predict hf_score
, or the total human freedom score. Using the estimates from the R output, write the equation of the regression line. What does the slope tell us in the context of the relationship between human freedom and the amount of political pressure on media content?xx_5 <- lm(hf_score ~ pf_expression_control, data = hfi)
summary(xx_5)
##
## Call:
## lm(formula = hf_score ~ pf_expression_control, data = hfi)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.6198 -0.4908 0.1031 0.4703 2.2933
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.153687 0.046070 111.87 <2e-16 ***
## pf_expression_control 0.349862 0.008067 43.37 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.667 on 1376 degrees of freedom
## (80 observations deleted due to missingness)
## Multiple R-squared: 0.5775, Adjusted R-squared: 0.5772
## F-statistic: 1881 on 1 and 1376 DF, p-value: < 2.2e-16
hf_score = 5.153687 + 0.349862*pf_expression_control intercept: 5.153687 slope: 0.349862
ggplot(data = hfi, aes(x = pf_expression_control, y = pf_score)) +
geom_point() +
stat_smooth(method = "lm", se = FALSE)
## `geom_smooth()` using formula 'y ~ x'
## Warning: Removed 80 rows containing non-finite values (stat_smooth).
## Warning: Removed 80 rows containing missing values (geom_point).
pf_expression_control
? Is this an overestimate or an underestimate, and by how much? In other words, what is the residual for this prediction?pf_e_control_x <- 6.7
pf_score6 <- 4.61707 + 0.49143 * pf_e_control_x
print(pf_score6)
## [1] 7.909651
hfi %>%
group_by(pf_score) %>%
filter(pf_expression_control == 6.7)
## # A tibble: 0 x 123
## # Groups: pf_score [0]
## # ... with 123 variables: year <dbl>, ISO_code <chr>, countries <chr>,
## # region <chr>, pf_rol_procedural <dbl>, pf_rol_civil <dbl>,
## # pf_rol_criminal <dbl>, pf_rol <dbl>, pf_ss_homicide <dbl>,
## # pf_ss_disappearances_disap <dbl>, pf_ss_disappearances_violent <dbl>,
## # pf_ss_disappearances_organized <dbl>,
## # pf_ss_disappearances_fatalities <dbl>, pf_ss_disappearances_injuries <dbl>,
## # pf_ss_disappearances <dbl>, pf_ss_women_fgm <dbl>,
## # pf_ss_women_missing <dbl>, pf_ss_women_inheritance_widows <dbl>,
## # pf_ss_women_inheritance_daughters <dbl>, pf_ss_women_inheritance <dbl>,
## # pf_ss_women <dbl>, pf_ss <dbl>, pf_movement_domestic <dbl>,
## # pf_movement_foreign <dbl>, pf_movement_women <dbl>, pf_movement <dbl>,
## # pf_religion_estop_establish <dbl>, pf_religion_estop_operate <dbl>,
## # pf_religion_estop <dbl>, pf_religion_harassment <dbl>,
## # pf_religion_restrictions <dbl>, pf_religion <dbl>,
## # pf_association_association <dbl>, pf_association_assembly <dbl>,
## # pf_association_political_establish <dbl>,
## # pf_association_political_operate <dbl>, pf_association_political <dbl>,
## # pf_association_prof_establish <dbl>, pf_association_prof_operate <dbl>,
## # pf_association_prof <dbl>, pf_association_sport_establish <dbl>,
## # pf_association_sport_operate <dbl>, pf_association_sport <dbl>,
## # pf_association <dbl>, pf_expression_killed <dbl>,
## # pf_expression_jailed <dbl>, pf_expression_influence <dbl>,
## # pf_expression_control <dbl>, pf_expression_cable <dbl>,
## # pf_expression_newspapers <dbl>, pf_expression_internet <dbl>,
## # pf_expression <dbl>, pf_identity_legal <dbl>,
## # pf_identity_parental_marriage <dbl>, pf_identity_parental_divorce <dbl>,
## # pf_identity_parental <dbl>, pf_identity_sex_male <dbl>,
## # pf_identity_sex_female <dbl>, pf_identity_sex <dbl>,
## # pf_identity_divorce <dbl>, pf_identity <dbl>, pf_score <dbl>,
## # pf_rank <dbl>, ef_government_consumption <dbl>,
## # ef_government_transfers <dbl>, ef_government_enterprises <dbl>,
## # ef_government_tax_income <dbl>, ef_government_tax_payroll <dbl>,
## # ef_government_tax <dbl>, ef_government <dbl>, ef_legal_judicial <dbl>,
## # ef_legal_courts <dbl>, ef_legal_protection <dbl>, ef_legal_military <dbl>,
## # ef_legal_integrity <dbl>, ef_legal_enforcement <dbl>,
## # ef_legal_restrictions <dbl>, ef_legal_police <dbl>, ef_legal_crime <dbl>,
## # ef_legal_gender <dbl>, ef_legal <dbl>, ef_money_growth <dbl>,
## # ef_money_sd <dbl>, ef_money_inflation <dbl>, ef_money_currency <dbl>,
## # ef_money <dbl>, ef_trade_tariffs_revenue <dbl>,
## # ef_trade_tariffs_mean <dbl>, ef_trade_tariffs_sd <dbl>,
## # ef_trade_tariffs <dbl>, ef_trade_regulatory_nontariff <dbl>,
## # ef_trade_regulatory_compliance <dbl>, ef_trade_regulatory <dbl>,
## # ef_trade_black <dbl>, ef_trade_movement_foreign <dbl>,
## # ef_trade_movement_capital <dbl>, ef_trade_movement_visit <dbl>,
## # ef_trade_movement <dbl>, ef_trade <dbl>,
## # ef_regulation_credit_ownership <dbl>, ...
There is no observation having pf_expression_control==6.7
ggplot(data = m1, aes(x = .fitted, y = .resid)) +
geom_point() +
geom_hline(yintercept = 0, linetype = "dashed") +
xlab("Fitted values") +
ylab("Residuals")
ggplot(data = m1, aes(x = .resid)) +
geom_histogram(binwidth = 0.5) +
xlab("Residuals")
ggplot(data = m1, aes(sample = .resid)) +
stat_qq()
We see both the normal probability plot and histogram show that the distribution of these data are nearly normal. Since this is thae case the nearly normal residuals condition appear to be met.
More Practice
Choose another freedom variable and a variable you think would strongly correlate with it.. Produce a scatterplot of the two variables and fit a linear model. At a glance, does there seem to be a linear relationship?
```r
ggplot(data = hfi, aes(x = pf_ss, y = hf_rank)) +
geom_point() +
stat_smooth(method = "lm", se = FALSE)
```
```
## `geom_smooth()` using formula 'y ~ x'
```
```
## Warning: Removed 80 rows containing non-finite values (stat_smooth).
```
```
## Warning: Removed 80 rows containing missing values (geom_point).
```
<img src="lab-8---data606_files/figure-html/unnamed-chunk-10-1.png" width="672" />
How does this relationship compare to the relationship between pf_expression_control and pf_score? Use the R2
values from the two model summaries to compare. Does your independent variable seem to predict your dependent one better? Why or why not?
x5 <- lm(hf_score ~ pf_expression_control, data = hfi)
summary(x5)
##
## Call:
## lm(formula = hf_score ~ pf_expression_control, data = hfi)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.6198 -0.4908 0.1031 0.4703 2.2933
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.153687 0.046070 111.87 <2e-16 ***
## pf_expression_control 0.349862 0.008067 43.37 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.667 on 1376 degrees of freedom
## (80 observations deleted due to missingness)
## Multiple R-squared: 0.5775, Adjusted R-squared: 0.5772
## F-statistic: 1881 on 1 and 1376 DF, p-value: < 2.2e-16
What’s one freedom relationship you were most surprised about and why? Display the model diagnostics for the regression model analyzing this relationship.
In this case one of the freedom relationships of most surprise was legal protection/legal integrity
yylmb <- lm(hfi$ef_legal_protection ~ hfi$ef_legal_integrity)
summary(yylmb)
##
## Call:
## lm(formula = hfi$ef_legal_protection ~ hfi$ef_legal_integrity)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.3674 -0.8148 0.1089 0.9094 3.8036
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.09412 0.11409 18.36 <2e-16 ***
## hfi$ef_legal_integrity 0.56976 0.01719 33.15 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.226 on 1109 degrees of freedom
## (347 observations deleted due to missingness)
## Multiple R-squared: 0.4978, Adjusted R-squared: 0.4973
## F-statistic: 1099 on 1 and 1109 DF, p-value: < 2.2e-16