Week 3
Data Wrangling and Visualization
Problem Set 3 Solutions
Download answers to Problem Set 3 Here
NotePreview: dwv_ps3_solutions.R
dwv_ps3_solutions.R
#Title: DWV Week 3 Solutions.R
#Author: Jack Reilly
#Purpose: Solve Week 3 Assignment
#Requires: bes2005subset.csv; nes2000subset.csv
#Output: Plots to plot window; nothing to disk
#This file isn't writing anything out, so we're just going to make the working directory the dataset directory
setwd("~/desktop/working/dwv/datasets")
#Read in BES dataset
bes<-read.csv("bes2005subset.csv")
#Plot Blair and Social Spending, with points jittered
plot(jitter(bes$BlairFeelings)~jitter(bes$SocialSpending), main="Opinion of Tony Blair and Social Spending", ylab="Feelings About Blair", xlab="Social Spending")
#Load in `nes2000subset.csv`.
nes<-read.csv("nes2000subset.csv")
#Correlated and plot partisanship and income
cor(nes$partisanship, nes$income)
plot(jitter(nes$partisanship)~jitter(nes$income), main="Income and Partisanship in the 2000 Election", ylab="Partisanship", xlab="Income")Week 3 Workshop
Download the Week 3 workshop here
NotePreview: dwv_w3_workshop.R
dwv_w3_workshop.R
#Title: DWV Week 3.R
#Author: Jack Reilly
#Purpose: draw standard and regression lines. Learn to play with parameters of graphics.
#Requires: nes2000subset.csv
#Output: Figures
#Technical note: The NES subset deletes all individuals with missing data ("listwise deletion") leaving just over 1100 individuals in the sample. It also deletes all individuals who voted for a third party
#Two concepts to visualization for the day:
#Visualization is a series of graphical *layers*
#This means you have to sequentially build your plot.
#All visualization deals with manipulating fundamental elements.
#Today, we'll talk about two elements: points and lines.
#Let's draw a line
#First, draw the plot area
#We'll start by resetting graphics devices, just in case anything is lingering around
graphics.off()
plot(x=0, type='n', xlim=c(-10,10), ylim=c(-10,10),
xlab="X", ylab="Y", main="Drawing Some Lines")
#Next, the x and y axes, in gray
abline(h=0, v=0, col = "gray")
#The line formula in R is y=bx+a. Let's create the line 3x+1 in blue
abline(a=1, b=3, col = "plum")
#What other colors can we use? This displays all possible colors in R
colors()
#Let's redraw that line in "steelblue", increasing the line width "lwd" in the process
abline(a=1, b=3, col = "hotpink", lwd=90)
#Add text to line to label it, keeping it the same color as the original.
#This command places text starting at the graph coordinates (x,y) - in this case, at (5,8)
text(5,8, "y=3x+1", col = "hotpink")
#We can add another line and label it, too
abline(a=-3, b=-.5, col = "firebrick3", lwd=3)
#How about making it dashed?
#And making our code a little easier to see?
plot(x=0,
type='n',
xlim=c(-10,10),
ylim=c(-10,10),
xlab="This is the X axis",
ylab="This is the Y axis",
main="Drawing Some Lines")
abline(a=-3,
b=-.5,
col = "firebrick3",
lwd=3,
lty = "dashed")
text(-5,-2, "y=-.5x-3", col = "firebrick3")
#What if we want to save our plot?
#Two ways:
#We have to build it
#set your working directory
setwd("~/desktop/working/dwv/week 4")
#start your base plot
#Note, as soon as you start your base plot, it will appear in your filesystem!
#There just won't be anything in it.
graphics.off()
pdf("myplot1.pdf", width = 5, height = 4)
#let's add our plot
plot(x=0,
type='n',
xlim=c(-10,10),
ylim=c(-10,10),
xlab="This is the X axis",
ylab="This is the Y axis",
main="Drawing Some Lines")
abline(a=-3,
b=-.5,
col = "firebrick3",
lwd=3,
lty = "dashed")
text(-5,-2, "y=-.5x-3", col = "firebrick3")
#once we finish our build, we close the graphics device, which actually writes it to the file
dev.off()
#alternately, we can just copy what's in the current graphical device
graphics.off()
plot(x=0,
type='n',
xlim=c(-10,10),
ylim=c(-10,10),
xlab="This is the X axis",
ylab="This is the Y axis",
main="Drawing Some Lines")
abline(a=-3,
b=-.5,
col = "forestgreen",
lwd=3,
lty = "dashed")
text(-5,-2, "y=-.5x-3", col = "forestgreen")
dev.copy(png, "myplot2.png", width = 800, height = 600)
dev.off()
#Now, we'll do a bivariate linear model
nes<-read.csv("~/Library/CloudStorage/OneDrive-SyracuseUniversity/Shared Folders/Courses/Course Folders/PAI 600 - Fall 2025/3. Data/nes2000subset.csv")
#nes<-read.csv(file.choose())
#Model partisanship as a function of income
model <- lm(nes$partisanship~nes$income)
summary(model)
#Draw the resulting regression line, starting with the plot
plot(x=0, type='n', xlim=c(-10,10), ylim=c(-10,10), xlab="x", ylab="y", main="Drawing Some Lines")
abline(model)
#Ugly! We can do better.
#Change the x and y axes to include just relevant variables, label the axes properly, and give it a good title
plot(x=0, type='n', xlim=c(-1,23), ylim=c(-.4,6.4), xlab="Income", ylab="Partisanship", main="Income is Associated with Partisanship")
#Insert axes at 0
abline(h=0, v=0, col = "gray")
#Now, draw the line, making it a little heavier to make it easier to see
abline(model, col="violetred", lwd=5)
#But! We can still do better. What if we want to have the points as well as the line?
#We can *layer* everything together
graphics.off()
plot(x=0, type='n', xlim=c(-10,10), ylim=c(-10,10), xlab="x", ylab="y", main="Drawing Some Lines")
abline(model)
#Ugly! We can do better.
#Change the x and y axes to include just relevant variables, label the axes properly, and give it a good title
plot(x=0, type='n', xlim=c(-1,23), ylim=c(-.4,6.4), xlab="Income", ylab="Partisanship", main="Income is Associated with Partisanship")
#Insert axes at 0
abline(h=0, v=0, col = "gray")
#Now, we'll draw some points
points(y=nes$partisanship, x=nes$income)
#Oof. Ugly. Let's not forget to jitter ordinal data
points(y=jitter(nes$partisanship), x=jitter(nes$income))
#Better! Now add our line, and this time, let's tweak it a little to make itm more visible
abline(model, col="red", lwd=3)