2012-04-06 73 views
18

Tôi có chuỗi thời gian x_0 ... x_t. Tôi muốn tính toán phương sai trọng số theo cấp số nhân của dữ liệu. Đó là:Tính toán độ lệch trung bình và độ lệch tiêu chuẩn có trọng số

V = SUM{w_i*(x_i - x_bar)^2, i=1 to T} where SUM{w_i} = 1 and x_bar=SUM{w_i*x_i} 

ref: http://en.wikipedia.org/wiki/Weighted_mean#Weighted_sample_variance

Mục đích là để cơ bản trọng lượng quan sát được tiếp tục trở lại trong thời gian ít hơn. Điều này rất đơn giản để thực hiện nhưng tôi muốn sử dụng càng nhiều càng tốt trong funcitonality càng tốt. Có ai biết điều này tương ứng với R không?

Cảm ơn

+0

Tôi đoán đây là thông số chưa hoàn chỉnh và những gì bạn thực sự muốn phân phối sẽ yêu cầu đặc điểm kỹ thuật tốt hơn về cách xây dựng và chi tiết hơn về giới hạn tổng kết. –

Trả lời

24

R cung cấp giá trị trung bình. ? Trong thực tế, chương trình weighted.mean ví dụ này:

## GPA from Siegel 1994 
wt <- c(5, 5, 4, 1)/15 
x <- c(3.7,3.3,3.5,2.8) 
xm <- weighted.mean(x, wt) 

Thêm một bước:

v <- sum(wt * (x - xm)^2) 
+1

có, tôi đang tìm phương sai trọng số mặc dù. không có nghĩa là – Alex

+0

Hmisc, khi nó bật ra, chỉ cần điều này. – Alex

+0

Lưu ý dòng cuối cùng trong câu trả lời. Đó là phương sai trọng số. –

16

Gói Hmisc chứa các chức năng bạn cần.

Như vậy:

x <- c(3.7,3.3,3.5,2.8) 

wt <- c(5, 5, 4, 1)/15 

xm <- wtd.mean(x, wt) 

var <- wtd.var(x, wt) 

sd <- sqrt(var) 

Đáng tiếc là tác giả của gói Hmisc không bao gồm wtd.sd chức năng rõ ràng. Bạn phải căn bậc hai wtd.var.

Charles Kangai

+2

wtd.mean hoạt động, nhưng wtd.var trong ví dụ của bạn cho 'INF'. tại sao vậy? – Torvon

+0

@Torvon Điều này hiện đã được khắc phục trong phiên bản phát triển của Hmisc. https://github.com/harrelfe/Hmisc/issues/69 –

+0

tổng (wt) không cần phải là 1. – vdesai

0

tôi cũng nhận lỗi từ Hmisc khi sử dụng wtd.var() chức năng. May mắn thay, SDMTools có chức năng tương đương, và thậm chí tính toán SD trực tiếp cho bạn, mà không cần phải lấy sqrt của phương sai.

library(SDMTools) 

x <- c(3.7,3.3,3.5,2.8) 
wt <- c(5, 5, 4, 1)/15 ## Note: no actual need to normalize weights to sum to 1, this will be done automatically. 

wt.mean(x, wt) 
wt.sd(x,wt) 

wt.var(x, wt) 
Các vấn đề liên quan