Công thức nào được sử dụng cho độ lệch chuẩn trong R?


19

Công thức nào được sử dụng trong hàm độ lệch chuẩn sdtrong R?


Nói chung, bạn sẽ có thể đọc mã của hàm bằng cách gọi nó mà không cần dấu ngoặc đơn, như Gschneider đã làm.
Owe Jessen

2
@OweJessen Trong khi sự thật, điều này thường không hữu ích như người ta nghĩ. Nhiều hàm trong R chỉ là các hàm bao gọi mã C bên dưới. Ví dụ: sd dẫn bạn đến var, dẫn bạn đến .Call (C_cov, x, y, na.method, FALSE).
Erik

Câu trả lời:


31

Như @Gschneider đã chỉ ra, nó tính toán độ lệch chuẩn mẫu

Σtôi= =1n(xtôi-x¯)2n-1

mà bạn có thể dễ dàng kiểm tra như sau:

> #generate a random vector
> x <- rnorm(n=5, mean=3, sd=1.5)
> n <- length(x)
> 
> #sd in R
> sd1 <- sd(x)
> 
> #self-written sd
> sd2 <- sqrt(sum((x - mean(x))^2) / (n - 1))
>  
> #comparison
> c(sd1, sd2)   #:-)
[1] 0.6054196 0.6054196

4
Nếu bạn nhìn vào trang trợ giúp (? Sd), nó sẽ nói "Giống như var, cái này sử dụng mẫu số n-1", nếu vì lý do nào đó bạn không tin mô phỏng của ocram :-)
Matt Krause

@ Matt: Có lẽ họ nên cập nhật tệp trợ giúp đó và nói điều gì đó như "cái này trả về sqrt của var"?
Owe Jessen

@OweJessen, tôi nghĩ rằng nó thực sự nói rằng "var trả về hình vuông của nó!"
Matt Krause

Xem thêm: stackoverflow.com/questions/9508518/ trên để tìm hiểu lý do tại sao mô phỏng này có thể cho kết quả khác nhau cho cả hai chức năng.
Tim

Một cách đơn giản khác để kiểm tra đó là sd( c(-1,0,1) )kết quả đầu ra 1.
kjetil b halvorsen

12

Vâng. Về mặt kỹ thuật, nó tính toán phương sai mẫu, và sau đó lấy căn bậc hai:

> sd
function (x, na.rm = FALSE) 
{
if (is.matrix(x)) 
    apply(x, 2, sd, na.rm = na.rm)
else if (is.vector(x)) 
    sqrt(var(x, na.rm = na.rm))
else if (is.data.frame(x)) 
    sapply(x, sd, na.rm = na.rm)
else sqrt(var(as.vector(x), na.rm = na.rm))
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.