Σημείωση δεδομένων. Το αρχείο
climate_change.csvπου δόθηκε είχε αλλοιωμένη αριθμητική μορφή (π.χ.Temp= 109 αντί 0.109,TSI= 13.661.024 αντί 1366.1024). Όλη η ανάλυση γίνεται στο διορθωμένο αρχείοclimate_change_clean.csvπου συνοδεύει την παράδοση (μην το αντικαταστήσεις με το αλλοιωμένοclimate_change.csv).
climate <- read.csv("climate_change_clean.csv")
# --- Έλεγχος ασφαλείας: όλες οι στήλες πρέπει να είναι αριθμητικές ---
if (!all(sapply(climate, is.numeric))) {
stop("Το αρχείο διαβάστηκε με μη-αριθμητικές στήλες. Βεβαιώσου ότι χρησιμοποιείς ",
"το climate_change_clean.csv (όχι το αλλοιωμένο climate_change.csv).")
}
names(climate)## [1] "Year" "Month" "MEI" "CO2" "CH4" "N2O"
## [7] "CFC.11" "CFC.12" "TSI" "Aerosols" "Temp"
## 'data.frame': 308 obs. of 11 variables:
## $ Year : int 1983 1983 1983 1983 1983 1983 1983 1983 1984 1984 ...
## $ Month : int 5 6 7 8 9 10 11 12 1 2 ...
## $ MEI : num 2.556 2.167 1.741 1.13 0.428 ...
## $ CO2 : num 346 346 344 342 340 ...
## $ CH4 : num 1639 1634 1633 1631 1648 ...
## $ N2O : num 304 304 304 304 304 ...
## $ CFC.11 : num 191 192 193 194 194 ...
## $ CFC.12 : num 350 352 354 356 357 ...
## $ TSI : num 1366 1366 1366 1366 1366 ...
## $ Aerosols: num 0.0863 0.0794 0.0731 0.0673 0.0619 0.0569 0.0524 0.0486 0.0451 0.0416 ...
## $ Temp : num 0.109 0.118 0.137 0.176 0.149 0.093 0.232 0.078 0.089 0.013 ...
Το dataset έχει 308 παρατηρήσεις και 11
μεταβλητές. Βρίσκουμε τις 5 ισχυρότερες συσχετίσεις της
Temp με τις υπόλοιπες μεταβλητές (κατά απόλυτη τιμή):
cors <- cor(climate)["Temp", ]
cors <- cors[names(cors) != "Temp"]
sort(abs(cors), decreasing = TRUE)[1:5]## Year CO2 N2O CH4 CFC.12
## 0.7557311 0.7485046 0.7432418 0.6996966 0.6889441
➜ Απάντηση. Οι 5 ισχυρότερες συσχετίσεις είναι: Year (0.756), CO2 (0.749), N2O (0.743), CH4 (0.700), CFC.12 (0.689).
Χωρίζουμε σε training set (έως και το 2006) και testing set (μετά το 2006):
train <- subset(climate, Year <= 2006)
test <- subset(climate, Year > 2006)
c(train = nrow(train), test = nrow(test))## train test
## 284 24
➜ Απάντηση. Training set: 284 παρατηρήσεις · Testing set: 24 παρατηρήσεις.
Temp ~ CO2 (1.2)##
## Call:
## lm(formula = Temp ~ CO2, data = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.31912 -0.07819 -0.00129 0.05805 0.43420
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -4.2646515 0.2096815 -20.34 <2e-16 ***
## CO2 0.0124855 0.0005799 21.53 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1116 on 282 degrees of freedom
## Multiple R-squared: 0.6218, Adjusted R-squared: 0.6204
## F-statistic: 463.6 on 1 and 282 DF, p-value: < 2.2e-16
Τα σφάλματα (residuals) και ο υπολογισμός του SSE:
## [1] 3.511885
## [1] 0.6217783
➜ Απάντηση. SSE = 3.512 · R² = 0.622. Ο συντελεστής του CO2 (0.0125) είναι θετικός και εξαιρετικά σημαντικός (p < 2e-16).
##
## Call:
## lm(formula = Temp ~ MEI + CO2 + CH4 + N2O + CFC.11 + CFC.12 +
## TSI + Aerosols, data = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.25888 -0.05913 -0.00082 0.05649 0.32433
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.246e+02 1.989e+01 -6.265 1.43e-09 ***
## MEI 6.421e-02 6.470e-03 9.923 < 2e-16 ***
## CO2 6.457e-03 2.285e-03 2.826 0.00505 **
## CH4 1.240e-04 5.158e-04 0.240 0.81015
## N2O -1.653e-02 8.565e-03 -1.930 0.05467 .
## CFC.11 -6.631e-03 1.626e-03 -4.078 5.96e-05 ***
## CFC.12 3.808e-03 1.014e-03 3.757 0.00021 ***
## TSI 9.314e-02 1.475e-02 6.313 1.10e-09 ***
## Aerosols -1.538e+00 2.133e-01 -7.210 5.41e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.09171 on 275 degrees of freedom
## Multiple R-squared: 0.7509, Adjusted R-squared: 0.7436
## F-statistic: 103.6 on 8 and 275 DF, p-value: < 2.2e-16
## SSE R2
## 2.3130196 0.7508933
➜ Απάντηση. SSE = 2.313 · R² = 0.751.
Τι παρατηρούμε — δικαιολόγηση. Το R² αυξήθηκε αισθητά (0.62 → 0.75), γιατί προστέθηκαν περισσότερες επεξηγηματικές μεταβλητές. Όμως οι συντελεστές των N2O και CFC.11 βγαίνουν αρνητικοί, ενώ πρόκειται για αέρια του θερμοκηπίου (θα περιμέναμε θετική επίδραση στη θερμοκρασία). Αυτό οφείλεται σε πολυσυγγραμμικότητα (multicollinearity): οι ανεξάρτητες μεταβλητές είναι ισχυρά συσχετισμένες μεταξύ τους, οπότε οι εκτιμήσεις των συντελεστών γίνονται ασταθείς και δύσκολα ερμηνεύσιμες.
## N2O Year CO2 CH4 CFC.12 Temp CFC.11
## 1.00000000 0.99384523 0.97671982 0.89983864 0.86793078 0.77863893 0.52247732
## Aerosols TSI MEI Month
## 0.33705457 0.19975668 0.05081978 0.01363153
Οι μεταβλητές με υψηλή συσχέτιση με το N2O (|r| > 0.7) είναι CO2 (0.977), CH4 (0.900) και CFC.12 (0.868). Τις αφαιρούμε και φτιάχνουμε νέο μοντέλο:
##
## Call:
## lm(formula = Temp ~ MEI + N2O + CFC.11 + TSI + Aerosols, data = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.28659 -0.05808 -0.00547 0.05688 0.34529
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.200e+02 2.069e+01 -5.804 1.77e-08 ***
## MEI 6.479e-02 6.689e-03 9.686 < 2e-16 ***
## N2O 2.599e-02 1.515e-03 17.153 < 2e-16 ***
## CFC.11 -2.915e-04 3.289e-04 -0.886 0.376
## TSI 8.219e-02 1.519e-02 5.411 1.35e-07 ***
## Aerosols -1.683e+00 2.191e-01 -7.681 2.70e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.09551 on 278 degrees of freedom
## Multiple R-squared: 0.7269, Adjusted R-squared: 0.722
## F-statistic: 148 on 5 and 278 DF, p-value: < 2.2e-16
## SSE R2
## 2.5357702 0.7269036
➜ Απάντηση. SSE = 2.536 · R² = 0.727. Με 3 λιγότερες μεταβλητές το R² μειώθηκε ελάχιστα (0.751 → 0.727) και πλέον ο συντελεστής του N2O είναι θετικός και σημαντικός — φυσικά ορθό αποτέλεσμα.
pred <- predict(m3, newdata = test)
SSE <- sum((test$Temp - pred)^2)
SST <- sum((test$Temp - mean(train$Temp))^2)
R2 <- 1 - SSE/SST
c(SSE = SSE, SST = SST, R2 = R2)## SSE SST R2
## 0.3151458 0.5860189 0.4622258
➜ Απάντηση. Στο testing set: SSE = 0.315 · SST = 0.586 · R² = 0.462.
Γράφημα Temp (άξονας x) με CO2 (άξονας y)
στο αρχικό σετ:
plot(climate$Temp, climate$CO2, xlab = "Temp", ylab = "CO2",
main = "CO2 vs Temp", pch = 19, col = "steelblue")
abline(lm(CO2 ~ Temp, data = climate), col = "red", lwd = 2)## [1] 0.7485046
➜ Απάντηση. Ναι, υπάρχει σαφής θετική γραμμική συσχέτιση (r = 0.749): καθώς αυξάνεται η θερμοκρασία, αυξάνεται και η συγκέντρωση CO2.