psych pkg 中的 alpha 函数返回的分数不正确

scores returned by the alpha function in psych pkg are incorrect

请考虑使用以下代码从 alpha 函数

中获取分数
library(psych)

vars <- c('mpg', 'cyl', 'disp', 'hp')
df <- mtcars[0:10, vars]

alpha_results <- alpha(df, check.keys=TRUE)
df$scores <- alpha_results$scores

print(head(df))
 mpg cyl disp  hp  scores
21.0   6  160 110 154.750
21.0   6  160 110 154.750
22.8   4  108  93 136.550
21.4   6  258 110 179.150
18.7   8  360 175 222.075
18.1   6  225 105 170.475

 Item statistics 
      n raw.r std.r r.cor r.drop  mean   sd
mpg- 10  0.86  0.94  0.91   0.85 343.6  2.9
cyl  10  0.91  0.96  0.94   0.91   5.8  1.5
disp 10  0.98  0.93  0.90   0.85 208.6 90.4
hp   10  0.94  0.95  0.94   0.85 122.8 51.4

基于函数的doc

Scores are by default simply the average response for all items that a participant took. If cumulative=TRUE, then these are sum scores. Note, this is dangerous if there are lots of missing values

但是,例如,第一个obs的分数应该是

(-21.0 + 6 + 160 + 110)/4 = 63.75

但结果却是 154.750。

alpha 函数并不是真正用于查找具有截然不同范围的数据分数。基于具有相同范围的项目的正常用例,它通过从最大值 + 最小值中减去这些项目来调整反向得分的项目。在汽车示例的情况下,即 360 + 4 或 364。因此,第一个值是 (364 - 21 + 6 + 160 + 110)/4 = 154.75,如报告的那样。

scoreItems 函数将找到局部最小值和最大值(alpha 也是如此);或者您可以指定它们。

要得到你想要的,你应该使用 scoreItems 函数并指定键以及 min=0max=0

请注意,我使用 cs 函数(来自 psychTools,改编自 Hmisc)在 keys <- list 命令中添加 ""

keys <- list(cars=cs(-mpg, cyl,disp,hp))
test1 <-scoreItems(keys,df,min=0,max=0)
test1$scores
                     cars
Mazda RX4          63.750
Mazda RX4 Wag      63.750
Datsun 710         45.550
Hornet 4 Drive     88.150
Hornet Sportabout 131.075