Donald J. Trump campaigned in 2016 on tax cuts, deregulation, tariffs on foreign imports, exiting global trade treaties like TPP and renegotiating NAFTA. Trump claimed his approach would help U.S. wage earners by reversing the globalist trends that shipped middle class jobs overseas. To suggest that experts disagreed would be a marked understatement. Trump’s populist economic nationalism was pilloried by pundits.
Results Summary. The Trump era wage growth significantly exceeded the historic trend and the Obama era trends at the 0.01 level in virtually all cases. The results are summarized in the chart below. Forty linear models were analyzed including diagnostics, and the slope coefficients from the regression lines appear in the table representing growth rates for weekly wages.
\[\begin{array}{lccccc} &\textbf{10th Percentile}&\textbf{25th Percentile}&\textbf{Median}&\textbf{75th Percentile}&\textbf{90th Percentile}\\ \text{Historic} & \$2.03& \$2.77& \$4.05& \$7.49& \$12.02\\ \text{Trump Era} &\$4.95 & \$5.14 & \$6.90 & \$10.45 & \$20.72\\ \text{Obama Era} & \$1.49 & \$1.48 & \$3.20 & \$6.03 & \$8.34\\ \text{Obama Last 3 Yrs} & \$1.68 & \$2.06 & \$5.08 & \$6.40 & \$6.70 \end{array}\]
The historic median was calculated based on a 40-year trend (since Q1 of 1981). The other historic values are calculated based upon a 20-year trend (since Q1 of 2000) because the publicly available data did not go any further back.
The U.S. Bureau of Labor Statistics states that their data are inflation-adjusted values represented in 2020 (present day) dollars.
\[\begin{array}{lccccc} &\textbf{10th Percentile}&\textbf{25th Percentile}&\textbf{Median}&\textbf{75th Percentile}&\textbf{90th Percentile}\\ \text{Historic} & \$1.65 & \$2.25 & \$3.11 & \$5.26 & \$9.23\\ \text{Trump Era} & \$3.24 & \$4.66 & \$4.54 & \$9.82 & \$11.57\\ \text{Obama Era} & \$0.88 & \$1.32 & \$1.66 & \$3.79 & \$9.85\\ \text{Obama Last 3 Yrs} & \$1.68 & \$1.65 & \$0.92 & \$2.47 & \$4.60 \end{array}\]
All historic values are calculated based upon a 20-year trend (since Q1 of 2000).
Generally, students are cautioned against using linear regression modeling for time series data. The one exception is the usage below: determining growth trends over equally spaced time intervals, a practice widely utilized especially for economic data.
Bootstrapping confidence intervals for the slope coefficient were created for each of the eight Trump era models. The 90% and 98% confidence intervals were generated to test the one-tailed hypothesis that the Trump era growth rate was significantly higher than (a) the historic growth rate, (b) the Obama era growth rate and (c) the growth during the cherry-picked last three years of the Obama era.
In every case but one, the Trump era growth was significantly higher than all three other growth rates at the 0.01 level. For the median wage for African Americans, the Trump era growth was not significantly higher than the historic median at the 0.05 level but was at the 0.1 level. However, when evaluating the significance for hypothesis that the Trump era growth was higher than for the two Obama cases, both were significant at the 0.01 level. The Trump era growth rates in wages were especially large for the 10th and 25th percentiles and for the models that used African American wage earners only.
The code block below uses ensures that the Mosaic package is loaded and will import the U.S. wages data frames Med, Perc and PercB which were created using downloads from the U.S. Bureau of Labor Statistics using Table 2 for the Med data set and Table 5 for Perc and PerB data sets. The charts were coerced into data frames using Microsoft Excel’s vlookup function.
library(mosaic)
library(readxl)
Data3350 = read_excel("Data3350.xlsx")
Med = read_excel("Med.xlsx")
MedUpdate = read_excel("MedUpdate.xlsx")
Perc = read_excel("Perc.xlsx")
PerB = read_excel("PercB.xlsx")
New names:
* `` -> ...10
* `` -> ...11
PerH = read_excel("PerH.xlsx")
The chart below shows outliers in 2020 Q1 and Q2 due to COVID layoffs mainly for those earning below the median wage. This spike in median wage growth would artificially bias the Trump era growth rates, and the outliers have thus been eliminated from the data sets and comparisons.
xyplot(Median ~ Period, data = Med,
xlab = "Quarters since 1981 Q1",
ylab = "Number of Wage Earners (in thousands)")
Why did median weekly wages increase when COVID shutdowns hit? The vast majority of those laid off were had earnings below the median causing an upward shift in the median.
xyplot(Earners ~ Period, data = Med,
xlab = "Quarters since 1981 Q1",
ylab = "Number of Wage Earners (in thousands)")
xyplot(Earners ~ Period, data = MedUpdate,
xlab = "Quarters since 1981 Q1",
ylab = "Number of Wage Earners (in thousands)")
newMed = subset( Med , Period <= 155 )
To be clear, the outliers would help Trump by artificially inflating wage growth during his term. Eliminating 2020 Q1 and Q2 allow for an analysis absent the black swan COVID event. Notice the uptick during the Trump administration still jumps above the 40-year trend line.
xyplot(Earners ~ Period, data = Med,
xlab = "Quarters since 1981 Q1",
ylab = "Number of Wage Earners (in thousands)")
xyplot( Median ~ Period, data = newMed ,
type = c("p","r") ,
xlab = "Quarters since 1981 Q1" ,
ylab = "U.S. Median Wage")
mod50 = lm( Median ~ Period, data = newMed)
mod50
Call:
lm(formula = Median ~ Period, data = newMed)
Coefficients:
(Intercept) Period
262.613 4.053
rsquared(mod50)
[1] 0.9949136
qqmath(~resid(mod50))
Results. The xyplot indicates strong linearity, and the qq-plot indicates approximately normality of residuals.
Since U.S. Presidents take office on January 20 of the year following their election, the data set begins with 1981 Q1 when Reagan took office (Period 0). Bush 41 took office 8 years (32 quarters) later, so his term begins in Period 32. Clinton’s term begins 12 quarters later in Period 48. Bush 43’s term begins 32 quarters later in Period 80. Obama’s term begins 32 quarters later in Period 112. Trump’s term begins 32 quarters after that in Period 144. The final four quarters of the Carter administration were not included in this analysis despite being present in the original data. The choice was made to include only data that covered entire presidential terms. Note that, for example, Barack Obama’s term runs from Q1 2009 to Q4 2016, and Donald Trump’s term begins in Q1 2017. Again, by truncating the Trump era at Period 155 (Q4 2019), we avoid the COVID outliers skewing the analysis of the Trump data in a direction that would be deceptively helpful to Trump. Period 160 is Q1 2021, 40 years and 160 quarters after Reagan, so Period 156 is Q1 2020.
TrumpMed = subset( Med , Period >= 144 & Period <= 155)
ObamaMed = subset( Med , Period >= 112 & Period <= 143 )
ObamaMedL3 = subset( Med , Period >= 132 & Period <= 143 )
Creating the linear models for Tump, Obama, and Obama L3 (last 3 years). The slope coefficient is labeled “Period” and indicates the weekly U.S. median wage growth per quarter.
mod50T = lm( Median ~ Period, data = TrumpMed)
mod50B = lm( Median ~ Period, data = ObamaMed)
mod50BL3 = lm( Median ~ Period, data = ObamaMedL3)
mod50
Call:
lm(formula = Median ~ Period, data = newMed)
Coefficients:
(Intercept) Period
262.613 4.053
mod50T
Call:
lm(formula = Median ~ Period, data = TrumpMed)
Coefficients:
(Intercept) Period
-143.152 6.895
mod50B
Call:
lm(formula = Median ~ Period, data = ObamaMed)
Coefficients:
(Intercept) Period
369.154 3.203
mod50BL3
Call:
lm(formula = Median ~ Period, data = ObamaMedL3)
Coefficients:
(Intercept) Period
112.923 5.077
The linearity assumption appears valid for all three models.
p1 = xyplot(Median ~ Period, data = newMed, type = c("p","r"), main = "Historic Median")
p2 = xyplot(Median ~ Period, data = TrumpMed, type = c("p","r"), main = "Trump Era Median")
p3 = xyplot(Median ~ Period, data = ObamaMed, type = c("p","r"), main = "Obama Era Median")
p4 = xyplot(Median ~ Period, data = ObamaMedL3, type = c("p","r"), main = "Obama Last 3 Yrs Median")
print(p1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(p2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(p3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(p4, position = c(0.5, 0, 1, 0.5))
A perfectly straight line of points in the qq-plot would indicate the errors (residuals) are scattered in a perfect bell-shape around the regression line. All three qq-plot are approximately linear indicating the normality assumption appears justified. However, bootstrapping confidence intervals will be used for all estimates, a process which is robust even when the residuals are not normally distributed, as long as they are symmetrically distributed (Guass-Markov Theorem.)
q1 = qqmath(~resid(mod50) ,type = c("p", "r"), main = "Historic Median")
q2 = qqmath(~resid(mod50T) ,type = c("p", "r"), main = "Trump Era Median")
q3 = qqmath(~resid(mod50B),type = c("p", "r"), main = "Obama Era Median")
q4 = qqmath(~resid(mod50BL3),type = c("p", "r"), main = "Obama Last 3 Yrs Median")
print(q1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(q2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(q3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(q4, position = c(0.5, 0, 1, 0.5))
The data for the 10th, 25th 75th and 90th percentiles are only available back to Q1 2000.
TrumpPerc = subset( Perc , Period >= 68 & Period <= 79)
ObamaPerc = subset( Perc , Period >= 36 & Period <= 67)
ObamaPercL3 = subset( Perc, Period >= 56 & Period <= 67)
mod10 = lm(P10 ~ Period, data = Perc)
mod25 = lm(P25 ~ Period, data = Perc)
mod75 = lm(P75 ~ Period, data = Perc)
mod90 = lm(P90 ~ Period, data = Perc)
mod10
Call:
lm(formula = P10 ~ Period, data = Perc)
Coefficients:
(Intercept) Period
271.515 2.025
mod25
Call:
lm(formula = P25 ~ Period, data = Perc)
Coefficients:
(Intercept) Period
375.945 2.773
mod75
Call:
lm(formula = P75 ~ Period, data = Perc)
Coefficients:
(Intercept) Period
846.211 7.485
mod90
Call:
lm(formula = P90 ~ Period, data = Perc)
Coefficients:
(Intercept) Period
1256.66 12.02
The xyplots all confirm the linearity assumption is reasonable, though each plot shows a slight acceleration of growth in the Trump era (Periods 68 to 79). The most pronounced acceleration appears visually in the 10th percentile xyplot.
p1 = xyplot(P10 ~ Period, data = Perc, type = c("p","r"), main = "10th Percentile")
p2 = xyplot(P25 ~ Period, data = Perc, type = c("p","r"), main = "25th Percentile")
p3 = xyplot(P75 ~ Period, data = Perc, type = c("p","r"), main = "75th Percentile")
p4 = xyplot(P90 ~ Period, data = Perc, type = c("p","r"), main = "90th Percentile")
print(p1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(p2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(p3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(p4, position = c(0.5, 0, 1, 0.5))
Three of the four qq-plots indicate the normality assumption for the residuals is a reasonable assumption. The qq-plot for the 10th percentile indicates the residuals are likely skewed to the right which means outliers are more likely and more prominent above the regression line where residuals are positive. Regression procedures are robust with respect to violations of the normality assumption, but we should use bootstrapping intervals rather than \(t\)-intervals for any estimates of slope coefficients (Gauss-Markov Theorem).
q1 = qqmath(~resid(mod10) ,type = c("p", "r"), main = "10th Percentile")
q2 = qqmath(~resid(mod25),type = c("p", "r"), main = "25th Percentile")
q3 = qqmath(~resid(mod75),type = c("p", "r"), main = "75th Percentile")
q4 = qqmath(~resid(mod90),type = c("p", "r"), main = "90th Percentile")
print(q1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(q2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(q3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(q3, position = c(0.5, 0, 1, 0.5))
mod10T = lm(P10 ~ Period, data = TrumpPerc)
mod25T = lm(P25 ~ Period, data = TrumpPerc)
mod75T = lm(P75 ~ Period, data = TrumpPerc)
mod90T = lm(P90 ~ Period, data = TrumpPerc)
mod10T
Call:
lm(formula = P10 ~ Period, data = TrumpPerc)
Coefficients:
(Intercept) Period
21.985 5.591
mod25T
Call:
lm(formula = P25 ~ Period, data = TrumpPerc)
Coefficients:
(Intercept) Period
264.209 4.479
mod75T
Call:
lm(formula = P75 ~ Period, data = TrumpPerc)
Coefficients:
(Intercept) Period
559.87 11.56
mod90T
Call:
lm(formula = P90 ~ Period, data = TrumpPerc)
Coefficients:
(Intercept) Period
464.60 23.12
The xyplots all confirm the linearity assumption is reasonable, though each plot shows a slight acceleration of growth in the Trump era (Periods 68 to 79). The most pronounced acceleration appears visually in the 10th percentile xyplot.
p1 = xyplot(P10 ~ Period, data = TrumpPerc, type = c("p","r"), main = "Trump 10th Percentile")
p2 = xyplot(P25 ~ Period, data = TrumpPerc, type = c("p","r"), main = "Trump 25th Percentile")
p3 = xyplot(P75 ~ Period, data = TrumpPerc, type = c("p","r"), main = "Trump 75th Percentile")
p4 = xyplot(P90 ~ Period, data = TrumpPerc, type = c("p","r"), main = "Trump 90th Percentile")
print(p1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(p2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(p3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(p4, position = c(0.5, 0, 1, 0.5))
All four qq-plots indicate the normality assumption for the residuals is a reasonable assumption.
q1 = qqmath(~resid(mod10T) ,type = c("p", "r"), main = "Trump 10th Percentile")
q2 = qqmath(~resid(mod25T),type = c("p", "r"), main = "Trump 25th Percentile")
q3 = qqmath(~resid(mod75T),type = c("p", "r"), main = "Trump 75th Percentile")
q4 = qqmath(~resid(mod90T),type = c("p", "r"), main = "Trump 90th Percentile")
print(q1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(q2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(q3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(q4, position = c(0.5, 0, 1, 0.5))
mod10B = lm(P10 ~ Period, data = ObamaPerc)
mod25B = lm(P25 ~ Period, data = ObamaPerc)
mod75B = lm(P75 ~ Period, data = ObamaPerc)
mod90B = lm(P90 ~ Period, data = ObamaPerc)
mod10B
Call:
lm(formula = P10 ~ Period, data = ObamaPerc)
Coefficients:
(Intercept) Period
284.144 1.652
mod25B
Call:
lm(formula = P25 ~ Period, data = ObamaPerc)
Coefficients:
(Intercept) Period
415.834 1.859
mod75B
Call:
lm(formula = P75 ~ Period, data = ObamaPerc)
Coefficients:
(Intercept) Period
885.219 6.588
mod90B
Call:
lm(formula = P90 ~ Period, data = ObamaPerc)
Coefficients:
(Intercept) Period
1401.144 9.035
The xyplots all confirm the linearity assumption is reasonable, though each plot shows a slight acceleration of growth in the Trump era (Periods 68 to 79). The most pronounced acceleration appears visually in the 10th percentile xyplot.
p1 = xyplot(P10 ~ Period, data = ObamaPerc, type = c("p","r"), main = "Obama 10th Percentile")
p2 = xyplot(P25 ~ Period, data = ObamaPerc, type = c("p","r"), main = "Obama 25th Percentile")
p3 = xyplot(P75 ~ Period, data = ObamaPerc, type = c("p","r"), main = "Obama 75th Percentile")
p4 = xyplot(P90 ~ Period, data = ObamaPerc, type = c("p","r"), main = "Obama 90th Percentile")
print(p1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(p2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(p3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(p4, position = c(0.5, 0, 1, 0.5))
All four qq-plots indicate the normality assumption for the residuals is a reasonable assumption.
q1 = qqmath(~resid(mod10B) ,type = c("p", "r"), main = "Obama 10th Percentile")
q2 = qqmath(~resid(mod25B),type = c("p", "r"), main = "Obama 25th Percentile")
q3 = qqmath(~resid(mod75B),type = c("p", "r"), main = "Obama 75th Percentile")
q4 = qqmath(~resid(mod90B),type = c("p", "r"), main = "Obama 90th Percentile")
print(q1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(q2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(q3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(q4, position = c(0.5, 0, 1, 0.5))
mod10BL3 = lm(P10 ~ Period, data = ObamaPercL3)
mod25BL3 = lm(P25 ~ Period, data = ObamaPercL3)
mod75BL3 = lm(P75 ~ Period, data = ObamaPercL3)
mod90BL3 = lm(P90 ~ Period, data = ObamaPercL3)
mod10BL3
Call:
lm(formula = P10 ~ Period, data = ObamaPercL3)
Coefficients:
(Intercept) Period
246.200 2.287
mod25BL3
Call:
lm(formula = P25 ~ Period, data = ObamaPercL3)
Coefficients:
(Intercept) Period
302.800 3.713
mod75BL3
Call:
lm(formula = P75 ~ Period, data = ObamaPercL3)
Coefficients:
(Intercept) Period
662.17 10.22
mod90BL3
Call:
lm(formula = P90 ~ Period, data = ObamaPercL3)
Coefficients:
(Intercept) Period
1065.98 14.38
The xyplots all confirm the linearity assumption is reasonable, though each plot shows a slight acceleration of growth in the Trump era (Periods 68 to 79). The most pronounced acceleration appears visually in the 10th percentile xyplot.
p1 = xyplot(P10 ~ Period, data = ObamaPercL3, type = c("p","r"), main = "Obama Last 3 Yrs 10th Percentile")
p2 = xyplot(P25 ~ Period, data = ObamaPercL3, type = c("p","r"), main = "Obama Last 3 Yrs 25th Percentile")
p3 = xyplot(P75 ~ Period, data = ObamaPercL3, type = c("p","r"), main = "Obama Last 3 Yrs 75th Percentile")
p4 = xyplot(P90 ~ Period, data = ObamaPercL3, type = c("p","r"), main = "Obama Last 3 Yrs 90th Percentile")
print(p1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(p2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(p3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(p4, position = c(0.5, 0, 1, 0.5))
All four qq-plots indicate the normality assumption for the residuals is a reasonable assumption.
q1 = qqmath(~resid(mod10BL3) ,type = c("p", "r"), main = "Obama Last 3 Yrs 10th Percentile")
q2 = qqmath(~resid(mod25BL3),type = c("p", "r"), main = "Obama Last 3 Yrs 25th Percentile")
q3 = qqmath(~resid(mod75BL3),type = c("p", "r"), main = "Obama Last 3 Yrs 75th Percentile")
q4 = qqmath(~resid(mod90BL3),type = c("p", "r"), main = "Obama Last 3 Yrs 90th Percentile")
print(q1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(q2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(q3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(q4, position = c(0.5, 0, 1, 0.5))
TrumpPerB = subset( PerB , Period >= 68 & Period <= 79)
ObamaPerB = subset( PerB , Period >= 36 & Period <= 67)
ObamaPerBL3 = subset( PerB, Period >= 56 & Period <= 67)
modB50 = lm(P50 ~ Period, data = PerB)
modB50T = lm(P50 ~ Period, data = TrumpPerB)
modB50B = lm(P50 ~ Period, data = ObamaPerB)
modB50BL3 = lm(P50 ~ Period, data = ObamaPerBL3)
modB50
Call:
lm(formula = P50 ~ Period, data = PerB)
Coefficients:
(Intercept) Period
466.594 3.294
modB50T
Call:
lm(formula = P50 ~ Period, data = TrumpPerB)
Coefficients:
(Intercept) Period
243.976 6.262
modB50B
Call:
lm(formula = P50 ~ Period, data = ObamaPerB)
Coefficients:
(Intercept) Period
514.435 2.238
modB50BL3
Call:
lm(formula = P50 ~ Period, data = ObamaPerBL3)
Coefficients:
(Intercept) Period
408.914 3.958
p1 = xyplot(P50 ~ Period, data = PerB, type = c("p","r"), main = "Historic Median Growth")
p2 = xyplot(P50 ~ Period, data = TrumpPerB, type = c("p","r"), main = "Trump Median Growth")
p3 = xyplot(P75 ~ Period, data = ObamaPerB, type = c("p","r"), main = "Obama Median Grwoth")
p4 = xyplot(P90 ~ Period, data = ObamaPerBL3, type = c("p","r"), main = "Obama Last 3 Yrs Median Growth")
print(p1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(p2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(p3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(p4, position = c(0.5, 0, 1, 0.5))
The xyplots all confirm the linearity assumption is reasonable, but the data for the last 3 years of the Obama era show a very weak correlation, and the Trump era may actually have a growth curve that is accelerating slightly (non-linear, concave up).
q1 = qqmath(~resid(modB50) ,type = c("p", "r"), main = "Historic Median")
q2 = qqmath(~resid(modB50T),type = c("p", "r"), main = "Trump Median")
q3 = qqmath(~resid(modB50B),type = c("p", "r"), main = "Obama Median")
q4 = qqmath(~resid(modB50BL3),type = c("p", "r"), main = "Obama Last 3 Median")
print(q1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(q2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(q3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(q4, position = c(0.5, 0, 1, 0.5))
All 4 qq-plots indicate the normality assumption is reasonable.
modB10 = lm(P10 ~ Period, data = PerB)
modB25 = lm(P25 ~ Period, data = PerB)
modB75 = lm(P75 ~ Period, data = PerB)
modB90 = lm(P90 ~ Period, data = PerB)
modB10
Call:
lm(formula = P10 ~ Period, data = PerB)
Coefficients:
(Intercept) Period
250.873 1.717
modB25
Call:
lm(formula = P25 ~ Period, data = PerB)
Coefficients:
(Intercept) Period
322.478 2.429
modB50
Call:
lm(formula = P50 ~ Period, data = PerB)
Coefficients:
(Intercept) Period
466.594 3.294
modB75
Call:
lm(formula = P75 ~ Period, data = PerB)
Coefficients:
(Intercept) Period
671.954 5.586
modB90
Call:
lm(formula = P90 ~ Period, data = PerB)
Coefficients:
(Intercept) Period
928.058 9.704
p1 = xyplot(P10 ~ Period, data = PerB, type = c("p","r"), main = "Historic 10th Percentile")
p2 = xyplot(P25 ~ Period, data = PerB, type = c("p","r"), main = "Historic 25th Percentile")
p3 = xyplot(P75 ~ Period, data = PerB, type = c("p","r"), main = "Historic 75th Percentile")
p4 = xyplot(P90 ~ Period, data = PerB, type = c("p","r"), main = "Historic 90th Percentile")
print(p1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(p2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(p3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(p4, position = c(0.5, 0, 1, 0.5))
The xyplots all confirm the linearity assumption is reasonable, though each plot shows a slight acceleration of growth in the Trump era (Periods 68 to 79). The most pronounced acceleration appears visually in the 10th percentile xyplot.
q1 = qqmath(~resid(modB10) ,type = c("p", "r"), main = "Historic 10th Percentile")
q2 = qqmath(~resid(modB25),type = c("p", "r"), main = "Historic 25th Percentile")
q3 = qqmath(~resid(modB75),type = c("p", "r"), main = "Historic 75th Percentile")
q4 = qqmath(~resid(modB90),type = c("p", "r"), main = "Historic 90th Percentile")
print(q1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(q2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(q3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(q4, position = c(0.5, 0, 1, 0.5))
All qq-plots suggest the normality assumption is reasonable.
modB10T = lm(P10 ~ Period, data = TrumpPerB)
modB25T = lm(P25 ~ Period, data = TrumpPerB)
modB75T = lm(P75 ~ Period, data = TrumpPerB)
modB90T = lm(P90 ~ Period, data = TrumpPerB)
modB10T
Call:
lm(formula = P10 ~ Period, data = TrumpPerB)
Coefficients:
(Intercept) Period
141.079 3.294
modB25T
Call:
lm(formula = P25 ~ Period, data = TrumpPerB)
Coefficients:
(Intercept) Period
66.438 5.948
modB50T
Call:
lm(formula = P50 ~ Period, data = TrumpPerB)
Coefficients:
(Intercept) Period
243.976 6.262
modB75T
Call:
lm(formula = P75 ~ Period, data = TrumpPerB)
Coefficients:
(Intercept) Period
280.52 10.83
modB90T
Call:
lm(formula = P90 ~ Period, data = TrumpPerB)
Coefficients:
(Intercept) Period
419.96 16.27
p1 = xyplot(P10 ~ Period, data = TrumpPerB, type = c("p","r"), main = "Trump 10th Percentile")
p2 = xyplot(P25 ~ Period, data = TrumpPerB, type = c("p","r"), main = "Trump 25th Percentile")
p3 = xyplot(P75 ~ Period, data = TrumpPerB, type = c("p","r"), main = "Trump 75th Percentile")
p4 = xyplot(P90 ~ Period, data = TrumpPerB, type = c("p","r"), main = "Trump 90th Percentile")
print(p1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(p2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(p3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(p4, position = c(0.5, 0, 1, 0.5))
The xyplots all confirm the linearity assumption is reasonable, though each plot shows a slight acceleration of growth in the Trump era (Periods 68 to 79). The most pronounced acceleration appears visually in the 10th percentile xyplot.
q1 = qqmath(~resid(modB10T),type = c("p", "r"), main = "Trump 10th Percentile")
q2 = qqmath(~resid(modB25T),type = c("p", "r"), main = "Trump 25th Percentile")
q3 = qqmath(~resid(modB75T),type = c("p", "r"), main = "Trump 75th Percentile")
q4 = qqmath(~resid(modB90T),type = c("p", "r"), main = "Trump 90th Percentile")
print(q1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(q2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(q3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(q4, position = c(0.5, 0, 1, 0.5))
All qq-plots suggest the normality assumption is reasonable.
modB10B = lm(P10 ~ Period, data = ObamaPerB)
modB25B = lm(P25 ~ Period, data = ObamaPerB)
modB50B = lm(P50 ~ Period, data = ObamaPerB)
modB75B = lm(P75 ~ Period, data = ObamaPerB)
modB90B = lm(P90 ~ Period, data = ObamaPerB)
modB10B
Call:
lm(formula = P10 ~ Period, data = ObamaPerB)
Coefficients:
(Intercept) Period
270.872 1.179
modB25B
Call:
lm(formula = P25 ~ Period, data = ObamaPerB)
Coefficients:
(Intercept) Period
346.702 1.745
modB50B
Call:
lm(formula = P50 ~ Period, data = ObamaPerB)
Coefficients:
(Intercept) Period
514.435 2.238
modB75B
Call:
lm(formula = P75 ~ Period, data = ObamaPerB)
Coefficients:
(Intercept) Period
756.113 3.748
modB90B
Call:
lm(formula = P90 ~ Period, data = ObamaPerB)
Coefficients:
(Intercept) Period
924.691 9.544
p1 = xyplot(P10 ~ Period, data = ObamaPerB, type = c("p","r"), main = "Obama 10th Percentile")
p2 = xyplot(P25 ~ Period, data = ObamaPerB, type = c("p","r"), main = "Obama 25th Percentile")
p3 = xyplot(P75 ~ Period, data = ObamaPerB, type = c("p","r"), main = "Obama 75th Percentile")
p4 = xyplot(P90 ~ Period, data = ObamaPerB, type = c("p","r"), main = "Obama 90th Percentile")
print(p1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(p2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(p3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(p4, position = c(0.5, 0, 1, 0.5))
The xyplots all confirm the linearity assumption is reasonable, though each plot shows a slight acceleration of growth in the Trump era (Periods 68 to 79). The most pronounced acceleration appears visually in the 10th percentile xyplot.
q1 = qqmath(~resid(modB10B),type = c("p", "r"), main = "Obama 10th Percentile")
q2 = qqmath(~resid(modB25B),type = c("p", "r"), main = "Obama 25th Percentile")
q3 = qqmath(~resid(modB75B),type = c("p", "r"), main = "Obama 75th Percentile")
q4 = qqmath(~resid(modB90B),type = c("p", "r"), main = "Obama 90th Percentile")
print(q1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(q2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(q3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(q4, position = c(0.5, 0, 1, 0.5))
All qq-plots suggest the normality assumption is reasonable.
modB10BL3 = lm(P10 ~ Period, data = ObamaPerBL3)
modB25BL3 = lm(P25 ~ Period, data = ObamaPerBL3)
modB50BL3 = lm(P50 ~ Period, data = ObamaPerBL3)
modB75BL3 = lm(P75 ~ Period, data = ObamaPerBL3)
modB90BL3 = lm(P90 ~ Period, data = ObamaPerBL3)
modB10BL3
Call:
lm(formula = P10 ~ Period, data = ObamaPerBL3)
Coefficients:
(Intercept) Period
190.737 2.507
modB25BL3
Call:
lm(formula = P25 ~ Period, data = ObamaPerBL3)
Coefficients:
(Intercept) Period
242.545 3.455
modB50BL3
Call:
lm(formula = P50 ~ Period, data = ObamaPerBL3)
Coefficients:
(Intercept) Period
408.914 3.958
modB75BL3
Call:
lm(formula = P75 ~ Period, data = ObamaPerBL3)
Coefficients:
(Intercept) Period
800.737 3.007
modB90BL3
Call:
lm(formula = P90 ~ Period, data = ObamaPerBL3)
Coefficients:
(Intercept) Period
1027.526 7.769
p1 = xyplot(P10 ~ Period, data = ObamaPerBL3, type = c("p","r"), main = "Obama Last 3 Yrs 10th Percentile")
p2 = xyplot(P25 ~ Period, data = ObamaPerBL3, type = c("p","r"), main = "Obama Last 3 Yrs 25th Percentile")
p3 = xyplot(P75 ~ Period, data = ObamaPerBL3, type = c("p","r"), main = "Obama Last 3 Yrs 75th Percentile")
p4 = xyplot(P90 ~ Period, data = ObamaPerBL3, type = c("p","r"), main = "Obama Last 3 Yrs 90th Percentile")
print(p1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(p2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(p3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(p4, position = c(0.5, 0, 1, 0.5))
The xyplots all confirm the linearity assumption is reasonable, though each plot shows a slight acceleration of growth in the Trump era (Periods 68 to 79). The most pronounced acceleration appears visually in the 10th percentile xyplot.
q1 = qqmath(~resid(modB10BL3),type = c("p", "r"), main = "Obama Last 3 Yrs 10th Percentile")
q2 = qqmath(~resid(modB25BL3),type = c("p", "r"), main = "Obama Last 3 Yrs 25th Percentile")
q3 = qqmath(~resid(modB75BL3),type = c("p", "r"), main = "Obama Last 3 Yrs 75th Percentile")
q4 = qqmath(~resid(modB90BL3),type = c("p", "r"), main = "Obama Last 3 Yrs 90th Percentile")
print(q1, position = c(0, 0.5, 0.5, 1), more = TRUE)
print(q2, position = c(0.5, 0.5, 1, 1), more = TRUE)
print(q3, position = c(0, 0, 0.5, 0.5), more = TRUE)
print(q4, position = c(0.5, 0, 1, 0.5))
All qq-plots suggest the normality assumption is reasonable.
We will use bootstrapping confidence intervals rather than \(t\)-intervals because the bootstrapping approach is more robust with respect to violations of the normality assumption than \(t\)-procedures. A few of the qq-plots suggested the normality assumption was at least slightly at issue. Since we are hypothesis testing with confidence intervals, we will create 90% confidence interevals and 98% confidence intervals to correspond to one-tailed test of significance at the 0.05 and 0.01 levels respectively.
bootstrap = do(2000) * coef(lm(P10 ~ Period, data=resample(TrumpPerc)))
round(qdata(~Period, p=c(0.05, 0.95), data=bootstrap),2)
5% 95%
5.07 6.18
round(qdata(~Period, p=c(0.01, 0.99), data=bootstrap),2)
1% 99%
4.70 6.51
bootstrap = do(2000) * coef(lm(P25 ~ Period, data=resample(TrumpPerc)))
round(qdata(~Period, p=c(0.05, 0.95), data=bootstrap),2)
5% 95%
3.95 5.15
round(qdata(~Period, p=c(0.01, 0.99), data=bootstrap),2)
1% 99%
3.69 5.44
bootstrap = do(2000) * coef(lm(Median ~ Period, data=resample(TrumpMed)))
round(qdata(~Period, p=c(0.05, 0.95), data=bootstrap),2)
5% 95%
5.55 8.39
round(qdata(~Period, p=c(0.01, 0.99), data=bootstrap),2)
1% 99%
5.04 9.00
bootstrap = do(2000) * coef(lm(P75 ~ Period, data=resample(TrumpPerc)))
round(qdata(~Period, p=c(0.05, 0.95), data=bootstrap),2)
5% 95%
9.64 13.78
round(qdata(~Period, p=c(0.01, 0.99), data=bootstrap),2)
1% 99%
8.51 14.62
bootstrap = do(2000) * coef(lm(P90 ~ Period, data=resample(TrumpPerc)))
round(qdata(~Period, p=c(0.05, 0.95), data=bootstrap),2)
5% 95%
18.99 29.52
round(qdata(~Period, p=c(0.01, 0.99), data=bootstrap),2)
1% 99%
15.67 32.73
bootstrap = do(2000) * coef(lm(P10 ~ Period, data=resample(TrumpPerB)))
round(qdata(~Period, p=c(0.05, 0.95), data=bootstrap),2)
5% 95%
2.41 4.13
round(qdata(~Period, p=c(0.01, 0.99), data=bootstrap),2)
1% 99%
2.24 4.45
bootstrap = do(2000) * coef(lm(P25 ~ Period, data=resample(TrumpPerB)))
round(qdata(~Period, p=c(0.05, 0.95), data=bootstrap),2)
5% 95%
4.60 7.05
round(qdata(~Period, p=c(0.01, 0.99), data=bootstrap),2)
1% 99%
3.85 7.78
Neither of the hypothesis tests would reject the null, not at the 0.05 significance level nor the 0.01 level. An 80% confidence interval was added to this model only to check if the null would be rejected in the one-tailed test at the very liberal 0.1 level. It was, but that does not indicate significance. We estimate the one-tailed \(p\)-value between 0.10 and 0.05, and fail to reject the null. We find no evidence for a Trump growth rate that is significant higher than the historic trend.
bootstrap = do(2000) * coef(lm(P50 ~ Period, data=resample(TrumpPerB)))
round(qdata(~Period, p=c(0.10, 0.90), data=bootstrap),2)
10% 90%
4.74 7.90
round(qdata(~Period, p=c(0.05, 0.95), data=bootstrap),2)
5% 95%
4.24 8.55
round(qdata(~Period, p=c(0.01, 0.99), data=bootstrap),2)
1% 99%
3.12 10.24
bootstrap = do(2000) * coef(lm(P75 ~ Period, data=resample(TrumpPerB)))
round(qdata(~Period, p=c(0.05, 0.95), data=bootstrap),2)
5% 95%
8.84 13.32
round(qdata(~Period, p=c(0.01, 0.99), data=bootstrap),2)
1% 99%
7.90 14.88
bootstrap = do(2000) * coef(lm(P90 ~ Period, data=resample(TrumpPerc)))
round(qdata(~Period, p=c(0.05, 0.95), data=bootstrap),2)
5% 95%
19.39 29.39
round(qdata(~Period, p=c(0.01, 0.99), data=bootstrap),2)
1% 99%
16.44 32.32