Mean Difference Test, atau yang lebih dikenal dengan Uji Beda Rata-Rata, adalah salah satu metode statistik yang digunakan untuk membandingkan rata-rata dari dua kelompok atau lebih. Uji ini bertujuan untuk mengetahui apakah terdapat perbedaan signifikan antara rata-rata kelompok-kelompok tersebut, atau apakah perbedaan yang diamati hanya terjadi karena kebetulan atau variasi sampel.
data <- read.csv(file = "C:/Users/acer/Documents/tugas unpad/Tugas Akhir/SEMPRO/data cleaning.csv", header=T,sep=";",dec=".")
head(data)
## pet lok group X1 X2 X3 X4 X5 X6 X7 X8
## 1 0 0 a 5 5.0 5.00 5.0 5 5 1.8 2.00
## 2 0 0 a 5 4.0 4.33 5.0 4 5 1.8 2.00
## 3 0 0 a 5 4.0 4.33 5.0 4 5 1.8 2.00
## 4 0 0 a 5 5.0 5.00 5.0 5 5 1.8 2.00
## 5 0 0 a 5 4.5 4.67 5.0 4 2 2.9 3.95
## 6 0 0 a 5 5.0 5.00 4.5 5 3 2.3 2.65
Pada kasus kali ini, akan digunakan data sekunder berupa nilai partisipasi kelompok tani di Kawasan Bandung Raya terhadap kegiatan urban farming. Di Kawasan Bandung raya kelompok tani dibagi menjadi empat berdasarkan corak usaha tani dan lokasinya, yaitu kelompok tani Subisten-Intraurban (A), Subsisten-Suburban (B), Komersial-Intraurban (C), dan Komersial-Suburban (D). Dan tingkat partisipasi yang digunakan adalah tingkat tertinggi yaitu “Kendali Warga” (X8)
data$group <- as.factor(data$group)
str(data)
## 'data.frame': 280 obs. of 11 variables:
## $ pet : int 0 0 0 0 0 0 0 0 0 0 ...
## $ lok : int 0 0 0 0 0 0 0 0 0 0 ...
## $ group: Factor w/ 4 levels "a","b","c","d": 1 1 1 1 1 1 1 1 1 1 ...
## $ X1 : int 5 5 5 5 5 5 5 5 5 5 ...
## $ X2 : num 5 4 4 5 4.5 5 5 5 5 4 ...
## $ X3 : num 5 4.33 4.33 5 4.67 5 5 5 5 3.67 ...
## $ X4 : num 5 5 5 5 5 4.5 5 4 4 4 ...
## $ X5 : int 5 4 4 5 4 5 5 5 5 3 ...
## $ X6 : num 5 5 5 5 2 3 5 3 3 3 ...
## $ X7 : num 1.8 1.8 1.8 1.8 2.9 2.3 1.4 2.3 2.3 2.3 ...
## $ X8 : num 2 2 2 2 3.95 2.65 1.95 2.65 2.65 2.65 ...
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
library(ggplot2)
# Summary statistics berdasarkan kelompok
summary_data <- data %>%
group_by(group) %>%
summarise(
mean_x = mean(X8),
median_x = median(X8),
min_x = min(X8),
max_x = max(X8),
sd_x = sd(X8)
)
summary_data
## # A tibble: 4 × 6
## group mean_x median_x min_x max_x sd_x
## <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 a 2.66 2.65 1 4.15 0.730
## 2 b 3.33 3.75 2 5 0.968
## 3 c 4.04 3.95 2.65 5 0.451
## 4 d 3.93 3.98 1 5 0.854
p1 <- ggplot(data) +
aes(x = group, y = X8, fill = group) +
geom_boxplot() +
scale_fill_hue(direction = 1) +
theme_minimal() +
theme(legend.position = "none")
p1
Sebelum melakukan pengujian beda rata-rata menggunakan Uji-t ataupun anova, asumsi klasik diantaranya unit pengamatan independen, berdistribusi normal, dan homogenitas varians. Diantara asumsi tersebut keterpenuhan asumsi homogenitas varians sangar krusial dan perlu untuk dipenuhi.
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
leveneTest(X8 ~ group, data=data)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 3 12.83 7.143e-08 ***
## 276
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil diatas memberikan hasil bahwa data tidak dapat memenuhi asumsi homogenitas varians. maka penggunakan metode klasik seperti Anova dapat memberikan hasil yang keliru. Dengan demikian penerapan motode modifikasi wald test menggunakan kovarians white akan digunakan sebagai alternatif.
model <- lm(X8 ~ as.factor(group), data = data)
summary(model)
##
## Call:
## lm(formula = X8 ~ as.factor(group), data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.92571 -0.61143 -0.01143 0.54286 1.67286
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.66143 0.09262 28.736 < 2e-16 ***
## as.factor(group)b 0.66571 0.13098 5.083 6.88e-07 ***
## as.factor(group)c 1.38286 0.13098 10.558 < 2e-16 ***
## as.factor(group)d 1.26429 0.13098 9.652 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7749 on 276 degrees of freedom
## Multiple R-squared: 0.3382, Adjusted R-squared: 0.3311
## F-statistic: 47.02 on 3 and 276 DF, p-value: < 2.2e-16
library(sandwich)
## Warning: package 'sandwich' was built under R version 4.3.3
# Menghitung matriks kovarian HC
cov <- vcovHC(model, type = "HC0")
cov
## (Intercept) as.factor(group)b as.factor(group)c
## (Intercept) 0.007502216 -0.007502216 -0.007502216
## as.factor(group)b -0.007502216 0.020697813 0.007502216
## as.factor(group)c -0.007502216 0.007502216 0.010367055
## as.factor(group)d -0.007502216 0.007502216 0.007502216
## as.factor(group)d
## (Intercept) -0.007502216
## as.factor(group)b 0.007502216
## as.factor(group)c 0.007502216
## as.factor(group)d 0.017761137
std_error <- sqrt(diag(cov))
print(std_error)
## (Intercept) as.factor(group)b as.factor(group)c as.factor(group)d
## 0.08661533 0.14386735 0.10181874 0.13327092
# Matriks kontrast R,vektor b dan q
R <- matrix(c(0, 0, 0,1, 0, 0, 0,1,0,0,0,1), nrow = 3)
q <- c(0, 0, 0)
b <- matrix(coef(model))
# Pengujian
wald <- t(R%*%b-q) %*% solve(R%*%cov %*% t(R))%*%(R%*%b-q)
print("Nilai Chi-Kuadrat")
## [1] "Nilai Chi-Kuadrat"
wald
## [,1]
## [1,] 199.735
alpha <- 0.05
df <- 3
J <- qchisq(1-alpha, df)
p_value <- 1 - pchisq(wald, df)
print("Nilai P-value")
## [1] "Nilai P-value"
p_value
## [,1]
## [1,] 0
Hasil pengujian simultan diatas memberikan kesimpulan bahwa terdapat minimal satu kelompok yang berbeda. Untuk melihat lebih dalam kelompok mana saja yang berbeda maka akan dilakukan pengujian secara parsial terhadap kombinasi kelompok yang ada.
# Matriks kontrast R,vektor b dan q
R1 <- matrix(c(0, 1, 0, 0), nrow = 1)
R2 <- matrix(c(0, 0, 1, 0), nrow = 1)
R3 <- matrix(c(0, 0, 0, 1), nrow = 1)
R4 <- matrix(c(0, 1, -1, 0), nrow = 1)
R5 <- matrix(c(0, 1, 0, -1), nrow = 1)
R6 <- matrix(c(0, 0, 1, -1), nrow = 1)
q1 <- c(0)
#Pengujian
wald1 <- t(R1%*%b-q1) %*% solve(R1%*%cov %*% t(R1))%*%(R1%*%b-q1)
wald2 <- t(R2%*%b-q1) %*% solve(R2%*%cov %*% t(R2))%*%(R2%*%b-q1)
wald3 <- t(R3%*%b-q1) %*% solve(R3%*%cov %*% t(R3))%*%(R3%*%b-q1)
wald4 <- t(R4%*%b-q1) %*% solve(R4%*%cov %*% t(R4))%*%(R4%*%b-q1)
wald5 <- t(R5%*%b-q1) %*% solve(R5%*%cov %*% t(R5))%*%(R5%*%b-q1)
wald6 <- t(R6%*%b-q1) %*% solve(R6%*%cov %*% t(R6))%*%(R6%*%b-q1)
print("Nilai Chi-Kuadrat")
## [1] "Nilai Chi-Kuadrat"
wald1
## [,1]
## [1,] 21.41171
wald2
## [,1]
## [1,] 184.4587
wald3
## [,1]
## [1,] 89.99527
wald4
## [,1]
## [1,] 32.02241
wald5
## [,1]
## [1,] 15.27585
wald6
## [,1]
## [1,] 1.071277
df1 <- 1
alpha <- 0.05
J1 <- qchisq(1-alpha, df1)
# Hitung p-value
p_value1 <- 1 - pchisq(wald1, df1)
p_value2 <- 1 - pchisq(wald2, df1)
p_value3 <- 1 - pchisq(wald3, df1)
p_value4 <- 1 - pchisq(wald4, df1)
p_value5 <- 1 - pchisq(wald5, df1)
p_value6 <- 1 - pchisq(wald6, df1)
print("Nilai P-value")
## [1] "Nilai P-value"
p_value1
## [,1]
## [1,] 3.705021e-06
p_value2
## [,1]
## [1,] 0
p_value3
## [,1]
## [1,] 0
p_value4
## [,1]
## [1,] 1.524044e-08
p_value5
## [,1]
## [1,] 9.289654e-05
p_value6
## [,1]
## [1,] 0.3006572
Hasil pengujian parsial memberikan kesimpulan bahwa seluruh partisipasi kelompok subsisten baik di lokasi intraurban dan suburban berbeda terhadap kelompok komersial. Sedangkan dalam kelompok komersial partisipasi kelompok dilokasi intraurban dan suburban ditemukan sama. Hal ini bisa disebabkan oleh motivasi yang kuat diantra kelompok komersial sehingga lokasi tidak berpengaruh.