The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
The goal of spuriouscorrelations is to keep alive the amazing examples from Tyler Vigen. Unfortunately, as of 2023-10-09, the website is down as my students noticed. Therefore, I decided to use the snapshot from the Internet Wayback Machine to save the datasets from 2023-06-07.
You can install the CRAN version of spuriouscorrelations with:
install.packages("spuriouscorrelations")You can install the development version of spuriouscorrelations with:
remotes::install_github("pachadotdev/spuriouscorrelations")The package covers multiple examples for different spurious (and curious) correlations.
Here is a basic example which shows you how to plot a spurious correlation for the variables
library(spuriouscorrelations)
library(tinyplot)
pool_drownings
# year x y
# 1 1999 109 2
# 2 2000 102 2
# 3 2001 102 2
# 4 2002 98 3
# 5 2003 85 1
# 6 2004 95 1
# 7 2005 96 2
# 8 2006 98 3
# 9 2007 123 4
# 10 2008 94 1
# 11 2009 102 4
cor(pool_drownings$x, pool_drownings$y)
# [1] 0.6660043
tinyplot(
y ~ x,
data = pool_drownings,
main = sprintf("Correlation %s", round(cor(pool_drownings$x, pool_drownings$y), 3)),
xlab = "Number of people who drowned by falling into a pool",
ylab = "Films Nicolas Cage appeared in"
)
Converting the data to long format simplified plotting both variables per year:
pool_drownings_2 <- reshape(
pool_drownings,
varying = c("x", "y"), # columns to collapse
v.names = "value", # name of the new value column
timevar = "variable", # name of the new ID column
times = c("x", "y"), # values to populate the ID column
direction = "long" # target format
)
pool_drownings_2
# year variable value id
# 1.x 1999 x 109 1
# 2.x 2000 x 102 2
# 3.x 2001 x 102 3
# 4.x 2002 x 98 4
# 5.x 2003 x 85 5
# 6.x 2004 x 95 6
# 7.x 2005 x 96 7
# 8.x 2006 x 98 8
# 9.x 2007 x 123 9
# 10.x 2008 x 94 10
# 11.x 2009 x 102 11
# 1.y 1999 y 2 1
# 2.y 2000 y 2 2
# 3.y 2001 y 2 3
# 4.y 2002 y 3 4
# 5.y 2003 y 1 5
# 6.y 2004 y 1 6
# 7.y 2005 y 2 7
# 8.y 2006 y 3 8
# 9.y 2007 y 4 9
# 10.y 2008 y 1 10
# 11.y 2009 y 4 11
tinyplot(
value ~ year | variable, # "|" indicates the groping variable for the legend
data = pool_drownings_2,
main = sprintf("Correlation %s", round(cor(pool_drownings$x, pool_drownings$y), 3)),
xlab = "Year",
ylab = "Pooled observations",
pch = 19 # solid dot shape
)
How about standarzing the variables to avoid the different scale visibility issue?
pool_drownings_3 <- pool_drownings
pool_drownings_3$x <- (pool_drownings_3$x - mean(pool_drownings_3$x)) / sd(pool_drownings_3$x)
pool_drownings_3$y <- (pool_drownings_3$y - mean(pool_drownings_3$y)) / sd(pool_drownings_3$y)
pool_drownings_3 <- reshape(
pool_drownings_3,
varying = c("x", "y"), # columns to collapse
v.names = "value", # name of the new value column
timevar = "variable", # name of the new ID column
times = c("x", "y"), # values to populate the ID column
direction = "long" # target format
)
pool_drownings_3
# year variable value id
# 1.x 1999 x 0.8952867 1
# 2.x 2000 x 0.1696333 2
# 3.x 2001 x 0.1696333 3
# 4.x 2002 x -0.2450258 4
# 5.x 2003 x -1.5926679 5
# 6.x 2004 x -0.5560201 6
# 7.x 2005 x -0.4523554 7
# 8.x 2006 x -0.2450258 8
# 9.x 2007 x 2.3465935 9
# 10.x 2008 x -0.6596849 10
# 11.x 2009 x 0.1696333 11
# 1.y 1999 y -0.2470999 1
# 2.y 2000 y -0.2470999 2
# 3.y 2001 y -0.2470999 3
# 4.y 2002 y 0.6589330 4
# 5.y 2003 y -1.1531327 5
# 6.y 2004 y -1.1531327 6
# 7.y 2005 y -0.2470999 7
# 8.y 2006 y 0.6589330 8
# 9.y 2007 y 1.5649658 9
# 10.y 2008 y -1.1531327 10
# 11.y 2009 y 1.5649658 11
tinyplot(
value ~ year | variable, # "|" indicates the groping variable for the legend
data = pool_drownings_3,
main = sprintf("Correlation %s", round(cor(pool_drownings$x, pool_drownings$y), 3)),
xlab = "Year",
ylab = "Pooled standardized observations",
pch = 19, # solid dot shape
type = "b" # add line to see the trend clearly
)
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.