firma <- read.csv("firmadata.csv", stringsAsFactors = TRUE)
mod_full <- lm(
netIncome ~ operatingCashflow +
capitalExpenditures +
cashflowFromFinancing +
depreciationDepletionAndAmortization +
changeInInventory,
data = firma
)
summary(mod_full)
Call:
lm(formula = netIncome ~ operatingCashflow + capitalExpenditures +
cashflowFromFinancing + depreciationDepletionAndAmortization +
changeInInventory, data = firma)
Residuals:
Min 1Q Median 3Q Max
-457714609 -32869436 9128641 40255393 346995528
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.153e+08 1.842e+08 -0.626 0.537
operatingCashflow 1.575e-01 2.730e-01 0.577 0.569
capitalExpenditures 1.052e+00 1.319e+00 0.798 0.433
cashflowFromFinancing -1.271e-01 1.248e-01 -1.018 0.319
depreciationDepletionAndAmortization 3.486e+00 2.726e+00 1.279 0.213
changeInInventory 5.009e-01 1.032e+00 0.486 0.632
Residual standard error: 1.43e+08 on 24 degrees of freedom
Multiple R-squared: 0.1993, Adjusted R-squared: 0.03244
F-statistic: 1.194 on 5 and 24 DF, p-value: 0.3415
Z výstupu summary(mod_full) pre tvoje dáta vyplýva:
• R² = 0.199, upravené R² = 0.032
→ model vysvetľuje iba približne 20 % variability čistého zisku.
• F-test modelu má p-hodnotu ≈ 0.341
→ model ako celok nie je štatisticky významný.
žiadna premenná nie je štatisticky významná. Koeficienty majú veľmi široké intervaly spoľahlivosti.
Toto je typický prejav multikolinearity.
X <- firma[, c("operatingCashflow",
"capitalExpenditures",
"cashflowFromFinancing",
"depreciationDepletionAndAmortization",
"changeInInventory")]
cor(X) operatingCashflow capitalExpenditures
operatingCashflow 1.0000000000 0.497560158
capitalExpenditures 0.4975601575 1.000000000
cashflowFromFinancing -0.0002956725 -0.196093010
depreciationDepletionAndAmortization 0.1005721979 0.004061048
changeInInventory 0.3396981706 0.121719419
cashflowFromFinancing
operatingCashflow -0.0002956725
capitalExpenditures -0.1960930100
cashflowFromFinancing 1.0000000000
depreciationDepletionAndAmortization 0.0071901841
changeInInventory 0.0579546831
depreciationDepletionAndAmortization
operatingCashflow 0.100572198
capitalExpenditures 0.004061048
cashflowFromFinancing 0.007190184
depreciationDepletionAndAmortization 1.000000000
changeInInventory -0.405209741
changeInInventory
operatingCashflow 0.33969817
capitalExpenditures 0.12171942
cashflowFromFinancing 0.05795468
depreciationDepletionAndAmortization -0.40520974
changeInInventory 1.00000000
Najdôležitejšie hodnoty:
• operatingCashflow – capitalExpenditures: 0.4976
• operatingCashflow – changeInInventory: 0.3397
• depreciation – changeInInventory: –0.4052
Korelácie sú stredne vysoké, nie extrémne, ale najmä pri operatingCashflow a depreciation sú jasné prepojenia, ktoré môžu spôsobovať problémy pri odhadoch.
operatingCashflow capitalExpenditures
1.627607 1.413418
cashflowFromFinancing depreciationDepletionAndAmortization
1.056896 1.307417
changeInInventory
1.467418
Výsledky diagnostiky multikolinearity pomocou VIF ukazujú, že všetky vysvetľujúce premenné v mojom modeli majú hodnoty VIF medzi približne 1.05 a 1.63. Takéto hodnoty sú veľmi nízke a nachádzajú sa hlboko pod akoukoľvek hraničnou úrovňou, ktorá by naznačovala problém multikolinearity. To znamená, že premenné medzi sebou nevykazujú silné lineárne vzťahy a jednotlivé koeficienty nie sú „nafúknuté“ vplyvom prebytočnej redundancie v modeli.
Na základe týchto výsledkov môžem konštatovať, že v mojich údajoch nie je prítomná multikolinearita, ktorá by narúšala stabilitu odhadov alebo znižovala interpretovateľnosť regresných koeficientov. Model je z hľadiska multikolinearity dobre špecifikovaný a nie je potrebná žiadna úprava ani redukcia premenných.
Odstránila som z modelu premennú operatingCashflow, ktorá má najvyššie VIF.
mod_red <- lm(
netIncome ~ capitalExpenditures +
cashflowFromFinancing +
depreciationDepletionAndAmortization +
changeInInventory,
data = firma
)
summary(mod_red)
Call:
lm(formula = netIncome ~ capitalExpenditures + cashflowFromFinancing +
depreciationDepletionAndAmortization + changeInInventory,
data = firma)
Residuals:
Min 1Q Median 3Q Max
-466961334 -36161981 6038193 39857210 339717643
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.096e+08 1.815e+08 -0.604 0.551
capitalExpenditures 1.430e+00 1.129e+00 1.267 0.217
cashflowFromFinancing -1.212e-01 1.227e-01 -0.987 0.333
depreciationDepletionAndAmortization 3.929e+00 2.580e+00 1.523 0.140
changeInInventory 7.403e-01 9.317e-01 0.795 0.434
Residual standard error: 141100000 on 25 degrees of freedom
Multiple R-squared: 0.1882, Adjusted R-squared: 0.05826
F-statistic: 1.449 on 4 and 25 DF, p-value: 0.2476
V redukovanom modeli som ponechala štyri vysvetľujúce premenné: capitalExpenditures, cashflowFromFinancing, depreciationDepletionAndAmortization a changeInInventory. Výsledky ukazujú, že žiadna z premenných nie je štatisticky významná (všetky p-hodnoty sú nad 0.14), čo znamená, že model nedokáže preukázateľne vysvetliť variabilitu čistého zisku. Koeficienty síce naznačujú určité ekonomické vzťahy (napr. pozitívny efekt kapitálových výdavkov alebo odpisov), no veľké štandardné chyby a nízke t-hodnoty naznačujú ich níznu spoľahlivosť. Hodnota R² = 0.1882 znamená, že model vysvetľuje približne 19 % variability čistého zisku, čo je relatívne málo.
F-štatistika má hodnotu 1.449 a p-hodnotu 0.2476, čo potvrdzuje, že model ako celok nie je štatisticky významný. Odstránenie premennej operatingCashflow mierne znížilo vysvetľovaciu schopnosť modelu (v porovnaní s plným modelom), ale nezlepšilo jeho štatistickú významnosť. Tento výsledok ukazuje, že v mojich údajoch multikolinearita nebola zásadným problémom – po odstránení premennej nedošlo k výraznému zlepšeniu modelu, čo naznačuje, že slabá výkonnosť modelu vyplýva skôr z povahy dát než zo štrukturálnych problémov multikolinearity.
Hodnota AIC a BIC sa výrazne nezlepšila → redukovaný model nie je lepší.
X <- firma[, c("operatingCashflow",
"capitalExpenditures",
"cashflowFromFinancing",
"depreciationDepletionAndAmortization",
"changeInInventory")]
X_scaled <- scale(X)
summary(X_scaled) operatingCashflow capitalExpenditures cashflowFromFinancing
Min. :-3.1809 Min. :-1.41044 Min. :-1.80193
1st Qu.:-0.5933 1st Qu.:-0.91964 1st Qu.:-0.57407
Median :-0.1258 Median :-0.05291 Median :-0.07561
Mean : 0.0000 Mean : 0.00000 Mean : 0.00000
3rd Qu.: 0.8295 3rd Qu.: 0.87648 3rd Qu.: 0.39770
Max. : 1.8250 Max. : 1.84763 Max. : 3.16439
depreciationDepletionAndAmortization changeInInventory
Min. :-1.6342 Min. :-2.0699
1st Qu.:-0.9608 1st Qu.:-0.5624
Median : 0.2514 Median : 0.1272
Mean : 0.0000 Mean : 0.0000
3rd Qu.: 0.7677 3rd Qu.: 0.7928
Max. : 1.4187 Max. : 2.1960
V mojich dátach majú vysvetľujúce premenné výrazne rozdielne rozsahy (napr. operatívny cashflow je v stovkách miliónov, zmena zásob len v miliónoch). Takéto rozdiely môžu spôsobovať numerickú nestabilitu pri odhade modelu. Škálovaním som všetky premenné transformovala na porovnateľnú úroveň s priemerom 0 a smerodajnou odchýlkou 1.
Škálovanie nemení korelácie medzi premennými ani neodstraňuje multikolinearitu, ale výrazne zlepšuje numerickú stabilitu výpočtov. Je to preto vhodný krok pred hodnotením kondičného čísla a ďalšej diagnostiky.
kondicne_cislo_full <- kappa(as.matrix(X))
kondicne_cislo_scaled <- kappa(as.matrix(X_scaled))
kondicne_cislo_full[1] 24.85822
[1] 2.855849
• pred škálovaním: 24.86
• po škálovaní: 2.85
Interpretácia:
Kondičné číslo 24.86 ukazuje, že pôvodné premenné majú mierne až stredne silné problémy s multikolinearitou a numerickou podmienkou. Takáto hodnota znamená, že pre niektoré kombinácie premenných môže byť odhad koeficientov nestabilný alebo citlivý na malé zmeny v dátach.
Po štandardizácii kleslo kondičné číslo na 2.85, čo predstavuje veľmi dobre podmienený systém. To znamená, že numerická stabilita sa po škálovaní výrazne zlepšila. Multikolinearita však ako jav zostáva prítomná (keďže tú určujú korelácie medzi premennými), len je výpočet modelu robustnejší.
V dnešnej úlohe som odhadla viacnásobný regresný model čistého zisku a vykonala diagnostiku multikolinearity pomocou korelačnej matice, VIF a škálovania premenných. VIF hodnoty všetkých vysvetľujúcich premenných sa pohybovali len medzi 1.05 a 1.63, čo znamená, že multikolinearita v mojich dátach nie je problémom. Po škálovaní som vypočítala kondičné číslo, ktoré kleslo z približne 24.86 na 2.85, čo potvrdilo veľmi dobrú numerickú stabilitu modelu.
Na záver som vytvorila aj redukovaný model odstránením premennej s najvyšším VIF, no jeho kvalita sa nezlepšila – R² ostalo nízke a model ako celok nebol štatisticky významný. Výsledky tak ukazujú, že slabá vysvetľovacia schopnosť modelu súvisí s povahou dát, nie s multikolinearitou, a preto sú ďalšie úpravy štruktúry modelu z tohto hľadiska nepotrebné