####Check the current working directory to confirm the location of
the dataset files.
getwd()
[1] "C:/Users/p1044411/Downloads"
####Load the incidents dataset and inspect its structure to
understand variable types and dimensions.
regression1<-read.csv("incidents.csv",header=T,sep = ",")
str(regression1)
'data.frame': 16 obs. of 4 variables:
$ area : chr "Boulder" "California-lexington" "Huntsville" "Seattle" ...
$ zone : chr "west" "east" "east" "west" ...
$ population: chr "107,353" "326,534" "444,752" "750,000" ...
$ incidents : int 605 103 161 1703 1003 527 721 704 105 403 ...
####Generate summary statistics to explore distributions and identify
potential data issues.
####Ensure that all required packages are installed for analysis and
visualization.
####Convert the population variable from a comma-formatted string to
a numeric variable for modeling.
####Remove the first column (likely an identifier) to create a
cleaner dataset for regression analysis.
####Fit a simple linear regression model to examine the relationship
between incidents and population.
reg.fit1<-lm(regression2$incidents~regression2$population)
summary(reg.fit1)
####Fit a multiple linear regression including both zone and
population to control for regional differences.
reg.fit2<-lm(incidents~zone+population,data=regression2)
summary(reg.fit2)
####Recode the zone variable as a binary indicator and create an
interaction term to test whether the effect of population differs by
zone.
regression2$zone<-ifelse(regression2$zone=="west",1,0)
interaction<-regression2$zone*regression2$population
reg.fit3<-lm(regression2$incidents~interaction+regression2$population+regression2$zone)
summary(reg.fit3)
####Fit a linear model including main effects and the interaction
term to evaluate moderation effects.
reg.fit4<-lm(regression2$incidents~interaction)
summary(reg.fit4)
####Fit a simplified linear model using only the interaction term for
comparison purposes.
# Running the Poisson GLM
model_glm <- glm(incidents ~ zone + offset(log(population)),
data = regression2,
family = poisson(link = "log"))
# Check the results
summary(model_glm)
####Run a Poisson Generalized Linear Model (GLM) for count data,
using an offset to model incident rates per population.
model_simple_glm <- glm(incidents ~ zone, data = regression2, family = poisson)
summary(model_simple_glm)
####Fit a simpler Poisson model without the offset to compare results
with the rate-based model.
model_int_glm <- glm(incidents ~ zone * population + offset(log(population)),
data = regression2,
family = poisson)
summary(model_int_glm)
####Fit a Poisson model including an interaction term to evaluate
whether population effects differ by zone.
# Calculate McFadden's Pseudo-R2
pseudo_r2 <- 1 - (model_int_glm$deviance / model_int_glm$null.deviance)
print(pseudo_r2)
####Calculate McFadden’s pseudo R² to assess model improvement
relative to the null model.
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KIyMjI0NoZWNrIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHRvIGNvbmZpcm0gdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXRhc2V0IGZpbGVzLg0KYGBge3J9DQpnZXR3ZCgpDQpgYGANCg0KIyMjI0xvYWQgdGhlIGluY2lkZW50cyBkYXRhc2V0IGFuZCBpbnNwZWN0IGl0cyBzdHJ1Y3R1cmUgdG8gdW5kZXJzdGFuZCB2YXJpYWJsZSB0eXBlcyBhbmQgZGltZW5zaW9ucy4NCmBgYHtyfQ0KcmVncmVzc2lvbjE8LXJlYWQuY3N2KCJpbmNpZGVudHMuY3N2IixoZWFkZXI9VCxzZXAgPSAiLCIpDQpzdHIocmVncmVzc2lvbjEpDQpgYGANCg0KIyMjI0dlbmVyYXRlIHN1bW1hcnkgc3RhdGlzdGljcyB0byBleHBsb3JlIGRpc3RyaWJ1dGlvbnMgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBkYXRhIGlzc3Vlcy4NCmBgYHtyfQ0Kc3VtbWFyeShyZWdyZXNzaW9uMSkNCmBgYA0KDQojIyMjRW5zdXJlIHRoYXQgYWxsIHJlcXVpcmVkIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQgZm9yIGFuYWx5c2lzIGFuZCB2aXN1YWxpemF0aW9uLg0KYGBge3J9DQojIG1ha2Ugc3VyZSB0aGUgcGFja2FnZXMgZm9yIHRoaXMgY2hhcHRlcg0KIyBhcmUgaW5zdGFsbGVkLCBpbnN0YWxsIGlmIG5lY2Vzc2FyeQ0KcGtnIDwtIGMoImdncGxvdDIiLCAic2NhbGVzIiwgIm1hcHRvb2xzIiwNCiAgICAgICAgICAgICAgInNwIiwgIm1hcHMiLCAiZ3JpZCIsICJjYXIiICkNCm5ldy5wa2cgPC0gcGtnWyEocGtnICVpbiUgaW5zdGFsbGVkLnBhY2thZ2VzKCkpXQ0KaWYgKGxlbmd0aChuZXcucGtnKSkgew0KICBpbnN0YWxsLnBhY2thZ2VzKG5ldy5wa2cpICANCn0NCmBgYA0KDQojIyMjQ29udmVydCB0aGUgcG9wdWxhdGlvbiB2YXJpYWJsZSBmcm9tIGEgY29tbWEtZm9ybWF0dGVkIHN0cmluZyB0byBhIG51bWVyaWMgdmFyaWFibGUgZm9yIG1vZGVsaW5nLg0KYGBge3J9DQpyZWdyZXNzaW9uMSRwb3B1bGF0aW9uIDwtIGFzLm51bWVyaWMoZ3N1YigiLCIsIiIscmVncmVzc2lvbjEkcG9wdWxhdGlvbikpDQpyZWdyZXNzaW9uMSRwb3B1bGF0aW9uDQpgYGANCg0KIyMjI1JlbW92ZSB0aGUgZmlyc3QgY29sdW1uIChsaWtlbHkgYW4gaWRlbnRpZmllcikgdG8gY3JlYXRlIGEgY2xlYW5lciBkYXRhc2V0IGZvciByZWdyZXNzaW9uIGFuYWx5c2lzLg0KYGBge3J9DQpyZWdyZXNzaW9uMjwtcmVncmVzc2lvbjFbLC0xXQ0KDQpoZWFkKHJlZ3Jlc3Npb24yKQ0KYGBgDQoNCiMjIyNGaXQgYSBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgdG8gZXhhbWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gaW5jaWRlbnRzIGFuZCBwb3B1bGF0aW9uLg0KYGBge3J9DQpyZWcuZml0MTwtbG0ocmVncmVzc2lvbjIkaW5jaWRlbnRzfnJlZ3Jlc3Npb24yJHBvcHVsYXRpb24pDQpzdW1tYXJ5KHJlZy5maXQxKQ0KYGBgDQoNCiMjIyNGaXQgYSBtdWx0aXBsZSBsaW5lYXIgcmVncmVzc2lvbiBpbmNsdWRpbmcgYm90aCB6b25lIGFuZCBwb3B1bGF0aW9uIHRvIGNvbnRyb2wgZm9yIHJlZ2lvbmFsIGRpZmZlcmVuY2VzLg0KYGBge3J9DQpyZWcuZml0MjwtbG0oaW5jaWRlbnRzfnpvbmUrcG9wdWxhdGlvbixkYXRhPXJlZ3Jlc3Npb24yKQ0Kc3VtbWFyeShyZWcuZml0MikNCmBgYA0KDQojIyMjUmVjb2RlIHRoZSB6b25lIHZhcmlhYmxlIGFzIGEgYmluYXJ5IGluZGljYXRvciBhbmQgY3JlYXRlIGFuIGludGVyYWN0aW9uIHRlcm0gdG8gdGVzdCB3aGV0aGVyIHRoZSBlZmZlY3Qgb2YgcG9wdWxhdGlvbiBkaWZmZXJzIGJ5IHpvbmUuDQpgYGB7cn0NCnJlZ3Jlc3Npb24yJHpvbmU8LWlmZWxzZShyZWdyZXNzaW9uMiR6b25lPT0id2VzdCIsMSwwKQ0KDQppbnRlcmFjdGlvbjwtcmVncmVzc2lvbjIkem9uZSpyZWdyZXNzaW9uMiRwb3B1bGF0aW9uDQoNCnJlZy5maXQzPC1sbShyZWdyZXNzaW9uMiRpbmNpZGVudHN+aW50ZXJhY3Rpb24rcmVncmVzc2lvbjIkcG9wdWxhdGlvbityZWdyZXNzaW9uMiR6b25lKQ0Kc3VtbWFyeShyZWcuZml0MykNCmBgYA0KDQojIyMjRml0IGEgbGluZWFyIG1vZGVsIGluY2x1ZGluZyBtYWluIGVmZmVjdHMgYW5kIHRoZSBpbnRlcmFjdGlvbiB0ZXJtIHRvIGV2YWx1YXRlIG1vZGVyYXRpb24gZWZmZWN0cy4NCmBgYHtyfQ0KcmVnLmZpdDQ8LWxtKHJlZ3Jlc3Npb24yJGluY2lkZW50c35pbnRlcmFjdGlvbikNCnN1bW1hcnkocmVnLmZpdDQpDQpgYGANCg0KIyMjI0ZpdCBhIHNpbXBsaWZpZWQgbGluZWFyIG1vZGVsIHVzaW5nIG9ubHkgdGhlIGludGVyYWN0aW9uIHRlcm0gZm9yIGNvbXBhcmlzb24gcHVycG9zZXMuDQpgYGB7cn0NCiMgUnVubmluZyB0aGUgUG9pc3NvbiBHTE0NCm1vZGVsX2dsbSA8LSBnbG0oaW5jaWRlbnRzIH4gem9uZSArIG9mZnNldChsb2cocG9wdWxhdGlvbikpLCANCiAgICAgICAgICAgICAgICAgZGF0YSA9IHJlZ3Jlc3Npb24yLCANCiAgICAgICAgICAgICAgICAgZmFtaWx5ID0gcG9pc3NvbihsaW5rID0gImxvZyIpKQ0KDQojIENoZWNrIHRoZSByZXN1bHRzDQpzdW1tYXJ5KG1vZGVsX2dsbSkNCmBgYA0KDQojIyMjUnVuIGEgUG9pc3NvbiBHZW5lcmFsaXplZCBMaW5lYXIgTW9kZWwgKEdMTSkgZm9yIGNvdW50IGRhdGEsIHVzaW5nIGFuIG9mZnNldCB0byBtb2RlbCBpbmNpZGVudCByYXRlcyBwZXIgcG9wdWxhdGlvbi4NCmBgYHtyfQ0KbW9kZWxfc2ltcGxlX2dsbSA8LSBnbG0oaW5jaWRlbnRzIH4gem9uZSwgZGF0YSA9IHJlZ3Jlc3Npb24yLCBmYW1pbHkgPSBwb2lzc29uKQ0Kc3VtbWFyeShtb2RlbF9zaW1wbGVfZ2xtKQ0KYGBgDQoNCiMjIyNGaXQgYSBzaW1wbGVyIFBvaXNzb24gbW9kZWwgd2l0aG91dCB0aGUgb2Zmc2V0IHRvIGNvbXBhcmUgcmVzdWx0cyB3aXRoIHRoZSByYXRlLWJhc2VkIG1vZGVsLg0KYGBge3J9DQptb2RlbF9pbnRfZ2xtIDwtIGdsbShpbmNpZGVudHMgfiB6b25lICogcG9wdWxhdGlvbiArIG9mZnNldChsb2cocG9wdWxhdGlvbikpLCANCiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSByZWdyZXNzaW9uMiwgDQogICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBwb2lzc29uKQ0Kc3VtbWFyeShtb2RlbF9pbnRfZ2xtKQ0KYGBgDQoNCiMjIyNGaXQgYSBQb2lzc29uIG1vZGVsIGluY2x1ZGluZyBhbiBpbnRlcmFjdGlvbiB0ZXJtIHRvIGV2YWx1YXRlIHdoZXRoZXIgcG9wdWxhdGlvbiBlZmZlY3RzIGRpZmZlciBieSB6b25lLg0KYGBge3J9DQojIENhbGN1bGF0ZSBNY0ZhZGRlbidzIFBzZXVkby1SMg0KcHNldWRvX3IyIDwtIDEgLSAobW9kZWxfaW50X2dsbSRkZXZpYW5jZSAvIG1vZGVsX2ludF9nbG0kbnVsbC5kZXZpYW5jZSkNCnByaW50KHBzZXVkb19yMikNCmBgYA0KDQojIyMjQ2FsY3VsYXRlIE1jRmFkZGVu4oCZcyBwc2V1ZG8gUsKyIHRvIGFzc2VzcyBtb2RlbCBpbXByb3ZlbWVudCByZWxhdGl2ZSB0byB0aGUgbnVsbCBtb2RlbC4NCmBgYHtyfQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KYGBgDQoNCg==