From e065ee0acd9fd41fc80c2bc67b90638e9290289b Mon Sep 17 00:00:00 2001 From: Garrett Date: Thu, 7 Jan 2016 13:25:25 -0500 Subject: [PATCH 1/2] Updates data set for model chapter to BLS NLS cross-section. --- data/heights.RDS | Bin 0 -> 52843 bytes model.Rmd | 149 +++++++++++++++++++++++++---------------------- 2 files changed, 79 insertions(+), 70 deletions(-) create mode 100644 data/heights.RDS diff --git a/data/heights.RDS b/data/heights.RDS new file mode 100644 index 0000000000000000000000000000000000000000..d0df4bfbb6124c50f9b350162afe3d5f1c4ed847 GIT binary patch literal 52843 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 group_by(sex) %>% - do(glance(lm(earn ~ height, data = .))) + do(glance(lm(income ~ height, data = .))) ``` ## Categorical data ```{r} -smod <- lm(earn ~ sex, data = heights) +smod <- lm(income ~ sex, data = heights) smod ``` 1. Factors ```{r} -heights$sex <- factor(heights$sex, levels = c("male", "female")) +heights$sex <- factor(heights$sex, levels = c("female", "male")) -smod2 <- lm(earn ~ sex, data = heights) +smod2 <- lm(income ~ sex, data = heights) -smod -smod2 +tidy(smod) +tidy(smod2) ``` 2. How to interpret -```{r} -coef(smod) -``` - ## Multiple Variables 1. How to fit multivariate models in R ```{r} -mmod <- lm(earn ~ height + sex, data = heights) -mmod +mmod <- lm(income ~ height + sex, data = heights) +summary(mmod) ``` 2. How to interpret ```{r} -coef(mmod) +tidy(mmod) ``` 3. Interaction effects ```{r} -lm(earn ~ height + sex, data = heights) -lm(earn ~ height + sex + height:sex, data = heights) -lm(earn ~ height * sex, data = heights) +tidy(lm(income ~ height + sex, data = heights)) +tidy(lm(income ~ height + sex + height:sex, data = heights)) +tidy(lm(income ~ height * sex, data = heights)) ``` ```{r} -lm(earn ~ height + ed, data = heights) -lm(earn ~ height * ed, data = heights) +tidy(lm(income ~ height + education, data = heights)) +tidy(lm(income ~ height * education, data = heights)) ``` 4. Partition variance + Checking residuals ```{r} -m1 <- lm(earn ~ height, data = heights) +m1 <- lm(income ~ height, data = heights) # plot histogram of residuals # plot residulas vs. sex -m2 <- lm(earn ~ height + sex, data = heights) +m2 <- lm(income ~ height + sex, data = heights) # plot histogram of residuals # plot residuals vs. education -m3 <- lm(earn ~ height + sex + ed, data = heights) +m3 <- lm(income ~ height + sex + education, data = heights) # plot histogram of residuals -m4 <- lm(earn ~ height + sex + race + ed + age, +m4 <- lm(income ~ height + sex + race + education, data = heights) # plot histogram of residuals -m5 <- lm(earn ~ ., data = heights) +m5 <- lm(income ~ ., data = heights) ``` @@ -216,19 +225,21 @@ lm(log(price) ~ log(carat), data = diamonds) What if no handy transformation exists? ```{r} -ggplot(data = heights, mapping = aes(x= age, y = earn)) + - geom_point() + +ggplot(data = heights, mapping = aes(x = education, y = income)) + + geom_boxplot(aes(group = education)) + geom_smooth() + - coord_cartesian(ylim = c(0, 50000)) + coord_cartesian(ylim = c(0, 125000)) ``` 1. Polynomials + How to fit + + why it doesn't work with missing values ```{r} -lm(earn ~ poly(age, 3), data = heights) +heights2 <- na.omit(heights) +tidy(lm(income ~ poly(education, 3), data = heights2)) -ggplot(data = heights, mapping = aes(x= age, y = earn)) + +ggplot(data = heights2, mapping = aes(x= education, y = income)) + geom_point() + geom_smooth(method = lm, formula = y ~ poly(x, 3)) ``` @@ -244,17 +255,15 @@ ns() # natural splines ``` ```{r} -lm(earn ~ ns(age, knots = c(40, 60)), data = heights) -lm(earn ~ ns(age, df = 4), data = heights) +tidy(lm(income ~ ns(education, knots = c(10, 17)), data = heights)) +tidy(lm(income ~ ns(education, df = 4), data = heights)) ``` ```{r} -lm(earn ~ ns(age, df = 6), data = heights) - -ggplot(data = heights, mapping = aes(x= age, y = earn)) + +ggplot(data = heights, mapping = aes(x= education, y = income)) + geom_point() + - geom_smooth(method = lm, formula = y ~ ns(x, df = 6)) + - coord_cartesian(ylim = c(0, 50000)) + geom_smooth(method = lm, formula = y ~ ns(x, df = 4)) + + coord_cartesian(ylim = c(0, 125000)) ``` + How to interpret @@ -265,9 +274,9 @@ ggplot(data = heights, mapping = aes(x= age, y = earn)) + + How to fit ```{r} -gmod <- gam(earn ~ s(height), data = heights) +gam(income ~ s(education), data = heights) -ggplot(data = heights, mapping = aes(x= age, y = earn)) + +ggplot(data = heights, mapping = aes(x= education, y = income)) + geom_point() + geom_smooth(method = gam, formula = y ~ s(x)) ``` From 53df28b3ee93846f165538e5c420251f5fc55669 Mon Sep 17 00:00:00 2001 From: Garrett Date: Tue, 12 Jan 2016 12:27:08 -0500 Subject: [PATCH 2/2] Cleans up outline for model chapter --- model.Rmd | 351 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 199 insertions(+), 152 deletions(-) diff --git a/model.Rmd b/model.Rmd index 3c9911c..32cf91c 100644 --- a/model.Rmd +++ b/model.Rmd @@ -3,21 +3,19 @@ layout: default title: Model --- -# Model - A model is a function that summarizes how the values of one variable vary in response to the values of other variables. Models play a large role in hypothesis testing and prediction, but for the moment you should think of models just like you think of statistics. A statistic summarizes a *distribution* in a way that is easy to understand; and a model summarizes *covariation* in a way that is easy to understand. In other words, a model is just another way to describe data. This chapter will explain how to build useful models with R. ### Outline -*Section 1* will explain what models are and what they can do for you. +*Section 1* will show you how to build linear models, the most commonly used type of model. Along the way, you will learn R's model syntax, a general syntax that you can reuse with most of R's modeling functions. -*Section 2* will introduce R's model syntax, a general syntax that you can reuse with any of R's modeling functions. In this section, you will use the syntax to build linear models, the most commonly used type of model. +*Section 2* will show you the best ways to use R's model output, which is often reguires additional wrangling. *Section 3* will teach you to build and interpret multivariate linear models, models that use more than one explanatory variable to explain the values of a response variable. -*Section 4* will explain how to use categorical variables in your models and how to interpret the results of models that use categorical variables. +*Section 4* will explain how to use categorical variables in your models and how to interpret the results of models that use categorical variables. Here you will learn about interaction effects, as well as logistic models. *Section 5* will present a logical way to extend linear models to describe non-linear relationships. @@ -33,12 +31,12 @@ library(mgcv) library(splines) library(broom) ``` - -## What is a model? -Have you heard that a relationship exists between your height and your income? It sounds far-fetched---and maybe it is---but many people believe that taller people will be promoted faster and valued more for their work, an effect that directly inflates the income of the vertically gifted. +## Linear models -Do you think this is true? Could a relationship exist between a person's height and their income? Luckily, it is easy to measure someone's height as well as their income (and a swath of other related variables to boot), which means that we can collect data relevant to the question. In fact, the Bureau of Labor Statistics has been doing this in a controlled way for over 50 years with the [National Longitudinal Surveys (NLS)](https://www.nlsinfo.org/). The NLS tracks the income, education, and life circumstances of a large cohort of Americans across several decades. In case you are wondering, the point of the NLS is not to study the relationhip between height and income, that's just a lucky accident of the data. +Have you heard that a relationship exists between your height and your income? It sounds far-fetched---and maybe it is---but many people believe that taller people will be promoted faster and valued more for their work, an effect that directly inflates the income of the vertically gifted. Do you think this is true? + +Luckily, it is easy to measure someone's height, as well as their income (and a swath of other variables besides), which means that we can collect data relevant to the question. In fact, the Bureau of Labor Statistics has been doing this in a controlled way for over 50 years. The BLS [National Longitudinal Surveys (NLS)](https://www.nlsinfo.org/) track the income, education, and life circumstances of a large cohort of Americans across several decades. In case you are wondering, the point of the NLS is not to study the relationhip between height and income, that's just a lucky accident. You can load the latest cross-section of NLS data, collected in 2013 with the code below. @@ -58,76 +56,186 @@ I've narrowed the data down to 10 variables: * `asvab` - Each subject's score on the Armed Services Vocational Aptitude Battery (ASVAB), an intelligence assessment, out of 100. * `sat_math` - Each subject's score on the math portion of the Scholastic Aptitude Test (SAT), out of 800. * `bdate` - Month of birth with 1 = January. - -summary that describes a r, like a mean, median, or variance. - + Example problem/data set ```{r} head(heights) ``` - -2. As normally taught, modeling conflates three subjects - + Models as summaries - + Hypothesis testing - + Predictive modeling -3. C. This chapter shows how to build a model and use it as a summary. The methods for building a model apply to all three subjects. - -## How to build a model -1. Best fit - + Best fit of what? A certain class of function. - + But how do you know which class to use? In some cases, the data can provide suggestions. In other cases existing theory can provide suggestions. But ultimately, you'll never know for sure. But that's okay, good enough is good enough. -2. What does best fit mean? - + It may or may not accurately describe the true relationship. Heck, there might not even be a true relationship. But it is the best guess given the data. - + Example problem/data set - + It does not mean causation exists. Causation is just one type of relations, which is difficult enough to define, let alone prove. -3. How do you find the best fit? - + With an algorithm. There is an algorithm to fit each specific class of function. We will cover some of the most useful here. -4. How do you know how good the fit is? - + Adjusted $R^{2}$ -5. Are we making assumptions when we fit a model? - + No. Not unless you assume that you've selected the correct type of function (and I see no reason why you should assume that). - + Assumptions come when you start hypothesis testing. +Now that you have the data, you can visualize the relationship between height and income. But what does the data say? How would you describe the relationship? -## Linear models - -1. Linear models fit linear functions -2. How to fit in R - + model syntax, which is reusable with all model functions - -```{r} -income ~ height -mod <- lm(income ~ height, data = heights) -mod -tidy(mod) -glance(mod) -augment(mod) +```{r warnings = FALSE} +ggplot(data = heights, mapping = aes(x = height, y = income)) + + geom_point() ``` - + visualize +First, let's address a distraction: the data is censored in an odd way. The y variable is income, which means that there are no y values less than zero. That's not odd. However, there are also no y values above $180,331. In fact, there are a line of unusual values at exactly $180,331. This is because the Burea of Labor Statistics removed the top 2% of income values and replaced them with the mean value of the top 2% of values, an action that was not designed to enhance the usefulness of the data for data science. + +Also, you can see that heights have been rounded to the nearest inch. + +Second, the relationship is not very strong. + ```{r} +cor(heights$height, heights$income, use = "na") +``` + +A model describes the relationship between two or more variables. There are multiple ways to describe any relationship. Which is best? + +A common choice: decide form of relationship, then minimize residuals. + +Use R's `lm()` function to fit a linear model to your data. The first argument of `lm()` should be a formula, two or more varibles separated by a `~`. You've seen forumlas before, we used them in Chapter 2 to facet graphs. + +```{r} +income ~ height +h <- lm(income ~ height, data = heights) +h +``` + + +`lm()` fits a straight line that describes the relationship between the variables in your formula. You can picture the result visually like this. + +```{r echo = FALSE} ggplot(data = heights, mapping = aes(x = height, y = income)) + geom_point() + geom_smooth(method = lm) ``` - - + intercept or no intercept + +`lm()` treats the variable(s) on the right-hand side of the formula as _explanatory variables_ that partially determine the value of the variable on the left-hand side of the formula, which is known as the _response variable_. In other words, it acts as if the _response variable_ is determined by a function of the _explanatory variables_. It then spots the linear function that best fits the data. + +Linear models are straightforward to interpret. Incomes have a baseline mean of $`r coef(h)[1]`. Each one inch increase of height above zero is associated with an increase of $`r coef(h)[2]` in income. + ```{r} -0 + earn ~ height -tidy(lm(income ~ 0 + height, data = heights)) -tidy(lm(income ~ height, data = heights)) +summary(h) ``` -3. How to interpret - + extract information. Resid. Predict. +To create a model without an intercept, add 0 to the formula. + ```{r} -augment(mod)$.resid -augment(mod)$.fitted +lm(income ~ 0 + height, data = heights) ``` - + Interpret coefficient + +## Using model output + +R model output is not very tidy. It is designed to provide a data store that you can extract information from with helper functions. + ```{r} -tidy(mod)$estimate +coef(h) +predict(h)[1:5] +resid(h)[1:5] +``` + +The `broom` package provides the most useful helper functions for working with R models. `broom` functions return the most useful model information as a data frames, which lets you quickly embed the information into your data science workflow. + +### tidy() + +```{r} +tidy(h) +``` + +### glance() + +```{r} +glance(h) +``` + +### augment() + +```{r} +augment(h)[1:5, ] +``` + +```{r} +heights2 <- augment(h, heights) +ggplot(data = heights2, mapping = aes(x = education, y = .resid)) + + geom_point() + + geom_smooth() +``` + + +## Multivariate models + +There appears to be a relationship between a person's education and how poorly the model predicts their income. When we graphed the model residuals against `education` above, we see that the more a person is educated, the worse the model underestimates their income. + +Patterns in the residuals suggest that relationships exist between y and other variables, even when the effect of heights is accounted for. + +Add variables to a model by adding variables to the righthand side of the model formula. + +```{r} +income ~ height + education +he <- lm(income ~ height + education, data = heights) +tidy(he) +``` + +### Interpretation + +The coefficient of each variable displays the change of income that is associated with a one unit change in the variable _when all other variables are held constant_. + + +### Interaction effects + +```{r} +tidy(lm(income ~ height + education, data = heights)) +tidy(lm(income ~ height + education + height:education, data = heights)) +tidy(lm(income ~ height * education, data = heights)) +``` + +## Categorical variables + +What about sex? Many sources have observed that there is a difference in income between genders. Might this explain the height effect? We can find the effect of height independent of sex by adding sex to the model; however, sex is a categorical variable. + +### Factors + +R stores categorical data as factors or character strings. If you add a string to a model, R will convert it to a factor for the purposes of the model. + +A factor is an integer vector with a levels attribute. You can make a factor with `factor()`. + +```{r} +fac <- factor(c("c", "a", "b"), levels = c("a", "b", "c"), labels = c("blond", "brunette", "red")) +fac +unclass(fac) +``` + +Each level of the factor (i.e. unique value) is encoded as an integer and displayed with the label that is associated with that integer. + +If you use factors outside of a model, you will notice some limiting behavior: + +* You cannot add values to a factor that do not appear in its levels attribute +* factors retain all of their levels attribute when you subset them. To avoid this use `drop = TRUE`. +```{r} +fac[1] +fac[1, drop = TRUE] +``` +* If you coerce a factor to a numeric, R will convert the integer vector that underlies the factor, not the level labels that you see when you print the factor. +```{r} +num_fac <- factor(1:3, levels = 1:3, labels = c("100", "200", "300")) +num_fac +as.numeric(num_fac) +``` +To coerce these labels to a different data type, first coerce the factor to a charater string with `as.character()` +```{r} +as.numeric(as.character(num_fac)) +``` + +### Interpretation + +Add categorical variables to a model in the same way that you would add continuous variables. + +```{r} +s <- lm(income ~ sex, data = heights) +tidy(s) +``` + +Every level of the factor except one receives its own coefficient. The missing level acts as a baseline. + +To change the baseline, create a new factor with a new levels attribute. R will use the first level in the levels attribute as the baseline. + +```{r} +heights$sex <- factor(heights$sex, levels = c("male", "female")) +``` + +```{r} +hes <- lm(income ~ height + education + sex, data = heights) +tidy(hes) ``` ```{r} @@ -136,77 +244,39 @@ heights %>% do(glance(lm(income ~ height, data = .))) ``` -## Categorical data - ```{r} -smod <- lm(income ~ sex, data = heights) -smod +hes2 <- lm(income ~ height + education * sex, data = heights) +tidy(hes2) ``` -1. Factors +### Logistic models + +So far the y variable of our models has been a continuous variable, `income`. You can use linear regression to model a categorical y variable by transforming y into a continuous variable with a _link function_. Then model fit a model to the results of the link function and use the link function to back transform and interpret the results. + +The most common link function is the logit function, which transforms a bivariate y variable into a continuous range. + +Use `glm()` to perform logistic regression in R. ```{r} -heights$sex <- factor(heights$sex, levels = c("female", "male")) - -smod2 <- lm(income ~ sex, data = heights) - -tidy(smod) -tidy(smod2) +she <- glm(sex ~ height + education, family = binomial(link = "logit"), data = heights) +tidy(she) ``` -2. How to interpret +## Non-linear models - -## Multiple Variables - -1. How to fit multivariate models in R +But what if the relationship between variables is not linear. For example, the relationship between income and education does not seem to be linear. ```{r} -mmod <- lm(income ~ height + sex, data = heights) -summary(mmod) +ggplot(data = heights, mapping = aes(x = education, y = income)) + + geom_boxplot(aes(group = education)) + + geom_smooth() + + coord_cartesian(ylim = c(0, 125000)) ``` -2. How to interpret +You can still use linear regression to model non-linear relationships. -```{r} -tidy(mmod) -``` +### Transformations -3. Interaction effects - -```{r} -tidy(lm(income ~ height + sex, data = heights)) -tidy(lm(income ~ height + sex + height:sex, data = heights)) -tidy(lm(income ~ height * sex, data = heights)) -``` - -```{r} -tidy(lm(income ~ height + education, data = heights)) -tidy(lm(income ~ height * education, data = heights)) -``` - -4. Partition variance - + Checking residuals -```{r} -m1 <- lm(income ~ height, data = heights) -# plot histogram of residuals -# plot residulas vs. sex -m2 <- lm(income ~ height + sex, data = heights) -# plot histogram of residuals -# plot residuals vs. education -m3 <- lm(income ~ height + sex + education, data = heights) -# plot histogram of residuals -m4 <- lm(income ~ height + sex + race + education, - data = heights) -# plot histogram of residuals -m5 <- lm(income ~ ., data = heights) -``` - - -## Non-linear functions (recipes?) - -0. Transformations - + Log ```{r} ggplot(diamonds, aes(x = carat, y = price)) + geom_point() @@ -219,35 +289,8 @@ lm(log(price) ~ log(carat), data = diamonds) # visualize model line ``` - + Logit with `glm()` - - -What if no handy transformation exists? +### Splines -```{r} -ggplot(data = heights, mapping = aes(x = education, y = income)) + - geom_boxplot(aes(group = education)) + - geom_smooth() + - coord_cartesian(ylim = c(0, 125000)) -``` - -1. Polynomials - + How to fit - + why it doesn't work with missing values - -```{r} -heights2 <- na.omit(heights) -tidy(lm(income ~ poly(education, 3), data = heights2)) - -ggplot(data = heights2, mapping = aes(x= education, y = income)) + - geom_point() + - geom_smooth(method = lm, formula = y ~ poly(x, 3)) -``` - - + How to interpret - + Strengths and Weaknesses -2. Splines - + How to fit. Knots. Different types of splines. ```{r eval = FALSE} bs(degree = 1) # linear splines bs() # cubic splines @@ -265,13 +308,8 @@ ggplot(data = heights, mapping = aes(x= education, y = income)) + geom_smooth(method = lm, formula = y ~ ns(x, df = 4)) + coord_cartesian(ylim = c(0, 125000)) ``` - - + How to interpret - + Strengths and weaknesses - -3. General Additive Models - + How to fit +### Additive models ```{r} gam(income ~ s(education), data = heights) @@ -280,8 +318,6 @@ ggplot(data = heights, mapping = aes(x= education, y = income)) + geom_point() + geom_smooth(method = gam, formula = y ~ s(x)) ``` - + How to interpret - + Strengths and weaknesses ```{r eval = FALSE} # Linear z @@ -295,4 +331,15 @@ gam(y ~ s(x) + s(z), data = df) gam(y ~ s(x, z), data = df) ``` +## Summary + +We've avoided two things in this chapter that are usually conflated with models: hypothesis testing and predictive analysis. + +There are other types of modeling algorithms; each provides a valid description about the data. + +Which description will be best? Does the relationship have a known form? Does the data have a known structure? Are you going to attempt hypothesis testing that imposes its own constraints? + + + +