uscrime <- read.table("C:/Users/moham/Downloads/Georgia Tech University/WK5/week 5 data-summer 2026/week 5 data-summer/data 11.1/uscrime.txt", header = TRUE)
head(uscrime)
## M So Ed Po1 Po2 LF M.F Pop NW U1 U2 Wealth Ineq Prob
## 1 15.1 1 9.1 5.8 5.6 0.510 95.0 33 30.1 0.108 4.1 3940 26.1 0.084602
## 2 14.3 0 11.3 10.3 9.5 0.583 101.2 13 10.2 0.096 3.6 5570 19.4 0.029599
## 3 14.2 1 8.9 4.5 4.4 0.533 96.9 18 21.9 0.094 3.3 3180 25.0 0.083401
## 4 13.6 0 12.1 14.9 14.1 0.577 99.4 157 8.0 0.102 3.9 6730 16.7 0.015801
## 5 14.1 0 12.1 10.9 10.1 0.591 98.5 18 3.0 0.091 2.0 5780 17.4 0.041399
## 6 12.1 0 11.0 11.8 11.5 0.547 96.4 25 4.4 0.084 2.9 6890 12.6 0.034201
## Time Crime
## 1 26.2011 791
## 2 25.2999 1635
## 3 24.3006 578
## 4 29.9012 1969
## 5 21.2998 1234
## 6 20.9995 682
dim(uscrime)
## [1] 47 16
str(uscrime)
## 'data.frame': 47 obs. of 16 variables:
## $ M : num 15.1 14.3 14.2 13.6 14.1 12.1 12.7 13.1 15.7 14 ...
## $ So : int 1 0 1 0 0 0 1 1 1 0 ...
## $ Ed : num 9.1 11.3 8.9 12.1 12.1 11 11.1 10.9 9 11.8 ...
## $ Po1 : num 5.8 10.3 4.5 14.9 10.9 11.8 8.2 11.5 6.5 7.1 ...
## $ Po2 : num 5.6 9.5 4.4 14.1 10.1 11.5 7.9 10.9 6.2 6.8 ...
## $ LF : num 0.51 0.583 0.533 0.577 0.591 0.547 0.519 0.542 0.553 0.632 ...
## $ M.F : num 95 101.2 96.9 99.4 98.5 ...
## $ Pop : int 33 13 18 157 18 25 4 50 39 7 ...
## $ NW : num 30.1 10.2 21.9 8 3 4.4 13.9 17.9 28.6 1.5 ...
## $ U1 : num 0.108 0.096 0.094 0.102 0.091 0.084 0.097 0.079 0.081 0.1 ...
## $ U2 : num 4.1 3.6 3.3 3.9 2 2.9 3.8 3.5 2.8 2.4 ...
## $ Wealth: int 3940 5570 3180 6730 5780 6890 6200 4720 4210 5260 ...
## $ Ineq : num 26.1 19.4 25 16.7 17.4 12.6 16.8 20.6 23.9 17.4 ...
## $ Prob : num 0.0846 0.0296 0.0834 0.0158 0.0414 ...
## $ Time : num 26.2 25.3 24.3 29.9 21.3 ...
## $ Crime : int 791 1635 578 1969 1234 682 963 1555 856 705 ...
summary(uscrime)
## M So Ed Po1
## Min. :11.90 Min. :0.0000 Min. : 8.70 Min. : 4.50
## 1st Qu.:13.00 1st Qu.:0.0000 1st Qu.: 9.75 1st Qu.: 6.25
## Median :13.60 Median :0.0000 Median :10.80 Median : 7.80
## Mean :13.86 Mean :0.3404 Mean :10.56 Mean : 8.50
## 3rd Qu.:14.60 3rd Qu.:1.0000 3rd Qu.:11.45 3rd Qu.:10.45
## Max. :17.70 Max. :1.0000 Max. :12.20 Max. :16.60
## Po2 LF M.F Pop
## Min. : 4.100 Min. :0.4800 Min. : 93.40 Min. : 3.00
## 1st Qu.: 5.850 1st Qu.:0.5305 1st Qu.: 96.45 1st Qu.: 10.00
## Median : 7.300 Median :0.5600 Median : 97.70 Median : 25.00
## Mean : 8.023 Mean :0.5612 Mean : 98.30 Mean : 36.62
## 3rd Qu.: 9.700 3rd Qu.:0.5930 3rd Qu.: 99.20 3rd Qu.: 41.50
## Max. :15.700 Max. :0.6410 Max. :107.10 Max. :168.00
## NW U1 U2 Wealth
## Min. : 0.20 Min. :0.07000 Min. :2.000 Min. :2880
## 1st Qu.: 2.40 1st Qu.:0.08050 1st Qu.:2.750 1st Qu.:4595
## Median : 7.60 Median :0.09200 Median :3.400 Median :5370
## Mean :10.11 Mean :0.09547 Mean :3.398 Mean :5254
## 3rd Qu.:13.25 3rd Qu.:0.10400 3rd Qu.:3.850 3rd Qu.:5915
## Max. :42.30 Max. :0.14200 Max. :5.800 Max. :6890
## Ineq Prob Time Crime
## Min. :12.60 Min. :0.00690 Min. :12.20 Min. : 342.0
## 1st Qu.:16.55 1st Qu.:0.03270 1st Qu.:21.60 1st Qu.: 658.5
## Median :17.60 Median :0.04210 Median :25.80 Median : 831.0
## Mean :19.40 Mean :0.04709 Mean :26.60 Mean : 905.1
## 3rd Qu.:22.75 3rd Qu.:0.05445 3rd Qu.:30.45 3rd Qu.:1057.5
## Max. :27.60 Max. :0.11980 Max. :44.00 Max. :1993.0
anyNA(uscrime)
## [1] FALSE
colSums(is.na(uscrime))
## M So Ed Po1 Po2 LF M.F Pop NW U1 U2
## 0 0 0 0 0 0 0 0 0 0 0
## Wealth Ineq Prob Time Crime
## 0 0 0 0 0
sum(is.na(uscrime))
## [1] 0
There are no missing values in the data set.
full.model <- lm(Crime ~ ., data = uscrime)
step.model <- step(full.model, direction = "both")
## Start: AIC=514.65
## Crime ~ M + So + Ed + Po1 + Po2 + LF + M.F + Pop + NW + U1 +
## U2 + Wealth + Ineq + Prob + Time
##
## Df Sum of Sq RSS AIC
## - So 1 29 1354974 512.65
## - LF 1 8917 1363862 512.96
## - Time 1 10304 1365250 513.00
## - Pop 1 14122 1369068 513.14
## - NW 1 18395 1373341 513.28
## - M.F 1 31967 1386913 513.74
## - Wealth 1 37613 1392558 513.94
## - Po2 1 37919 1392865 513.95
## <none> 1354946 514.65
## - U1 1 83722 1438668 515.47
## - Po1 1 144306 1499252 517.41
## - U2 1 181536 1536482 518.56
## - M 1 193770 1548716 518.93
## - Prob 1 199538 1554484 519.11
## - Ed 1 402117 1757063 524.86
## - Ineq 1 423031 1777977 525.42
##
## Step: AIC=512.65
## Crime ~ M + Ed + Po1 + Po2 + LF + M.F + Pop + NW + U1 + U2 +
## Wealth + Ineq + Prob + Time
##
## Df Sum of Sq RSS AIC
## - Time 1 10341 1365315 511.01
## - LF 1 10878 1365852 511.03
## - Pop 1 14127 1369101 511.14
## - NW 1 21626 1376600 511.39
## - M.F 1 32449 1387423 511.76
## - Po2 1 37954 1392929 511.95
## - Wealth 1 39223 1394197 511.99
## <none> 1354974 512.65
## - U1 1 96420 1451395 513.88
## + So 1 29 1354946 514.65
## - Po1 1 144302 1499277 515.41
## - U2 1 189859 1544834 516.81
## - M 1 195084 1550059 516.97
## - Prob 1 204463 1559437 517.26
## - Ed 1 403140 1758114 522.89
## - Ineq 1 488834 1843808 525.13
##
## Step: AIC=511.01
## Crime ~ M + Ed + Po1 + Po2 + LF + M.F + Pop + NW + U1 + U2 +
## Wealth + Ineq + Prob
##
## Df Sum of Sq RSS AIC
## - LF 1 10533 1375848 509.37
## - NW 1 15482 1380797 509.54
## - Pop 1 21846 1387161 509.75
## - Po2 1 28932 1394247 509.99
## - Wealth 1 36070 1401385 510.23
## - M.F 1 41784 1407099 510.42
## <none> 1365315 511.01
## - U1 1 91420 1456735 512.05
## + Time 1 10341 1354974 512.65
## + So 1 65 1365250 513.00
## - Po1 1 134137 1499452 513.41
## - U2 1 184143 1549458 514.95
## - M 1 186110 1551425 515.01
## - Prob 1 237493 1602808 516.54
## - Ed 1 409448 1774763 521.33
## - Ineq 1 502909 1868224 523.75
##
## Step: AIC=509.37
## Crime ~ M + Ed + Po1 + Po2 + M.F + Pop + NW + U1 + U2 + Wealth +
## Ineq + Prob
##
## Df Sum of Sq RSS AIC
## - NW 1 11675 1387523 507.77
## - Po2 1 21418 1397266 508.09
## - Pop 1 27803 1403651 508.31
## - M.F 1 31252 1407100 508.42
## - Wealth 1 35035 1410883 508.55
## <none> 1375848 509.37
## - U1 1 80954 1456802 510.06
## + LF 1 10533 1365315 511.01
## + Time 1 9996 1365852 511.03
## + So 1 3046 1372802 511.26
## - Po1 1 123896 1499744 511.42
## - U2 1 190746 1566594 513.47
## - M 1 217716 1593564 514.27
## - Prob 1 226971 1602819 514.54
## - Ed 1 413254 1789103 519.71
## - Ineq 1 500944 1876792 521.96
##
## Step: AIC=507.77
## Crime ~ M + Ed + Po1 + Po2 + M.F + Pop + U1 + U2 + Wealth + Ineq +
## Prob
##
## Df Sum of Sq RSS AIC
## - Po2 1 16706 1404229 506.33
## - Pop 1 25793 1413315 506.63
## - M.F 1 26785 1414308 506.66
## - Wealth 1 31551 1419073 506.82
## <none> 1387523 507.77
## - U1 1 83881 1471404 508.52
## + NW 1 11675 1375848 509.37
## + So 1 7207 1380316 509.52
## + LF 1 6726 1380797 509.54
## + Time 1 4534 1382989 509.61
## - Po1 1 118348 1505871 509.61
## - U2 1 201453 1588976 512.14
## - Prob 1 216760 1604282 512.59
## - M 1 309214 1696737 515.22
## - Ed 1 402754 1790276 517.74
## - Ineq 1 589736 1977259 522.41
##
## Step: AIC=506.33
## Crime ~ M + Ed + Po1 + M.F + Pop + U1 + U2 + Wealth + Ineq +
## Prob
##
## Df Sum of Sq RSS AIC
## - Pop 1 22345 1426575 505.07
## - Wealth 1 32142 1436371 505.39
## - M.F 1 36808 1441037 505.54
## <none> 1404229 506.33
## - U1 1 86373 1490602 507.13
## + Po2 1 16706 1387523 507.77
## + NW 1 6963 1397266 508.09
## + So 1 3807 1400422 508.20
## + LF 1 1986 1402243 508.26
## + Time 1 575 1403654 508.31
## - U2 1 205814 1610043 510.76
## - Prob 1 218607 1622836 511.13
## - M 1 307001 1711230 513.62
## - Ed 1 389502 1793731 515.83
## - Ineq 1 608627 2012856 521.25
## - Po1 1 1050202 2454432 530.57
##
## Step: AIC=505.07
## Crime ~ M + Ed + Po1 + M.F + U1 + U2 + Wealth + Ineq + Prob
##
## Df Sum of Sq RSS AIC
## - Wealth 1 26493 1453068 503.93
## <none> 1426575 505.07
## - M.F 1 84491 1511065 505.77
## - U1 1 99463 1526037 506.24
## + Pop 1 22345 1404229 506.33
## + Po2 1 13259 1413315 506.63
## + NW 1 5927 1420648 506.87
## + So 1 5724 1420851 506.88
## + LF 1 5176 1421398 506.90
## + Time 1 3913 1422661 506.94
## - Prob 1 198571 1625145 509.20
## - U2 1 208880 1635455 509.49
## - M 1 320926 1747501 512.61
## - Ed 1 386773 1813348 514.35
## - Ineq 1 594779 2021354 519.45
## - Po1 1 1127277 2553852 530.44
##
## Step: AIC=503.93
## Crime ~ M + Ed + Po1 + M.F + U1 + U2 + Ineq + Prob
##
## Df Sum of Sq RSS AIC
## <none> 1453068 503.93
## + Wealth 1 26493 1426575 505.07
## - M.F 1 103159 1556227 505.16
## + Pop 1 16697 1436371 505.39
## + Po2 1 14148 1438919 505.47
## + So 1 9329 1443739 505.63
## + LF 1 4374 1448694 505.79
## + NW 1 3799 1449269 505.81
## + Time 1 2293 1450775 505.86
## - U1 1 127044 1580112 505.87
## - Prob 1 247978 1701046 509.34
## - U2 1 255443 1708511 509.55
## - M 1 296790 1749858 510.67
## - Ed 1 445788 1898855 514.51
## - Ineq 1 738244 2191312 521.24
## - Po1 1 1672038 3125105 537.93
summary(step.model)
##
## Call:
## lm(formula = Crime ~ M + Ed + Po1 + M.F + U1 + U2 + Ineq + Prob,
## data = uscrime)
##
## Residuals:
## Min 1Q Median 3Q Max
## -444.70 -111.07 3.03 122.15 483.30
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6426.10 1194.61 -5.379 4.04e-06 ***
## M 93.32 33.50 2.786 0.00828 **
## Ed 180.12 52.75 3.414 0.00153 **
## Po1 102.65 15.52 6.613 8.26e-08 ***
## M.F 22.34 13.60 1.642 0.10874
## U1 -6086.63 3339.27 -1.823 0.07622 .
## U2 187.35 72.48 2.585 0.01371 *
## Ineq 61.33 13.96 4.394 8.63e-05 ***
## Prob -3796.03 1490.65 -2.547 0.01505 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 195.5 on 38 degrees of freedom
## Multiple R-squared: 0.7888, Adjusted R-squared: 0.7444
## F-statistic: 17.74 on 8 and 38 DF, p-value: 1.159e-10
Takeaways: Stepwise regression reduced the full 15-predictor model to 8 predictors (M, Ed, Po1, M.F, U1, U2, Ineq, Prob). The model explains a good portion of the variance (R² = 0.789, Adjusted R² = 0.744). Po1, Ed, and Ineq are the strongest predictors (p < 0.01). U1 and U2 have opposite-signed coefficients despite both measuring unemployment — a likely sign of multicollinearity.
library(glmnet)
x <- as.matrix(uscrime[, 1:15])
y <- uscrime$Crime
x.scaled <- scale(x)
colMeans(x.scaled)
## M So Ed Po1 Po2
## 5.803573e-16 -1.653524e-17 -7.152966e-16 -1.151561e-17 2.371773e-16
## LF M.F Pop NW U1
## -6.445790e-16 7.132297e-16 2.930575e-17 7.920674e-17 -7.529438e-17
## U2 Wealth Ineq Prob Time
## 1.329093e-16 -1.261550e-16 3.752170e-16 1.121250e-16 -2.362177e-18
apply(x.scaled, 2, sd)
## M So Ed Po1 Po2 LF M.F Pop NW U1 U2
## 1 1 1 1 1 1 1 1 1 1 1
## Wealth Ineq Prob Time
## 1 1 1 1
set.seed(1)
cv.lasso <- cv.glmnet(x.scaled, y, alpha = 1, nfolds = 10)
plot(cv.lasso)
cv.lasso$lambda.min
## [1] 9.237784
cv.lasso$lambda.1se
## [1] 30.96138
coef(cv.lasso, s = "lambda.min")
## 16 x 1 sparse Matrix of class "dgCMatrix"
## lambda.min
## (Intercept) 905.085106
## M 89.336303
## So 21.301566
## Ed 138.056929
## Po1 305.249972
## Po2 .
## LF .
## M.F 55.146778
## Pop .
## NW 6.180951
## U1 -36.317600
## U2 71.891557
## Wealth 4.805815
## Ineq 191.894511
## Prob -83.560411
## Time .
coef(cv.lasso, s = "lambda.1se")
## 16 x 1 sparse Matrix of class "dgCMatrix"
## lambda.1se
## (Intercept) 905.08510638
## M 44.78226134
## So .
## Ed 0.07286805
## Po1 282.78158603
## Po2 .
## LF .
## M.F 54.26395274
## Pop .
## NW .
## U1 .
## U2 .
## Wealth .
## Ineq 82.41002096
## Prob -51.91991843
## Time .
pred.min <- predict(cv.lasso, s = "lambda.min", newx = x.scaled)
r2.lasso.min <- 1 - sum((y - pred.min)^2) / sum((y - mean(y))^2)
r2.lasso.min
## [1] 0.7726251
pred.1se <- predict(cv.lasso, s = "lambda.1se", newx = x.scaled)
r2.lasso.1se <- 1 - sum((y - pred.1se)^2) / sum((y - mean(y))^2)
r2.lasso.1se
## [1] 0.6497583
Takeaways: Po1 dominates in both lasso models, matching stepwise. Lasso fixed stepwise’s U1/U2 sign-flip issue at lambda.min by dropping U1 entirely. lambda.1se is much sparser (M, Po1, M.F, Ineq, Prob) and drops Ed — a disagreement with stepwise worth noting.
alphas <- seq(0, 1, by = 0.1)
set.seed(1)
cv.results <- lapply(alphas, function(a) {
cv.glmnet(x.scaled, y, alpha = a, nfolds = 10)
})
cv.errors <- sapply(cv.results, function(cv) min(cv$cvm))
results.table <- data.frame(alpha = alphas, cv.error = cv.errors)
results.table
## alpha cv.error
## 1 0.0 69614.15
## 2 0.1 69040.19
## 3 0.2 74082.20
## 4 0.3 68390.18
## 5 0.4 74176.63
## 6 0.5 65170.51
## 7 0.6 72419.43
## 8 0.7 68597.88
## 9 0.8 63594.22
## 10 0.9 69586.99
## 11 1.0 59754.98
best.index <- which.min(cv.errors)
best.alpha <- alphas[best.index]
best.alpha
## [1] 1
set.seed(1)
cv.enet <- cv.glmnet(x.scaled, y, alpha = best.alpha, nfolds = 10)
coef(cv.enet, s = "lambda.min")
## 16 x 1 sparse Matrix of class "dgCMatrix"
## lambda.min
## (Intercept) 905.085106
## M 89.336303
## So 21.301566
## Ed 138.056929
## Po1 305.249972
## Po2 .
## LF .
## M.F 55.146778
## Pop .
## NW 6.180951
## U1 -36.317600
## U2 71.891557
## Wealth 4.805815
## Ineq 191.894511
## Prob -83.560411
## Time .
coef(cv.enet, s = "lambda.1se")
## 16 x 1 sparse Matrix of class "dgCMatrix"
## lambda.1se
## (Intercept) 905.08510638
## M 44.78226134
## So .
## Ed 0.07286805
## Po1 282.78158603
## Po2 .
## LF .
## M.F 54.26395274
## Pop .
## NW .
## U1 .
## U2 .
## Wealth .
## Ineq 82.41002096
## Prob -51.91991843
## Time .
pred.enet.min <- predict(cv.enet, s = "lambda.min", newx = x.scaled)
r2.enet.min <- 1 - sum((y - pred.enet.min)^2) / sum((y - mean(y))^2)
r2.enet.min
## [1] 0.7726251
pred.enet.1se <- predict(cv.enet, s = "lambda.1se", newx = x.scaled)
r2.enet.1se <- 1 - sum((y - pred.enet.1se)^2) / sum((y - mean(y))^2)
r2.enet.1se
## [1] 0.6497583
Takeaways: Pure lasso (alpha = 1) achieved the lowest cross-validated error — elastic net’s ridge component didn’t help here. Po1 remained the dominant predictor across all methods.
| Method | Num_Variables | R_Squared |
|---|---|---|
| Stepwise | 8 | 0.789 |
| Lasso (lambda.min) | 10 | 0.773 |
| Lasso (lambda.1se) | 5 | 0.650 |
| Elastic Net (alpha=1, lambda.min) | 11 | 0.773 |
| Elastic Net (alpha=1, lambda.1se) | NA | 0.650 |
At LA Times, my role involved analyzing the performance of about 50 newsletters that had already been sent, looking at open rates and click-through rates. The issue with this approach is that the newsletters weren’t varied systematically — headline style, send time, and story placement differed for editorial reasons, not because anyone deliberately tested them. This makes it hard to draw causal conclusions, since those factors are confounded.
A design of experiments approach would have been more appropriate going forward: deliberately vary specific factors across newsletter sends, such as:
library(FrF2)
set.seed(1)
design <- FrF2(nruns = 16, nfactors = 10,
factor.names = c("LargeYard", "SolarRoof", "Pool", "Garage",
"Fireplace", "UpdatedKitchen", "Basement",
"HardwoodFloors", "NewRoof", "Fence"))
print(design)
## LargeYard SolarRoof Pool Garage Fireplace UpdatedKitchen Basement
## 1 -1 -1 -1 1 1 1 1
## 2 1 1 -1 -1 1 -1 -1
## 3 -1 1 1 -1 -1 -1 1
## 4 -1 -1 -1 -1 1 1 1
## 5 1 -1 -1 -1 -1 -1 1
## 6 1 -1 1 1 -1 1 -1
## 7 1 1 -1 1 1 -1 -1
## 8 -1 1 -1 -1 -1 1 -1
## 9 -1 -1 1 1 1 -1 -1
## 10 -1 -1 1 -1 1 -1 -1
## 11 -1 1 -1 1 -1 1 -1
## 12 1 -1 -1 1 -1 -1 1
## 13 1 -1 1 -1 -1 1 -1
## 14 -1 1 1 1 -1 -1 1
## 15 1 1 1 1 1 1 1
## 16 1 1 1 -1 1 1 1
## HardwoodFloors NewRoof Fence
## 1 -1 1 -1
## 2 -1 1 1
## 3 1 -1 1
## 4 1 -1 1
## 5 -1 -1 -1
## 6 1 -1 -1
## 7 1 -1 -1
## 8 1 1 -1
## 9 -1 -1 1
## 10 1 1 -1
## 11 -1 -1 1
## 12 1 1 1
## 13 -1 1 1
## 14 -1 1 -1
## 15 1 1 1
## 16 -1 -1 -1
## class=design, type= FrF2
design.info(design)
## $type
## [1] "FrF2"
##
## $nruns
## [1] 16
##
## $nfactors
## [1] 10
##
## $factor.names
## $factor.names$LargeYard
## [1] -1 1
##
## $factor.names$SolarRoof
## [1] -1 1
##
## $factor.names$Pool
## [1] -1 1
##
## $factor.names$Garage
## [1] -1 1
##
## $factor.names$Fireplace
## [1] -1 1
##
## $factor.names$UpdatedKitchen
## [1] -1 1
##
## $factor.names$Basement
## [1] -1 1
##
## $factor.names$HardwoodFloors
## [1] -1 1
##
## $factor.names$NewRoof
## [1] -1 1
##
## $factor.names$Fence
## [1] -1 1
##
##
## $catlg.name
## [1] "catlg"
##
## $catlg.entry
## Design: 10-6.1
## 16 runs, 10 factors,
## Resolution III
## Generating columns: 3 5 6 9 14 15
## WLP (3plus): 8 18 16 8 8 , 0 clear 2fis
##
## $aliased
## $aliased$legend
## [1] "A=LargeYard" "B=SolarRoof" "C=Pool" "D=Garage"
## [5] "E=Fireplace" "F=UpdatedKitchen" "G=Basement" "H=HardwoodFloors"
## [9] "J=NewRoof" "K=Fence"
##
## $aliased$main
## [1] "A=BE=CF=DH=JK" "B=AE=CG" "C=AF=BG" "D=AH=GJ"
## [5] "E=AB=FG" "F=AC=EG" "G=BC=DJ=EF=HK" "H=AD=GK"
## [9] "J=AK=DG" "K=AJ=GH"
##
## $aliased$fi2
## [1] "AG=BF=CE=DK=HJ" "BD=CJ=EH=FK" "BH=CK=DE=FJ" "BJ=CD=EK=FH"
## [5] "BK=CH=DF=EJ"
##
##
## $FrF2.version
## [1] "2.3-5"
##
## $replications
## [1] 1
##
## $repeat.only
## [1] FALSE
##
## $randomize
## [1] TRUE
##
## $seed
## NULL
##
## $creator
## FrF2(nruns = 16, nfactors = 10, factor.names = c("LargeYard",
## "SolarRoof", "Pool", "Garage", "Fireplace", "UpdatedKitchen",
## "Basement", "HardwoodFloors", "NewRoof", "Fence"))
Takeaways: Each row represents one fictitious house; 1 means a feature is included, -1 means excluded. This design is Resolution III — main effects are confounded with several two-factor interactions, with zero “clear” two-factor interactions. This is the expected tradeoff of compressing 1,024 possible combinations down to 16 survey houses.