####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==