创建z分数

时间:2011-05-27 05:06:56

标签: r

我有一个由57个变量组成的数据文件。由于测量水平不均衡,我想将其中的12个转换为z分数。我查找了互联网资源和帮助文件。一个互联网资源建议我需要包Rbasic(不存在)。我使用了scale(),它似乎只是以变量为中心。我试过V5-mean / st.dev。这让我非常奇怪的分数。有人可以给我实际的adivce吗?

3 个答案:

答案 0 :(得分:34)

scale()是正确的选择:

> x <- 1:10
> scale(x)
            [,1]
 [1,] -1.4863011
 [2,] -1.1560120
 [3,] -0.8257228
 [4,] -0.4954337
 [5,] -0.1651446
 [6,]  0.1651446
 [7,]  0.4954337
 [8,]  0.8257228
 [9,]  1.1560120
[10,]  1.4863011
attr(,"scaled:center")
[1] 5.5
attr(,"scaled:scale")
[1] 3.02765
> (x - mean(x)) / sd(x)
 [1] -1.4863011 -1.1560120 -0.8257228 -0.4954337 -0.1651446
 [6]  0.1651446  0.4954337  0.8257228  1.1560120  1.4863011
> mean(x)
[1] 5.5
> sd(x)
[1] 3.02765

注意从scale()返回的对象中的属性是输入数据的平均值和标准差。

现在你没有提供真实的代码来展示你如何计算“V5-mean / st.dev”,但如果你这样做的话,那么运算符优先级可能会让你失意。例如,这不会返回正确的z分数:

> x - mean(x) / sd(x)
 [1] -0.8165902  0.1834098  1.1834098  2.1834098  3.1834098
 [6]  4.1834098  5.1834098  6.1834098  7.1834098  8.1834098

答案 1 :(得分:3)

mu <- mean(myRow) 

sigma   <- sqrt ( var(myRow)  )

myRow <- (myRow - mu )/ sqrt(sigma)

答案 2 :(得分:0)

简单地说,您忘记了括号:x - mean(x)/ sd(x)

正确的代码是: x - mean(x) / sd(x)