Soru:
Aykırı değerlerle etkili bir şekilde başa çıkabilen güzel işleve sahip bir R paketi var mı?
xiaodai
2011-06-06 11:57:07 UTC
view on stackexchange narkive permalink

Ele aldığım veri kümelerinden biri oldukça tuhaf. Verileri indirdiğim veri ambarında değişkenlerden birinde 999999999 çok değer var. Görünüşe göre veri ambarının bulunduğu bilgisayar sistemi boş değerlerin depolanmasını desteklemiyor. Bu nedenle 999999999'u "boş" değer olarak kullanırlar. Şimdi, değişken üzerinde R'de sadece güzel koşarsam, anlamlı olmayan aralıklar verir.

  • Aykırı değerleri söz (100, Yüksek) aralığına koyarak başa çıkabilen güzel sürümüne sahip bir paket var mı?
Neden 999999999 değerlerini kaldırmıyorsunuz?
veya "NA" olarak işaretleyin: "foo [foo == 999999999] <- NA`
Veri kümesinde 1000 değişken olduğundan bunları kaldıramıyorum ve hangi değişkenlerin hangi varsayılan değere sahip olduğunu bilmek zor. Ayrıca, yeni bir veri setiyle karşılaşılırsa, aynı şey yapılmalıdır. Örneğin, bazen varsayılan değer 99999990'dır. Bu yüzden bununla başa çıkabilecek genel bir algoritmaya sahip olmak daha iyidir
Iki yanıtlar:
#1
+18
chl
2011-06-06 15:51:04 UTC
view on stackexchange narkive permalink

Verilerinizi

  read.table ('yourfile.txt', header = TRUE, ...)  gibi bir komutla içe aktarıyorsanız 

na.strings = "999999999" belirterek, hangi değerlerin "boş" veya NA değerleri olarak kabul edileceğini belirtebilirsiniz. NA değerlerini belirtmek için farklı değerler de düşünebiliriz. "" İle ilgilenmek istediğimiz aşağıdaki dosyayı ( fake.txt ) düşünün. ve NA değerleri olarak "999999999":

  1 2 .3 999999999 45 6 7  

sonra R'de şunu yapacağız:

  > a <- read.table ("fake.txt", na.strings = c (".", "999999999")) > a V1 V2 V31 1 2 NA2 3 NA 43 5 6 7  

Aksi takdirde, verilerinizi yorumunda @Sacha tarafından belirtildiği gibi her zaman filtreleyebilirsiniz. Burada,

  a [a == "gibi bir şey olabilir." | a == 999999999] <- NA  

Düzenle

Farklı sütunlarda gözlemlenebilecek birden fazla anormal değer olması durumunda farklı değerler, ancak olası kabul edilebilir değerler aralığını biliyorsanız, her bir sütuna bir işlev uygulayabilirsiniz. Örneğin, aşağıdaki filtreyi tanımlayın:

  my.filter <- function (x, eşik = 100) ifelse (x > eşiği, NA, x)  

ardından

  a.filt <- apply (a, 2, my.filter)  

matristeki her> 100 değeri NA ile değiştirir a.

Örnek:

  > a <- replicate (10, rnorm (10)) > a [1,3] <- 99999999> a [5,6] <- 99999999> a [8,10] <- 99999990> özeti (a [, 3]) Min. 1. Çeyrek Medyan Ortalama 3. Çeyrek. Maks. Alan sayısı -1e + 00 0e + 00 0e + 00 1e + 07 1e + 00 1e + 08 > af <- uygula (a, 2, my.filter) > özeti (af [, 3]) Min. 1. Çeyrek Medyan Ortalama 3. Çeyrek. Maks. Alan sayısı NA -1.4640 -0.2680 0.4671 -0.0418 0.4981 0.7444 1.0000  

Elbette vektör tabanlı olabilir:

  > özeti (my.filter (a [, 3], 500)) Min. 1. Çeyrek Medyan Ortalama 3. Çeyrek. Maks. Alan sayısı NA -1.4640 -0.2680 0.4671 -0.0418 0.4981 0.7444 1.0000  
Özel değerlerin ne olduğunu her zaman önceden bilemezsiniz, özellikle de veri kümesini ilk kez görüyorsanız! Bir cut2 veya bununla zaten ilgilenen bir işlev olmasını umuyordum.
@xiaodai Evet, R'de bir "cut ()" işlevi var ama muhtemelen istediğinizi yapmıyor. Cevabımı güncelleyeceğim.
#2
+1
IrishStat
2011-06-07 00:23:01 UTC
view on stackexchange narkive permalink

Müşteri günlük zaman serisi verileriyle uğraşırken bununla oldukça sık karşılaşıyorum. Görünüşe göre birçok muhasebe sistemi, gerçekleşmeyen günlük verileri (yani, o gün için hiçbir işlem kaydedilmedi (zaman aralığı / bölüm) ve bir '0 "sayısı doldurmuyor.Zaman serisi analizi her aralık için bir okuma gerektirdiğinden / kova ihmal edilen gözlem için bir "0" enjekte etmeliyiz. Müdahale Tespiti, esasen anormalliği tespit etmek ve onu tanımlanmış bir profil / sinyal / tahmine dayalı olarak beklenen bir değerle değiştirmek için bir şemadır. Bunlardan birçoğu eksikse değerler "sistem çökebilir Geçmiş verilerde güçlü bir haftanın günü profili olduğunda ve" sıralı değerler yaması "kaydedilmediğinde sorun biraz daha karmaşık hale gelir, bu da değiştirme değerlerinin hesaplama yoluyla elde edilebileceğini düşündürür. bu değerlerin ince ayarının habercisi olarak yerel günlük ortalamalar.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...