AT2 research aimed to test if earthquakes reduced housing prices in California. The most populated US state sits on a path along the Pacific Ocean known as the “Ring of Fire” which is vulnerable to earthquake activity and tectonic plate movement.
Quarterly price changes per county were observed with adjustments for socioeconomic confounders. The final multiple linear regression produced an adjusted-R2 of 67.3%. The variable for fault line score was statistically significant indicating a higher risk of earthquakes increases prices on average, while occurrence of major earthquakes was negative but not significant (see Appendix A).
Whilst generating relatively satisfactory explanatory power, the model was dominated by macroeconomic variables. The targeted audience of the research were real estate investors, who are likely to already possess a strong understanding of economic factors that are well documented by academic literature (Reichert, 1990; Baffoe-Bonnie, 1998). Meanwhile research on the effects of natural disasters on prices remains contradictory. While many papers reported short-term adverse effects (Beracha and Prati, 2008; Fekrazad, 2019; Boustan, et. al., 2020) others counterintuitively observed increases in prices. These were attributable to varying factors including higher construction costs (Willis and Asgary, 1997) or supply shortages (Murphy and Strobl, 2009).
Therefore, the effects of natural disasters would provide more insight in comparison to refining a purely economic model. Structural Equation Modelling (SEM) will be used to determine if earthquakes have a casual effect on prices.
SEM provides a framework to visualise the structure of relationships between the variables, as well as the assessment of unobserved or latent constructs, i.e. the theoretical model of what drives prices from empirical data. Following a two-stage process, first the measurement model specifies how well measured variables represent the latent constructs. Secondly, the structural model models the causal relationship between constructs.
The new research objectives are:
Traditionally, housing price models stem from the hedonic approach by Rosen (1974) where attributes such as size, number of rooms, etc. determine prices. SEM has been effective in this domain with Bowen, et. al. (2001) finding solutions to the multicollinearity, heteroskedasticity and autocorrelation that hinder hedonic models, while Freeman and Zhao (2018) observed improvements from the introduction of covariance links between variables.
Directed Acyclic Graphs (DAG) visualise the theoretical framework. Per its name, relationships are directed to show casual effects within the model and no feedback loops exist (i.e. acyclic) so no variable can be its own descendant. The fit of this hypothesised causal structure is tested on the empirical data via three latent constructs as follows:
The earthquake variables differ from AT2. Previously fault score and a dummy variable indicating a severe earthquake occurred during the past year were used. However, this may create timing issues where say an incident in the previous month receives equal weighting to an occurrence 12 months ago. Attempts to use counts of “moderate” or “severe” earthquakes were not fruitful. Here, extra variables are introduced to attempt more accurately describe the earthquake construct, rather than data mining for statistically significant regression parameters.
Confirmatory Factor Analysis (CFA) explores how well the data points describe proposed latent constructs. Also referred to as the measurement model, each construct is assumed to be unrelated to one another. This local fit is important as the later structural model can be sensitive to smaller numbers of bad components, leading to poor global fit results. Using the lavaan package in R, the model is defined as:
econ =~ income + unemployment_rate + interest
demo =~ population + crime_index
quake =~ quake_freq + quake_strength + quake_depth + fault_score
This notation defines latent constructs on the left of the =~ symbol by the variables on the right side. Two more symbols that are relevant to later stages are ~ denoting a regression and ~~ identifying covariance between variables.
Three key measures will be focused on (full results in Appendix B1), namely Comparative Fit Index (CFI), Root Mean Square Error of Approximation (RMSEA) and Standardized Root Mean Square Residual (SRMR). CFI (Bentler, 1990) compares the fit of the target model against a restricted null model, where all variables have no correlation. RMSEA (Steiger and Lind, 1980) conversely measures how closely the target model reproduces data patterns. Both feature a parsimony adjustment where all other things being equal, simpler models with few parameters are preferred over complexity. SRMR measures the standarised differences between the observed and the predicted correlations.
An influential study by Hu and Bentler (1999) suggest the following benchmarks of good fit:
A combination of benchmarks is suggested as SRMR can be sensitive to mis-specified factor covariances, while other fit indices are sensitive to mis-specified factor loadings. These are widely adopted by many SEM practices, but more recent studies (Fan and Sivo, 2005) warn these should be used as guidelines rather than hard cut-offs. Lack of diversity in models and parameters of the original data may have created non-generalisable results.
| CFI | 0.755 |
| RMSEA | 0.150 |
| SRMR | 0.100 |
Using the results from lavaan the proposed model can also be visualised as a DAG:
Results fall well outside of the generally accepted thresholds. Also lavaan produces the warning message “some estimated ov variances are negative”, which can be an indicator model misspecification. However, as previously noted this does not necessarily indicate a completely flawed model. A closer look into the results still provide insights.
Factor loadings
Below show how each variable loads onto its particular latent construct. Values can be interpreted similarly to regression coefficients. For example, income has a positive effect on economy factor (+0.36), while rising unemployment impacts negatively (-1.29) as expected.
| Latent Factor | Indicator | B | SE | Z | Pvalue | Beta |
|---|---|---|---|---|---|---|
| econ | income | 0.3617 | 0.0258 | 14.0103 | 0 | 1.3970 |
| econ | unemployment_rate | -1.2882 | 0.1363 | -9.4539 | 0 | -0.3079 |
| econ | interest | 0.0792 | 0.0147 | 5.4005 | 0 | 0.1055 |
| demo | population | 1.3351 | 0.0674 | 19.8024 | 0 | 0.7700 |
| demo | crime_index | -0.2800 | 0.0248 | -11.2713 | 0 | -0.3161 |
| quake | quake_freq | 2.9445 | 0.1767 | 16.6597 | 0 | 0.4210 |
| quake | quake_strength | 1.4742 | 0.0392 | 37.6275 | 0 | 1.0437 |
| quake | quake_depth | 3.9329 | 0.1764 | 22.2899 | 0 | 0.5772 |
| quake | fault_score | 0.6493 | 0.0396 | 16.3866 | 0 | 0.4135 |
Error Variances
The below shows the error variances of each parameter of the model. All except quake strength are significantly greater than zero. This means the latent factors do not perfectly predict observed variables, but this is expected.
| Indicator | B | SE | Z | Pvalue | Beta |
|---|---|---|---|---|---|
| income | -0.0638 | 0.0188 | -3.3932 | 0.0007 | -0.9517 |
| unemployment_rate | 15.8413 | 0.6111 | 25.9245 | 0.0000 | 0.9052 |
| interest | 0.5582 | 0.0199 | 28.0917 | 0.0000 | 0.9889 |
| population | 1.2242 | 0.1571 | 7.7917 | 0.0000 | 0.4071 |
| crime_index | 0.7065 | 0.0261 | 27.0462 | 0.0000 | 0.9001 |
| quake_freq | 40.2577 | 1.4721 | 27.3472 | 0.0000 | 0.8228 |
| quake_strength | -0.1781 | 0.0913 | -1.9508 | 0.0511 | -0.0893 |
| quake_depth | 30.9669 | 1.2734 | 24.3190 | 0.0000 | 0.6669 |
| fault_score | 2.0436 | 0.0745 | 27.4141 | 0.0000 | 0.8290 |
| econ | 1.0000 | 0.0000 | 1.0000 | ||
| demo | 1.0000 | 0.0000 | 1.0000 | ||
| quake | 1.0000 | 0.0000 | 1.0000 | ||
| econ | 0.5314 | 0.0497 | 10.6869 | 0.0000 | 0.5314 |
| econ | 0.0476 | 0.0172 | 2.7682 | 0.0056 | 0.0476 |
| demo | 0.3121 | 0.0319 | 9.7991 | 0.0000 | 0.3121 |
Residuals
This tracks how closely covariances recalculated from estimated parameters compare with the empirical data. Larger absolute values indicate relationships between variables that isn’t captured by the model, e.g. the relationship between unemployment rate and interest, or frequency versus depth and fault score among earthquakes. Residuals drive the RMSEA score where positive values indicate an under-prediction of the correlation between the variables, while negatives indicate over-prediction.
| Income | Unemployment | Interest | Pop. | Crime | Freq | Strength | Depth | Fault Score | |
|---|---|---|---|---|---|---|---|---|---|
| Income | 0.0000 | ||||||||
| Unemployment | -0.0028 | 0.0000 | |||||||
| Interest | 0.0176 | -1.3376 | 0.0000 | ||||||
| Pop. | -0.0135 | 0.7932 | -0.0476 | 0.0000 | |||||
| Crime | -0.0089 | 0.3580 | -0.0554 | 0.0000 | 0.0000 | ||||
| Freq | -0.1883 | 5.7608 | -0.0795 | -0.4797 | 0.1171 | -0.0001 | |||
| Strength | -0.0020 | 0.3520 | 0.0247 | 0.0365 | 0.0356 | 0.0133 | 0.0000 | ||
| Depth | -0.0627 | 0.6509 | 0.1262 | 0.2843 | -0.3245 | -3.4427 | -0.0519 | 0.0000 | |
| Fault Score | 0.0973 | 0.9021 | -0.0024 | 0.6052 | 0.0864 | 1.8497 | 0.0082 | -0.8906 | 0 |
Modification Indices
This list presents additional parameters that are recommended to significantly improve the model fit. Consistent with earlier notation, =~ indicates additional factor loading and ~~ indicates covariance. It is important to only consider additions that make theoretical sense to the proposed SEM, otherwise there is high risk of overfitting the data and reducing generalisability.
| lhs | op | rhs | mi | epc | sepc.lv | sepc.all | sepc.nox |
|---|---|---|---|---|---|---|---|
| econ | =~ | fault_score | 129.8480 | 0.2645 | 0.2645 | 0.1685 | 0.1685 |
| demo | =~ | income | 84.8384 | 0.8923 | 0.8923 | 3.4462 | 3.4462 |
| demo | =~ | unemployment_rate | 57.2352 | 2.2412 | 2.2412 | 0.5357 | 0.5357 |
| demo | =~ | quake_strength | 20.2773 | -0.2141 | -0.2141 | -0.1516 | -0.1516 |
| demo | =~ | fault_score | 151.2892 | 0.5407 | 0.5407 | 0.3444 | 0.3444 |
| income | ~~ | interest | 87.2007 | -0.1130 | -0.1130 | -0.5986 | -0.5986 |
| income | ~~ | population | 39.8641 | 0.3244 | 0.3244 | 1.1606 | 1.1606 |
| income | ~~ | fault_score | 114.2742 | 0.0715 | 0.0715 | 0.1981 | 0.1981 |
| unemployment_rate | ~~ | interest | 316.1659 | -1.3362 | -1.3362 | -0.4494 | -0.4494 |
| unemployment_rate | ~~ | population | 100.4972 | 2.8307 | 2.8307 | 0.6428 | 0.6428 |
| unemployment_rate | ~~ | crime_index | 23.5718 | 0.4119 | 0.4119 | 0.1231 | 0.1231 |
| unemployment_rate | ~~ | quake_freq | 40.5287 | 3.7610 | 3.7610 | 0.1489 | 0.1489 |
| unemployment_rate | ~~ | fault_score | 105.9493 | 1.3706 | 1.3706 | 0.2409 | 0.2409 |
| crime_index | ~~ | fault_score | 31.4893 | 0.1712 | 0.1712 | 0.1425 | 0.1425 |
| quake_freq | ~~ | quake_depth | 21.3984 | -4.9545 | -4.9545 | -0.1403 | -0.1403 |
| quake_freq | ~~ | fault_score | 74.1068 | 2.1075 | 2.1075 | 0.2323 | 0.2323 |
| quake_strength | ~~ | quake_depth | 78.9651 | 5.3605 | 5.3605 | 2.2826 | 2.2826 |
| quake_depth | ~~ | fault_score | 27.6453 | -1.2560 | -1.2560 | -0.1579 | -0.1579 |
Model Adjustment
The modifications suggest cross-loading should be introduced where a single variable loads onto multiple latent constructs, such as fault score being suggested onto economy and demographic factors. This reduces the distinctiveness of each construct in representing separate concepts within the model. Hence, these are not incorporated as it significantly changes the hypothesised framework. Cross-loading is accepted under the branch of Exploratory Factor Analysis, where no priori theory on constructs is expected. This is an extensive topic outside the scope of this research.
Focusing on covariances, those that load onto the same factor will be introduced. The relationship between unemployment rate and interest rates, as well as those among the earthquake variables, were expected from prior research and were also problematic in the residual matrix. The new model is restated as:
# Factors
econ =~ income + unemployment_rate + interest
demo =~ population + crime_index
quake =~ quake_freq + quake_strength + quake_depth + fault_score# Covariance
income ~~ interest
unemployment_rate ~~ interest
quake_freq ~~ quake_depth
quake_freq ~~ fault_score
quake_strength ~~ quake_depth
quake_depth ~~ fault_score
There is significant improvement to the key fit measures (full results at Appendix B2). Although the scores are closer to benchmarks from the literature, they still fall short of a strong fit.
| CFI | 0.886 |
| RMSEA | 0.118 |
| SRMR | 0.068 |
Finally, an ANOVA test on the two measurement models shows the introduction of select covariances is a statistically significant improvement to the base model.
| Df | AIC | BIC | Chisq | Chisq diff | Df diff | Pr(>Chisq) | |
|---|---|---|---|---|---|---|---|
| fit.cov | 18 | 52185.99 | 52330.58 | 411.6969 | |||
| fit.cfa | 24 | 52634.26 | 52746.72 | 871.9688 | 460.2719 | 6 | 0 |
The structural model combines constructs from the CFA stage with regressions, testing the path models hypothesised in the DAG. The SEM models in lavaan will use the parameter estimator="MLM". This indicates a maximum likelihood parameter with standard errors and mean adjusted test statistics robust for non-normality (Satorra and Bentler, 2001). Log-tranformations were performed on the relevant variables to improve the regressions in AT2, but earthquake data will still suffer from non-normality.
The initial SEM model is defined as:
# Factors
econ =~ income + unemployment_rate + interest
demo =~ population + crime_index
quake =~ quake_freq + quake_strength + quake_depth + fault_score# Regression
house_price ~ econ + demo + quake
Initial Results
Fit measures fall into the same range as the base CFA model (full results at Appendix B3). Here the “scaled” version of indices below refer to the test scores that were adjusted for non-normality.
| CFI.SCALED | 0.791 |
| RMSEA.SCALED | 0.150 |
| SRMR | 0.099 |
Modification Indices
In the modification indices, the covariances present in during the CFA stage resurface. Other covariances and cross-loadings will be ignored to keep consistency with priori theoretical framework as previously stated.
| lhs | op | rhs | mi | epc | sepc.lv | sepc.all | sepc.nox |
|---|---|---|---|---|---|---|---|
| econ | =~ | fault_score | 133.9981 | 0.4411 | 0.4411 | 0.2810 | 0.2810 |
| demo | =~ | income | 141.8497 | 0.2915 | 0.2915 | 1.1259 | 1.1259 |
| demo | =~ | unemployment_rate | 131.5447 | 2.7797 | 2.7797 | 0.6645 | 0.6645 |
| demo | =~ | fault_score | 120.0145 | 0.5019 | 0.5019 | 0.3197 | 0.3197 |
| income | ~~ | unemployment_rate | 40.8202 | 0.2195 | 0.2195 | 0.5356 | 0.5356 |
| income | ~~ | population | 175.1152 | 0.1451 | 0.1451 | 1.0279 | 1.0279 |
| income | ~~ | house_price | 98.0872 | -0.0756 | -0.0756 | -2.1323 | -2.1323 |
| unemployment_rate | ~~ | interest | 248.5871 | -1.0721 | -1.0721 | -0.4093 | -0.4093 |
| unemployment_rate | ~~ | population | 235.8278 | 2.1726 | 2.1726 | 0.4817 | 0.4817 |
| unemployment_rate | ~~ | quake_freq | 46.6744 | 4.0002 | 4.0002 | 0.1752 | 0.1752 |
| unemployment_rate | ~~ | quake_strength | 24.7580 | -0.4541 | -0.4541 | -0.4608 | -0.4608 |
| unemployment_rate | ~~ | fault_score | 151.4571 | 1.6236 | 1.6236 | 0.3157 | 0.3157 |
| unemployment_rate | ~~ | house_price | 118.2825 | -0.6661 | -0.6661 | -0.5881 | -0.5881 |
| interest | ~~ | population | 64.1721 | -0.2137 | -0.2137 | -0.2369 | -0.2369 |
| population | ~~ | fault_score | 28.1391 | 0.2758 | 0.2758 | 0.1557 | 0.1557 |
| crime_index | ~~ | fault_score | 32.3301 | 0.1723 | 0.1723 | 0.1461 | 0.1461 |
| quake_freq | ~~ | quake_depth | 29.9526 | -5.7693 | -5.7693 | -0.1661 | -0.1661 |
| quake_freq | ~~ | fault_score | 67.6448 | 1.9931 | 1.9931 | 0.2223 | 0.2223 |
| quake_strength | ~~ | quake_depth | 151.6864 | 6.7467 | 6.7467 | 4.5007 | 4.5007 |
| quake_depth | ~~ | fault_score | 37.5488 | -1.4423 | -1.4423 | -0.1844 | -0.1844 |
| fault_score | ~~ | house_price | 97.4998 | 0.1378 | 0.1378 | 0.3097 | 0.3097 |
Model Adjustment
The final SEM model is defined as:
# Factors
econ =~ income + unemployment_rate + interest
demo =~ population + crime_index
quake =~ quake_freq + quake_strength + quake_depth + fault_score# Regression
house_price ~ econ + demo + quake# Covariance
income ~~ interest
unemployment_rate ~~ interest
quake_freq ~~ quake_depth
quake_freq ~~ fault_score
quake_strength ~~ quake_depth
quake_depth ~~ fault_score
Results
A significant improvement to fit measures is achieved (full results at Appendix B4), as well as passing the ANOVA test, but all still fall short of the benchmarks.
| CFI.SCALED | 0.879 |
| RMSEA.SCALED | 0.127 |
| SRMR | 0.082 |
| Df | AIC | BIC | Chisq | Chisq diff | Df diff | Pr(>Chisq) | |
|---|---|---|---|---|---|---|---|
| fit.sem.cov | 24 | 53756.66 | 53922.67 | 781.9378 | |||
| fit.sem | 30 | 54216.59 | 54350.46 | 1253.8640 | 548.3261 | 6 | 0 |
Although the final model did not meet accepted thresholds, results still give additional insights not achievable in AT2. Factor loadings and regression results below provide more evidence that the prevalence of earthquakes increases prices on average. The coefficient of the quake construct is positive in the regression on house prices, while all indicators within the quake factor loadings are also positive. In contrast to the inflationary effect here, the literature is mixed on the short-term effects to prices and AT2 showed weak evidence that large magnitude events are negative.
| Latent Factor | Indicator | B | SE | Z | Pvalue | Beta |
|---|---|---|---|---|---|---|
| econ | income | 0.2172 | 0.0074 | 29.3485 | 0 | 0.8389 |
| econ | unemployment_rate | -2.1582 | 0.0991 | -21.7737 | 0 | -0.5159 |
| econ | interest | 0.1578 | 0.0190 | 8.3145 | 0 | 0.2100 |
| demo | population | 1.2583 | 0.0718 | 17.5237 | 0 | 0.7256 |
| demo | crime_index | -0.2971 | 0.0236 | -12.5884 | 0 | -0.3354 |
| quake | quake_freq | 4.3175 | 0.2423 | 17.8219 | 0 | 0.6172 |
| quake | quake_strength | 0.8960 | 0.0412 | 21.7326 | 0 | 0.6344 |
| quake | quake_depth | 1.8988 | 0.3170 | 5.9903 | 0 | 0.2785 |
| quake | fault_score | 1.1612 | 0.0500 | 23.2212 | 0 | 0.7396 |
| Regression | Latent Factor | B | SE | Z | Pvalue | Beta |
|---|---|---|---|---|---|---|
| house_price | econ | 0.8277 | 0.1374 | 6.0226 | 0.0000 | 1.3031 |
| house_price | demo | -0.3420 | 0.1574 | -2.1734 | 0.0297 | -0.5385 |
| house_price | quake | 0.2456 | 0.0634 | 3.8760 | 0.0001 | 0.3866 |
Also surprising is that the earthquake construct exhibits more significant covariance with demographics than the economy. This presents an interesting starting point for potential multilevel SEM analysis, as literature often attributes natural disasters to have an indirect effect on the economy but not demographic factors.
| Latent Factor 1 | Latent Factor 2 | B | SE | Z | Pvalue | Beta |
|---|---|---|---|---|---|---|
| econ | demo | 0.7944 | 0.0440 | 18.0613 | 0.0000 | 0.7944 |
| econ | quake | 0.1146 | 0.0382 | 3.0034 | 0.0027 | 0.1146 |
| demo | quake | 0.4216 | 0.0468 | 9.0061 | 0.0000 | 0.4216 |
Identification of a structural model during earlier stages of a project help define superior research questions, assess project complexity and direct data collection efforts. Decisions for model inclusion in prior research without a DAG were often driven by data availability or granularity, rather than adherence to suspected causation. SEM results also require a higher hurdle to clear to achieve a “good” model but create a lot of additional insights from the data.
These findings just scratch the surface of possibilities with SEM. Models can be extended through multilevel analysis, incorporating more advanced temporal and spatial techniques, or allowing cross-loadings using EFA. Unfortunately, the complexities of this topic are quite high and results suggest further confounding variables may need to be specified, thus extrapolating the data requirements.
Perhaps a more general “disaster” construct is required rather than simply earthquakes. Forrest fires for example are extremely prevalent in California. Dillon-Merrill, et. al. (2018) also suggests other indirect variables affect the impact of disasters, finding that floods produced the most significant housing price changes due to the lack of insurance coverage. A SEM approach appears to be superior in uncovering these additional pathways.
Mutliple linear regression results from prior research.
Summary statistics:
Residual Plots:
# CFA Model
model.measure <- "econ =~ income + unemployment_rate + interest
demo =~ population + crime_index
quake =~ quake_freq + quake_strength + quake_depth + fault_score
"
fit.cfa <- cfa(model.measure, data = quake_trans, std.lv = TRUE)
# Results
summary(fit.cfa, fit.measures = TRUE, standardized = TRUE)## lavaan 0.6-7 ended normally after 47 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of free parameters 21
##
## Number of observations 1564
##
## Model Test User Model:
##
## Test statistic 871.969
## Degrees of freedom 24
## P-value (Chi-square) 0.000
##
## Model Test Baseline Model:
##
## Test statistic 3502.681
## Degrees of freedom 36
## P-value 0.000
##
## User Model versus Baseline Model:
##
## Comparative Fit Index (CFI) 0.755
## Tucker-Lewis Index (TLI) 0.633
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -26296.131
## Loglikelihood unrestricted model (H1) -25860.147
##
## Akaike (AIC) 52634.263
## Bayesian (BIC) 52746.718
## Sample-size adjusted Bayesian (BIC) 52680.006
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.150
## 90 Percent confidence interval - lower 0.142
## 90 Percent confidence interval - upper 0.159
## P-value RMSEA <= 0.05 0.000
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.100
##
## Parameter Estimates:
##
## Standard errors Standard
## Information Expected
## Information saturated (h1) model Structured
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## econ =~
## income 0.362 0.026 14.010 0.000 0.362 1.397
## unemploymnt_rt -1.288 0.136 -9.454 0.000 -1.288 -0.308
## interest 0.079 0.015 5.400 0.000 0.079 0.105
## demo =~
## population 1.335 0.067 19.802 0.000 1.335 0.770
## crime_index -0.280 0.025 -11.271 0.000 -0.280 -0.316
## quake =~
## quake_freq 2.945 0.177 16.660 0.000 2.945 0.421
## quake_strength 1.474 0.039 37.627 0.000 1.474 1.044
## quake_depth 3.933 0.176 22.290 0.000 3.933 0.577
## fault_score 0.649 0.040 16.387 0.000 0.649 0.414
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## econ ~~
## demo 0.531 0.050 10.687 0.000 0.531 0.531
## quake 0.048 0.017 2.768 0.006 0.048 0.048
## demo ~~
## quake 0.312 0.032 9.799 0.000 0.312 0.312
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .income -0.064 0.019 -3.393 0.001 -0.064 -0.952
## .unemploymnt_rt 15.841 0.611 25.924 0.000 15.841 0.905
## .interest 0.558 0.020 28.092 0.000 0.558 0.989
## .population 1.224 0.157 7.792 0.000 1.224 0.407
## .crime_index 0.706 0.026 27.046 0.000 0.706 0.900
## .quake_freq 40.258 1.472 27.347 0.000 40.258 0.823
## .quake_strength -0.178 0.091 -1.951 0.051 -0.178 -0.089
## .quake_depth 30.967 1.273 24.319 0.000 30.967 0.667
## .fault_score 2.044 0.075 27.414 0.000 2.044 0.829
## econ 1.000 1.000 1.000
## demo 1.000 1.000 1.000
## quake 1.000 1.000 1.000
# CFA Model with Covariances
model.cov <- "# Factors
econ =~ income + unemployment_rate + interest
demo =~ population + crime_index
quake =~ quake_freq + quake_strength + quake_depth + fault_score
# Covariance
income ~~ interest
unemployment_rate ~~ interest
quake_freq ~~ quake_depth
quake_freq ~~ fault_score
quake_strength ~~ quake_depth
quake_depth ~~ fault_score
"
fit.cov <- cfa(model.cov, data = quake_trans, std.lv = TRUE)
# Results
summary(fit.cov, fit.measures = TRUE, standardized = TRUE)## lavaan 0.6-7 ended normally after 143 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of free parameters 27
##
## Number of observations 1564
##
## Model Test User Model:
##
## Test statistic 411.697
## Degrees of freedom 18
## P-value (Chi-square) 0.000
##
## Model Test Baseline Model:
##
## Test statistic 3502.681
## Degrees of freedom 36
## P-value 0.000
##
## User Model versus Baseline Model:
##
## Comparative Fit Index (CFI) 0.886
## Tucker-Lewis Index (TLI) 0.773
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -26065.995
## Loglikelihood unrestricted model (H1) -25860.147
##
## Akaike (AIC) 52185.991
## Bayesian (BIC) 52330.576
## Sample-size adjusted Bayesian (BIC) 52244.803
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.118
## 90 Percent confidence interval - lower 0.108
## 90 Percent confidence interval - upper 0.128
## P-value RMSEA <= 0.05 0.000
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.068
##
## Parameter Estimates:
##
## Standard errors Standard
## Information Expected
## Information saturated (h1) model Structured
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## econ =~
## income 0.595 0.149 3.995 0.000 0.595 2.297
## unemploymnt_rt -0.788 0.224 -3.523 0.000 -0.788 -0.188
## interest 0.061 0.072 0.849 0.396 0.061 0.081
## demo =~
## population 1.381 0.070 19.749 0.000 1.381 0.797
## crime_index -0.271 0.025 -10.906 0.000 -0.271 -0.305
## quake =~
## quake_freq 3.549 0.254 13.967 0.000 3.549 0.507
## quake_strength 1.195 0.068 17.673 0.000 1.195 0.846
## quake_depth 4.021 0.501 8.023 0.000 4.021 0.590
## fault_score 0.828 0.058 14.326 0.000 0.828 0.527
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .income ~~
## .interest 0.010 0.039 0.257 0.797 0.010 0.025
## .unemployment_rate ~~
## .interest -1.392 0.103 -13.447 0.000 -1.392 -0.452
## .quake_freq ~~
## .quake_depth -6.323 1.663 -3.803 0.000 -6.323 -0.191
## .fault_score 0.823 0.364 2.262 0.024 0.823 0.102
## .quake_strength ~~
## .quake_depth 0.939 0.745 1.261 0.207 0.939 0.227
## .quake_depth ~~
## .fault_score -1.627 0.383 -4.247 0.000 -1.627 -0.222
## econ ~~
## demo 0.303 0.082 3.684 0.000 0.303 0.303
## quake 0.058 0.019 2.997 0.003 0.058 0.058
## demo ~~
## quake 0.399 0.038 10.530 0.000 0.399 0.399
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .income -0.287 0.178 -1.614 0.107 -0.287 -4.278
## .unemploymnt_rt 16.880 0.679 24.852 0.000 16.880 0.965
## .interest 0.561 0.022 25.786 0.000 0.561 0.993
## .population 1.098 0.170 6.464 0.000 1.098 0.365
## .crime_index 0.712 0.026 27.133 0.000 0.712 0.907
## .quake_freq 36.332 1.889 19.235 0.000 36.332 0.743
## .quake_strength 0.568 0.148 3.844 0.000 0.568 0.285
## .quake_depth 30.255 3.987 7.588 0.000 30.255 0.652
## .fault_score 1.780 0.097 18.275 0.000 1.780 0.722
## econ 1.000 1.000 1.000
## demo 1.000 1.000 1.000
## quake 1.000 1.000 1.000
# SEM Model
model.sem <- "# Factors
econ =~ income + unemployment_rate + interest
demo =~ population + crime_index
quake =~ quake_freq + quake_strength + quake_depth + fault_score
# Regression
house_price ~ econ + demo + quake
"
fit.sem <- sem(model.sem, data = quake_trans, estimator = "MLM", std.lv = TRUE)
# Results
summary(fit.sem, fit.measures = TRUE, standardized = TRUE)## lavaan 0.6-7 ended normally after 43 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of free parameters 25
##
## Number of observations 1564
##
## Model Test User Model:
## Standard Robust
## Test Statistic 1253.864 1081.722
## Degrees of freedom 30 30
## P-value (Chi-square) 0.000 0.000
## Scaling correction factor 1.159
## Satorra-Bentler correction
##
## Model Test Baseline Model:
##
## Test statistic 5329.283 5066.680
## Degrees of freedom 45 45
## P-value 0.000 0.000
## Scaling correction factor 1.052
##
## User Model versus Baseline Model:
##
## Comparative Fit Index (CFI) 0.768 0.791
## Tucker-Lewis Index (TLI) 0.653 0.686
##
## Robust Comparative Fit Index (CFI) 0.769
## Robust Tucker-Lewis Index (TLI) 0.654
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -27083.295 -27083.295
## Loglikelihood unrestricted model (H1) -26456.363 -26456.363
##
## Akaike (AIC) 54216.590 54216.590
## Bayesian (BIC) 54350.465 54350.465
## Sample-size adjusted Bayesian (BIC) 54271.045 54271.045
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.162 0.150
## 90 Percent confidence interval - lower 0.154 0.143
## 90 Percent confidence interval - upper 0.169 0.157
## P-value RMSEA <= 0.05 0.000 0.000
##
## Robust RMSEA 0.161
## 90 Percent confidence interval - lower 0.153
## 90 Percent confidence interval - upper 0.169
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.099 0.099
##
## Parameter Estimates:
##
## Standard errors Robust.sem
## Information Expected
## Information saturated (h1) model Structured
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## econ =~
## income 0.233 0.008 31.010 0.000 0.233 0.899
## unemploymnt_rt -2.099 0.092 -22.894 0.000 -2.099 -0.502
## interest 0.201 0.019 10.497 0.000 0.201 0.268
## demo =~
## population 1.205 0.066 18.292 0.000 1.205 0.695
## crime_index -0.310 0.024 -12.931 0.000 -0.310 -0.350
## quake =~
## quake_freq 3.022 0.160 18.909 0.000 3.022 0.432
## quake_strength 1.439 0.041 34.869 0.000 1.439 1.018
## quake_depth 4.017 0.105 38.225 0.000 4.017 0.589
## fault_score 0.668 0.040 16.729 0.000 0.668 0.425
##
## Regressions:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## house_price ~
## econ 0.614 0.075 8.225 0.000 0.614 0.967
## demo -0.089 0.082 -1.079 0.280 -0.089 -0.140
## quake 0.084 0.027 3.157 0.002 0.084 0.133
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## econ ~~
## demo 0.803 0.043 18.870 0.000 0.803 0.803
## quake 0.058 0.026 2.239 0.025 0.058 0.058
## demo ~~
## quake 0.349 0.038 9.179 0.000 0.349 0.349
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .income 0.013 0.002 6.814 0.000 0.013 0.191
## .unemploymnt_rt 13.095 1.047 12.501 0.000 13.095 0.748
## .interest 0.524 0.021 25.424 0.000 0.524 0.928
## .population 1.553 0.155 10.037 0.000 1.553 0.517
## .crime_index 0.689 0.059 11.726 0.000 0.689 0.877
## .quake_freq 39.793 10.304 3.862 0.000 39.793 0.813
## .quake_strength -0.074 0.118 -0.627 0.531 -0.074 -0.037
## .quake_depth 30.300 5.055 5.994 0.000 30.300 0.653
## .fault_score 2.020 0.066 30.541 0.000 2.020 0.819
## .house_price 0.098 0.012 7.968 0.000 0.098 0.243
## econ 1.000 1.000 1.000
## demo 1.000 1.000 1.000
## quake 1.000 1.000 1.000
# SEM Model with Covariances
model.sem.cov <- "# Factors
econ =~ income + unemployment_rate + interest
demo =~ population + crime_index
quake =~ quake_freq + quake_strength + quake_depth + fault_score
# Regression
house_price ~ econ + demo + quake
# Covariance
income ~~ interest
unemployment_rate ~~ interest
quake_freq ~~ quake_depth
quake_freq ~~ fault_score
quake_strength ~~ quake_depth
quake_depth ~~ fault_score
"
fit.sem.cov <- sem(model.sem.cov, data = quake_trans, estimator = "MLM", std.lv = TRUE)
# Results
summary(fit.sem.cov, fit.measures = TRUE, standardized = TRUE)## lavaan 0.6-7 ended normally after 82 iterations
##
## Estimator ML
## Optimization method NLMINB
## Number of free parameters 31
##
## Number of observations 1564
##
## Model Test User Model:
## Standard Robust
## Test Statistic 781.938 633.787
## Degrees of freedom 24 24
## P-value (Chi-square) 0.000 0.000
## Scaling correction factor 1.234
## Satorra-Bentler correction
##
## Model Test Baseline Model:
##
## Test statistic 5329.283 5066.680
## Degrees of freedom 45 45
## P-value 0.000 0.000
## Scaling correction factor 1.052
##
## User Model versus Baseline Model:
##
## Comparative Fit Index (CFI) 0.857 0.879
## Tucker-Lewis Index (TLI) 0.731 0.772
##
## Robust Comparative Fit Index (CFI) 0.858
## Robust Tucker-Lewis Index (TLI) 0.733
##
## Loglikelihood and Information Criteria:
##
## Loglikelihood user model (H0) -26847.332 -26847.332
## Loglikelihood unrestricted model (H1) -26456.363 -26456.363
##
## Akaike (AIC) 53756.663 53756.663
## Bayesian (BIC) 53922.668 53922.668
## Sample-size adjusted Bayesian (BIC) 53824.188 53824.188
##
## Root Mean Square Error of Approximation:
##
## RMSEA 0.142 0.127
## 90 Percent confidence interval - lower 0.134 0.120
## 90 Percent confidence interval - upper 0.151 0.135
## P-value RMSEA <= 0.05 0.000 0.000
##
## Robust RMSEA 0.142
## 90 Percent confidence interval - lower 0.132
## 90 Percent confidence interval - upper 0.151
##
## Standardized Root Mean Square Residual:
##
## SRMR 0.082 0.082
##
## Parameter Estimates:
##
## Standard errors Robust.sem
## Information Expected
## Information saturated (h1) model Structured
##
## Latent Variables:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## econ =~
## income 0.217 0.007 29.349 0.000 0.217 0.839
## unemploymnt_rt -2.158 0.099 -21.774 0.000 -2.158 -0.516
## interest 0.158 0.019 8.315 0.000 0.158 0.210
## demo =~
## population 1.258 0.072 17.524 0.000 1.258 0.726
## crime_index -0.297 0.024 -12.588 0.000 -0.297 -0.335
## quake =~
## quake_freq 4.317 0.242 17.822 0.000 4.317 0.617
## quake_strength 0.896 0.041 21.733 0.000 0.896 0.634
## quake_depth 1.899 0.317 5.990 0.000 1.899 0.278
## fault_score 1.161 0.050 23.221 0.000 1.161 0.740
##
## Regressions:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## house_price ~
## econ 0.828 0.137 6.023 0.000 0.828 1.303
## demo -0.342 0.157 -2.173 0.030 -0.342 -0.538
## quake 0.246 0.063 3.876 0.000 0.246 0.387
##
## Covariances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .income ~~
## .interest 0.012 0.003 4.382 0.000 0.012 0.116
## .unemployment_rate ~~
## .interest -1.099 0.058 -18.989 0.000 -1.099 -0.418
## .quake_freq ~~
## .quake_depth -1.709 1.101 -1.552 0.121 -1.709 -0.047
## .fault_score -1.252 0.377 -3.321 0.001 -1.252 -0.215
## .quake_strength ~~
## .quake_depth 4.053 0.407 9.957 0.000 4.053 0.567
## .quake_depth ~~
## .fault_score -0.287 0.222 -1.289 0.197 -0.287 -0.041
## econ ~~
## demo 0.794 0.044 18.061 0.000 0.794 0.794
## quake 0.115 0.038 3.003 0.003 0.115 0.115
## demo ~~
## quake 0.422 0.047 9.006 0.000 0.422 0.422
##
## Variances:
## Estimate Std.Err z-value P(>|z|) Std.lv Std.all
## .income 0.020 0.002 11.151 0.000 0.020 0.296
## .unemploymnt_rt 12.843 0.999 12.853 0.000 12.843 0.734
## .interest 0.540 0.021 25.729 0.000 0.540 0.956
## .population 1.424 0.176 8.088 0.000 1.424 0.473
## .crime_index 0.697 0.060 11.691 0.000 0.697 0.888
## .quake_freq 30.287 9.988 3.032 0.002 30.287 0.619
## .quake_strength 1.192 0.072 16.590 0.000 1.192 0.598
## .quake_depth 42.890 5.755 7.453 0.000 42.890 0.922
## .fault_score 1.117 0.098 11.344 0.000 1.117 0.453
## .house_price 0.015 0.026 0.589 0.556 0.015 0.037
## econ 1.000 1.000 1.000
## demo 1.000 1.000 1.000
## quake 1.000 1.000 1.000