2016-04-13 26 views
1

R ile ilgili bir sorunum var Ben 6 vektör veriye sahibim. Her vektörün ağırlığı olacaktır. Her olası senaryoların miktarını hesaplamam gerekir. Örneğin :expand.grid bellek sınırını aşan çok büyük vektörler

v1=c(1,2) 
v2=c(0,5) 
weights=c(1/3,2/3) 

Normalde kullanırsınız: nihayet

scenarios=data.matrix(expand.grid(v1,v2)) 
results=scenarios %*% weights 

Ve 100% 1 ila% tüm quantiles almak için:

quantiles=quantile(results,seq(0.01,1,0.01),names=FALSE) 

Sorun olması 6 vektörleri: 51,236,234,71,7 ve 8 obs sırasıyla, bana bir 11 G obs ...

R'den bir hata alıyorum ki bu bellek büyüklüğünü 47 Gb ...

Bu büyük matrisi baypas etmek için kullanabileceğim bir alternatif görüyor musunuz? Her bir değer vektörü içinde bir döngü gibi düşünüyorum ve sonucu bir belgeye yazdım. Ama sonra bu ayrı dosyaların yüzdesini nasıl hesaplayacağımı bilmiyorum ...

+0

sadece çiğnemeniz için bir öneri: nüfus büyüklüğünüz gerçekten çok büyük. nüfus pdf'nizi tahmin etmek için örneklemeyi yapmayı düşünür müsünüz? – chinsoon12

cevap

1

Tüm popülasyonu üretmek yerine, pdf'nizi oluşturmak için örnekleme nasıl olur?

N <- 1e6 
scenarios <- unique(matrix(c(sample(1:51, N, replace=T), 
    sample(1:236, N, replace=T), 
    sample(1:234, N, replace=T),  
    sample(1:71, N, replace=T), 
    sample(1:7, N, replace=T), 
    sample(1:8, N, replace=T)), nrow=N)) 
N <- nrow(scenarios) 
weights <- matrix(rep(1/6, 6)) 
quantiles <- quantile(scenarios %*% weights, seq(0.01,1,0.01), names=FALSE) 

OP kesinlikle nüfusun tamamını istiyorsa, ben aşağı

+0

Merhaba teşekkürler Chinson12! Vektörlerimin dağıtımının ne olduğunu nasıl bilebilirim? Benim vektörlerim (1,2,3 ... 51), (1,2, ..., 251), ... Onlar daha çok benziyorlar (0.0714,0.02156,0.0068, ...) o zaman nasıl yapabilirim? Örnek fonksiyonumu benim vektörlerimle mi kullanıyorsunuz? Çözümünüze daha ayrıntılı bir şekilde bakacağım ve ihtiyaçlarıma uyum sağlamak için neler değiştirebileceğime bakacağım. Ama bu örneklemenin gerekli olacağını düşündüğümden oldukça eminim! – stlows

1

Tamam bu görevi alacağından !! Yardımınız için teşekkürler! Örneklemenin gitmesi yol gibi görünüyor!

Sonunda kullandığım kodu chinson12'nin yardımı ile kullanıyorum! Örneklemenin doğru değere doğru yaklaşıp yakışmadığını görmek için bir bootstrap yaptım!

N=1e6 
B=2 
results = c(1:100) 
for (i in 1:B){ 
    scenarios=unique(matrix(c(sample(v1,N,replace=T),sample(v2,N,replace=T),sample(v3,N,replace=T), 
         sample(v4,N,replace=T),sample(v5,N,replace=T),sample(v6,N,replace=T)),nrow = N)) 
    weightedSum = round(scenarios %*% weights,4) 
    results=cbind(results,quantile(weightedSum ,seq(0.01,1,0.01),names=FALSE)) 
} 
write(t(results),"ouput.txt",ncolumns = B + 1) 

Çıktı dosyası harika görünüyor! 4 basamaklı yerlere, tüm yüzdelerim aynı! Böylece en azından bir değere yaklaşıyorlar!

Bu, benim nüfus yüzdelerim için yüzde yüzdelikler olarak söyleniyor mu?

Teşekkürler

+0

Bu son soru, stat alışverişinde arama ve/veya yayınlamanız gerekecek :) – chinsoon12