V modeli je závislá premenná: ->Accommodation.cost – celkové náklady na ubytovanie počas cesty. Vysvetľujúce (nezávislé) premenné sú: ->Duration..days. – dĺžka pobytu v dňoch. ->Transportation.cost – náklady na dopravu. ->Lag_accommodation – ubytovacie náklady z predchádzajúcej cesty (autokorelačný prvok). Cieľom regresnej analýzy je zistiť, či je možné podľa dĺžky pobytu, transportných nákladov a predchádzajúcich ubytovacích výdavkov vysvetliť variabilitu aktuálnych nákladov na ubytovanie.
model <- lm(Accommodation.cost ~ Duration..days. + Transportation.cost + Lag_accommodation,
data = travel)
summary(model)
Call:
lm(formula = Accommodation.cost ~ Duration..days. + Transportation.cost +
Lag_accommodation, data = travel)
Residuals:
Min 1Q Median 3Q Max
-2351.6 -448.3 4.0 414.8 3440.0
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 782.9046 333.2982 2.349 0.020321 *
Duration..days. -106.4346 41.5506 -2.562 0.011552 *
Transportation.cost 1.5221 0.1347 11.297 < 2e-16 ***
Lag_accommodation 0.2478 0.0632 3.921 0.000141 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 775.1 on 131 degrees of freedom
(2 observations deleted due to missingness)
Multiple R-squared: 0.6747, Adjusted R-squared: 0.6672
F-statistic: 90.57 on 3 and 131 DF, p-value: < 2.2e-16
Model odhaduje, ako sa zmení Accommodation.cost, ak sa jednotlivé vysvetľujúce premenné zvyšujú o jednotku, pričom ostatné ostávajú konštantné. Všetky tri premenné sú štatisticky významné a spolu vysvetľujú 67 % variability nákladov na ubytovanie. ->Dĺžka pobytu (Duration..days.): čím dlhší pobyt, tým nižšie ubytovacie náklady — pravdepodobne preto, že dlhšie pobyty majú lepšie priemerné ceny za noc (zľavy, výhodnejšie ponuky). ->Transportation.cost: čím drahšia doprava, tým drahšie ubytovanie — cestujúci s vyšším rozpočtom míňajú viac aj na ubytovanie. ->Lag_accommodation: minulé náklady mierne predpovedajú aktuálne — konzistentný vzorec míňania. Model je silný, stabilný a celkovo štatisticky veľmi významný.
# vyber len premenné, ktoré chceš
vars <- c("Duration..days.", "Transportation.cost", "Lag_accommodation")
# skontroluj typy
str(travel[, vars])
'data.frame': 137 obs. of 3 variables:
$ Duration..days. : num 7 5 7 14 7 5 10 7 7 7 ...
$ Transportation.cost: num 600 500 700 1000 200 800 1200 600 200 800 ...
$ Lag_accommodation : num NA 1200 800 1000 2000 700 1500 500 900 1200 ...
# konverzia na numeric (aj keď sú faktory)
for (v in vars) {
travel[[v]] <- as.numeric(as.character(travel[[v]]))
}
# odstránenie riadkov s NA (inak cor dá NA)
travel_clean <- na.omit(travel[, vars])
# výpočet korelačnej matice
cor_matrix <- cor(travel_clean, use = "complete.obs")
cor_matrix
Duration..days. Transportation.cost
Duration..days. 1.000000000 -0.001405449
Transportation.cost -0.001405449 1.000000000
Lag_accommodation -0.006705639 0.531444954
Lag_accommodation
Duration..days. -0.006705639
Transportation.cost 0.531444954
Lag_accommodation 1.000000000
Duration..days. × Transportation.cost → korelácia = –0.0014 ->Dĺžka pobytu nesúvisí s tým, koľko stojí doprava. Logické – lacné aj drahé destinácie môžu trvať rovnako dlho. Duration..days. × Lag_accommodation → –0.0067 ->To, koľko stál minulý hotel, nijako nesúvisí s dĺžkou aktuálneho pobytu. Transportation.cost × Lag_accommodation → 0.5314 ->Keď niekto minie viac na dopravu, zvyčajne minie viac aj na ubytovanie
library(car)
vif(model)
Duration..days. Transportation.cost Lag_accommodation
1.000051 1.393609 1.393668
Test multikolinearity pomocou variačného inflačného faktora (VIF) nepreukázal žiadny problém. Všetky premenné dosiahli hodnoty VIF medzi 1.00 a 1.39, teda hlboko pod kritickou hranicou 5. Multikolinearita preto nenarúša stabilitu modelu a odhadnuté koeficienty možno považovať za spoľahlivé.
install.packages("performance")
trying URL 'http://rspm/default/__linux__/focal/latest/src/contrib/performance_0.15.2.tar.gz'
Error in download.file(urls, destfiles, "libcurl", mode = "wb", ...) :
cannot open URL 'http://rspm/default/__linux__/focal/latest/src/contrib/performance_0.15.2.tar.gz'
library(performance)
check_collinearity(model)
# Check for Multicollinearity
Low Correlation
Term VIF VIF 95% CI adj. VIF Tolerance
Duration..days. 1.00 [1.00, Inf] 1.00 1.00
Transportation.cost 1.39 [1.19, 1.82] 1.18 0.72
Lag_accommodation 1.39 [1.19, 1.82] 1.18 0.72
Tolerance 95% CI
[0.00, 1.00]
[0.55, 0.84]
[0.55, 0.84]
Model nemá problém s multikolinearitou. Nebola zistená vysoká závislosť medzi prediktormi.
X <- model.matrix(model)[, -1]
eigen_vals <- eigen(t(X) %*% X)$values
condition_number <- sqrt(max(eigen_vals) / min(eigen_vals))
condition_number
[1] 363.1882
model2 <- lm(scale(Accommodation.cost) ~ scale(Duration..days.) +
scale(Transportation.cost) +
scale(Lag_accommodation),
data = travel)
kappa(model2)
[1] 1.816373
Pôvodný výpočet condition number na dizajnovej matici ukázal vysokú hodnotu κ = 363.19, čo indikovalo numerickú nestabilitu spôsobenú hlavne rozdielmi v mierkach premenných (dĺžka pobytu v dňoch vs. náklady v stovkách až tisícoch). Po štandardizácii (center + scale) vysvetľujúcich premenných sa condition number znížil na κ = 1.82, čo signalizuje elimináciu problému multikolinearity a vhodnú numerickú stabilitu modelu. Preto sú následné odhady koeficientov považované za spoľahlivé.
This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.
Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.
When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).
The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.