2013-08-09 9 views
6

मैं एक ऐसे फ़ंक्शन का उपयोग करना चाहता था जो मुझे जल्दी से वेक्टर विज्ञापन का मानक विचलन दे, मुझे वेक्टर में तत्वों के लिए वजन शामिल करने की अनुमति देता है। अर्थातवजन के साथ त्वरित मानक विचलन

sd(c(1,2,3))  #weights all equal 1 
#[1] 1 
sd(c(1,2,3,3,3)) #weights equal 1,1,3 respectively 
#[1] 0.8944272 

भारित साधन के लिए मैं library(SDMTools) उदा से wt.mean() उपयोग कर सकते हैं

> mean(c(1,2,3)) 
[1] 2 
>  wt.mean(c(1,2,3),c(1,1,1)) 
[1] 2 
> 
>  mean(c(1,2,3,3,3)) 
[1] 2.4 
>  wt.mean(c(1,2,3),c(1,1,3)) 
[1] 2.4 

लेकिन wt.sd समारोह प्रदान करने के लिए मैं क्या सोचा था कि मैं चाहता था नहीं लगता है:

> sd(c(1,2,3)) 
[1] 1 
>  wt.sd(c(1,2,3),c(1,1,1)) 
[1] 1 
>  sd(c(1,2,3,3,3)) 
[1] 0.8944272 
>  wt.sd(c(1,2,3),c(1,1,3)) 
[1] 1.069045 

मैं एक समारोह है कि भारित sd मुझ से 0.8944272 रिटर्न की उम्मीद कर रहा हूँ। अधिमानतः मैं की तरह एक data.frame पर इस का उपयोग करेंगे:

data.frame(x=c(1,2,3),w=c(1,1,3)) 
+0

नोट 'SDMTools :: wt.var' से डॉक्स:" wt.var भारित मतलब गणना जीएनयू scentific लाइब्रेरी के समीकरणों का उपयोग करने का निष्पक्ष विचरण है। " – Roland

उत्तर

3

आप rep उपयोग कर सकते हैं उनके वजन के अनुसार मूल्यों को दोहराने के लिए। फिर, परिणामस्वरूप वेक्टर के लिए sd की गणना की जा सकती है।

x <- c(1, 2, 3) # values 
w <- c(1, 1, 3) # weights 

sd(rep(x, w)) 
[1] 0.8944272 
+0

+1 - लेकिन 'Hmisc :: wtd.var' के कार्यान्वयन पर एक नज़र डालें, जो बहुत अधिक स्केलेबल दिखता है। – flodel

संबंधित मुद्दे