From 6360c80e0cfdaad57e5c1847bc9a5e0cc42e8d8f Mon Sep 17 00:00:00 2001 From: Nicholas Karlson Date: Wed, 5 Nov 2025 13:08:49 -0800 Subject: [PATCH 1/2] data: add auto-mpg for MLR chapters --- data/autompg.csv | 391 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 391 insertions(+) create mode 100644 data/autompg.csv diff --git a/data/autompg.csv b/data/autompg.csv new file mode 100644 index 0000000..cd491c9 --- /dev/null +++ b/data/autompg.csv @@ -0,0 +1,391 @@ +"","mpg","cyl","disp","hp","wt","acc","year" +"8 cylinder 70 chevrolet chevelle malibu",18,8,307,130,3504,12,70 +"8 cylinder 70 buick skylark 320",15,8,350,165,3693,11.5,70 +"8 cylinder 70 plymouth satellite",18,8,318,150,3436,11,70 +"8 cylinder 70 amc rebel sst",16,8,304,150,3433,12,70 +"8 cylinder 70 ford torino",17,8,302,140,3449,10.5,70 +"8 cylinder 70 ford galaxie 500",15,8,429,198,4341,10,70 +"8 cylinder 70 chevrolet impala",14,8,454,220,4354,9,70 +"8 cylinder 70 plymouth fury iii",14,8,440,215,4312,8.5,70 +"8 cylinder 70 pontiac catalina",14,8,455,225,4425,10,70 +"8 cylinder 70 amc ambassador dpl",15,8,390,190,3850,8.5,70 +"8 cylinder 70 dodge challenger se",15,8,383,170,3563,10,70 +"8 cylinder 70 plymouth 'cuda 340",14,8,340,160,3609,8,70 +"8 cylinder 70 chevrolet monte carlo",15,8,400,150,3761,9.5,70 +"8 cylinder 70 buick estate wagon (sw)",14,8,455,225,3086,10,70 +"4 cylinder 70 toyota corona mark ii",24,4,113,95,2372,15,70 +"6 cylinder 70 plymouth duster",22,6,198,95,2833,15.5,70 +"6 cylinder 70 amc hornet",18,6,199,97,2774,15.5,70 +"6 cylinder 70 ford maverick",21,6,200,85,2587,16,70 +"4 cylinder 70 datsun pl510",27,4,97,88,2130,14.5,70 +"4 cylinder 70 volkswagen 1131 deluxe sedan",26,4,97,46,1835,20.5,70 +"4 cylinder 70 peugeot 504",25,4,110,87,2672,17.5,70 +"4 cylinder 70 audi 100 ls",24,4,107,90,2430,14.5,70 +"4 cylinder 70 saab 99e",25,4,104,95,2375,17.5,70 +"4 cylinder 70 bmw 2002",26,4,121,113,2234,12.5,70 +"6 cylinder 70 amc gremlin",21,6,199,90,2648,15,70 +"8 cylinder 70 ford f250",10,8,360,215,4615,14,70 +"8 cylinder 70 chevy c20",10,8,307,200,4376,15,70 +"8 cylinder 70 dodge d200",11,8,318,210,4382,13.5,70 +"8 cylinder 70 hi 1200d",9,8,304,193,4732,18.5,70 +"4 cylinder 71 datsun pl510",27,4,97,88,2130,14.5,71 +"4 cylinder 71 chevrolet vega 2300",28,4,140,90,2264,15.5,71 +"4 cylinder 71 toyota corona",25,4,113,95,2228,14,71 +"6 cylinder 71 amc gremlin",19,6,232,100,2634,13,71 +"6 cylinder 71 plymouth satellite custom",16,6,225,105,3439,15.5,71 +"6 cylinder 71 chevrolet chevelle malibu",17,6,250,100,3329,15.5,71 +"6 cylinder 71 ford torino 500",19,6,250,88,3302,15.5,71 +"6 cylinder 71 amc matador",18,6,232,100,3288,15.5,71 +"8 cylinder 71 chevrolet impala",14,8,350,165,4209,12,71 +"8 cylinder 71 pontiac catalina brougham",14,8,400,175,4464,11.5,71 +"8 cylinder 71 ford galaxie 500",14,8,351,153,4154,13.5,71 +"8 cylinder 71 plymouth fury iii",14,8,318,150,4096,13,71 +"8 cylinder 71 dodge monaco (sw)",12,8,383,180,4955,11.5,71 +"8 cylinder 71 ford country squire (sw)",13,8,400,170,4746,12,71 +"8 cylinder 71 pontiac safari (sw)",13,8,400,175,5140,12,71 +"6 cylinder 71 amc hornet sportabout (sw)",18,6,258,110,2962,13.5,71 +"4 cylinder 71 chevrolet vega (sw)",22,4,140,72,2408,19,71 +"6 cylinder 71 pontiac firebird",19,6,250,100,3282,15,71 +"6 cylinder 71 ford mustang",18,6,250,88,3139,14.5,71 +"4 cylinder 71 mercury capri 2000",23,4,122,86,2220,14,71 +"4 cylinder 71 opel 1900",28,4,116,90,2123,14,71 +"4 cylinder 71 peugeot 304",30,4,79,70,2074,19.5,71 +"4 cylinder 71 fiat 124b",30,4,88,76,2065,14.5,71 +"4 cylinder 71 toyota corolla 1200",31,4,71,65,1773,19,71 +"4 cylinder 71 datsun 1200",35,4,72,69,1613,18,71 +"4 cylinder 71 volkswagen model 111",27,4,97,60,1834,19,71 +"4 cylinder 71 plymouth cricket",26,4,91,70,1955,20.5,71 +"4 cylinder 72 toyota corona hardtop",24,4,113,95,2278,15.5,72 +"4 cylinder 72 dodge colt hardtop",25,4,97.5,80,2126,17,72 +"4 cylinder 72 volkswagen type 3",23,4,97,54,2254,23.5,72 +"4 cylinder 72 chevrolet vega",20,4,140,90,2408,19.5,72 +"4 cylinder 72 ford pinto runabout",21,4,122,86,2226,16.5,72 +"8 cylinder 72 chevrolet impala",13,8,350,165,4274,12,72 +"8 cylinder 72 pontiac catalina",14,8,400,175,4385,12,72 +"8 cylinder 72 plymouth fury iii",15,8,318,150,4135,13.5,72 +"8 cylinder 72 ford galaxie 500",14,8,351,153,4129,13,72 +"8 cylinder 72 amc ambassador sst",17,8,304,150,3672,11.5,72 +"8 cylinder 72 mercury marquis",11,8,429,208,4633,11,72 +"8 cylinder 72 buick lesabre custom",13,8,350,155,4502,13.5,72 +"8 cylinder 72 oldsmobile delta 88 royale",12,8,350,160,4456,13.5,72 +"8 cylinder 72 chrysler newport royal",13,8,400,190,4422,12.5,72 +"3 cylinder 72 mazda rx2 coupe",19,3,70,97,2330,13.5,72 +"8 cylinder 72 amc matador (sw)",15,8,304,150,3892,12.5,72 +"8 cylinder 72 chevrolet chevelle concours (sw)",13,8,307,130,4098,14,72 +"8 cylinder 72 ford gran torino (sw)",13,8,302,140,4294,16,72 +"8 cylinder 72 plymouth satellite custom (sw)",14,8,318,150,4077,14,72 +"4 cylinder 72 volvo 145e (sw)",18,4,121,112,2933,14.5,72 +"4 cylinder 72 volkswagen 411 (sw)",22,4,121,76,2511,18,72 +"4 cylinder 72 peugeot 504 (sw)",21,4,120,87,2979,19.5,72 +"4 cylinder 72 renault 12 (sw)",26,4,96,69,2189,18,72 +"4 cylinder 72 ford pinto (sw)",22,4,122,86,2395,16,72 +"4 cylinder 72 datsun 510 (sw)",28,4,97,92,2288,17,72 +"4 cylinder 72 toyouta corona mark ii (sw)",23,4,120,97,2506,14.5,72 +"4 cylinder 72 dodge colt (sw)",28,4,98,80,2164,15,72 +"4 cylinder 72 toyota corolla 1600 (sw)",27,4,97,88,2100,16.5,72 +"8 cylinder 73 buick century 350",13,8,350,175,4100,13,73 +"8 cylinder 73 amc matador",14,8,304,150,3672,11.5,73 +"8 cylinder 73 chevrolet malibu",13,8,350,145,3988,13,73 +"8 cylinder 73 ford gran torino",14,8,302,137,4042,14.5,73 +"8 cylinder 73 dodge coronet custom",15,8,318,150,3777,12.5,73 +"8 cylinder 73 mercury marquis brougham",12,8,429,198,4952,11.5,73 +"8 cylinder 73 chevrolet caprice classic",13,8,400,150,4464,12,73 +"8 cylinder 73 ford ltd",13,8,351,158,4363,13,73 +"8 cylinder 73 plymouth fury gran sedan",14,8,318,150,4237,14.5,73 +"8 cylinder 73 chrysler new yorker brougham",13,8,440,215,4735,11,73 +"8 cylinder 73 buick electra 225 custom",12,8,455,225,4951,11,73 +"8 cylinder 73 amc ambassador brougham",13,8,360,175,3821,11,73 +"6 cylinder 73 plymouth valiant",18,6,225,105,3121,16.5,73 +"6 cylinder 73 chevrolet nova custom",16,6,250,100,3278,18,73 +"6 cylinder 73 amc hornet",18,6,232,100,2945,16,73 +"6 cylinder 73 ford maverick",18,6,250,88,3021,16.5,73 +"6 cylinder 73 plymouth duster",23,6,198,95,2904,16,73 +"4 cylinder 73 volkswagen super beetle",26,4,97,46,1950,21,73 +"8 cylinder 73 chevrolet impala",11,8,400,150,4997,14,73 +"8 cylinder 73 ford country",12,8,400,167,4906,12.5,73 +"8 cylinder 73 plymouth custom suburb",13,8,360,170,4654,13,73 +"8 cylinder 73 oldsmobile vista cruiser",12,8,350,180,4499,12.5,73 +"6 cylinder 73 amc gremlin",18,6,232,100,2789,15,73 +"4 cylinder 73 toyota carina",20,4,97,88,2279,19,73 +"4 cylinder 73 chevrolet vega",21,4,140,72,2401,19.5,73 +"4 cylinder 73 datsun 610",22,4,108,94,2379,16.5,73 +"3 cylinder 73 maxda rx3",18,3,70,90,2124,13.5,73 +"4 cylinder 73 ford pinto",19,4,122,85,2310,18.5,73 +"6 cylinder 73 mercury capri v6",21,6,155,107,2472,14,73 +"4 cylinder 73 fiat 124 sport coupe",26,4,98,90,2265,15.5,73 +"8 cylinder 73 chevrolet monte carlo s",15,8,350,145,4082,13,73 +"8 cylinder 73 pontiac grand prix",16,8,400,230,4278,9.5,73 +"4 cylinder 73 fiat 128",29,4,68,49,1867,19.5,73 +"4 cylinder 73 opel manta",24,4,116,75,2158,15.5,73 +"4 cylinder 73 audi 100ls",20,4,114,91,2582,14,73 +"4 cylinder 73 volvo 144ea",19,4,121,112,2868,15.5,73 +"8 cylinder 73 dodge dart custom",15,8,318,150,3399,11,73 +"4 cylinder 73 saab 99le",24,4,121,110,2660,14,73 +"6 cylinder 73 toyota mark ii",20,6,156,122,2807,13.5,73 +"8 cylinder 73 oldsmobile omega",11,8,350,180,3664,11,73 +"6 cylinder 74 plymouth duster",20,6,198,95,3102,16.5,74 +"6 cylinder 74 amc hornet",19,6,232,100,2901,16,74 +"6 cylinder 74 chevrolet nova",15,6,250,100,3336,17,74 +"4 cylinder 74 datsun b210",31,4,79,67,1950,19,74 +"4 cylinder 74 ford pinto",26,4,122,80,2451,16.5,74 +"4 cylinder 74 toyota corolla 1200",32,4,71,65,1836,21,74 +"4 cylinder 74 chevrolet vega",25,4,140,75,2542,17,74 +"6 cylinder 74 chevrolet chevelle malibu classic",16,6,250,100,3781,17,74 +"6 cylinder 74 amc matador",16,6,258,110,3632,18,74 +"6 cylinder 74 plymouth satellite sebring",18,6,225,105,3613,16.5,74 +"8 cylinder 74 ford gran torino",16,8,302,140,4141,14,74 +"8 cylinder 74 buick century luxus (sw)",13,8,350,150,4699,14.5,74 +"8 cylinder 74 dodge coronet custom (sw)",14,8,318,150,4457,13.5,74 +"8 cylinder 74 ford gran torino (sw)",14,8,302,140,4638,16,74 +"8 cylinder 74 amc matador (sw)",14,8,304,150,4257,15.5,74 +"4 cylinder 74 audi fox",29,4,98,83,2219,16.5,74 +"4 cylinder 74 volkswagen dasher",26,4,79,67,1963,15.5,74 +"4 cylinder 74 opel manta",26,4,97,78,2300,14.5,74 +"4 cylinder 74 toyota corona",31,4,76,52,1649,16.5,74 +"4 cylinder 74 datsun 710",32,4,83,61,2003,19,74 +"4 cylinder 74 dodge colt",28,4,90,75,2125,14.5,74 +"4 cylinder 74 fiat 128",24,4,90,75,2108,15.5,74 +"4 cylinder 74 fiat 124 tc",26,4,116,75,2246,14,74 +"4 cylinder 74 honda civic",24,4,120,97,2489,15,74 +"4 cylinder 74 subaru",26,4,108,93,2391,15.5,74 +"4 cylinder 74 fiat x1.9",31,4,79,67,2000,16,74 +"6 cylinder 75 plymouth valiant custom",19,6,225,95,3264,16,75 +"6 cylinder 75 chevrolet nova",18,6,250,105,3459,16,75 +"6 cylinder 75 mercury monarch",15,6,250,72,3432,21,75 +"6 cylinder 75 ford maverick",15,6,250,72,3158,19.5,75 +"8 cylinder 75 pontiac catalina",16,8,400,170,4668,11.5,75 +"8 cylinder 75 chevrolet bel air",15,8,350,145,4440,14,75 +"8 cylinder 75 plymouth grand fury",16,8,318,150,4498,14.5,75 +"8 cylinder 75 ford ltd",14,8,351,148,4657,13.5,75 +"6 cylinder 75 buick century",17,6,231,110,3907,21,75 +"6 cylinder 75 chevroelt chevelle malibu",16,6,250,105,3897,18.5,75 +"6 cylinder 75 amc matador",15,6,258,110,3730,19,75 +"6 cylinder 75 plymouth fury",18,6,225,95,3785,19,75 +"6 cylinder 75 buick skyhawk",21,6,231,110,3039,15,75 +"8 cylinder 75 chevrolet monza 2+2",20,8,262,110,3221,13.5,75 +"8 cylinder 75 ford mustang ii",13,8,302,129,3169,12,75 +"4 cylinder 75 toyota corolla",29,4,97,75,2171,16,75 +"4 cylinder 75 ford pinto",23,4,140,83,2639,17,75 +"6 cylinder 75 amc gremlin",20,6,232,100,2914,16,75 +"4 cylinder 75 pontiac astro",23,4,140,78,2592,18.5,75 +"4 cylinder 75 toyota corona",24,4,134,96,2702,13.5,75 +"4 cylinder 75 volkswagen dasher",25,4,90,71,2223,16.5,75 +"4 cylinder 75 datsun 710",24,4,119,97,2545,17,75 +"6 cylinder 75 ford pinto",18,6,171,97,2984,14.5,75 +"4 cylinder 75 volkswagen rabbit",29,4,90,70,1937,14,75 +"6 cylinder 75 amc pacer",19,6,232,90,3211,17,75 +"4 cylinder 75 audi 100ls",23,4,115,95,2694,15,75 +"4 cylinder 75 peugeot 504",23,4,120,88,2957,17,75 +"4 cylinder 75 volvo 244dl",22,4,121,98,2945,14.5,75 +"4 cylinder 75 saab 99le",25,4,121,115,2671,13.5,75 +"4 cylinder 75 honda civic cvcc",33,4,91,53,1795,17.5,75 +"4 cylinder 76 fiat 131",28,4,107,86,2464,15.5,76 +"4 cylinder 76 opel 1900",25,4,116,81,2220,16.9,76 +"4 cylinder 76 capri ii",25,4,140,92,2572,14.9,76 +"4 cylinder 76 dodge colt",26,4,98,79,2255,17.7,76 +"4 cylinder 76 renault 12tl",27,4,101,83,2202,15.3,76 +"8 cylinder 76 chevrolet chevelle malibu classic",17.5,8,305,140,4215,13,76 +"8 cylinder 76 dodge coronet brougham",16,8,318,150,4190,13,76 +"8 cylinder 76 amc matador",15.5,8,304,120,3962,13.9,76 +"8 cylinder 76 ford gran torino",14.5,8,351,152,4215,12.8,76 +"6 cylinder 76 plymouth valiant",22,6,225,100,3233,15.4,76 +"6 cylinder 76 chevrolet nova",22,6,250,105,3353,14.5,76 +"6 cylinder 76 ford maverick",24,6,200,81,3012,17.6,76 +"6 cylinder 76 amc hornet",22.5,6,232,90,3085,17.6,76 +"4 cylinder 76 chevrolet chevette",29,4,85,52,2035,22.2,76 +"4 cylinder 76 chevrolet woody",24.5,4,98,60,2164,22.1,76 +"4 cylinder 76 vw rabbit",29,4,90,70,1937,14.2,76 +"4 cylinder 76 honda civic",33,4,91,53,1795,17.4,76 +"6 cylinder 76 dodge aspen se",20,6,225,100,3651,17.7,76 +"6 cylinder 76 ford granada ghia",18,6,250,78,3574,21,76 +"6 cylinder 76 pontiac ventura sj",18.5,6,250,110,3645,16.2,76 +"6 cylinder 76 amc pacer d/l",17.5,6,258,95,3193,17.8,76 +"4 cylinder 76 volkswagen rabbit",29.5,4,97,71,1825,12.2,76 +"4 cylinder 76 datsun b-210",32,4,85,70,1990,17,76 +"4 cylinder 76 toyota corolla",28,4,97,75,2155,16.4,76 +"4 cylinder 76 ford pinto",26.5,4,140,72,2565,13.6,76 +"4 cylinder 76 volvo 245",20,4,130,102,3150,15.7,76 +"8 cylinder 76 plymouth volare premier v8",13,8,318,150,3940,13.2,76 +"4 cylinder 76 peugeot 504",19,4,120,88,3270,21.9,76 +"6 cylinder 76 toyota mark ii",19,6,156,108,2930,15.5,76 +"6 cylinder 76 mercedes-benz 280s",16.5,6,168,120,3820,16.7,76 +"8 cylinder 76 cadillac seville",16.5,8,350,180,4380,12.1,76 +"8 cylinder 76 chevy c10",13,8,350,145,4055,12,76 +"8 cylinder 76 ford f108",13,8,302,130,3870,15,76 +"8 cylinder 76 dodge d100",13,8,318,150,3755,14,76 +"4 cylinder 77 honda accord cvcc",31.5,4,98,68,2045,18.5,77 +"4 cylinder 77 buick opel isuzu deluxe",30,4,111,80,2155,14.8,77 +"4 cylinder 77 renault 5 gtl",36,4,79,58,1825,18.6,77 +"4 cylinder 77 plymouth arrow gs",25.5,4,122,96,2300,15.5,77 +"4 cylinder 77 datsun f-10 hatchback",33.5,4,85,70,1945,16.8,77 +"8 cylinder 77 chevrolet caprice classic",17.5,8,305,145,3880,12.5,77 +"8 cylinder 77 oldsmobile cutlass supreme",17,8,260,110,4060,19,77 +"8 cylinder 77 dodge monaco brougham",15.5,8,318,145,4140,13.7,77 +"8 cylinder 77 mercury cougar brougham",15,8,302,130,4295,14.9,77 +"6 cylinder 77 chevrolet concours",17.5,6,250,110,3520,16.4,77 +"6 cylinder 77 buick skylark",20.5,6,231,105,3425,16.9,77 +"6 cylinder 77 plymouth volare custom",19,6,225,100,3630,17.7,77 +"6 cylinder 77 ford granada",18.5,6,250,98,3525,19,77 +"8 cylinder 77 pontiac grand prix lj",16,8,400,180,4220,11.1,77 +"8 cylinder 77 chevrolet monte carlo landau",15.5,8,350,170,4165,11.4,77 +"8 cylinder 77 chrysler cordoba",15.5,8,400,190,4325,12.2,77 +"8 cylinder 77 ford thunderbird",16,8,351,149,4335,14.5,77 +"4 cylinder 77 volkswagen rabbit custom",29,4,97,78,1940,14.5,77 +"4 cylinder 77 pontiac sunbird coupe",24.5,4,151,88,2740,16,77 +"4 cylinder 77 toyota corolla liftback",26,4,97,75,2265,18.2,77 +"4 cylinder 77 ford mustang ii 2+2",25.5,4,140,89,2755,15.8,77 +"4 cylinder 77 chevrolet chevette",30.5,4,98,63,2051,17,77 +"4 cylinder 77 dodge colt m/m",33.5,4,98,83,2075,15.9,77 +"4 cylinder 77 subaru dl",30,4,97,67,1985,16.4,77 +"4 cylinder 77 volkswagen dasher",30.5,4,97,78,2190,14.1,77 +"6 cylinder 77 datsun 810",22,6,146,97,2815,14.5,77 +"4 cylinder 77 bmw 320i",21.5,4,121,110,2600,12.8,77 +"3 cylinder 77 mazda rx-4",21.5,3,80,110,2720,13.5,77 +"4 cylinder 78 volkswagen rabbit custom diesel",43.1,4,90,48,1985,21.5,78 +"4 cylinder 78 ford fiesta",36.1,4,98,66,1800,14.4,78 +"4 cylinder 78 mazda glc deluxe",32.8,4,78,52,1985,19.4,78 +"4 cylinder 78 datsun b210 gx",39.4,4,85,70,2070,18.6,78 +"4 cylinder 78 honda civic cvcc",36.1,4,91,60,1800,16.4,78 +"8 cylinder 78 oldsmobile cutlass salon brougham",19.9,8,260,110,3365,15.5,78 +"8 cylinder 78 dodge diplomat",19.4,8,318,140,3735,13.2,78 +"8 cylinder 78 mercury monarch ghia",20.2,8,302,139,3570,12.8,78 +"6 cylinder 78 pontiac phoenix lj",19.2,6,231,105,3535,19.2,78 +"6 cylinder 78 chevrolet malibu",20.5,6,200,95,3155,18.2,78 +"6 cylinder 78 ford fairmont (auto)",20.2,6,200,85,2965,15.8,78 +"4 cylinder 78 ford fairmont (man)",25.1,4,140,88,2720,15.4,78 +"6 cylinder 78 plymouth volare",20.5,6,225,100,3430,17.2,78 +"6 cylinder 78 amc concord",19.4,6,232,90,3210,17.2,78 +"6 cylinder 78 buick century special",20.6,6,231,105,3380,15.8,78 +"6 cylinder 78 mercury zephyr",20.8,6,200,85,3070,16.7,78 +"6 cylinder 78 dodge aspen",18.6,6,225,110,3620,18.7,78 +"6 cylinder 78 amc concord d/l",18.1,6,258,120,3410,15.1,78 +"8 cylinder 78 chevrolet monte carlo landau",19.2,8,305,145,3425,13.2,78 +"6 cylinder 78 buick regal sport coupe (turbo)",17.7,6,231,165,3445,13.4,78 +"8 cylinder 78 ford futura",18.1,8,302,139,3205,11.2,78 +"8 cylinder 78 dodge magnum xe",17.5,8,318,140,4080,13.7,78 +"4 cylinder 78 chevrolet chevette",30,4,98,68,2155,16.5,78 +"4 cylinder 78 toyota corona",27.5,4,134,95,2560,14.2,78 +"4 cylinder 78 datsun 510",27.2,4,119,97,2300,14.7,78 +"4 cylinder 78 dodge omni",30.9,4,105,75,2230,14.5,78 +"4 cylinder 78 toyota celica gt liftback",21.1,4,134,95,2515,14.8,78 +"4 cylinder 78 plymouth sapporo",23.2,4,156,105,2745,16.7,78 +"4 cylinder 78 oldsmobile starfire sx",23.8,4,151,85,2855,17.6,78 +"4 cylinder 78 datsun 200-sx",23.9,4,119,97,2405,14.9,78 +"5 cylinder 78 audi 5000",20.3,5,131,103,2830,15.9,78 +"6 cylinder 78 volvo 264gl",17,6,163,125,3140,13.6,78 +"4 cylinder 78 saab 99gle",21.6,4,121,115,2795,15.7,78 +"6 cylinder 78 peugeot 604sl",16.2,6,163,133,3410,15.8,78 +"4 cylinder 78 volkswagen scirocco",31.5,4,89,71,1990,14.9,78 +"4 cylinder 78 honda accord lx",29.5,4,98,68,2135,16.6,78 +"6 cylinder 79 pontiac lemans v6",21.5,6,231,115,3245,15.4,79 +"6 cylinder 79 mercury zephyr 6",19.8,6,200,85,2990,18.2,79 +"4 cylinder 79 ford fairmont 4",22.3,4,140,88,2890,17.3,79 +"6 cylinder 79 amc concord dl 6",20.2,6,232,90,3265,18.2,79 +"6 cylinder 79 dodge aspen 6",20.6,6,225,110,3360,16.6,79 +"8 cylinder 79 chevrolet caprice classic",17,8,305,130,3840,15.4,79 +"8 cylinder 79 ford ltd landau",17.6,8,302,129,3725,13.4,79 +"8 cylinder 79 mercury grand marquis",16.5,8,351,138,3955,13.2,79 +"8 cylinder 79 dodge st. regis",18.2,8,318,135,3830,15.2,79 +"8 cylinder 79 buick estate wagon (sw)",16.9,8,350,155,4360,14.9,79 +"8 cylinder 79 ford country squire (sw)",15.5,8,351,142,4054,14.3,79 +"8 cylinder 79 chevrolet malibu classic (sw)",19.2,8,267,125,3605,15,79 +"8 cylinder 79 chrysler lebaron town @ country (sw)",18.5,8,360,150,3940,13,79 +"4 cylinder 79 vw rabbit custom",31.9,4,89,71,1925,14,79 +"4 cylinder 79 maxda glc deluxe",34.1,4,86,65,1975,15.2,79 +"4 cylinder 79 dodge colt hatchback custom",35.7,4,98,80,1915,14.4,79 +"4 cylinder 79 amc spirit dl",27.4,4,121,80,2670,15,79 +"5 cylinder 79 mercedes benz 300d",25.4,5,183,77,3530,20.1,79 +"8 cylinder 79 cadillac eldorado",23,8,350,125,3900,17.4,79 +"4 cylinder 79 peugeot 504",27.2,4,141,71,3190,24.8,79 +"8 cylinder 79 oldsmobile cutlass salon brougham",23.9,8,260,90,3420,22.2,79 +"4 cylinder 79 plymouth horizon",34.2,4,105,70,2200,13.2,79 +"4 cylinder 79 plymouth horizon tc3",34.5,4,105,70,2150,14.9,79 +"4 cylinder 79 datsun 210",31.8,4,85,65,2020,19.2,79 +"4 cylinder 79 fiat strada custom",37.3,4,91,69,2130,14.7,79 +"4 cylinder 79 buick skylark limited",28.4,4,151,90,2670,16,79 +"6 cylinder 79 chevrolet citation",28.8,6,173,115,2595,11.3,79 +"6 cylinder 79 oldsmobile omega brougham",26.8,6,173,115,2700,12.9,79 +"4 cylinder 79 pontiac phoenix",33.5,4,151,90,2556,13.2,79 +"4 cylinder 80 vw rabbit",41.5,4,98,76,2144,14.7,80 +"4 cylinder 80 toyota corolla tercel",38.1,4,89,60,1968,18.8,80 +"4 cylinder 80 chevrolet chevette",32.1,4,98,70,2120,15.5,80 +"4 cylinder 80 datsun 310",37.2,4,86,65,2019,16.4,80 +"4 cylinder 80 chevrolet citation",28,4,151,90,2678,16.5,80 +"4 cylinder 80 ford fairmont",26.4,4,140,88,2870,18.1,80 +"4 cylinder 80 amc concord",24.3,4,151,90,3003,20.1,80 +"6 cylinder 80 dodge aspen",19.1,6,225,90,3381,18.7,80 +"4 cylinder 80 audi 4000",34.3,4,97,78,2188,15.8,80 +"4 cylinder 80 toyota corona liftback",29.8,4,134,90,2711,15.5,80 +"4 cylinder 80 mazda 626",31.3,4,120,75,2542,17.5,80 +"4 cylinder 80 datsun 510 hatchback",37,4,119,92,2434,15,80 +"4 cylinder 80 toyota corolla",32.2,4,108,75,2265,15.2,80 +"4 cylinder 80 mazda glc",46.6,4,86,65,2110,17.9,80 +"4 cylinder 80 dodge colt",27.9,4,156,105,2800,14.4,80 +"4 cylinder 80 datsun 210",40.8,4,85,65,2110,19.2,80 +"4 cylinder 80 vw rabbit c (diesel)",44.3,4,90,48,2085,21.7,80 +"4 cylinder 80 vw dasher (diesel)",43.4,4,90,48,2335,23.7,80 +"5 cylinder 80 audi 5000s (diesel)",36.4,5,121,67,2950,19.9,80 +"4 cylinder 80 mercedes-benz 240d",30,4,146,67,3250,21.8,80 +"4 cylinder 80 honda civic 1500 gl",44.6,4,91,67,1850,13.8,80 +"4 cylinder 80 subaru dl",33.8,4,97,67,2145,18,80 +"4 cylinder 80 vokswagen rabbit",29.8,4,89,62,1845,15.3,80 +"6 cylinder 80 datsun 280-zx",32.7,6,168,132,2910,11.4,80 +"3 cylinder 80 mazda rx-7 gs",23.7,3,70,100,2420,12.5,80 +"4 cylinder 80 triumph tr7 coupe",35,4,122,88,2500,15.1,80 +"4 cylinder 80 honda accord",32.4,4,107,72,2290,17,80 +"4 cylinder 81 buick skylark",26.6,4,151,84,2635,16.4,81 +"4 cylinder 81 dodge aries wagon (sw)",25.8,4,156,92,2620,14.4,81 +"6 cylinder 81 chevrolet citation",23.5,6,173,110,2725,12.6,81 +"4 cylinder 81 toyota starlet",39.1,4,79,58,1755,16.9,81 +"4 cylinder 81 plymouth champ",39,4,86,64,1875,16.4,81 +"4 cylinder 81 honda civic 1300",35.1,4,81,60,1760,16.1,81 +"4 cylinder 81 subaru",32.3,4,97,67,2065,17.8,81 +"4 cylinder 81 datsun 210 mpg",37,4,85,65,1975,19.4,81 +"4 cylinder 81 toyota tercel",37.7,4,89,62,2050,17.3,81 +"4 cylinder 81 mazda glc 4",34.1,4,91,68,1985,16,81 +"4 cylinder 81 plymouth horizon 4",34.7,4,105,63,2215,14.9,81 +"4 cylinder 81 ford escort 4w",34.4,4,98,65,2045,16.2,81 +"4 cylinder 81 ford escort 2h",29.9,4,98,65,2380,20.7,81 +"4 cylinder 81 volkswagen jetta",33,4,105,74,2190,14.2,81 +"4 cylinder 81 honda prelude",33.7,4,107,75,2210,14.4,81 +"4 cylinder 81 toyota corolla",32.4,4,108,75,2350,16.8,81 +"4 cylinder 81 datsun 200sx",32.9,4,119,100,2615,14.8,81 +"4 cylinder 81 mazda 626",31.6,4,120,74,2635,18.3,81 +"4 cylinder 81 peugeot 505s turbo diesel",28.1,4,141,80,3230,20.4,81 +"6 cylinder 81 volvo diesel",30.7,6,145,76,3160,19.6,81 +"6 cylinder 81 toyota cressida",25.4,6,168,116,2900,12.6,81 +"6 cylinder 81 datsun 810 maxima",24.2,6,146,120,2930,13.8,81 +"6 cylinder 81 buick century",22.4,6,231,110,3415,15.8,81 +"8 cylinder 81 oldsmobile cutlass ls",26.6,8,350,105,3725,19,81 +"6 cylinder 81 ford granada gl",20.2,6,200,88,3060,17.1,81 +"6 cylinder 81 chrysler lebaron salon",17.6,6,225,85,3465,16.6,81 +"4 cylinder 82 chevrolet cavalier",28,4,112,88,2605,19.6,82 +"4 cylinder 82 chevrolet cavalier wagon",27,4,112,88,2640,18.6,82 +"4 cylinder 82 chevrolet cavalier 2-door",34,4,112,88,2395,18,82 +"4 cylinder 82 pontiac j2000 se hatchback",31,4,112,85,2575,16.2,82 +"4 cylinder 82 dodge aries se",29,4,135,84,2525,16,82 +"4 cylinder 82 pontiac phoenix",27,4,151,90,2735,18,82 +"4 cylinder 82 ford fairmont futura",24,4,140,92,2865,16.4,82 +"4 cylinder 82 volkswagen rabbit l",36,4,105,74,1980,15.3,82 +"4 cylinder 82 mazda glc custom l",37,4,91,68,2025,18.2,82 +"4 cylinder 82 mazda glc custom",31,4,91,68,1970,17.6,82 +"4 cylinder 82 plymouth horizon miser",38,4,105,63,2125,14.7,82 +"4 cylinder 82 mercury lynx l",36,4,98,70,2125,17.3,82 +"4 cylinder 82 nissan stanza xe",36,4,120,88,2160,14.5,82 +"4 cylinder 82 honda accord",36,4,107,75,2205,14.5,82 +"4 cylinder 82 toyota corolla",34,4,108,70,2245,16.9,82 +"4 cylinder 82 honda civic",38,4,91,67,1965,15,82 +"4 cylinder 82 honda civic (auto)",32,4,91,67,1965,15.7,82 +"4 cylinder 82 datsun 310 gx",38,4,91,67,1995,16.2,82 +"6 cylinder 82 buick century limited",25,6,181,110,2945,16.4,82 +"6 cylinder 82 oldsmobile cutlass ciera (diesel)",38,6,262,85,3015,17,82 +"4 cylinder 82 chrysler lebaron medallion",26,4,156,92,2585,14.5,82 +"6 cylinder 82 ford granada l",22,6,232,112,2835,14.7,82 +"4 cylinder 82 toyota celica gt",32,4,144,96,2665,13.9,82 +"4 cylinder 82 dodge charger 2.2",36,4,135,84,2370,13,82 +"4 cylinder 82 chevrolet camaro",27,4,151,90,2950,17.3,82 +"4 cylinder 82 ford mustang gl",27,4,140,86,2790,15.6,82 +"4 cylinder 82 vw pickup",44,4,97,52,2130,24.6,82 +"4 cylinder 82 dodge rampage",32,4,135,84,2295,11.6,82 +"4 cylinder 82 ford ranger",28,4,120,79,2625,18.6,82 +"4 cylinder 82 chevy s-10",31,4,119,82,2720,19.4,82 From 0c13554b8ec0c002e9606d209492813ecdfcdb43 Mon Sep 17 00:00:00 2001 From: Nicholas Karlson Date: Wed, 5 Nov 2025 13:13:04 -0800 Subject: [PATCH 2/2] feat(ch09): multiple linear regression on auto-mpg (OLS + ANOVA + partial F) --- scripts/ch09_multiple_linear_regression.py | 115 +++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 scripts/ch09_multiple_linear_regression.py diff --git a/scripts/ch09_multiple_linear_regression.py b/scripts/ch09_multiple_linear_regression.py new file mode 100644 index 0000000..bdce9a6 --- /dev/null +++ b/scripts/ch09_multiple_linear_regression.py @@ -0,0 +1,115 @@ +# SPDX-License-Identifier: MIT +""" +Chapter 9 — Multiple Linear Regression (auto-mpg) +- Loads data/autompg.csv +- Cleans common UCI quirks ('?' in horsepower), coerces types +- OLS via statsmodels using a formula (categoricals handled with C()) +- Prints SPSS-style tables; saves residual plot + QQ plot + text summary +- Headless: works from the command line +""" +import argparse, os, sys +import numpy as np +import pandas as pd +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt +import statsmodels.api as sm +import statsmodels.formula.api as smf +from statsmodels.graphics.gofplots import qqplot + +def load_data(path): + df = pd.read_csv(path) + # Common quirks for UCI auto-mpg: + if "horsepower" in df.columns: + df["horsepower"] = pd.to_numeric(df["horsepower"], errors="coerce") + for col in ["cylinders","displacement","weight","acceleration","model_year","origin","mpg"]: + if col in df.columns: + df[col] = pd.to_numeric(df[col], errors="coerce") + df = df.dropna(subset=["mpg","cylinders","displacement","horsepower","weight", + "acceleration","model_year","origin"]) + return df + +def fit_model(df): + # Treat origin and cylinders as categorical (like SPSS/R factor) + formula = "mpg ~ displacement + horsepower + weight + acceleration + model_year + C(origin) + C(cylinders)" + model = smf.ols(formula, data=df).fit() + return model + +def print_spss_style(model): + print("=== OLS Coefficients ===") + coefs = model.params + ses = model.bse + tvals = model.tvalues + pvals = model.pvalues + for name in coefs.index: + print(f"{name:15s} est={coefs[name]:9.4f} SE={ses[name]:8.4f} t={tvals[name]:8.3f} p={pvals[name]:.6g}") + print() + print("=== Model Fit ===") + print(f"R^2 : {model.rsquared:.6f}") + print(f"Adj R^2 : {model.rsquared_adj:.6f}") + print(f"Sigma (SE): {np.sqrt(model.scale):.6f}") + print() + anova = sm.stats.anova_lm(model, typ=1) + print("=== ANOVA (Type I) ===") + print(anova) + +def save_outputs(model, df, outdir="outputs"): + os.makedirs(outdir, exist_ok=True) + # Residuals vs Fitted + fitted = model.fittedvalues + resid = model.resid + plt.figure() + plt.scatter(fitted, resid, s=20) + plt.axhline(0, linestyle="--", linewidth=1) + plt.xlabel("Fitted values"); plt.ylabel("Residuals") + plt.title("Residuals vs Fitted") + plt.savefig(os.path.join(outdir, "ch09_resid_vs_fitted.png"), dpi=130, bbox_inches="tight") + + # QQ plot + plt.figure() + qqplot(resid, line="45") + plt.title("QQ Plot of Residuals") + plt.savefig(os.path.join(outdir, "ch09_qq.png"), dpi=130, bbox_inches="tight") + + # Summary text + with open(os.path.join(outdir, "ch09_summary.txt"), "w", encoding="utf-8") as f: + f.write(model.summary().as_text()) + +def partial_f_test(full, reduced): + # Compare nested models: F = ((SSE_R - SSE_F) / (df_R - df_F)) / (SSE_F / df_F) + sse_f, df_f = np.sum(full.resid**2), full.df_resid + sse_r, df_r = np.sum(reduced.resid**2), reduced.df_resid + num = (sse_r - sse_f) / (df_r - df_f) + den = sse_f / df_f + F = num / den + from scipy.stats import f + p = 1 - f.cdf(F, df_r - df_f, df_f) + return F, p + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--data", default="data/autompg.csv") + ap.add_argument("--save-outputs", action="store_true") + args = ap.parse_args() + + if not os.path.exists(args.data): + print(f"ERROR: {args.data} not found. Place autompg.csv in data/", file=sys.stderr) + sys.exit(1) + + df = load_data(args.data) + model_full = fit_model(df) + print_spss_style(model_full) + + # Example nested test: drop 'acceleration' + reduced = smf.ols("mpg ~ displacement + horsepower + weight + model_year + C(origin) + C(cylinders)", data=df).fit() + F, p = partial_f_test(model_full, reduced) + print() + print("=== Partial F-test: drop acceleration ===") + print(f"F = {F:.3f}, p = {p:.6g}") + + if args.save_outputs: + save_outputs(model_full, df) + +if __name__ == "__main__": + main() +