1. Data Cleaning Log

Each row is one filter applied to the raw TTS 2025 file. “Remaining” is the cumulative observation count after the filter.

Starting N = 3,664,197. Final N = 481,399.
Step Filter Removed % at step Remaining % of full
1 Missing price 949,240 25.9% 2,714,957 74.1%
2 Price outliers 92,397 3.4% 2,622,560 71.6%
3 Third-party owned 789,321 30.1% 1,833,239 50.0%
4 Self-installed 34,587 1.9% 1,798,652 49.1%
5 Battery storage 142,245 7.9% 1,656,407 45.2%
6 Non-residential 41,135 2.5% 1,615,272 44.1%
7 Size outliers 25,403 1.6% 1,589,869 43.4%
8 Pre-2010 installations 53,662 3.4% 1,536,207 41.9%
9 Negative efficiency 0 0.0% 1,536,207 41.9%
10 Missing module tech 331,391 21.6% 1,204,816 32.9%
11 Missing required vars 723,417 60.0% 481,399 13.1%

2. Final Dataset

Summary statistics — final estimation sample
Variable N Mean SD Min Max
System size (W) 481,399 6,562.35 3,067.18 237.78 20,000.00
Price per watt (\(/W) </td> <td style="text-align:right;"> 481,399 </td> <td style="text-align:right;"> 4.24 </td> <td style="text-align:right;"> 1.20 </td> <td style="text-align:right;"> 1.00 </td> <td style="text-align:right;"> 10.00 </td> </tr> <tr> <td style="text-align:left;"> Sales tax rate (%) </td> <td style="text-align:right;"> 481,399 </td> <td style="text-align:right;"> 6.85 </td> <td style="text-align:right;"> 1.05 </td> <td style="text-align:right;"> 0.00 </td> <td style="text-align:right;"> 7.50 </td> </tr> <tr> <td style="text-align:left;"> Module efficiency (%) </td> <td style="text-align:right;"> 481,399 </td> <td style="text-align:right;"> 18.40 </td> <td style="text-align:right;"> 2.05 </td> <td style="text-align:right;"> 5.47 </td> <td style="text-align:right;"> 23.26 </td> </tr> <tr> <td style="text-align:left;"> Households (zip) </td> <td style="text-align:right;"> 481,399 </td> <td style="text-align:right;"> 17,389.61 </td> <td style="text-align:right;"> 9,234.59 </td> <td style="text-align:right;"> 90.00 </td> <td style="text-align:right;"> 55,420.00 </td> </tr> <tr> <td style="text-align:left;"> AGI per household (\)) 481,399 93,701.77 69,910.90 19,955.46 2,216,948.56

The final estimation sample contains 481,399 residential solar PV installations, spanning 2010–2020 across 17 states. Major states (>20,000 observations each) are CA, NY, AZ, TX, MA; all others are grouped as “Other” in the state fixed effects. California accounts for 74.3% of the final sample. Observations are dropped from the full TTS file (3,664,197 rows) primarily by the residential-only and valid-price filters, with further attrition from the IRS zip-code merge.


3. Results

The dependent variable is ln(system size in watts). The endogenous regressor is ln(price per watt). The IV instrument is ln(state sales tax rate × 100 + 1), following Bukow (2022) Appendix B2–B3. Both models include the same controls (module efficiency, new construction, tracking, ground-mounted, module technology, MLPE type, ln(households), ln(AGI per household)) and the same fixed effects (state group + installation year). Standard errors are clustered by state.

OLS and IV estimates. Instruments: log1p(sales tax rate × 100) and log1p(polysilicon price). IV: Tax + Poly is Bukow (2022)’s preferred specification (overidentified). Standard errors clustered by state in parentheses.
OLS IV: Tax Rate IV: Polysilicon IV: Tax + Poly
Price elasticity -0.436 +5.269 -0.269 +0.527
Standard error (0.029) (3.495) (0.145) (0.620)
First-stage F 59 356 209
Wu-Hausman p 0.000 0.053 0.000
Observations 481,399 481,399 481,399 481,399
0.268 0.217 0.216 0.216
State FE Yes Yes Yes Yes
Year FE Yes Yes Yes Yes

The Bukow replication (IV: Tax + Poly) yields an elasticity of +0.527, compared with OLS at -0.436 and the Bukow (2022) published estimate of −0.443. Examining the instruments separately: the polysilicon-only IV gives -0.269 (first-stage F = 356), while the tax-rate-only IV gives +5.269 (F = 59), suggesting the two instruments identify different variation and the tax instrument may be confounded. The Wu-Hausman test rejects the null of exogeneity for the combined model (p = 0.000), and the first-stage F of 209 exceeds the weak-instrument threshold of 10.