Running Omega with Psych library in R

1.8k views Asked by At

I have five items on a construct when i run alpha on it on i get the following results without any errors

 psych::alpha(construct,
         na.rm = TRUE,
         title = 'myscale', 
         n.iter = 1000)

Reliability analysis  myscale  
Call: psych::alpha(x = construct, title = "myscale", na.rm = TRUE, 
n.iter = 1000)

  raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd
  0.81      0.81    0.78      0.46 4.3 0.013  2.6 0.89

 lower alpha upper     95% confidence boundaries
0.78 0.81 0.84 

 lower median upper bootstrapped confidence intervals
 0.77 0.81 0.84

I have been reading the paper From Alpha to omega: A practical solution to the pervasive problem of internal consistency estimation link

It recommends using the code below

MBESS::ci.reliability(construct, interval.type="bca", B=1000, type = "omega") 

$est
[1] 0.8107376

$se
[1] 0.01651936

$ci.lower
[1] 0.7764029

$ci.upper
[1] 0.839944

$conf.level
[1] 0.95

$type
[1] "omega"

$interval.type
[1] "bca bootstrap"

I have been trying to run omega on my sample set using the psych package to keep things consistent in my analysis

psych::omega(m = construct, 
      nfactors = 1, fm = "pa", n.iter = 1000, p = 0.05, 
      title = "Omega", plot = FALSE, n.obs = 506)

I get the two error messages

In factor.scores, the correlation matrix is singular, an approximation is used Omega_h for 1 factor is not meaningful, just omega_t

This warning is occurring because the number of columns are two small for Omega_h. A previous question on SO answers this somewhat McDonalds omega: warnings in R

The error im having is below

Error in fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate = rotate, : I am sorry: missing values (NAs) in the correlation matrix do not allow me to continue. Please drop those variables and try again. In addition: There were 50 or more warnings (use warnings() to see the first 50)

There are no missing values so im not sure about error number two

The details of my construct are

    Q1                  Q2          Q3    
 Min.   :0.000   Min.   :0.000   Min.   :0.000  
 1st Qu.:2.000   1st Qu.:2.000   1st Qu.:2.000  
 Median :3.000   Median :2.000   Median :3.000  
 Mean   :2.597   Mean   :2.393   Mean   :3.227  
 3rd Qu.:3.000   3rd Qu.:3.000   3rd Qu.:4.000  
 Max.   :6.000   Max.   :6.000   Max.   :6.000  

Q4              Q5   
 Min.   :0.00   Min.   :0.000  
 1st Qu.:1.00   1st Qu.:2.000  
 Median :2.00   Median :2.000  
 Mean   :2.17   Mean   :2.445  
 3rd Qu.:3.00   3rd Qu.:3.000  
 Max.   :6.00   Max.   :6.000  

EDIT

Created data with the same properties - 100 entries (Alpha roughly 0.56) but it generates the same error on omega

structure(list(Q1 = c(4, 5, 3, 5, 4, 5, 3, 5, 5, 5, 6, 
3, 5, 4, 6, 5, 5, 6, 7, 4, 5, 5, 3, 4, 4, 5, 4, 3, 5, 4, 5, 5, 
6, 6, 3, 6, 3, 4, 4, 4, 6, 5, 3, 2, 6, 6, 4, 5, 4, 3, 6, 4, 4, 
5, 6, 2, 4, 3, 4, 6, 4, 6, 4, 5, 5, 6, 4, 6, 5, 5, 4, 5, 6, 6, 
2, 5, 4, 3, 4, 4, 4, 6, 3, 3, 5, 4, 4, 4, 5, 5, 5, 3, 6, 6, 6, 
6, 5, 4, 3, 5), Q2 = c(7, 4, 4, 4, 4, 6, 6, 6, 7, 6, 5, 
6, 5, 4, 5, 6, 6, 6, 7, 5, 4, 4, 6, 6, 4, 4, 6, 2, 6, 5, 4, 6, 
4, 6, 6, 6, 5, 4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 6, 2, 6, 6, 5, 4, 
6, 6, 4, 4, 7, 6, 5, 5, 5, 5, 6, 5, 5, 4, 5, 5, 5, 4, 6, 7, 5, 
5, 5, 6, 5, 6, 5, 6, 7, 2, 6, 5, 7, 3, 5, 5, 3, 3, 3, 7, 4, 5, 
6, 6, 6, 5, 7), Q3 = c(5, 4, 5, 6, 4, 4, 5, 4, 2, 6, 5, 
5, 5, 5, 7, 5, 5, 6, 7, 6, 3, 6, 6, 6, 5, 6, 6, 5, 5, 4, 5, 5, 
6, 6, 5, 6, 5, 5, 4, 4, 6, 4, 4, 4, 4, 4, 4, 5, 5, 4, 5, 5, 4, 
3, 5, 4, 5, 6, 6, 6, 4, 5, 5, 5, 6, 4, 5, 5, 7, 4, 5, 6, 6, 5, 
5, 3, 3, 5, 4, 6, 5, 5, 1, 3, 5, 3, 2, 5, 4, 6, 6, 6, 6, 4, 6, 
3, 6, 6, 6, 5), Q4 = c(6, 6, 4, 7, 4, 6, 7, 6, 7, 6, 6, 
6, 5, 7, 7, 6, 6, 5, 7, 7, 6, 6, 7, 7, 6, 6, 6, 5, 6, 7, 5, 6, 
7, 5, 4, 6, 4, 3, 6, 4, 6, 6, 6, 3, 5, 7, 5, 6, 4, 6, 7, 6, 7, 
4, 6, 3, 5, 7, 5, 4, 6, 6, 4, 6, 5, 5, 5, 5, 7, 7, 7, 6, 6, 6, 
5, 6, 6, 4, 5, 7, 6, 7, 3, 5, 6, 5, 6, 5, 5, 7, 7, 6, 6, 2, 7, 
6, 6, 7, 7, 5)), .Names = c("Q1", "Q2", "Q3", 
"Q4"), row.names = c(NA, 100L), class = "data.frame")

Can anyone see where im falling down?

Thank you for your time

1

There are 1 answers

2
Derek Corcoran On BEST ANSWER

so I tried this:

psych::omega(m = construct)

and it worked with this result:

Omega 
Call: psych::omega(m = construct)
Alpha:                 0.56 
G.6:                   0.49 
Omega Hierarchical:    0.53 
Omega H asymptotic:    0.89 
Omega Total            0.6 

Schmid Leiman Factor loadings greater than  0.2 
     g   F1*   F2*   F3*   h2   u2   p2
Q1 0.41  0.30             0.26 0.74 0.65
Q2 0.37  0.25             0.20 0.80 0.67
Q3 0.50        0.25       0.31 0.69 0.80
Q4 0.64              0.23 0.46 0.54 0.89

With eigenvalues of:
    g  F1*  F2*  F3* 
 0.95 0.15 0.06 0.05 

 general/max  6.35   max/min =   2.83
mean percent general =  0.75    with sd =  0.11 and cv of  0.15 
Explained Common Variance of the general factor =  0.78 

The degrees of freedom are -3  and the fit is  0 
The number of observations was  100  with Chi Square =  0  with prob <  NA
The root mean square of the residuals is  0 
The df corrected root mean square of the residuals is  NA

Compare this with the adequacy of just a general factor and no group factors
The degrees of freedom for just the general factor are 2  and the fit is  0.01 
The number of observations was  100  with Chi Square =  0.62  with prob <  0.73
The root mean square of the residuals is  0.03 
The df corrected root mean square of the residuals is  0.05 

RMSEA index =  0  and the 90 % confidence intervals are  NA 0.14
BIC =  -8.59 

Measures of factor score adequacy             
                                                 g   F1*   F2*   F3*
Correlation of scores with factors            0.75  0.37  0.27  0.24
Multiple R square of scores with factors      0.57  0.14  0.07  0.06
Minimum correlation of factor score estimates 0.14 -0.72 -0.86 -0.88

 Total, General and Subset omega for each subset
                                                 g  F1*  F2*  F3*
Omega total for total scores and subscales    0.60 0.37 0.31 0.46
Omega general for total scores and subscales  0.53 0.25 0.25 0.41
Omega group for total scores and subscales    0.06 0.12 0.06 0.05

I checked the defaults and nfactors = 3 and the n.iter = 1. Then I slowly increased the n.iter, and decreased the n.factor, and it keeps working until n.iter =7, and keeping nfactors as 3

psych::omega(m = construct, n.iter = 7, p = 0.05, nfactors = 3)

with your full dataset you should be able to get higher n.iter