load datasets

# dataset 1
x1 <- c(10.0, 8.0, 13.0, 9.0, 11.0, 14.0, 6.0, 4.0, 12.0, 7.0, 5.0)
y1 <- c(8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68)

# dataset 2
x2 <- c(10.0, 8.0, 13.0, 9.0, 11.0, 14.0, 6.0, 4.0, 12.0, 7.0, 5.0)
y2 <- c(9.14, 8.14, 8.74, 8.77, 9.26, 8.10, 6.13, 3.10, 9.13, 7.26, 4.74)

# dataset 3
x3 <- c(10.0, 8.0, 13.0, 9.0, 11.0, 14.0, 6.0, 4.0, 12.0, 7.0, 5.0)
y3 <- c(7.46, 6.77, 12.74, 7.11, 7.81, 8.84, 6.08, 5.39, 8.15, 6.42, 5.73)

# dataset 4
x4 <- c(8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 19.0, 8.0, 8.0, 8.0)
y4 <- c(6.58, 5.76, 7.71, 8.84, 8.47, 7.04, 5.25, 12.50, 5.56, 7.91, 6.89)

# collactions
x = cbind(x1, x2, x3, x4)
y = cbind(y1, y2, y3, y4)

# print
cat('x:\n')
x:
print(x)
      x1 x2 x3 x4
 [1,] 10 10 10  8
 [2,]  8  8  8  8
 [3,] 13 13 13  8
 [4,]  9  9  9  8
 [5,] 11 11 11  8
 [6,] 14 14 14  8
 [7,]  6  6  6  8
 [8,]  4  4  4 19
 [9,] 12 12 12  8
[10,]  7  7  7  8
[11,]  5  5  5  8
cat('y:\n')
y:
print(y)
         y1   y2    y3    y4
 [1,]  8.04 9.14  7.46  6.58
 [2,]  6.95 8.14  6.77  5.76
 [3,]  7.58 8.74 12.74  7.71
 [4,]  8.81 8.77  7.11  8.84
 [5,]  8.33 9.26  7.81  8.47
 [6,]  9.96 8.10  8.84  7.04
 [7,]  7.24 6.13  6.08  5.25
 [8,]  4.26 3.10  5.39 12.50
 [9,] 10.84 9.13  8.15  5.56
[10,]  4.82 7.26  6.42  7.91
[11,]  5.68 4.74  5.73  6.89

means, variances, and correlation coefficients

# means
cat('means:\n')
means:
colMeans(x)
x1 x2 x3 x4 
 9  9  9  9 
colMeans(y)
      y1       y2       y3       y4 
7.500909 7.500909 7.500000 7.500909 
# variances
cat('variances:\n')
variances:
apply(x, 2, var)
x1 x2 x3 x4 
11 11 11 11 
apply(y, 2, var)
      y1       y2       y3       y4 
4.127269 4.127629 4.122620 4.123249 
# correlation coefficients
cat('correlation coefficients:\n')
correlation coefficients:
cor(x, y)
           y1         y2         y3         y4
x1  0.8164205  0.8162365  0.8162867 -0.3140467
x2  0.8164205  0.8162365  0.8162867 -0.3140467
x3  0.8164205  0.8162365  0.8162867 -0.3140467
x4 -0.5290927 -0.7184365 -0.3446610  0.8165214

linear regression

# dataset 1
lm1 <- lm(y1 ~ x1)
summary(lm1)

Call:
lm(formula = y1 ~ x1)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.92127 -0.45577 -0.04136  0.70941  1.83882 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   3.0001     1.1247   2.667  0.02573 * 
x1            0.5001     0.1179   4.241  0.00217 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.237 on 9 degrees of freedom
Multiple R-squared:  0.6665,    Adjusted R-squared:  0.6295 
F-statistic: 17.99 on 1 and 9 DF,  p-value: 0.00217
# dataset 2
lm2 <- lm(y2 ~ x2)
summary(lm2)

Call:
lm(formula = y2 ~ x2)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.9009 -0.7609  0.1291  0.9491  1.2691 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)    3.001      1.125   2.667  0.02576 * 
x2             0.500      0.118   4.239  0.00218 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.237 on 9 degrees of freedom
Multiple R-squared:  0.6662,    Adjusted R-squared:  0.6292 
F-statistic: 17.97 on 1 and 9 DF,  p-value: 0.002179
# dataset 3
lm3 <- lm(y3 ~ x3)
summary(lm3)

Call:
lm(formula = y3 ~ x3)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.1586 -0.6146 -0.2303  0.1540  3.2411 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   3.0025     1.1245   2.670  0.02562 * 
x3            0.4997     0.1179   4.239  0.00218 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.236 on 9 degrees of freedom
Multiple R-squared:  0.6663,    Adjusted R-squared:  0.6292 
F-statistic: 17.97 on 1 and 9 DF,  p-value: 0.002176
# dataset 4
lm4 <- lm(y4 ~ x4)
summary(lm4)

Call:
lm(formula = y4 ~ x4)

Residuals:
   Min     1Q Median     3Q    Max 
-1.751 -0.831  0.000  0.809  1.839 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   3.0017     1.1239   2.671  0.02559 * 
x4            0.4999     0.1178   4.243  0.00216 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.236 on 9 degrees of freedom
Multiple R-squared:  0.6667,    Adjusted R-squared:  0.6297 
F-statistic:    18 on 1 and 9 DF,  p-value: 0.002165

coefficients matrix

coefficients_matrix <- rbind(
  coef(lm1),
  coef(lm2),
  coef(lm3),
  coef(lm4)
)

rownames(coefficients_matrix) <- c("lm1", "lm2", "lm3", "lm4")
colnames(coefficients_matrix) <- c("Intercept", "Slope")

coefficients_matrix
    Intercept     Slope
lm1  3.000091 0.5000909
lm2  3.000909 0.5000000
lm3  3.002455 0.4997273
lm4  3.001727 0.4999091

scatter plots

#png("anscombe_scatterplot.png", width = 6, height = 6, units = "in", res = 300)
par(mfrow = c(2, 2))

plot(x1, y1, main = "Dataset 1", pch = 19, xlim = c(4, 20), ylim = c(4, 15))
abline(lm1, col = "red")

plot(x2, y2, main = "Dataset 2", pch = 19, xlim = c(4, 20), ylim = c(4, 15))
abline(lm2, col = "red")

plot(x3, y3, main = "Dataset 3", pch = 19, xlim = c(4, 20), ylim = c(4, 15))
abline(lm3, col = "red")

plot(x4, y4, main = "Dataset 4", pch = 19, xlim = c(4, 20), ylim = c(4, 15))
abline(lm4, col = "red")


#dev.off()

boxplots

#png("anscombe_boxplot.png", width = 8, height = 6, units = "in", res = 300)

boxplot(cbind(x, y),
        main = "Boxplots of Anscombe's Quartet",
        horizontal = TRUE
)


#dev.off()
LS0tDQp0aXRsZTogIkFuc2NvbWJlJ3MgcXVhcnRldCINCmF1dGhvcjogIkhzdSwgWWFvLUNoaWgiDQpkYXRlOiAiMjAyNS0wNi0wMiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMgbG9hZCBkYXRhc2V0cw0KYGBge3J9DQojIGRhdGFzZXQgMQ0KeDEgPC0gYygxMC4wLCA4LjAsIDEzLjAsIDkuMCwgMTEuMCwgMTQuMCwgNi4wLCA0LjAsIDEyLjAsIDcuMCwgNS4wKQ0KeTEgPC0gYyg4LjA0LCA2Ljk1LCA3LjU4LCA4LjgxLCA4LjMzLCA5Ljk2LCA3LjI0LCA0LjI2LCAxMC44NCwgNC44MiwgNS42OCkNCg0KIyBkYXRhc2V0IDINCngyIDwtIGMoMTAuMCwgOC4wLCAxMy4wLCA5LjAsIDExLjAsIDE0LjAsIDYuMCwgNC4wLCAxMi4wLCA3LjAsIDUuMCkNCnkyIDwtIGMoOS4xNCwgOC4xNCwgOC43NCwgOC43NywgOS4yNiwgOC4xMCwgNi4xMywgMy4xMCwgOS4xMywgNy4yNiwgNC43NCkNCg0KIyBkYXRhc2V0IDMNCngzIDwtIGMoMTAuMCwgOC4wLCAxMy4wLCA5LjAsIDExLjAsIDE0LjAsIDYuMCwgNC4wLCAxMi4wLCA3LjAsIDUuMCkNCnkzIDwtIGMoNy40NiwgNi43NywgMTIuNzQsIDcuMTEsIDcuODEsIDguODQsIDYuMDgsIDUuMzksIDguMTUsIDYuNDIsIDUuNzMpDQoNCiMgZGF0YXNldCA0DQp4NCA8LSBjKDguMCwgOC4wLCA4LjAsIDguMCwgOC4wLCA4LjAsIDguMCwgMTkuMCwgOC4wLCA4LjAsIDguMCkNCnk0IDwtIGMoNi41OCwgNS43NiwgNy43MSwgOC44NCwgOC40NywgNy4wNCwgNS4yNSwgMTIuNTAsIDUuNTYsIDcuOTEsIDYuODkpDQoNCiMgY29sbGFjdGlvbnMNCnggPSBjYmluZCh4MSwgeDIsIHgzLCB4NCkNCnkgPSBjYmluZCh5MSwgeTIsIHkzLCB5NCkNCg0KIyBwcmludA0KY2F0KCd4OlxuJykNCnByaW50KHgpDQoNCmNhdCgneTpcbicpDQpwcmludCh5KQ0KYGBgDQoNCiMgbWVhbnMsIHZhcmlhbmNlcywgYW5kIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50cw0KYGBge3J9DQojIG1lYW5zDQpjYXQoJ21lYW5zOlxuJykNCmNvbE1lYW5zKHgpDQpjb2xNZWFucyh5KQ0KDQojIHZhcmlhbmNlcw0KY2F0KCd2YXJpYW5jZXM6XG4nKQ0KYXBwbHkoeCwgMiwgdmFyKQ0KYXBwbHkoeSwgMiwgdmFyKQ0KDQojIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50cw0KY2F0KCdjb3JyZWxhdGlvbiBjb2VmZmljaWVudHM6XG4nKQ0KY29yKHgsIHkpDQpgYGANCg0KIyBsaW5lYXIgcmVncmVzc2lvbg0KYGBge3J9DQojIGRhdGFzZXQgMQ0KbG0xIDwtIGxtKHkxIH4geDEpDQpzdW1tYXJ5KGxtMSkNCmBgYA0KDQpgYGB7cn0NCiMgZGF0YXNldCAyDQpsbTIgPC0gbG0oeTIgfiB4MikNCnN1bW1hcnkobG0yKQ0KYGBgDQoNCmBgYHtyfQ0KIyBkYXRhc2V0IDMNCmxtMyA8LSBsbSh5MyB+IHgzKQ0Kc3VtbWFyeShsbTMpDQpgYGANCg0KYGBge3J9DQojIGRhdGFzZXQgNA0KbG00IDwtIGxtKHk0IH4geDQpDQpzdW1tYXJ5KGxtNCkNCmBgYA0KIyBjb2VmZmljaWVudHMgbWF0cml4DQpgYGB7cn0NCmNvZWZmaWNpZW50c19tYXRyaXggPC0gcmJpbmQoDQogIGNvZWYobG0xKSwNCiAgY29lZihsbTIpLA0KICBjb2VmKGxtMyksDQogIGNvZWYobG00KQ0KKQ0KDQpyb3duYW1lcyhjb2VmZmljaWVudHNfbWF0cml4KSA8LSBjKCJsbTEiLCAibG0yIiwgImxtMyIsICJsbTQiKQ0KY29sbmFtZXMoY29lZmZpY2llbnRzX21hdHJpeCkgPC0gYygiSW50ZXJjZXB0IiwgIlNsb3BlIikNCg0KY29lZmZpY2llbnRzX21hdHJpeA0KYGBgDQoNCiMgc2NhdHRlciBwbG90cw0KYGBge3J9DQojcG5nKCJhbnNjb21iZV9zY2F0dGVycGxvdC5wbmciLCB3aWR0aCA9IDYsIGhlaWdodCA9IDYsIHVuaXRzID0gImluIiwgcmVzID0gMzAwKQ0KcGFyKG1mcm93ID0gYygyLCAyKSkNCg0KcGxvdCh4MSwgeTEsIG1haW4gPSAiRGF0YXNldCAxIiwgcGNoID0gMTksIHhsaW0gPSBjKDQsIDIwKSwgeWxpbSA9IGMoNCwgMTUpKQ0KYWJsaW5lKGxtMSwgY29sID0gInJlZCIpDQoNCnBsb3QoeDIsIHkyLCBtYWluID0gIkRhdGFzZXQgMiIsIHBjaCA9IDE5LCB4bGltID0gYyg0LCAyMCksIHlsaW0gPSBjKDQsIDE1KSkNCmFibGluZShsbTIsIGNvbCA9ICJyZWQiKQ0KDQpwbG90KHgzLCB5MywgbWFpbiA9ICJEYXRhc2V0IDMiLCBwY2ggPSAxOSwgeGxpbSA9IGMoNCwgMjApLCB5bGltID0gYyg0LCAxNSkpDQphYmxpbmUobG0zLCBjb2wgPSAicmVkIikNCg0KcGxvdCh4NCwgeTQsIG1haW4gPSAiRGF0YXNldCA0IiwgcGNoID0gMTksIHhsaW0gPSBjKDQsIDIwKSwgeWxpbSA9IGMoNCwgMTUpKQ0KYWJsaW5lKGxtNCwgY29sID0gInJlZCIpDQoNCiNkZXYub2ZmKCkNCmBgYA0KDQojIGJveHBsb3RzDQpgYGB7cn0NCiNwbmcoImFuc2NvbWJlX2JveHBsb3QucG5nIiwgd2lkdGggPSA4LCBoZWlnaHQgPSA2LCB1bml0cyA9ICJpbiIsIHJlcyA9IDMwMCkNCg0KYm94cGxvdChjYmluZCh4LCB5KSwNCiAgICAgICAgbWFpbiA9ICJCb3hwbG90cyBvZiBBbnNjb21iZSdzIFF1YXJ0ZXQiLA0KICAgICAgICBob3Jpem9udGFsID0gVFJVRQ0KKQ0KDQojZGV2Lm9mZigpDQpgYGANCg0KDQoNCg0KDQo=