library(haven)
library(foreign)
library(readr)
library(dplyr)
library(ggplot2)
library(broom)
library(car)
library(MASS)
library(lmtest)
library(zoo)
library(nortest)
library(plotrix)
library(scales)
library(tableone)
library(Weighted.Desc.Stat)
library(mitools)
library(survey)
library(VGAM)
library(stargazer)
library(sandwich)
library(pastecs)
library(muhaz)
library(ggpubr)
library(survminer)
library(eha)
library(reshape2)
library(data.table)
library(magrittr)
library(tidyverse)
library(sjmisc)
library(sjPlot)
library(sjmisc)
library(sjlabelled)
library(weights)
library(GGally)
library(tigris)
library(RColorBrewer)
library(patchwork)
library(tidycensus)
library(censusapi)
library(spdep)
library(classInt)
library(sf)
library(spatialreg)
arf<-read_sas("C://Users//Jaire//OneDrive//Desktop//Spatial Demography//Data//ahrf2019.sas7bdat")
# Outcome/offset - suicides (2015-2017)
# Denominator - total deaths (2015-2017)
# Predictors:
# number of mental health facilities
# number of long-term psychiatric hospitals
# number of short-term psychiatric hospitals
# number of VA hospital admissions
set.seed(123)
drop_na(arf)
arf$cofips=arf$f00002
arf$coname=arf$f00010
arf$state = arf$f00008
arf$deaths1517=arf$f1194115
arf$deaths0810=arf$f1194108
arf$suicide1517=arf$f1316615
arf$suicide0810=arf$f1316608
arf$mentfac10=arf$f1322110
arf$psychlt=arf$f1067817
arf$psychst=arf$f1318517
arf$vaadm=arf$f0892017
scale(arf$mentfac10)
scale(arf$psychst)
scale(arf$psychlt)
scale(arf$vaadm)
options(tigris_class="sf")
usco<-counties(cb=T, year=2010)
usco$cofips<-substr(usco$GEO_ID, 10, 15)
sts<-states(cb = T, year=2010)
sts<-st_boundary(sts)
arf.g<-geo_join(usco, arf, by_sp="cofips", by_df="cofips",how="left" )
## Warning: We recommend using the dplyr::*_join() family of functions instead.
## Warning: `group_by_()` was deprecated in dplyr 0.7.0.
## Please use `group_by()` instead.
## See vignette('programming') for more help
arf.use<-filter(arf.g, is.na(suicide1517)==F)
fit_pois<- glm(suicide1517 ~ offset(log(deaths1517))+mentfac10+psychst+psychlt+vaadm,
family=poisson,
data=arf.use)
summary(fit_pois)
##
## Call:
## glm(formula = suicide1517 ~ offset(log(deaths1517)) + mentfac10 +
## psychst + psychlt + vaadm, family = poisson, data = arf.use)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -8.4179 -0.8057 0.2048 1.0687 10.5588
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -4.056e+00 6.374e-03 -636.424 < 2e-16 ***
## mentfac10 -2.989e-03 7.747e-04 -3.859 0.000114 ***
## psychst 2.414e-02 2.943e-03 8.202 2.36e-16 ***
## psychlt -1.075e-01 1.251e-02 -8.597 < 2e-16 ***
## vaadm -1.382e-05 1.363e-06 -10.142 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 3602.6 on 928 degrees of freedom
## Residual deviance: 3374.5 on 924 degrees of freedom
## AIC: 8154.2
##
## Number of Fisher Scoring iterations: 4
scale<-sqrt(fit_pois$deviance/fit_pois$df.residual)
scale
## [1] 1.911023
exp(coef(fit_pois))
## (Intercept) mentfac10 psychst psychlt vaadm
## 0.01731308 0.99701520 1.02443047 0.89804966 0.99998618
The model shows that an increase in the number of mental health facilities in an area is associated with .003% decrease in the mean number of suicides (p<0.05). An increase in the number of short term psychiatric facilities in an area is associated with an 2.4% increase in the mean number of suicides (p<0.05). An increase in the number of long term psychiatric facilities in an area is associated with an 11% decrease in the mean number of suicides (p<0.05). An increase in the number of admissions to VA hospitals in an area is associated with an .00002% decrease in the mean number of suicides (p<0.05). Over-dispersion is present.
nbs<-knearneigh(coordinates(as(arf.use, "Spatial")), k = 4, longlat = T)
nbs<-knn2nb(nbs, sym = T)
us.wt4<-nb2listw(nbs, style="W", zero.policy = TRUE)
length(nbs)
## [1] 929
can.be.simmed(us.wt4)
## [1] TRUE
length(us.wt4)
## [1] 3
lm.morantest(fit_pois, listw = us.wt4, zero.policy = TRUE)
##
## Global Moran I for regression residuals
##
## data:
## model: glm(formula = suicide1517 ~ offset(log(deaths1517)) + mentfac10
## + psychst + psychlt + vaadm, family = poisson, data = arf.use)
## weights: us.wt4
##
## Moran I statistic standard deviate = 25.882, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Observed Moran I Expectation Variance
## 5.472563e-01 -3.278262e-05 4.471312e-04
There is moderate positive autocorrelation among residuals.
# nb model
fit_nb<-glm.nb(suicide1517 ~ offset(log(deaths1517))+mentfac10+psychlt+psychst+vaadm,
data=arf.use)
summary(fit_nb)
##
## Call:
## glm.nb(formula = suicide1517 ~ offset(log(deaths1517)) + mentfac10 +
## psychlt + psychst + vaadm, data = arf.use, init.theta = 17.214375,
## link = log)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.9671 -0.6635 -0.0325 0.5086 3.8584
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.994e+00 1.196e-02 -333.951 < 2e-16 ***
## mentfac10 -5.466e-03 3.031e-03 -1.804 0.0713 .
## psychlt -1.145e-01 2.825e-02 -4.053 5.06e-05 ***
## psychst 9.630e-03 1.016e-02 0.948 0.3433
## vaadm -1.033e-05 4.049e-06 -2.552 0.0107 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for Negative Binomial(17.2144) family taken to be 1)
##
## Null deviance: 903.26 on 928 degrees of freedom
## Residual deviance: 871.72 on 924 degrees of freedom
## AIC: 6594.8
##
## Number of Fisher Scoring iterations: 1
##
##
## Theta: 17.21
## Std. Err.: 1.19
##
## 2 x log-likelihood: -6582.77
fit_nb$theta
## [1] 17.21438
me.fit<-ME(suicide1517 ~ offset(log(deaths1517))+mentfac10+psychlt+psychst+vaadm,
data=arf.use,
family=negative.binomial(17.21438),
listw = us.wt4,
verbose=T,
alpha=.05)
## eV[,2], I: 0.3085447 ZI: NA, pr(ZI): 0.01
## eV[,34], I: 0.2824097 ZI: NA, pr(ZI): 0.01
## eV[,13], I: 0.2555259 ZI: NA, pr(ZI): 0.01
## eV[,18], I: 0.2313331 ZI: NA, pr(ZI): 0.01
## eV[,9], I: 0.2164284 ZI: NA, pr(ZI): 0.01
## eV[,10], I: 0.1848292 ZI: NA, pr(ZI): 0.01
## eV[,3], I: 0.1619137 ZI: NA, pr(ZI): 0.01
## eV[,90], I: 0.1418652 ZI: NA, pr(ZI): 0.01
## eV[,93], I: 0.1290831 ZI: NA, pr(ZI): 0.01
## eV[,55], I: 0.1161711 ZI: NA, pr(ZI): 0.01
## eV[,63], I: 0.1035144 ZI: NA, pr(ZI): 0.01
## eV[,24], I: 0.09463813 ZI: NA, pr(ZI): 0.01
## eV[,807], I: 0.08673058 ZI: NA, pr(ZI): 0.01
## eV[,1], I: 0.07940913 ZI: NA, pr(ZI): 0.01
## eV[,25], I: 0.07290248 ZI: NA, pr(ZI): 0.01
## eV[,65], I: 0.06647661 ZI: NA, pr(ZI): 0.01
## eV[,426], I: 0.06065521 ZI: NA, pr(ZI): 0.01
## eV[,8], I: 0.0543628 ZI: NA, pr(ZI): 0.03
## eV[,140], I: 0.04758679 ZI: NA, pr(ZI): 0.02
## eV[,618], I: 0.04095998 ZI: NA, pr(ZI): 0.07
me.fit
## Eigenvector ZI pr(ZI)
## 0 NA NA 0.01
## 1 2 NA 0.01
## 2 34 NA 0.01
## 3 13 NA 0.01
## 4 18 NA 0.01
## 5 9 NA 0.01
## 6 10 NA 0.01
## 7 3 NA 0.01
## 8 90 NA 0.01
## 9 93 NA 0.01
## 10 55 NA 0.01
## 11 63 NA 0.01
## 12 24 NA 0.01
## 13 807 NA 0.01
## 14 1 NA 0.01
## 15 25 NA 0.01
## 16 65 NA 0.01
## 17 426 NA 0.01
## 18 8 NA 0.03
## 19 140 NA 0.02
## 20 618 NA 0.07
fits<-data.frame(fitted(me.fit))
arf.use$me1<-fits$vec1
arf.use$me13<-fits$vec13
clean.nb<-glm.nb(suicide1517 ~ offset(log(deaths1517)) + mentfac10 +psychlt+psychst+vaadm+fitted(me.fit), arf.use)
summary(clean.nb)
##
## Call:
## glm.nb(formula = suicide1517 ~ offset(log(deaths1517)) + mentfac10 +
## psychlt + psychst + vaadm + fitted(me.fit), data = arf.use,
## init.theta = 63.76636108, link = log)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -4.3386 -0.5681 0.0034 0.6201 3.3779
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -4.024e+00 8.764e-03 -459.118 < 2e-16 ***
## mentfac10 -4.441e-03 1.773e-03 -2.505 0.012243 *
## psychlt -4.241e-02 1.941e-02 -2.185 0.028911 *
## psychst 1.346e-02 6.431e-03 2.093 0.036343 *
## vaadm -1.098e-05 2.593e-06 -4.234 2.30e-05 ***
## fitted(me.fit)vec2 4.865e+00 2.186e-01 22.256 < 2e-16 ***
## fitted(me.fit)vec34 5.403e-01 1.990e-01 2.715 0.006632 **
## fitted(me.fit)vec13 -1.677e+00 2.316e-01 -7.244 4.37e-13 ***
## fitted(me.fit)vec18 -1.198e+00 2.228e-01 -5.376 7.62e-08 ***
## fitted(me.fit)vec9 7.850e-01 2.121e-01 3.701 0.000215 ***
## fitted(me.fit)vec10 -2.679e+00 2.165e-01 -12.375 < 2e-16 ***
## fitted(me.fit)vec3 1.431e+00 2.338e-01 6.122 9.22e-10 ***
## fitted(me.fit)vec90 6.179e-01 1.977e-01 3.125 0.001780 **
## fitted(me.fit)vec93 2.360e-01 2.065e-01 1.143 0.253182
## fitted(me.fit)vec55 -9.074e-01 2.280e-01 -3.980 6.89e-05 ***
## fitted(me.fit)vec63 -9.369e-01 2.192e-01 -4.275 1.92e-05 ***
## fitted(me.fit)vec24 -5.864e-01 2.163e-01 -2.711 0.006712 **
## fitted(me.fit)vec807 -2.346e-01 2.087e-01 -1.124 0.260847
## fitted(me.fit)vec1 7.695e-01 2.122e-01 3.627 0.000287 ***
## fitted(me.fit)vec25 -6.729e-01 2.163e-01 -3.112 0.001861 **
## fitted(me.fit)vec65 5.276e-01 2.237e-01 2.359 0.018346 *
## fitted(me.fit)vec426 2.674e-01 2.222e-01 1.203 0.228945
## fitted(me.fit)vec8 -7.748e-01 2.248e-01 -3.447 0.000568 ***
## fitted(me.fit)vec140 -2.949e-01 2.021e-01 -1.459 0.144621
## fitted(me.fit)vec618 1.565e-01 1.970e-01 0.794 0.427081
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for Negative Binomial(63.7664) family taken to be 1)
##
## Null deviance: 1793.31 on 928 degrees of freedom
## Residual deviance: 824.78 on 904 degrees of freedom
## AIC: 6037.9
##
## Number of Fisher Scoring iterations: 1
##
##
## Theta: 63.77
## Std. Err.: 7.53
##
## 2 x log-likelihood: -5985.867
lm.morantest(fit_nb, listw=us.wt4)
##
## Global Moran I for regression residuals
##
## data:
## model: glm.nb(formula = suicide1517 ~ offset(log(deaths1517)) +
## mentfac10 + psychlt + psychst + vaadm, data = arf.use, init.theta =
## 17.214375, link = log)
## weights: us.wt4
##
## Moran I statistic standard deviate = 27.351, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Observed Moran I Expectation Variance
## 0.5778601597 -0.0001166645 0.0004465395
lm.morantest(clean.nb, listw=us.wt4)
##
## Global Moran I for regression residuals
##
## data:
## model: glm.nb(formula = suicide1517 ~ offset(log(deaths1517)) +
## mentfac10 + psychlt + psychst + vaadm + fitted(me.fit), data = arf.use,
## init.theta = 63.76636108, link = log)
## weights: us.wt4
##
## Moran I statistic standard deviate = 9.274, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Observed Moran I Expectation Variance
## 0.1988180487 -0.0008419133 0.0004634955
The filtering approach filtered out a large amount of spatial autocorrelation in the negative binomial model.