Question 11.1 — Stepwise, Lasso, and Elastic Net Regression

Load and Inspect the Data

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.

Part 1: Stepwise Regression

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.

Part 2: Lasso Regression

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.

Part 3: Elastic Net

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.

Comparison Table

Comparison of Stepwise, Lasso, and Elastic Net Models
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

Question 12.1 — Design of Experiments Example

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:

  • Headline style (question vs. statement)
  • Send time (morning vs. evening)
  • Use of a lead image (yes vs. no)
  • Story ordering (top story first vs. roundup style)

Question 12.2 — FrF2 Fractional Factorial Design

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.