PES Content Error
Introduction
Berikut merupakan contoh penghitungan content error untuk post enumeration survey sensus pertanian 2024. Pada contoh berikut akan dilakukan penghitungan cotent error untuk BLOK 3 PES & ST.
Untuk laporan error dan debugging dapat mengunjungi link berikut. https://youtu.be/kti_zU2KDBI?si=FQ3rF5yipcIg5Bqq.
Data & Function
Functions
Untuk menghitung content error telah disediakan beberapa function baik untuk penyiapan data maupun penghitungan indikator. Function tersebut akan dijelaskan pada penggunaan.
recodeST = function(st){
st = st %>%
mutate(
device = ifelse(sumber == "PAPI-Desktop", "D", ifelse(sumber == "PAPI-WebEntry", "W", NA))
) %>%
mutate(
id_ruta_st = ifelse(sumber == "CAPI", id_ruta, paste0(id, device)),
b2r202 = as.numeric(gsub(".*#(. *)", "\\1", id_art)),
id_art_st = ifelse(sumber == "CAPI", id_art, as.character(b2r202))
)
st
}
expandDataset= function(pair,st,pes,group, varnames = "var", dropna = T,num_to_bin = 0,numeric = FALSE, matching_only = F){
colnames(st) = c("id_1","id_2","var_st")
colnames(pes) = c("id_1","id_2","var_pes")
contentset = pair %>% left_join(st,by= c("id_ruta_st" = "id_1" ,"id_art_st"= "id_2" ))
contentset = contentset %>% left_join(pes,by= c("id_ruta_pes" = "id_1" ,"id_art_pes"= "id_2" ))
if(matching_only) return ( contentset)
#Na treatment
if (dropna ) {
contentset = contentset %>% filter(!is.na(var_st)| !is.na(var_pes))
contentset[is.na(contentset)] = 0
}else{
contentset[is.na(contentset)] = 0
}
if(numeric) {return (contentset %>% select_at(c(group,"var_st","var_pes")))}
#convert numeric to binary
if(num_to_bin != 0 ){
contentset = contentset %>% mutate(growth = 100*(var_pes-var_st)/var_st,
growth = if_else(is.na(growth),0,growth),
code = "1#1",
code = ifelse(var_st>var_pes & growth< -num_to_bin,"1#0",code),
code = ifelse(var_st<var_pes & growth > num_to_bin,"0#1",code),
code = ifelse(growth <0 & growth > -num_to_bin,"0#0",code)
)%>% select(-var_st,-var_pes,-growth)
contentset = contentset %>% separate_wider_delim(code,"#",names = c("var_st","var_pes"))
}
ctb = contentset %>% group_by_at(c(group,"var_st","var_pes")) %>% summarise(cnt = n()) %>% ungroup()
rlevel = unique(c(ctb$var_st,ctb$var_pes))
grid = expand.grid(unique(ctb$kdprov),rlevel,rlevel)
colnames(grid) = colnames(ctb)[-NCOL(ctb)]
mytab = merge(grid,ctb,all.x = TRUE)
colnames(mytab) = c(group,paste0(varnames,"_st"),paste0(varnames,"_pes"),"cnt")
mytab
}
find_mode <- function(x) {
x = as.numeric(x)
u <- sort(unique(x))
tab <- tabulate(match(x, u))
u[tab == max(tab)][1]
}
computeContent = function(dataset,freq,cencus_var,pes_var, group = "None" ){
dataset = dataset %>% rename("Freq" = freq)
if(group == "None"){
dataset$group = "Nasional"
group = "group"
}
#Produce Cross Tab
ctab = dataset %>% group_by_at(c(group,cencus_var,pes_var)) %>% summarise_at("Freq",sum,na.rm=TRUE) %>% ungroup() %>% spread(key = pes_var,value = Freq)
ctab$total = rowSums(ctab[,-c(1,2)])
idx = colnames(ctab)[-c(1:2)]
coltot = ctab %>% group_by_at(c(group)) %>% summarise_at(idx,sum,na.rm=T)
ctab = bind_rows(ctab, coltot) %>% arrange_at(c(group,cencus_var)) %>% mutate_at(cencus_var ,as.character)
ctab[is.na(ctab)] = "total"
#Prepare variables
vrt = dataset %>% group_by_at(c(group,cencus_var)) %>% summarise_at("Freq",sum,na.rm=TRUE) %>% ungroup() %>% rename(vrt = Freq)
hrz = dataset %>% group_by_at(c(group,pes_var)) %>% summarise_at("Freq",sum,na.rm=TRUE) %>% ungroup()%>% .$Freq
dig = dataset %>% filter(eval(parse(text = paste0(cencus_var,"==",pes_var)))) %>%group_by_at(c(group,pes_var)) %>% summarise_at("Freq",sum,na.rm=TRUE) %>% ungroup()%>% .$Freq
#produce basic indicators
dataset = vrt %>% mutate(vrt = as.numeric(vrt),hrz =as.numeric(hrz),dig = as.numeric(dig),vh = vrt*hrz ) %>%
group_by_at(group) %>% mutate(n = sum(vrt)) %>% ungroup()
dataset = dataset %>% mutate(hrz =hrz ) %>% group_by_at(group) %>% mutate(n = sum(vrt)) %>% ungroup()
dataset = dataset %>% mutate(NDR = ((vrt-hrz)/n)*100,
IOI = (vrt+hrz-2*dig)/((1/n)*(vrt*(n-hrz)+hrz*(n-vrt)))*100
)
#produce aggregate indicators
datasetAgg = dataset %>% group_by_at(c(group,"n")) %>% summarise(across(vrt:vh,sum))
datasetAgg = datasetAgg %>% mutate(AggIOI = (n-dig)/(n-(1/n)*vh),
GDR = (n-dig)/(n-(1/n)*dig),
ROA = dig/n
)
return(list(ctab = ctab,basic = dataset, agg =datasetAgg))
}
computeContentReg = function(dataset,cencus_var,pes_var, group = "None" ){
if(group == "None"){
dataset$group = "Nasional"
group = "group"
}
res = dataset %>% group_by_at(group) %>% summarise(Jumlah_observasi = n(),
Mean_ST = mean(var_st,na.rm = T) ,
Mean_PES = mean(var_pes,na.rm = T) ,
MSE = mse(var_st,var_pes),
RMSE = rmse(var_st,var_pes),
R2 = R2_Score(var_st,var_pes),
MAE = mae(var_st,var_pes),
SMAPE = smape(var_st,var_pes)
)
res
}
showres = function(df){
df %>% kbl() %>% kable_classic_2(full_width=F)
}
exportRegression = function(nasional,provinsi, plot_reg ,var,folder=""){
level = "Nasional"
level2 = "Provinsi"
title = paste0("Tabel Hasil Penghitungan Content Error ",var, " -Regresi")
title1 = paste0("Tabel Hasil Penghitungan Content Error ",var," tingkat ",level)
sheetname = "Nasional"
wb=createWorkbook()
addWorksheet(wb, sheetName = sheetname)
writeData(wb, sheet = sheetname, x = title1, startRow = 1, startCol = 1)
writeData(wb, sheet = sheetname, x = nasional, startRow = 3)
s2 = createStyle(border = "TopBottomLeftRight")
s1 = createStyle( textDecoration = c("BOLD"))
addStyle(wb, sheet = sheetname, style = s1, rows = 1, cols = 1, gridExpand = TRUE)
addStyle(wb, sheet = sheetname, style = s2, rows = 3:(3+NROW(nasional)), cols = 1:NCOL(nasional), gridExpand = TRUE)
title2 = paste0("Tabel Hasil Penghitungan Content Error ",var," tingkat ",level2)
sheetname2 = "Provinsi"
addWorksheet(wb, sheetName = sheetname2)
writeData(wb, sheet = sheetname2, x = title2, startRow = 1, startCol = 1)
writeData(wb, sheet = sheetname2, x = provinsi, startRow = 3)
addStyle(wb, sheet = sheetname2, style = s1, rows = 1, cols = 1, gridExpand = TRUE)
addStyle(wb, sheet = sheetname2, style = s2, rows = 3:(3+NROW(provinsi)), cols = 1:NCOL(provinsi), gridExpand = TRUE)
sheetname3 = "Plot"
title3 = paste0("Diagram Pencar ",var)
addWorksheet(wb, sheetName = sheetname3)
writeData(wb, sheet = sheetname3, x = title3, startRow = 1, startCol = 1)
addStyle(wb, sheet = sheetname3, style = s1, rows = 1, cols = 1, gridExpand = TRUE)
print(plot_reg +xlab(paste(word(var,1),"pada","ST")) +ylab(paste(word(var,1),"pada","PES")))
insertPlot(wb, sheet = sheetname3, fileType = "png", units = "in",startRow = 3 ,startCol = 2)
saveWorkbook(wb, paste0(folder,Sys.Date()," ",title,".xlsx"))
print("Cie ngesavenya berhasil !")
}
exportCategoric = function(nasional, provinsi,var,folder=""){
level = "Nasional"
level2 = "Provinsi"
title = paste0("Tabel Hasil Penghitungan Content Error ",var," -Kategorik")
title1 = paste0("Tabel Tabulasi ",var," tingkat ",level)
sheetname = "Nasional Tabulasi"
wb=createWorkbook()
addWorksheet(wb, sheetName = sheetname)
writeData(wb, sheet = sheetname, x = title1, startRow = 1, startCol = 1)
writeData(wb, sheet = sheetname, x = nasional$ctab, startRow = 3)
s2 = createStyle(border = "TopBottomLeftRight")
s1 = createStyle( textDecoration = c("BOLD"))
addStyle(wb, sheet = sheetname, style = s1, rows = 1, cols = 1, gridExpand = TRUE)
addStyle(wb, sheet = sheetname, style = s2, rows = 3:(3+NROW(nasional$ctab)), cols = 1:NCOL(nasional$ctab), gridExpand = TRUE)
sheetname2 = "Nasional Kelas"
title2 = paste0("Tabel Indikator NDR dan IOI untuk ",var," tingkat ",level)
addWorksheet(wb, sheetName = sheetname2)
writeData(wb, sheet = sheetname2, x = title2, startRow = 1, startCol = 1)
writeData(wb, sheet = sheetname2, x = nasional$basic, startRow = 3)
addStyle(wb, sheet = sheetname2, style = s1, rows = 1, cols = 1, gridExpand = TRUE)
addStyle(wb, sheet = sheetname2, style = s2, rows = 3:(3+NROW(nasional$basic)), cols = 1:NCOL(nasional$basic), gridExpand = TRUE)
sheetname3 = "Nasional Agregat"
title3 = paste0("Tabel Indikator Agregat IOI,GDR, dan ROA untuk ",var," tingkat ",level)
addWorksheet(wb, sheetName = sheetname3)
writeData(wb, sheet = sheetname3, x = title3, startRow = 1, startCol = 1)
writeData(wb, sheet = sheetname3, x = nasional$agg, startRow = 3)
addStyle(wb, sheet = sheetname3, style = s1, rows = 1, cols = 1, gridExpand = TRUE)
addStyle(wb, sheet = sheetname3, style = s2, rows = 3:(3+NROW(nasional$agg)), cols = 1:NCOL(nasional$agg), gridExpand = TRUE)
level = level2
sheetname = "Provinsi Tabulasi"
title1 = paste0("Tabel Tabulasi ",var," tingkat ",level)
addWorksheet(wb, sheetName = sheetname)
writeData(wb, sheet = sheetname, x = title1, startRow = 1, startCol = 1)
writeData(wb, sheet = sheetname, x = provinsi$ctab, startRow = 3)
addStyle(wb, sheet = sheetname, style = s1, rows = 1, cols = 1, gridExpand = TRUE)
addStyle(wb, sheet = sheetname, style = s2, rows = 3:(3+NROW(provinsi$ctab)), cols = 1:NCOL(provinsi$ctab), gridExpand = TRUE)
sheetname2 = "Provinsi Kelas"
title2 = paste0("Tabel Indikator NDR dan IOI untuk ",var," tingkat ",level)
addWorksheet(wb, sheetName = sheetname2)
writeData(wb, sheet = sheetname2, x = title2, startRow = 1, startCol = 1)
writeData(wb, sheet = sheetname2, x = provinsi$basic, startRow = 3)
addStyle(wb, sheet = sheetname2, style = s1, rows = 1, cols = 1, gridExpand = TRUE)
addStyle(wb, sheet = sheetname2, style = s2, rows = 3:(3+NROW(provinsi$basic)), cols = 1:NCOL(provinsi$basic), gridExpand = TRUE)
sheetname3 = "Provinsi Agregat"
title3 = paste0("Tabel Indikator Agregat IOI,GDR, dan ROA untuk ",var," tingkat ",level)
addWorksheet(wb, sheetName = sheetname3)
writeData(wb, sheet = sheetname3, x = title3, startRow = 1, startCol = 1)
writeData(wb, sheet = sheetname3, x = provinsi$agg, startRow = 3)
addStyle(wb, sheet = sheetname3, style = s1, rows = 1, cols = 1, gridExpand = TRUE)
addStyle(wb, sheet = sheetname3, style = s2, rows = 3:(3+NROW(provinsi$agg)), cols = 1:NCOL(provinsi$agg), gridExpand = TRUE)
saveWorkbook(wb, paste0(folder,Sys.Date()," ",title,".xlsx"))
print("Cie ngesavenya berhasil !")
}Dataset Requirement
library("rio")
library("dplyr")
library("tidyr")
library("Metrics")
library("MLmetrics")
library("kableExtra")
library(ggplot2)
library(openxlsx)
library(stringr)
#Load data pairs dan add kode provinsi
pairs= import("2024-01-15 Data Pairs Perbaikan Data Terbaru.xlsx")
pairs = pairs %>% select(idsubsls,id_ruta_pes,id_art_pes,id_ruta_st,id_art_st)
pairs$kdprov = substr(pairs$idsubsls,1,2)
pes_btiga = import("Data/SIS/PES/Data3_1_202312121016.xlsx")
#pes_btiga_2 = import("Data/SIS/PES/Data3_202312121016.xlsx")
# Load data ST dan recode ST ID ke ID Pairs
st_btiga = import("ST 2023-01-14 FINAL/l2_blok3.Rds")
st_btiga = recodeST(st_btiga )Terdapat beberapa dataset yang digunakan pada penghitungan content error
- Pairs : Merupakan data matching ID antara ST dan PES. Data pairs
unik untuk setiap UTP dengan id :
id_rutadanid_artdengan jumlah record 190759 - ST : Data dari ST yang terdiri dari beberapa blok untuk mendapatkan
isian (content) dari variabel ST. Untuk blok 3 unik record adalah
id_ruta,id_art,danid_bidang - PES : Data dari PES yang terdiri dari beberapa blok untuk
mendapatkan isian (content) dari variabel PES. Untuk blok 3 unik record
adalah
id_ruta,id_art,danid_bidang
B3R10 : Jumlah Bidang (Numeric)
Contoh penghitungan content error pertama adalah untuk membandingkan
jumlah bidangdi ST dan PES untuk masing-masing UTP yang
memiliki bidang. Beberapa tahapan umum yang dapat dilakukan adalah
- Matching content error bersandar pada data
pairsyang unik di tingkat utp. Sehingga data PES dan ST yang berada di tingkat roster tertentu (blok 3 : bidang) harus di manipulasi ke tingkat utp. Untuk jumlah bidang hal tersebut dapat dilakukan dengan melakukansummarisedi tingkat art.
st = st_btiga %>% group_by(id_ruta_st,id_art_st) %>% summarise(var_st = n())
pes = pes_btiga %>% group_by(id,index1) %>% summarise(var_pes =n())| id_ruta_st | id_art_st | var_st |
|---|---|---|
| 0000E02C-F2C4-41EC-9E23-02764BD91D77D | 1 | 2 |
| 0001B022-4E10-43E6-9E89-1986A21DDF85D | 1 | 1 |
| 0001E3A9-02E1-4ED9-9308-E511BE8D7EA8D | 1 | 2 |
| 0001E8D4-15A9-481B-AE05-96B61794D63BD | 1 | 1 |
| 00020A07-4A1D-44CC-B534-071BB72F870CD | 1 | 1 |
| id_ruta_st | id_art_st | var_st |
|---|---|---|
| 0000E02C-F2C4-41EC-9E23-02764BD91D77D | 1 | 2 |
| 0001B022-4E10-43E6-9E89-1986A21DDF85D | 1 | 1 |
| 0001E3A9-02E1-4ED9-9308-E511BE8D7EA8D | 1 | 2 |
| 0001E8D4-15A9-481B-AE05-96B61794D63BD | 1 | 1 |
| 00020A07-4A1D-44CC-B534-071BB72F870CD | 1 | 1 |
Setelah proses berikut kedua data unik di tingkat UTP
- Selanjutnya akan dilakukan proses matching antara data
pairs,PES, danSTdengan bantuan funtionexpandDataset(). Untuk menggunakan function tersebut dataPESdanSTharus hanya memiliki 3 kolom yaituid_ruta,id_art, danvarseperti yang telah disiapkan pada proses sebelumnya.
Karena jumlah bidang merupakan variabel numerik.
Terdapat dua pendekatan untuk melakukan pemeriksaan content error yaitu
dengan pendekatan regresi dan pengkategorian
numeric.
Pendekatan regresi
pendekatan pertama adalah dengan metric regresi sehingga pada
pemanggialan expandDataset() perlu beberapa paramaeter
seperti pada kode di bawah. Karena pendekatan yang digunakan adalah
metric regresi maka parameter numeric = T harus
ditambahkan. Parameter kdprov digunakan untuk kepentiangan
tingkat analisis
Hasil dari fungsi tersebut adalah tabel yang dapat digunakan untuk
penghitungan indikator dengan pendekatan metric regresi. Salah satu
tahapan yang penting adalah untuk memeriksa jumlah observasi setelah
proses matching. Pada kasus ini, jumlah observasi 182204 lebih kecil
dari jumlah pairs, hal ini direnakan tidak semua utp memiliki bidang.
Pada proses expandDataset() apabila terdapat isian
na di kedua dataset (PES dan ST) baris tersebut akan di
drop dari dataset. Terkecuali ditambahkan parameter
dropna=F
| kdprov | var_st | var_pes |
|---|---|---|
| 16 | 1 | 1 |
| 16 | 1 | 2 |
| 16 | 1 | 1 |
| 16 | 1 | 0 |
| 16 | 1 | 0 |
| 16 | 1 | 0 |
Untuk mendapatkan hasil penghitungan metric regresi dapat digunakan
function computeContentReg().
resnas_310 = computeContentReg(tabulasi_numeric,"var_st","var_pes")
resnas_310 %>% kbl()%>% kable_classic_2(full_width=F)| group | Jumlah_observasi | Mean_ST | Mean_PES | MSE | RMSE | R2 | MAE | SMAPE |
|---|---|---|---|---|---|---|---|---|
| Nasional | 182204 | 1.75416 | 1.688948 | 1.164563 | 1.079149 | 0.1248034 | 0.6275493 | 0.3725876 |
untuk hasil di tingkat provinsi dapat digunakan kode berikut
resprov_310 = computeContentReg(tabulasi_numeric,"var_st","var_pes",group = "kdprov")
resprov_310 %>%head() %>% kbl()%>% kable_classic_2(full_width=F)| kdprov | Jumlah_observasi | Mean_ST | Mean_PES | MSE | RMSE | R2 | MAE | SMAPE |
|---|---|---|---|---|---|---|---|---|
| 11 | 8810 | 1.617707 | 1.512826 | 0.8397276 | 0.9163665 | 0.0758335 | 0.5225880 | 0.3576803 |
| 12 | 7628 | 1.744363 | 1.603959 | 1.2633718 | 1.1239981 | 0.0369318 | 0.6862874 | 0.4588349 |
| 13 | 7067 | 1.843922 | 1.770341 | 1.0434413 | 1.0214898 | -0.0573159 | 0.6387435 | 0.3447103 |
| 14 | 4596 | 1.593342 | 1.685596 | 1.1544822 | 1.0744683 | 0.2621010 | 0.5561358 | 0.2982367 |
| 15 | 6684 | 1.588420 | 1.515559 | 0.8104428 | 0.9002460 | -0.0474957 | 0.5091263 | 0.3074614 |
| 16 | 7857 | 1.697849 | 1.589538 | 1.0198549 | 1.0098787 | 0.0358863 | 0.5845743 | 0.3593228 |
plot_310 = ggplot(tabulasi_numeric, aes(x=var_st, y= var_pes)) +
geom_point(shape=18, color="blue")+
geom_smooth(method=lm,
color="darkred", fill="blue")
plot_310## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## [1] "Cie ngesavenya berhasil !"
Pengkategorian numeric
Pendekatan kedua adalah dengan mengubah variabel numeric ke kategori binary. algoritma perubahan tersebut adalah dengan mengubah selsih nilai di PES dan ST dengan ketentuan klasifikasi binary berdasarkan cut-off tertentu. Contoh algoritma pengkategorian ulang untuk variabel bidang dengan menggunakan cut-off 30% adalah sebagai berikut| klas_st | klas_pes | syarat | Final Status |
|---|---|---|---|
| 1 | 1 | Selisih nilai variable ST dan PES diantara 0-30 | Positive Match |
| 0 | 0 | Selisih nilai variable ST dan PES diantara -30-0 | Negative Match |
| 1 | 0 | Selisih nilai variable ST dan PES diantara >30 | Positive Unmatch |
| 0 | 1 | Selisih nilai variable ST dan PES diantara <-30 | Negative Unmatch |
Untuk menghasilkan tabel dengan algoritma tersebut, fungsi
expandDataset() dapat digunakan dengan menambahkan argumen
num_to_bin = 30. Parameter varnames juga harus ditambahkan
untuk menyimpan hasil matching dari pes dan st.
tabulasi_recat = expandDataset(pairs,st,pes,"kdprov",num_to_bin = 30)
tabulasi_recat %>%head() %>% kbl()%>% kable_classic_2(full_width=F)| kdprov | var_st | var_pes | cnt |
|---|---|---|---|
| 11 | 0 | 0 | 117 |
| 11 | 0 | 1 | 1381 |
| 11 | 1 | 0 | 2044 |
| 11 | 1 | 1 | 5268 |
| 12 | 0 | 0 | 117 |
| 12 | 0 | 1 | 1456 |
tabel di atas sedikit berbeda dengan hasil
expandDataset() untuk numeric, karena variabel
dikategorisasi dengan ketentuan yang telah disiapkan
Selanjutnya, dilakukan penghitungan indikator content error dengan
pendekaran klasifikasi. hal tersebut dapat dilakukan dengan menggunakan
function computeContent(). Paramameter yang perlu dilakukan
adalah tabel hasil ekpansi, varibael frekuensi cnt,
variabel st var_st, variabel pes var_pes, dan
group kdprov untuk analisis di tingkat provinsi.
resnas_310 = computeContent(tabulasi_recat,"cnt","var_st","var_pes")
resprov_310 = computeContent(tabulasi_recat,"cnt","var_st","var_pes",group = "kdprov")resnas_310$ctab
| group | var_st | 0 | 1 | total |
|---|---|---|---|---|
| Nasional | 0 | 2964 | 35545 | 38509 |
| Nasional | 1 | 43494 | 100201 | 143695 |
| Nasional | total | 46458 | 135746 | 182204 |
resnas_310$basic
| group | var_st | vrt | hrz | dig | vh | n | NDR | IOI |
|---|---|---|---|---|---|---|---|---|
| Nasional | 0 | 38509 | 46458 | 2964 | 1789051122 | 182204 | -4.362692 | 120.9859 |
| Nasional | 1 | 143695 | 135746 | 100201 | 19506021470 | 182204 | 4.362692 | 120.9859 |
resnas_310$agg
| group | n | vrt | hrz | dig | vh | AggIOI | GDR | ROA |
|---|---|---|---|---|---|---|---|---|
| Nasional | 182204 | 182204 | 182204 | 103165 | 21295072592 | 1.209859 | 0.4337953 | 0.566206 |
## [1] "Cie ngesavenya berhasil !"
B3R323 : Jenis irigasi (Kategoric)
Untuk varibel jenis irigasi dapat dilakuan dengan cara yang sama pada
tahap sebelumnya. Untuk melakukan matching jenis irigasi di tingkat utp
dengan variabel di tingkat bidang dapat dilakukan dengan menggunakan
berbagai pendekatan (misal : modus atau penjumlahan kategori). Untuk
kasus ini digunakan kasus kategori. Untuk contoh ini digunakan fungsi
find_mode() untuk melihat modus dari data di tingkat
UTP
st = st_btiga %>% group_by(id_ruta_st,id_art_st) %>% summarise(var_st = find_mode(b3r323))
pes = pes_btiga %>% group_by(id,index1) %>% summarise(var_pes = find_mode(l2_r323))selanjutnya kita dapat melakukan ekspansi dataset dengan
tabulasi_cat = expandDataset(pairs,st,pes,"kdprov")
tabulasi_cat %>% head() %>% kbl()%>% kable_classic_2(full_width=F)| kdprov | var_st | var_pes | cnt |
|---|---|---|---|
| 11 | 0 | 0 | NA |
| 11 | 0 | 1 | 12 |
| 11 | 0 | 2 | NA |
| 11 | 0 | 3 | NA |
| 11 | 0 | 4 | NA |
| 11 | 0 | 5 | 4 |
Hasil tabulasi tersebut dapat dilihat jumlah observasi 182204. Jumlah
ini lebih sedikit dari pairs dan sama dengan jumlah isian utp yang
memiliki bidang. Selanjutnya dapat dihitung indikator content error
dengan funtion computeContent()
resnas_323 = computeContent(tabulasi_cat,"cnt","var_st","var_pes")
resprov_323 = computeContent(tabulasi_cat,"cnt","var_st","var_pes",group = "kdprov")resnas_323$ctab
| group | var_st | 0 | 1 | 2 | 3 | 4 | 5 | 6 | total |
|---|---|---|---|---|---|---|---|---|---|
| Nasional | 0 | 0 | 214 | 12 | 21 | 1 | 123 | 2183 | 2554 |
| Nasional | 1 | 1177 | 24341 | 433 | 195 | 28 | 1146 | 10709 | 38029 |
| Nasional | 2 | 18 | 432 | 59 | 27 | 0 | 42 | 416 | 994 |
| Nasional | 3 | 91 | 453 | 36 | 532 | 3 | 236 | 773 | 2124 |
| Nasional | 4 | 136 | 95 | 0 | 5 | 3 | 41 | 582 | 862 |
| Nasional | 5 | 129 | 930 | 27 | 180 | 8 | 1639 | 2421 | 5334 |
| Nasional | 6 | 6291 | 9005 | 212 | 1077 | 81 | 2658 | 112983 | 132307 |
| Nasional | total | 7842 | 35470 | 779 | 2037 | 124 | 5885 | 130067 | 182204 |
resnas_323$basic
| group | var_st | vrt | hrz | dig | vh | n | NDR | IOI |
|---|---|---|---|---|---|---|---|---|
| Nasional | 0 | 2554 | 7842 | 0 | 20028468 | 182204 | -2.9022414 | 102.16041 |
| Nasional | 1 | 38029 | 35470 | 24341 | 1348888630 | 182204 | 1.4044697 | 42.28298 |
| Nasional | 2 | 994 | 779 | 59 | 774326 | 182204 | 0.1179996 | 93.79425 |
| Nasional | 3 | 2124 | 2037 | 532 | 4326588 | 182204 | 0.0477487 | 75.28853 |
| Nasional | 4 | 862 | 124 | 3 | 106888 | 182204 | 0.4050405 | 99.50989 |
| Nasional | 5 | 5334 | 5885 | 1639 | 31390590 | 182204 | -0.3024083 | 73.02449 |
| Nasional | 6 | 132307 | 130067 | 112983 | 17208774569 | 182204 | 1.2293912 | 49.54931 |
resnas_323$agg
| group | n | vrt | hrz | dig | vh | AggIOI | GDR | ROA |
|---|---|---|---|---|---|---|---|---|
| Nasional | 182204 | 182204 | 182204 | 139557 | 18614290059 | 0.5328065 | 0.2340628 | 0.7659382 |
## [1] "Cie ngesavenya berhasil !"
B3R11 : Luas bidang
Untuk variabel luas bidang yang dikuasai digunakan pendekatan numerik
st = st_btiga %>% group_by(id_ruta_st,id_art_st) %>% summarise(var_st = sum(as.numeric(b3r311),na.rm = T))
pes = pes_btiga %>% group_by(id,index1) %>% summarise(var_pes =sum(l2_r311,na.rm = T))
tabulasi_numeric = expandDataset(pairs,st,pes,"kdprov",numeric = T)
b3r11a_nas = computeContentReg(tabulasi_numeric,"var_st","var_pes")
b3r11a_prov = computeContentReg(tabulasi_numeric,"var_st","var_pes",group = 'kdprov')
b3r11a_nas %>% head() %>% showres()| group | Jumlah_observasi | Mean_ST | Mean_PES | MSE | RMSE | R2 | MAE | SMAPE |
|---|---|---|---|---|---|---|---|---|
| Nasional | 182204 | 9652.057 | 10132.91 | 19559924803 | 139856.8 | 0.0077363 | 5720.426 | 0.6319613 |
| kdprov | Jumlah_observasi | Mean_ST | Mean_PES | MSE | RMSE | R2 | MAE | SMAPE |
|---|---|---|---|---|---|---|---|---|
| 11 | 8810 | 6665.972 | 6415.237 | 83027669 | 9111.952 | 0.2601777 | 3524.836 | 0.5798981 |
| 12 | 7628 | 6927.305 | 6407.144 | 69552696 | 8339.826 | 0.2805060 | 3787.023 | 0.6761860 |
| 13 | 7067 | 7465.366 | 7323.275 | 175463616 | 13246.268 | 0.1169467 | 4395.048 | 0.6669092 |
| 14 | 4596 | 20809.603 | 20847.931 | 462175115 | 21498.258 | 0.3602690 | 9488.688 | 0.5455275 |
| 15 | 6684 | 18119.067 | 18285.889 | 369406588 | 19219.953 | 0.3009228 | 8801.989 | 0.5708778 |
| 16 | 7857 | 16546.644 | 16467.435 | 364275459 | 19086.002 | 0.4059917 | 7663.732 | 0.5144687 |
Plot untuk memastikan kebenaran indikator
plot_B3R11 = ggplot(tabulasi_numeric, aes(x=var_st, y= var_pes)) +
geom_point(shape=18, color="blue")+
geom_smooth(method=lm,
color="darkred", fill="blue")Dari plot di atas dapat dilihat keberadan outlier pada data pes dan st. Karena garis regresi tidak menunjukkan garis y=x maka terdapat penyimpangan linear yang tinggi antara st dan pes untuk variabel luas wilayah.
## `geom_smooth()` using formula = 'y ~ x'
## [1] "Cie ngesavenya berhasil !"
B3R11a : Lahan untuk usaha pertanian
Untuk variabel luas bidang yang dikuasai digunakan pendekatan numerik
st_btiga[,11:20] = st_btiga[,11:20] %>% mutate_if(is.character,as.numeric)
st = st_btiga %>% mutate(b3r11a = rowSums(across(b3r312:b3r320),na.rm=T))
st = st %>% group_by(id_ruta_st,id_art_st) %>% summarise(var_st =sum( b3r11a,na.rm = T))
pes = pes_btiga %>% group_by(id,index1) %>% summarise(var_pes =sum(l2_r311a,na.rm = T))
tabulasi_numeric = expandDataset(pairs,st,pes,"kdprov",numeric = T)
b3r11a_nas = computeContentReg(tabulasi_numeric,"var_st","var_pes")
b3r11a_prov = computeContentReg(tabulasi_numeric,"var_st","var_pes",group = 'kdprov')
b3r11a_nas %>% head() %>% showres()| group | Jumlah_observasi | Mean_ST | Mean_PES | MSE | RMSE | R2 | MAE | SMAPE |
|---|---|---|---|---|---|---|---|---|
| Nasional | 182204 | 9528.55 | 9829.343 | 19552936372 | 139831.8 | 0.0071356 | 5650.302 | NaN |
| kdprov | Jumlah_observasi | Mean_ST | Mean_PES | MSE | RMSE | R2 | MAE | SMAPE |
|---|---|---|---|---|---|---|---|---|
| 11 | 8810 | 6654.628 | 6029.127 | 84682902 | 9202.331 | 0.2135307 | 3613.792 | 0.6085594 |
| 12 | 7628 | 6906.862 | 6171.047 | 69439382 | 8333.030 | 0.2378932 | 3859.316 | 0.7193532 |
| 13 | 7067 | 7455.385 | 7263.366 | 174699054 | 13217.377 | 0.1046528 | 4386.550 | 0.6689032 |
| 14 | 4596 | 20705.323 | 20738.246 | 452656686 | 21275.730 | 0.3642518 | 9444.913 | NaN |
| 15 | 6684 | 18077.214 | 17966.338 | 372847605 | 19309.262 | 0.2945563 | 8865.578 | NaN |
| 16 | 7857 | 16519.720 | 16046.007 | 369723048 | 19228.184 | 0.3947619 | 7788.560 | 0.5402211 |
Plot untuk memastikan kebenaran indikator
plot_B3R11 = ggplot(tabulasi_numeric, aes(x=var_st, y= var_pes)) +
geom_point(shape=18, color="blue")+
geom_smooth(method=lm,
color="darkred", fill="blue")exportRegression(b3r11a_nas,b3r11a_prov,plot_B3R11,var = "B3R11 (Luas Lahan untuk usaha pertanian)")## `geom_smooth()` using formula = 'y ~ x'
## [1] "Cie ngesavenya berhasil !"
B3R321 : Lahan lainnya
Untuk variabel luas bidang yang dikuasai digunakan pendekatan numerik
st = st_btiga %>% group_by(id_ruta_st,id_art_st) %>% summarise(var_st = sum(as.numeric(b3r321),na.rm = T))
pes = pes_btiga %>% group_by(id,index1) %>% summarise(var_pes =sum(l2_r321,na.rm = T))
tabulasi_numeric = expandDataset(pairs,st,pes,"kdprov",numeric = T)
b3r321_nas = computeContentReg(tabulasi_numeric,"var_st","var_pes")
b3r321_prov = computeContentReg(tabulasi_numeric,"var_st","var_pes",group = 'kdprov')
b3r321_nas %>% head() %>% showres()| group | Jumlah_observasi | Mean_ST | Mean_PES | MSE | RMSE | R2 | MAE | SMAPE |
|---|---|---|---|---|---|---|---|---|
| Nasional | 182204 | 123.5625 | 303.0317 | 12051258 | 3471.492 | -0.0474559 | 370.7658 | NaN |
| kdprov | Jumlah_observasi | Mean_ST | Mean_PES | MSE | RMSE | R2 | MAE | SMAPE |
|---|---|---|---|---|---|---|---|---|
| 11 | 8810 | 11.344608 | 386.11033 | 8974843 | 2995.804 | -0.0199630 | 391.89535 | NaN |
| 12 | 7628 | 20.442842 | 236.09714 | 6675742 | 2583.746 | -0.0302639 | 255.36825 | NaN |
| 13 | 7067 | 9.981039 | 59.90845 | 1778542 | 1333.620 | -0.0533683 | 69.68516 | NaN |
| 14 | 4596 | 104.280896 | 109.68494 | 7716006 | 2777.770 | -1.0683692 | 213.93973 | NaN |
| 15 | 6684 | 41.853381 | 319.55027 | 7275561 | 2697.325 | -0.0166267 | 326.91682 | NaN |
| 16 | 7857 | 26.924017 | 408.70052 | 9648881 | 3106.265 | -0.0280854 | 427.37508 | NaN |
Plot untuk memastikan kebenaran indikator
plot_b3r321 = ggplot(tabulasi_numeric, aes(x=var_st, y= var_pes)) +
geom_point(shape=18, color="blue")+
geom_smooth(method=lm,
color="darkred", fill="blue")## `geom_smooth()` using formula = 'y ~ x'
## [1] "Cie ngesavenya berhasil !"
B3R8 : Kepemilikan lahan
Pendekatan yang dilakukan adalah pendekatan kategorik. Karena variabel 308 tidak ada di data ST sehingga digunakan b3r10 sebagai procxy
st = st_btiga %>% group_by(id_ruta_st,id_art_st) %>% summarise(var_st = n()) %>% mutate(var_st = ifelse(var_st >0,1,2))
pes = pes_btiga %>% group_by(id,index1) %>% summarise(var_pes =n())%>% mutate(var_pes = ifelse(var_pes >0,1,2))selanjutnya kita dapat melakukan ekspansi dataset dengan kode
berikut. fungsi dropna = F ditambahkan karena pada matching
beirkut kita ingin melihat tingka konsistensi jawaban orang yang tidak
memiliki lahan.
tabulasi_cat = expandDataset(pairs,st,pes,"kdprov",dropna = F)
tabulasi_cat = tabulasi_cat %>% mutate(var_st = ifelse(var_st==0,2,var_st),
var_pes = ifelse(var_pes==0,2,var_pes)
)
tabulasi_cat %>% head() %>% kbl()%>% kable_classic_2(full_width=F)| kdprov | var_st | var_pes | cnt |
|---|---|---|---|
| 11 | 2 | 2 | 128 |
| 11 | 2 | 1 | 44 |
| 11 | 1 | 2 | 591 |
| 11 | 1 | 1 | 8175 |
| 12 | 2 | 2 | 217 |
| 12 | 2 | 1 | 84 |
Hasil tabulasi tersebut dapat dilihat jumlah observasi 190759. Jumlah
tersebut sama dengan jumlah data pairs. Selanjutnya dapat dihitung
indikator content error dengan funtion computeContent()
resnas_308 = computeContent(tabulasi_cat,"cnt","var_st","var_pes")
resprov_308 = computeContent(tabulasi_cat,"cnt","var_st","var_pes",group = "kdprov")
resnas_308## $ctab
## # A tibble: 3 × 5
## group var_st `1` `2` total
## <chr> <chr> <int> <int> <dbl>
## 1 Nasional 1 171809 7841 179650
## 2 Nasional 2 2554 8555 11109
## 3 Nasional total 174363 16396 190759
##
## $basic
## # A tibble: 2 × 9
## group var_st vrt hrz dig vh n NDR IOI
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Nasional 1 179650 174363 171809 31324312950 190759 2.77 40.6
## 2 Nasional 2 11109 16396 8555 182143164 190759 -2.77 40.6
##
## $agg
## # A tibble: 1 × 9
## # Groups: group [1]
## group n vrt hrz dig vh AggIOI GDR ROA
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Nasional 190759 190759 190759 180364 31506456114 0.406 0.0545 0.946
## [1] "Cie ngesavenya berhasil !"