cat("\n=== Bertujuan untuk mengetahui apakah suhu berhubungan dengan kelembapan? ===\n")
## 
## === Bertujuan untuk mengetahui apakah suhu berhubungan dengan kelembapan? ===
# 1. MEMUAT PACKAGE DAN DATA
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.2
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.5.2
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.5.2
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(car)
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.5.2
library(csv)
## Warning: package 'csv' was built under R version 4.5.2
df <- read.csv("C:/Users/LENOVO/Downloads/weather.csv")
data <- df[c("Suhu","Kelembaban")]
head(data)
##       Suhu Kelembaban
## 1 30.48357   66.71005
## 2 27.30868   69.39819
## 3 31.23844   82.47294
## 4 35.61515   81.10370
## 5 26.82923   74.79098
## 6 26.82932   76.17327
tail(data)
##         Suhu Kelembaban
## 295 29.78508   85.37540
## 296 24.53545   69.89984
## 297 32.49800   72.30125
## 298 29.53650   65.21236
## 299 32.06431   70.55707
## 300 31.14814   78.77300
cat("\n=== CEK MISSING VALUE ===\n\n")
## 
## === CEK MISSING VALUE ===
total_missing <- sum(is.na(data))
total_missing
## [1] 0
# 2. ANALISIS DESKRIPTIF DAN VISUALISASI
print("Statistik Deskriptif:")
## [1] "Statistik Deskriptif:"
summary(data)
##       Suhu         Kelembaban    
##  Min.   :11.79   Min.   : 50.28  
##  1st Qu.:24.58   1st Qu.: 67.96  
##  Median :28.30   Median : 74.81  
##  Mean   :27.97   Mean   : 74.79  
##  3rd Qu.:31.13   3rd Qu.: 81.16  
##  Max.   :47.26   Max.   :105.79
# Scatter plot
ggplot(data, aes(x = Suhu, y = Kelembaban)) +
  geom_point(color = "blue", size = 3) +
  labs(title = "Hubungan suhu dan kelembaban.",
       x = "Suhu", y = "Kelembaban") +
  theme_minimal()

# Korelasi
cor_test <- cor.test(data$Suhu, data$Kelembaban)
print(paste("Korelasi Pearson:", round(cor_test$estimate, 4)))
## [1] "Korelasi Pearson: -0.0405"
print(paste("p-value korelasi:", round(cor_test$p.value, 4)))
## [1] "p-value korelasi: 0.4846"
# 3. MEMBANGUN MODEL REGRESI
model <- lm(Kelembaban ~ Suhu, data = data)
print("Ringkasan Model Regresi:")
## [1] "Ringkasan Model Regresi:"
summary(model)
## 
## Call:
## lm(formula = Kelembaban ~ Suhu, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -24.9744  -6.8322   0.0473   6.3318  30.9012 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 76.99914    3.21227   23.97   <2e-16 ***
## Suhu        -0.07915    0.11311   -0.70    0.485    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.624 on 298 degrees of freedom
## Multiple R-squared:  0.001641,   Adjusted R-squared:  -0.00171 
## F-statistic: 0.4897 on 1 and 298 DF,  p-value: 0.4846
# 4. UJI ASUMSI REGRESI LINEAR
cat("\n=== UJI ASUMSI REGRESI LINEAR ===\n")
## 
## === UJI ASUMSI REGRESI LINEAR ===
# 4.1 Normalitas Residual
shapiro_test <- shapiro.test(residuals(model))
cat("1. UJI NORMALITAS (Shapiro-Wilk):\n")
## 1. UJI NORMALITAS (Shapiro-Wilk):
cat("   Statistik W =", round(shapiro_test$statistic, 4), "\n")
##    Statistik W = 0.9969
cat("   p-value =", round(shapiro_test$p.value, 4), "\n")
##    p-value = 0.8302
if(shapiro_test$p.value > 0.05) {
  cat("   Keputusan: Residual berdistribusi normal\n")
} else {
  cat("   Keputusan: Residual tidak normal\n")
}
##    Keputusan: Residual berdistribusi normal
# Q-Q Plot
qqnorm(residuals(model), main = "Q-Q Plot Residual")
qqline(residuals(model), col = "red")

# 4.2 Homoskedastisitas
bp_test <- bptest(model)
cat("\n2. UJI HOMOSKEDASTISITAS (Breusch-Pagan):\n")
## 
## 2. UJI HOMOSKEDASTISITAS (Breusch-Pagan):
cat("   Statistik LM =", round(bp_test$statistic, 4), "\n")
##    Statistik LM = 1.0616
cat("   p-value =", round(bp_test$p.value, 4), "\n")
##    p-value = 0.3029
if(bp_test$p.value > 0.05) {
  cat("   Keputusan: Varian residual homogen\n")
} else {
  cat("   Keputusan: Ada heteroskedastisitas\n")
}
##    Keputusan: Varian residual homogen
# Plot Residual vs Fitted
plot(fitted(model), residuals(model),
     main = "Residual vs Fitted Values",
     xlab = "Fitted Values", ylab = "Residuals",
     pch = 19, col = "blue")
abline(h = 0, col = "red", lty = 2)

# 4.3 Tidak ada Autokorelasi
dw_test <- dwtest(model)
cat("\n3. UJI AUTOKORELASI (Durbin-Watson):\n")
## 
## 3. UJI AUTOKORELASI (Durbin-Watson):
cat("   Statistik DW =", round(dw_test$statistic, 4), "\n")
##    Statistik DW = 1.8585
cat("   p-value =", round(dw_test$p.value, 4), "\n")
##    p-value = 0.1103
if(dw_test$p.value > 0.05) {
  cat("   Keputusan: Tidak ada autokorelasi\n")
} else {
  cat("   Keputusan: Ada autokorelasi\n")
}
##    Keputusan: Tidak ada autokorelasi
# 5. INTERPRETASI KOEFISIEN
cat("\n=== INTERPRETASI KOEFISIEN ===\n")
## 
## === INTERPRETASI KOEFISIEN ===
intercept <- coef(model)[1]
slope <- coef(model)[2]

cat("Persamaan Regresi: Kelembaban =", round(intercept, 2), 
    ifelse(slope >= 0, "+", "-"), 
    abs(round(slope, 2)), "* Suhu\n")
## Persamaan Regresi: Kelembaban = 77 - 0.08 * Suhu
cat("\nInterpretasi:\n")
## 
## Interpretasi:
cat("1. Intercept (β0 =", round(intercept, 2), "):\n")
## 1. Intercept (β0 = 77 ):
cat("   Kelembaban ketika Suhu = 0 adalah", round(intercept, 2), "poin\n\n")
##    Kelembaban ketika Suhu = 0 adalah 77 poin
cat("2. Slope (β1 =", round(slope, 2), "):\n")
## 2. Slope (β1 = -0.08 ):
if(slope > 0){
  cat("   Setiap penambahan 1 satuan Suhu, Kelembaban meningkat sebesar", 
      round(slope, 2), "poin\n")
} else if(slope < 0){
  cat("   Setiap penambahan 1 satuan Suhu, Kelembaban menurun sebesar", 
      abs(round(slope, 2)), "poin\n")
} else {
  cat("   Perubahan Suhu tidak mempengaruhi Kelembaban\n")
}
##    Setiap penambahan 1 satuan Suhu, Kelembaban menurun sebesar 0.08 poin
# 6. ESTIMASI PARAMETER DAN INFERENSI
cat("\n=== ESTIMASI PARAMETER ===\n")
## 
## === ESTIMASI PARAMETER ===
conf_int <- confint(model, level = 0.95)
cat("Interval Kepercayaan 95%:\n")
## Interval Kepercayaan 95%:
cat("   Intercept: [", round(conf_int[1,1], 3), ", ", round(conf_int[1,2], 3), "]\n", sep = "")
##    Intercept: [70.678, 83.321]
cat("   Slope:     [", round(conf_int[2,1], 3), ", ", round(conf_int[2,2], 3), "]\n", sep = "")
##    Slope:     [-0.302, 0.143]
print("Interval kepercayaan 95% untuk koefisien suhu adalah [-0.302, 0.143]. Karena interval tersebut mencakup nilai 0, maka tidak terdapat bukti yang cukup untuk menyatakan bahwa suhu berpengaruh signifikan terhadap kelembaban.")
## [1] "Interval kepercayaan 95% untuk koefisien suhu adalah [-0.302, 0.143]. Karena interval tersebut mencakup nilai 0, maka tidak terdapat bukti yang cukup untuk menyatakan bahwa suhu berpengaruh signifikan terhadap kelembaban."
# Uji hipotesis untuk slope
cat("\nUji Hipotesis untuk Slope (β1):\n")
## 
## Uji Hipotesis untuk Slope (β1):
cat("   H0: β1 = 0 (tidak ada hubungan linear)\n")
##    H0: β1 = 0 (tidak ada hubungan linear)
cat("   H1: β1 ≠ 0 (ada hubungan linear)\n")
##    H1: β1 ≠ 0 (ada hubungan linear)
summary_model <- summary(model)
slope_pvalue <- summary_model$coefficients[2, 4]
cat("   p-value =", round(slope_pvalue, 6), "\n")
##    p-value = 0.484601
if(slope_pvalue < 0.05) {
  cat("   Keputusan: Tolak H0, ada hubungan linear signifikan antara suhu dan kelembaban\n")
} else {
  cat("   Keputusan: Gagal tolak H0, tidak ada hubungan linear signifikan antara suhu dan kelembaban\n")
}
##    Keputusan: Gagal tolak H0, tidak ada hubungan linear signifikan antara suhu dan kelembaban
# 7. KOEFISIEN DETERMINASI
r_squared <- summary_model$r.squared
cat("\nKoefisien Determinasi (R²):\n")
## 
## Koefisien Determinasi (R²):
cat("   R² =", round(r_squared, 4), "\n")
##    R² = 0.0016
cat("   Artinya:", round(r_squared * 100, 2), "% variasi Kelembaban dapat dijelaskan oleh Suhu, namun bukan hanya suhu yang menjadi faktor dari kelembaban\n")
##    Artinya: 0.16 % variasi Kelembaban dapat dijelaskan oleh Suhu, namun bukan hanya suhu yang menjadi faktor dari kelembaban
# 8. VISUALISASI MODEL
ggplot(data, aes(x = Suhu, y = Kelembaban)) +
  geom_point(color = "blue", size = 3) +
  geom_smooth(method = "lm", se = TRUE, color = "red", fill = "pink") +
  labs(title = "Garis Regresi Linear",
       subtitle = paste("Y =", round(intercept, 2), "+", round(slope, 2), "X"),
       x = "Suhu", y = "Kelembaban") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

# 9. PREDIKSI
new_data <- data.frame(Suhu = c(27, 33))
prediction <- predict(model, newdata = new_data, interval = "confidence")
cat("\n=== PREDIKSI ===\n")
## 
## === PREDIKSI ===
cat("Untuk suhu 27 derajat, prediksi kelembabab =", round(prediction[1, "fit"], 2), "\n")
## Untuk suhu 27 derajat, prediksi kelembabab = 74.86
cat("Untuk suhu 33 derajat, prediksi kelembaban =", round(prediction[2, "fit"], 2), "\n")
## Untuk suhu 33 derajat, prediksi kelembaban = 74.39
# 10. DIAGNOSTIC PLOTS
par(mfrow = c(2, 2))
plot(model, which = 1:4)

par(mfrow = c(1, 1))

# 11. RINGKASAN LENGKAP
cat("\n=== RINGKASAN ANALISIS ===\n")
## 
## === RINGKASAN ANALISIS ===
cat("1. Model: Kelembaban = β0 + β1*Suhu + ε\n")
## 1. Model: Kelembaban = β0 + β1*Suhu + ε
cat("2. Estimasi: Y =", round(intercept, 3), "+", round(slope, 3), "* X\n")
## 2. Estimasi: Y = 76.999 + -0.079 * X
cat("3. R² =", round(r_squared, 4), "(", round(r_squared*100, 1), "%)\n")
## 3. R² = 0.0016 ( 0.2 %)
cat("4. Uji F (model): p-value =", 
    round(summary_model$fstatistic[1], 4), "\n")
## 4. Uji F (model): p-value = 0.4897
cat("5. Asumsi:\n")
## 5. Asumsi:
cat("   - Normalitas: p =", round(shapiro_test$p.value, 4), "\n")
##    - Normalitas: p = 0.8302
cat("   - Homoskedastisitas: p =", round(bp_test$p.value, 4), "\n")
##    - Homoskedastisitas: p = 0.3029
cat("   - Autokorelasi: p =", round(dw_test$p.value, 4), "\n")
##    - Autokorelasi: p = 0.1103
# Simpan hasil
hasil <- list(
  model = model,
  coefficients = coef(model),
  r_squared = r_squared,
  assumptions = list(
    normality = shapiro_test$p.value,
    homoscedasticity = bp_test$p.value,
    autocorrelation = dw_test$p.value
  ),
  confidence_intervals = conf_int
)

print("Analisis regresi linear sederhana selesai!")
## [1] "Analisis regresi linear sederhana selesai!"