2013-09-07 9 views
5

Lasciate che vi faccia un esempio:"Top 20% delle persone che guadagnano l'80% dei soldi" ... questo tipo di risultato utilizzando R

person | salary 
---------------- 
1  | 30'000 
2  | 10'000 
3  | 15'000 
4  | 25'000 
5  | 80'000 
6  | 56'000 
... | ... 

I passi da compiere per arrivare a questo risultato sarebbe essere per ordinare i salari e quindi creare una nuova tabella dando la condivisione di righe/persone dall'inizio fino alla riga rispettiva e la quota della somma degli stipendi dall'inizio fino alla riga corrispondente (dei salari totali).

Quindi basta prendere la riga più vicina al 20% per le persone e sappiamo quanto guadagnano.

Questa è una domanda piuttosto standard - ma poiché non so come fare riferimento ad esso verbalmente non posso google.

Quindi mi piacerebbe se qualcuno potesse dirmi cosa "chiamare questo" e come calcolare e tracciare questo in R il più semplice - quindi niente loop e roba. La mia intuizione mi dice che ci sono almeno 5 pacchetti e 10 funzioni che affrontano questo scenario. Forse qualcosa di simile a summary() con quantili fissi.

Quindi supponiamo che la tabella qui sopra per essere disponibile come un frame di dati:

salaries <- data.frame(person = c(1,2,3,...), salary = c(30000,...))

+2

Si noti che il 20% delle persone in genere guadagna il 20% del denaro. È il * top * 20% che probabilmente ne fa di più. Il tuo corpo di domande sembra chiedere il 20% in più, ma il titolo della tua domanda è un po 'fuorviante. –

+1

La cosiddetta regola "80-20" è un'istanza specifica di una [distribuzione della legge di alimentazione] (https://en.wikipedia.org/wiki/Power_law). [Questo post] (http://tuvalu.santafe.edu/~aaronc/powerlaws/) ha alcune informazioni interessanti su diverse lingue, tra cui R. C'è anche un pacchetto R, [poweRlaw] (http: //cran.r -project.org/web/packages/poweRlaw/index.html), che non mi è familiare, ma è evidentemente scritto dall'utente CV @csgillespie. – gung

risposta

1

Utilizzare il set di dati SLID proventi derivanti dalla car -package:

library(car) 

dat <- SLID[!is.na(SLID$wage),]  # Remove missing values 
dat$income <- dat$wage*40*50   # "translate" the wages to their full time annual earnings equivalent. 
dat$id <- seq(1,nrow(dat))  

# Create a data.frame with a person ID and their annual income: 
keep <- data.frame(id = seq(1, nrow(dat)), 
        income = dat$income) 
keep <- keep[order(keep$income, decreasing = TRUE),] # Descending ordering according to income 
keep$accum <- cumsum(keep$income)      # Cumulative sum of the descending incomes 
keep$pct <- keep$accum/sum(keep$income)*100   # % of the total income 

keep$check <- keep$pct<80      # Check where the % is smaller than 80% 
threshold <- min(which(keep$check == FALSE)) # First line where % is larger than 80% 
border <- threshold/nrow(keep)*100    # Check which percentile that was 
border <- round(border, digits = 2) 
paste0(border, "% of the people earn 80% of the income") 

#[1] "62.41% of the people earn 80% of the income" 

La classica 80-20 governare come ci si aspetterebbe, mostrerebbe "il 20% delle persone guadagna l'80% del reddito". Questa regola non si applica qui, come si può vedere ..

L'argomento invertito:

# The 20% of the people earn X % of total income: 

linenr <- ceiling(1/5*nrow(keep)) 
outcome2 <- round(keep$pct[linenr], digits = 2) 
paste0(outcome2, "% of total income is earned by the top 20% of the people") 

# [1] "36.07% of total income is earned by the top 20% of the people" 

Si noti che i numeri qui presentati non sono rappresentativi per il mondo reale :)

Inoltre, Wikipedia ha qualche informazione in più sul principio di Pareto, che è anche conosciuto come la regola 80-20. Sembra che questa regola appaia in più impostazioni, come business, economia e matematica.

Problemi correlati