Teknik Informatika
Universitas Islam Negeri Maulana Malik Ibrahim Malang
Dosen Pembimbing: Prof. Dr. Suhartono, M.Kom
Previously, in our Inequality course, we’ve been looking at data. We started with some simulated data
library("ineq")
load(url("http://freakonometrics.free.fr/income_5.RData"))
(income=sort(income))
## [1] 19233 23707 53297 61667 218662
Ada sebuah pertanyaan atau persoalan seperti berikut :
Bagaimana kita bisa mengatakan bahwa ada ketidaksetaraan dalam sampel ini? Jika kita melihat kekayaan yang dimiliki oleh orang termiskin, orang termiskin (1 dari 5) memiliki 5% dari kekayaan; dua bagian bawah (2 dari 5) memiliki 11%, dll
income[1]/sum(income)
## [1] 0.05107471
sum(income[1:2])/sum(income)
## [1] 0.1140305
sum(income[1:3])/sum(income)
## [1] 0.2555648
sum(income[1:4])/sum(income)
## [1] 0.4193262
Jika kita merencanakan nilai-nilai itu, kita mendapatkan kurva Lorenz seperti berikut:
plot(Lc(income))
points(c(0:5)/5,c(0,cumsum(income)/sum(income)),pch=19,col="blue")
Sekarang, bagaimana jika kita mendapat 500 pengamatan (dan tidak hanya 5). Dalam hal ini, alat alami untuk memvisualisasikan data tersebut (atau untuk lebih spesifik, distribusinya) adalah histogram.
load(url("http://freakonometrics.free.fr/income_500.RData"))
summary(income)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2191 23831 42755 77012 87428 2003241
hist(log(income),probability=TRUE,col="light blue",border="white")
lines(density(log(income)),col="red")
u=seq(6,15,length=251)
lines(u,dnorm(u,mean(log(income)),sd(log(income))),col="blue")
Di sini kita menggunakan histogram untuk memvisualisasikan sampel kita. Tetapi tidak pada pendapatan, pada logaritma pendapatan (karena beberapa outlier, kita tidak dapat memvisualisasikan apa pun pada histogram). Sekarang, menghitung indeks Gini untuk mendapatkan beberapa informasi tentang pertidaksamaan.
gini=function(x){
+ n=length(x)
+ mu=mean(x)
+ g=2/(n*(n-1)*mu)*sum((1:n)*sort(x))-(n+1)/(n-1)
+ return(g)}
The problem is that, in practice, having an index without any confidence interval can be meaningless. To compute a confidence interval, we can use a bootstrap procedure.
boot=function(x,f,b=500){
+ n=length(x)
+ F=rep(NA,n)
+ for(s in 1:b){
+ idx=sample(1:n,size=n,replace=TRUE)
+ F[s]=f(x[idx])}
+ return(F)}
G=boot(income,gini,1000)
hist(G,col="light blue",border="white",probability=TRUE)
The red segments is the 90% confidence interval.
Another popular tool is plot Pareto, di mana kita merencanakan logaritma fungsi kelangsungan hidup kumulatif terhadap logaritma pendapatan.
n=length(income)
x=log(sort(income))
y=log((n:1)/n)
plot(x,y)
Jika titik berada pada garis lurus, itu berarti bahwa pendapatan dapat dimodelkan dengan distribusi Pareto. Jelas, itu tidak terjadi di sini.
Kami telah melihat sebelumnya bagaimana untuk mendapatkan kurva Lorenz. Sebenarnya, adalah mungkin untuk mendapatkan juga kurva Lorenz untuk beberapa distribusi parametrik, misalnya beberapa yang log-normal.
plot(Lc(income))
lines(Lc.lognorm,param=1.5,col="red")
lines(Lc.lognorm,param=1.2,col="red")
lines(Lc.lognorm,param=.8,col="red")
Sebenarnya, adalah mungkin untuk menyesuaikan beberapa distribusi parametrik. Perhatikan bahwa kadang-kadang, kita harus mengubah skala, dan menggunakan tahun 000-an dolar, bukan dolar,
library(MASS)
fitdistr(income/1e3,"gamma")
## shape rate
## 1.0812757769 0.0140404379
## (0.0604530180) (0.0009868055)
Sekarang, pertimbangkan dua distribusi, gamma satu, dan log-normal (dilengkapi dengan teknik kemungkinan maksimum)
(fit_g <- fitdistr(income/1e2,"gamma"))
## shape rate
## 1.0812757769 0.0014040438
## (0.0473722529) (0.0000544185)
(fit_ln <- fitdistr(income/1e2,"lognormal"))
## meanlog sdlog
## 6.11747519 1.01091329
## (0.04520942) (0.03196789)
Kita dapat memvisualisasikan nya dalam plot atau grafik
> u=seq(0,2e5,length=251)
> hist(income,breaks=seq(0,2005000,by=5000),
+ col=rgb(0,0,1,.5),border="white",
+ xlim=c(0,2e5),probability=TRUE)
> v_g <- dgamma(u/1e2, fit_g$estimate[1],
+ fit_g$estimate[2])/1e2
> v_ln <- dlnorm(u/1e2, fit_ln$estimate[1],
+ fit_ln$estimate[2])/1e2
> lines(u,v_g,col="red",lwd=2)
> lines(u,v_ln,col=rgb(1,0,0,.4),lwd=2)