【问题标题】:creating z-scores创建 z 分数
【发布时间】:2011-09-03 03:11:03
【问题描述】:

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

【问题讨论】:

  • scale 如果你问它,它会居中并缩放。阅读帮助页面。
  • 默认就不用问了吧?

标签: r


【解决方案1】:
mu <- mean(myRow) 

sigma   <- sqrt ( var(myRow)  )

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

【讨论】:

  • 有些地方不太对劲。 sigma 可以使用 sd() 计算。然后使用sigma 的平方根来标准化数据。
  • 使用scale。这更容易。
【解决方案2】:

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

【讨论】:

  • 关于优先级的观点非常好,这让我多次感到困惑。
  • 谢谢!这正是发生的事情:当我使用 (V5-mean)/sd 时,值与 PAWS 给我的值不同。
  • @gavin:我很抱歉这么晚才回复。我最近才意识到正在投票支持回复。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-09
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多