'NA' değerleri R cinsinden glm olarak nasıl ele alınır?


19

Neredeyse bin değişken (V1) ve yaklaşık 200 milyon veri noktası içeren bir veri tablosu T1'im var. Veriler seyrek ve girişlerin çoğu NA. Her veri noktasının diğerinden ayırt etmek için benzersiz bir kimliği ve tarih çifti vardır.

Ayrı bir değişkenler kümesi (V2) içeren başka bir tablo T2 var. Bu tabloda ayrıca T2'deki girişleri benzersiz şekilde tanımlayan kimlik ve tarih çifti vardır.

T1'deki verilerin T2'deki değişkenlerin değerlerini tahmin etmek için kullanılabileceğinden şüpheleniyoruz.

Bunu kanıtlamak için, R'de 'glm' modelini uygulamayı düşündüm ve T2'de T1'deki değişkenlere bağlı bazı değişkenleri gerçekten bulabileceğimizi kontrol ettim.

T2'deki her değişken için, aynı kimlik ve tarih çiftine sahip T1'deki tüm verileri çekmeye başladım, bu da bazı test değişkenleri için çok daha küçük ~ 50K veri noktaları ile sonuçlandı.

Glm uygulaması ile karşılaştığım sorunlar şu şekildedir.

  1. Bazı durumlarda bana 'uygun bulunamadı' hatası ve 'glm.fit: algoritma birleşmedi' uyarısı veriyor. Neden gösterildiğinden emin değilim?

  2. NA'lar nasıl glm ile tedavi edilir? Önce 'NA' içeren tüm kayıtları kaldırır ve sonra uydurma gerçekleştirir mi?

  3. Önce tüm NA'ları kaldırmak ve sonra 'glm' demek iyi bir stratejidir. Çoğu NA olduğu için bunun veri noktalarını önemli ölçüde azaltabileceğinden korkuyorum.

  4. Katsayıları hesaplamak için hangi yöntem kullanılır. Çıktının nasıl hesaplandığını tartışan herhangi bir web sitesi, makale veya kitap bulamadım.

Ben 'NA' ile ve olmadan glm test ve veri uyurken NAs dikkate alınan difft cevapları bulundu:

Örnek 1:

> tmpData
  x1 x2 x3        Y
1  1  1  1        3
2  1  0  4        5
3  1  2  3        6
4  0  3  1        4

Call:  glm(formula = as.formula(paste(dep, " ~ ", paste(xn, collapse = "+"))), 
    na.action = na.exclude)

Coefficients:
                      (Intercept)  as.numeric(unlist(tmpData["x1"]))  as.numeric(unlist(tmpData["x2"]))  
                        5.551e-16                          1.000e+00                          1.000e+00  
as.numeric(unlist(tmpData["x3"]))  
                        1.000e+00  

Degrees of Freedom: 3 Total (i.e. Null);  0 Residual
Null Deviance:      5 
Residual Deviance: 9.861e-31    AIC: -260.6 

Örnek 2:

'x1'    'x2'    'x3'    'Y'
100000  1   NA  2
1   1   1   3
1   NA  -1124   2
1   0   4   5
1   2   3   6
0   3   1   4



Coefficients:
                      (Intercept)  as.numeric(unlist(tmpData["x1"]))  as.numeric(unlist(tmpData["x2"]))  as.numeric(unlist(tmpData["x3"]))  
                       -2.3749044                         -0.0000625                          0.6249899                          1.8749937  

Degrees of Freedom: 5 Total (i.e. Null);  2 Residual
Null Deviance:      13.33 
Residual Deviance: 1.875    AIC: 20.05 

Yanıtlar:


27

NA İşleme: glm'nin eksik verileri nasıl işleyeceğini kontrol edebilirsiniz. glm (), na.actionaşağıdaki genel işlevlerden hangisinin glm tarafından verilerde NA'yı işlemek için kullanılması gerektiğini belirten bir bağımsız değişkene sahiptir:

  • na.omitve na.exclude: gözlemler eksik değerler içeriyorsa kaldırılır; na.exclude kullanılırsa bazı işlevler, atlanan durumlar için NA'lar ekleyerek artıklar ve tahminleri doğru uzunlukta doldurur.
  • na.pass: NA'lar dahil tüm verileri sakla
  • na.fail: nesneyi yalnızca eksik değer içermiyorsa döndürür

Na.action ayarlamazsanız, glm (), burada bir varsayılan ayarlı olup olmadığını görmek için R'nin global seçeneklerini kontrol eder. Seçeneklerinize getOption("na.action")veya ile erişebilirsiniz options("na.action")ve örneğin, ile ayarlayabilirsiniz. options(na.action = "na.omit") Ancak, örnek 1'de verdiğiniz R çıkışından, ayarladığınız anlaşılıyor na.action = na.omit. Yani, evet, en azından bu durumda, takmadan önce NA'lı tüm vakaları / satırları kaldırıyorsunuz. Ayrıca, na.action = na.passveri NAs (denemek) olduğunda glm () başarısız olur neden eminim.

Hatalar: glm (), maksimum olabilirlik tahminleri yapmak için yinelemeli bir prosedür (yinelenen ağırlıklı en küçük kareler; IWLS) kullanıyor. Bazen hatalar alırsınız, çünkü sadece önceden tanımlanmış sayıda yinelemeden geçecek ve eğer uygun değilse, pes eder. Bu sayı, varsayılan olarak olan maksimum değişken tarafından kontrol edilir maxit = 25. Daha yükseğe ayarlamayı deneyebilirsiniz, ancak bu daha uzun sürecektir. (Ayarladıysanız trace=TRUE, size her yinelemenin sonucunu gösterecektir.)

Diğer bilgi kaynakları: glm için yardım dosyasına erişilebilir ?glmveya help(glm)bu bilgilerin çoğu açıklanabilir . Diğer iki yararlı kaynak:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.