r如何计算非数字数据的标准差和方差?

时间:2017-04-14 18:40:01

标签: r statistics standard-deviation variance

我的任务是计算调查中四个变量的标准差和方差。其中两个变量是数字变量,但另外两个变量不是。我运行了以下代码:

sapply(vclms[1:4], var)

Vclms是包含变量的数据帧,第1列到第4列包括所有上述变量(数字和其他)。我预计它会为非数值变量的方差提供误差,但是得到以下结果:

> sapply(vclms[1:4], var)
     grosswk        spend     hhldsize          sex 
8.383855e+04 4.744934e+04 1.288881e+00 2.434469e-01 
Warning messages:
1: In FUN(X[[i]], ...) :
  Calling var(x) on a factor x is deprecated and will become an error.
  Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.
2: In FUN(X[[i]], ...) :
  Calling var(x) on a factor x is deprecated and will become an error.
  Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.

我不知道你是否可以考虑两个非数字变量(hhldsize和sex)的答案是否正确,但我想知道它是如何得出答案的?

1 个答案:

答案 0 :(得分:3)

正如警告消息所示,这是应该避免的,但如果你有一个因素

x<-factor(c("a","b","c","c","d","b","a","b","a","a"))

该因子中的每个值都由整数表示。

as.numeric(x)
# [1] 1 2 3 3 4 2 1 2 1 1

数字由因子的levels()确定。每个级别都分配一个从1开始的整数。

levels(x)
# [1] "a" "b" "c" "d"

所以a=1b=2等等

执行var(x)时,您确实在做var(as.numeric(x))。请注意,这些数值可能对您的实际数据没有意义。

var(x)
# [1] 1.111111  (plus warning)
var(as.numeric(x))
# [1] 1.111111
var(c(1, 2, 3, 3, 4, 2, 1, 2, 1, 1))
# [1] 1.111111