Import údajov

Skontrolujeme načítanie údajov z databázy pit stopov Formula 1.

pit_stops <- read.csv(
  "C:/Users/vlady/Documents/pit_stops.csv",
  header = TRUE,
  sep = ",",
  dec = ".",
  stringsAsFactors = FALSE
)

head(pit_stops)

Upravovanie názvov premenných

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
old_names <- names(pit_stops)

pit_stops <- pit_stops %>%
  rename_with(~ abbreviate(.x, strict = FALSE))

names(pit_stops) <- make.unique(names(pit_stops))

comparison <- data.frame(
  Original_Name = old_names,
  Shortened_Name = names(pit_stops)
)

comparison

Chýbajúce údaje

library(mice)
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
library(VIM)
## Loading required package: colorspace
## Loading required package: grid
## Registered S3 method overwritten by 'car':
##   method           from
##   na.action.merMod lme4
## VIM is ready to use.
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
## 
## Attaching package: 'VIM'
## The following object is masked from 'package:datasets':
## 
##     sleep
colSums(is.na(pit_stops))
## rcId drvI stop  lap time drtn mlls 
##    0    0    0    0    0    0    0

V dátach sa nenachádzajú chýbajúce hodnoty, preto nebolo potrebné vykonať imputáciu.

Grafy

Scatter plot

library(ggplot2)

ggplot(pit_stops, aes(x = lap, y = mlls)) +
  geom_point(alpha = 0.5) +
  theme_minimal() +
  labs(
    title = "Dĺžka pit stopu podľa kola",
    x = "Lap",
    y = "Milliseconds"
  )

Boxplot

ggplot(pit_stops, aes(x = factor(stop), y = mlls)) +
  geom_boxplot(fill = "lightblue", color = "darkblue") +
  theme_minimal() +
  labs(
    title = "Dĺžka pit stopu podľa zastávky",
    x = "Stop",
    y = "Milliseconds"
  )

Základné štatistiky

library(dplyr)
library(knitr)

pit_stats <- pit_stops %>%
  group_by(stop) %>%
  summarise(
    n = n(),
    mean = mean(mlls, na.rm = TRUE),
    sd = sd(mlls, na.rm = TRUE),
    min = min(mlls, na.rm = TRUE),
    median = median(mlls, na.rm = TRUE),
    max = max(mlls, na.rm = TRUE),
    .groups = "drop"
  )

kable(pit_stats, digits = 2)
stop n mean sd min median max
1 5573 74778.35 300436.67 14160 23744.0 3069017
2 3716 81413.58 270539.34 12897 23467.5 2048175
3 1496 96718.27 325293.53 12959 23350.0 2485913
4 427 106832.92 374243.56 13925 23132.0 2434653
5 120 391127.17 757595.35 14493 25681.5 2461612
6 29 426872.79 822788.18 13173 31494.0 2483382
7 3 29079.33 5910.42 22379 31306.0 33553
15 1 24239.00 NA 24239 24239.0 24239
42 1 24132.00 NA 24132 24132.0 24132
48 1 28211.00 NA 28211 28211.0 28211
51 1 24232.00 NA 24232 24232.0 24232
52 1 23813.00 NA 23813 23813.0 23813
57 1 24384.00 NA 24384 24384.0 24384
70 1 24367.00 NA 24367 24367.0 24367

Testovanie hypotéz

t-test

t.test(
  pit_stops$mlls[pit_stops$stop == 1],
  pit_stops$mlls[pit_stops$stop == 2]
)
## 
##  Welch Two Sample t-test
## 
## data:  pit_stops$mlls[pit_stops$stop == 1] and pit_stops$mlls[pit_stops$stop == 2]
## t = -1.1075, df = 8503.2, p-value = 0.2681
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -18379.140   5108.681
## sample estimates:
## mean of x mean of y 
##  74778.35  81413.58

Interpretácia:

p-hodnota je väčšia ako 0.05, preto nevieme zamietnuť nulovú hypotézu.
To znamená, že medzi prvým a druhým pit stopom nie je štatisticky významný rozdiel.


ANOVA

anova.result <- aov(mlls ~ factor(stop), data = pit_stops)
summary(anova.result)
##                 Df    Sum Sq   Mean Sq F value Pr(>F)    
## factor(stop)    13 1.571e+13 1.208e+12   12.71 <2e-16 ***
## Residuals    11357 1.080e+15 9.509e+10                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretácia:

p-hodnota je menšia ako 0.05, preto zamietame nulovú hypotézu.
Existuje štatisticky významný rozdiel v dĺžke pit stopov medzi rôznymi zastávkami.


Lineárna regresia

model <- lm(mlls ~ lap + stop, data = pit_stops)
summary(model)
## 
## Call:
## lm(formula = mlls ~ lap + stop, data = pit_stops)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1125645   -74757   -59495   -42449  2948258 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 107753.5     6026.5  17.880  < 2e-16 ***
## lap          -1939.7      207.9  -9.331  < 2e-16 ***
## stop         14944.8     2026.5   7.375 1.76e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 309000 on 11368 degrees of freedom
## Multiple R-squared:  0.009317,   Adjusted R-squared:  0.009143 
## F-statistic: 53.46 on 2 and 11368 DF,  p-value: < 2.2e-16

Interpretácia:

Premenná lap má negatívny vplyv na dĺžku pit stopu, čo znamená, že čím neskôr v pretekoch jazdec zastaví, tým je pit stop kratší.

Premenná stop má pozitívny vplyv, teda vyššie poradie zastávky súvisí s dlhším pit stopom.

Model je štatisticky významný, avšak hodnota R² je veľmi nízka, čo znamená, že model vysvetľuje len malú časť variability dát.


Záver

V práci sme analyzovali údaje o pit stopoch vo Formula 1. Pomocou grafov a štatistík sme opísali základné vlastnosti dát. Následne sme testovali hypotézy pomocou t-testu a ANOVA a nakoniec sme použili lineárnu regresiu na vysvetlenie dĺžky pit stopu.

Výsledky ukázali, že medzi prvým a druhým pit stopom nie je významný rozdiel, avšak medzi viacerými zastávkami rozdiel existuje. Regresný model naznačil, že niektoré premenné majú vplyv na dĺžku pit stopu, no tento vplyv je relatívne slabý.

Táto práca bola vypracovaná s pomocou umelej inteligencie.