Odstranění extrémní hodnoty v oblasti výzkumu

hlasů
2

Jsem se podíval na soubor dat, a rozhodl, že by bylo dobré, aby se odstranily odlehlých hodnot, s odlehlým mající definice bytí 2SD od průměru.

Když budu mít soubor údajů, řekněme 500 řádků s 15 různými vlastnostmi, jak mohu odstranit všechny řádky, které mají 1 nebo více atribut, který je 2 směrodatné odchylky od průměru?

Existuje jednoduchý způsob, jak to udělat pomocí R? Dík,

Položena 12/05/2012 v 23:03
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
3

Tam je pravděpodobně mnoho způsobů a pravděpodobně přidat na obalech, aby se s tím vypořádat. Já bych doporučuji zkusit to první:

library(sos); findFn("outlier")

Zde je způsob, jak byste mohli udělat to, co si žádá použití scalefunkce, která může sjednotit vektorů.

#create a data set with outliers
set.seed(10)
dat <- data.frame(sapply(seq_len(5), function(i) 
    sample(c(1:50, 100:101), 200, replace=TRUE)))

#standardize each column (we use it in the outdet function)
scale(dat)

#create function that looks for values > +/- 2 sd from mean
outdet <- function(x) abs(scale(x)) >= 2
#index with the function to remove those values
dat[!apply(sapply(dat, outdet), 1, any), ]

Takže v odpovědi na vaši otázku ano, tam je jednoduchý způsob, jak se tím, že kód, který to mohlo být scvrkla na 1 řádek kódu:

dat[!apply(sapply(dat, function(x) abs(scale(x)) >= 2), 1, any), ]

A Hádám, že je balíček, který může tyto a další věci. sosBalíček je skvělý (IMHO) pro zjištění funkce dělat, co chcete.

Odpovězeno 12/05/2012 v 23:19
zdroj uživatelem

hlasů
2
na.rm = TRUE, ...) {
qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
H <- 1.5 * IQR(x, na.rm = na.rm)
y <- x
y[x < (qnt[1] - H)] <- NA
y[x > (qnt[2] + H)] <- NA
y
}
Odpovězeno 02/01/2013 v 19:44
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more