麦当劳的Omega在SAS中

huangapple go评论69阅读模式
英文:

McDonald's Omega in SAS

问题

Many sources now recommend use of omega (as developed by McDonald, 1999) as opposed to alpha (Cronbach, 1951) to an estimate the reliability of a multi-item measurement scale.

在目前,许多来源建议使用由McDonald(1999年开发)开发的omega,而不是alpha(Cronbach,1951)来估计多项目测量尺度的可靠性。

In 2020, Hayes & Coutts (Communication Methods and Measures, 14(1), pp 1-24) provided macros to estimate omega in SPSS or SAS. However, at least as of SPSS28, SPSS has included an option to get omega, so the macro isn't needed. Does anyone know if there is a method to get omega in recent versions of SAS? It doesn't seem to exist as an option in PROC CORR. I've searched the documentation, and also googled it, but haven't found it.

在2020年,Hayes & Coutts(Communication Methods and Measures, 14(1),第1-24页)提供了在SPSS或SAS中估计omega的宏。然而,至少在SPSS28版本中,SPSS已经包括了获取omega的选项,因此不再需要该宏。有人知道在最近版本的SAS中是否有获取omega的方法吗?在PROC CORR中似乎没有此选项。我已经搜索了文档,也在Google上搜索过,但没有找到。

(The need for this comes from the fact that as far as I know the macro requires the use of the raw data, and I would like to/need to enter the variance-covariance (or correlation) matrix.)

(这个需求源于我所知道的宏需要使用原始数据,而我希望/需要输入方差-协方差(或相关)矩阵。)

It would not be excessively difficult to get it by running a factor analysis and then calculating omega by hand, but I have to do it for many different scales, so it would be nice to simplify it as much as possible.

通过运行因子分析然后手动计算omega并不会过于困难,但我必须为许多不同的尺度这样做,因此尽量简化将是很好的。

英文:

Many sources now recommend use of omega (as developed by McDonald, 1999) as opposed to alpha (Cronbach, 1951) to an estimate the reliability of a multi-item measurement scale.

In 2020, Hayes & Coutts (Communication Methods and Measures, 14(1), pp 1-24) provided macros to estimate omega in SPSS or SAS. However, at least as of SPSS28, SPSS has included an option to get omega, so the macro isn't needed. Does anyone know if there is a method to get omega in recent versions of SAS? It doesn't seem to exist as an option in PROC CORR. I've searched the documentation, and also googled it, but haven't found it.

(The need for this comes from the fact that as far as I know the macro requires the use of the raw data, and I would like to/need to enter the variance-covariance (or correlation) matrix.)

It would not be excessively difficult to get it by running a factor analysis and then calculating omega by hand, but I have to do it for many different scales, so it would be nice to simplify it as much as possible.

答案1

得分: 1

以下是您要翻译的内容:

"不确定宏的所有功能,但可以从相关矩阵中重新创建第一个简单示例调用(至少包括变量的SAS相关数据集的N、MEAN和STD)。

首先将其示例CSV文件转换为数据集,然后运行%OMEGA()宏

data blirt ;
  infile 'c:\downloads\omega\blirt8.csv' dsd truncover;
  input var1-var8 ;
run;
%omega(data=blirt,items=var1 var2 var3 var4 var5 var6 var7 var8)

以获得预期输出:

这个omega的估计是基于强制的单因素最大似然因素分析的因子载荷,使用SAS的内置FACTOR过程。

Reliability:
Omega
0.785

项目均值、标准差和估计载荷
Mean SD Loading Error Var
VAR1 3.365 1.012 0.663 0.583
VAR2 3.379 1.037 0.642 0.663
VAR3 3.156 0.936 0.576 0.544
VAR4 3.133 1.001 0.711 0.496
VAR5 2.976 1.071 0.549 0.845
VAR6 3.237 0.981 0.643 0.549
VAR7 3.379 1.142 0.376 1.161
VAR8 2.664 1.003 0.398 0.847

现在让我们尝试重新创建它。首先制作一个相关矩阵。然后运行PROC FACTOR。然后转置结果。计算载荷和误差项。并将它们加起来以计算RELIABILITY值。

%let data=blirt ;
%let items= var1 var2 var3 var4 var5 var6 var7 var8;
proc corr data=&data out=&data._corr noprint;
var &items;
run;
proc factor data=&data._corr nfact=1 method=ml outstat=&data._factor noprint;
var &items;
run;
proc transpose data=&data._factor out=result name=varname ;
where type in ('MEAN' 'STD' 'PATTERN');
var &items;
id type;
run;
data result;
set result end=eof;
loading=patternstd;
err = (1-(pattern
pattern))std**2;
lambda+loading;
err_sum+err;
if eof then reliab=(lambda
lambda)/(lambda*lambda+err_sum) ;
if eof then put reliab=;
keep varname mean std loading err reliab;
run;
proc print;
run;

Results

Obs varname MEAN STD loading err reliab

1 var1 3.36493 1.01160 0.66329 0.58338 .
2 var2 3.37915 1.03663 0.64167 0.66287 .
3 var3 3.15640 0.93564 0.57578 0.54390 .
4 var4 3.13270 1.00068 0.71053 0.49650 .
5 var5 2.97630 1.07101 0.54944 0.84517 .
6 var6 3.23697 0.98114 0.64293 0.54927 .
7 var7 3.37915 1.14157 0.37648 1.16144 .
8 var8 2.66351 1.00264 0.39808 0.84681 0.78504"

英文:

Not sure about all of the functions of that macro, but the first simple example call can be re-created from a correlation matrix (at least a SAS correlation dataset that includes the N, MEAN and STD of the variables also).

So first convert their example CSV file into a dataset and run it through the %OMEGA() macro

data blirt ;
  infile 'c:\downloads\omega\blirt8.csv' dsd truncover;
  input var1-var8 ;
run;
%omega(data=blirt,items=var1 var2 var3 var4 var5 var6 var7 var8)

to get the expected output:

This estimate of omega is based on the factor loadings of a forced
single-factor maximum-likelihood factor analysis usings SAS's built-in FACTOR procedure.

                        Reliability:
                               Omega

                               0.785


   Item means, standard deviations, and estimated loadings
               Mean           SD      Loading     Error Var

  VAR1        3.365        1.012        0.663         0.583
  VAR2        3.379        1.037        0.642         0.663
  VAR3        3.156        0.936        0.576         0.544
  VAR4        3.133        1.001        0.711         0.496
  VAR5        2.976        1.071        0.549         0.845
  VAR6        3.237        0.981        0.643         0.549
  VAR7        3.379        1.142        0.376         1.161
  VAR8        2.664        1.003        0.398         0.847

So now let's try to recreate it. So first make a correlation matrix. Then run that through PROC FACTOR. Then transpose the results. Calculate the loading and error terms. And sum them up to be able to calculate the RELIABILITY value.

%let data=blirt ;
%let items= var1 var2 var3 var4 var5 var6 var7 var8;
proc corr data=&data out=&data._corr noprint;
  var &items;
run;
proc factor data=&data._corr nfact=1 method=ml outstat=&data._factor noprint;
  var &items;
run;
proc transpose data=&data._factor out=result name=varname ;
  where _type_ in ('MEAN' 'STD' 'PATTERN');
  var &items;
  id _type_;
run;
data result;
  set result end=eof;
  loading=pattern*std;
  err = (1-(pattern*pattern))*std**2;
  lambda+loading;
  err_sum+err;
  if eof then reliab=(lambda*lambda)/(lambda*lambda+err_sum) ;
  if eof then put reliab=;
  keep varname mean std loading err reliab;
run;
proc print;
run;

Results

Obs    varname      MEAN       STD      loading      err       reliab

 1      var1      3.36493    1.01160    0.66329    0.58338     .
 2      var2      3.37915    1.03663    0.64167    0.66287     .
 3      var3      3.15640    0.93564    0.57578    0.54390     .
 4      var4      3.13270    1.00068    0.71053    0.49650     .
 5      var5      2.97630    1.07101    0.54944    0.84517     .
 6      var6      3.23697    0.98114    0.64293    0.54927     .
 7      var7      3.37915    1.14157    0.37648    1.16144     .
 8      var8      2.66351    1.00264    0.39808    0.84681    0.78504

huangapple
  • 本文由 发表于 2023年7月18日 08:33:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/76708856.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定