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