---
title: "GLM"
author: "Nagy Balázs Gábor"
date: "`r Sys.Date()`"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## TSM beadandó GLM része

Ebben a dokumentumban egy autóvezetők adatait tartalmazó adatbázison belül a 
gyorshajtások számát fogom a többi változó segítségével magyarázni.
Mivel a gyorshajtások száma valószínűleg egy Poisson eloszlást (vagy ahhoz hasonlót)
követ, ezért GLM-et használok.

Adat forrása: https://www.kaggle.com/datasets/sagnik1511/car-insurance-data

## Adatok beolvasása, átalakítása
```{r}
df <- read.csv("~/Car_Insurance_Claim.csv")
# változók faktorizációja
fact_cols <- c("AGE","GENDER","RACE","DRIVING_EXPERIENCE","EDUCATION",
							 "INCOME","VEHICLE_OWNERSHIP","VEHICLE_YEAR","MARRIED","CHILDREN",
							 "POSTAL_CODE","VEHICLE_TYPE")
df[, fact_cols] <- lapply(df[, fact_cols], as.factor)
# felesleges változók kiszűrése
df <- df[,!(colnames(df) %in% c("ID","DUIS","PAST_ACCIDENTS","OUTCOME",
																"DRIVING_EXPERIENCE"))]

# életkor faktort az adott életkorintervallum közepével helyettesítjük,
# 65+-ra 70-et választottam. Ez azért kell, hogy lehessen offsetet alkalmazni.
df$AGE <- c(20,33,52,70)[(df$AGE |> as.numeric())]
```

## Gyorshajtások száma

Ahogyan láthatjuk, az emberek nagyrésze nem gyorshajt, azonban vannak olyanok
akik több, mint 20-szor is gyorshajtottak.
```{r, echo=FALSE}
hist(df$SPEEDING_VIOLATIONS, breaks = length(unique(df$SPEEDING_VIOLATIONS)))
```

## Modellek
A gyorsulások számát gamma, poisson és negatív binomiális GLM modellekkel
fogom elemezni, majd ezeket kiértékelem, és kiválasztom a legjobbat,
ami alapján elemzem az eredményt.
```{r}
library(glmnet)
library(fastDummies)
library(MASS)
library(statmod)

m.nb   <- glm.nb(SPEEDING_VIOLATIONS ~ . - AGE + offset(log(AGE)) - ANNUAL_MILEAGE + log(ANNUAL_MILEAGE), link = "log", data = df)
m.po   <- glm(SPEEDING_VIOLATIONS ~ . -AGE + offset(log(AGE))- ANNUAL_MILEAGE + log(ANNUAL_MILEAGE), family = poisson(), data = df)
m.ga   <- glm(I(SPEEDING_VIOLATIONS+0.01) ~ . -AGE + offset(log(AGE))- ANNUAL_MILEAGE + log(ANNUAL_MILEAGE), family = Gamma(link = "log") , data = df)

matrix(c(m.nb$aic,m.po$aic,m.ga$aic), dimnames = list(c("Neg.Binom","Poisson","Gamma")))
```
AIC alapján a gamma modell a legjobb, azonban még a maradéktagokat elsőnek meg kell
nézni, hogy az eloszlásuk megfelelő-e.
```{r}
plot(density(qresid(m.ga)),  col='blue')
lines(density(qresid(m.po)), col='red')
lines(density(qresid(m.nb)), col='green')

```

Az ábrán a kék a gamma, zöld a negatív binomiális és a piros a poisson.

Itt az eloszlásnak normálishoz hasonlónak kell lennie, nem olyannak mint a gamma
(kék) eloszlás, így azt elvethetjük, a maradéktagok nem véletlenek.

Így a második legkisebb AIC mutatóval rendelkező modellt választjuk véglegesnek.

## Modell együtthatói és elemzése
```{r}
summary(m.nb)
```
### Szignifikáns változók

Ahogyan láthatjuk a férfiaknak szignifikánsan magasabb a gyorshajtásaik várható
értéke, mint a nőké. Emellett szignifikánsak az oktatottsági szint változói is.
A középiskolát végzettekhez képest mind az egyetemet, mind a csak
általánosiskolát végzettek kevesebbet gyorshajtanak. Továbbá a középosztályhoz
képest, az alacsonyabb keresetűek szignifikánsan kevesebbszer, míg a
felsőosztály tagjai szignifikánsan többet gyorshajtanak. Mindezek mellett az
adott sofőr családi állapota is hatással van a gyorshajtások számára, a házasok
és a gyerekesek is többször hajtanak gyorsan, mint azok akik nem házasok és
nincs gyerekük.

Illetve ezeken túl a lakcímek alapján (postal code) egy városrészben lakók közül
a leggazdagabb lakóterületiek hajtanak a legtöbbet gyorsan, míg a többi között
nem található szignifikáns különbség.

Az utolsó szignifikáns változó az évente megtett mérföldek száma, amely meglepő
módon nem pozitív, hanem negatív. Ezt talán az okozhatja, hogy azok akik sokat
autóznak, azok kevésbé hajlamosak a gyorshajtásra.

### Nem szignifikáns változók

Ellentétben az előző változókkal, nincsen különbség a várható gyorshajtások közt
rassz, credit score szerint.
Illetve a sportautó, mint autótípus sem növeli a gyorshajtások számát, azonban
ezt lehet a kereset változó okozza, hiszen sportautója a tehetős embereknek szokott lenni.
Emellett az idősebb (2015 előtti) autók, illetve az autó birtoklása sem okoz
kimutatható különbséget.

### Modell és valós adat összehasonlítása
```{r}
 df$pred_speeding<- exp(predict(m.nb, df))
plot(df$pred_speeding, df$SPEEDING_VIOLATIONS)
```

Láthatjuk, hogy a moodell nem tökéletes, azonban mivel az adat nagy része
faktor változó, így nehéz megfelelő szinten differenciálni a különböző embereket.
