Alpha – standardizded or non-standardized

Alpha is an estimate of the amount of variance in a test due to one factor, if and only if the test is in fact unifactorial and all items have equal covariances. Violations of the tau equivalence assumption are less important than the unidimensional assumption.

Alpha can be found in two different forms, from the correlation matrix (which is the equivalent of standardizing the items) or from the raw items. In the former case, \[\alpha = \frac{k\bar{r}}{1+(k-1)\bar{r}}\].

In the later case, \[\alpha = \frac{V_t - \sum{v_i}}{V_t}*\frac{k}{k-1}\] where \(V_t\) is the total test variance and \(v_i\) is each item variance and there are k items.

The greatest difference in how to estimate alpha is whether is using standardized or unstandardized alpha. Estimates based upon the correlations will give different estimates than those based upon the raw data. The alpha function, if given raw data, will report both the standardized and the unstandardized values. omega and splitHalf just report the standardized version.

In the first example I compare raw and standardized alpha using the Neuroticism items from the bfi data set. These items are all keyed in the same direction.
Thus, I use items 16-20 of the bfi data set. (This is done to avoid the problem of reverse keying).

library(psych)
a1 <- alpha(bfi[16:20])
print(a1$total,digits=6)  #show just the alpha stats
##  raw_alpha std.alpha  G6(smc) average_r     S/N       ase    mean      sd
##   0.813963  0.814675 0.799126  0.467854 4.39592 0.0056071 3.16227 1.19633
names(a1)  #what other objects are there to explore
##  [1] "total"         "alpha.drop"    "item.stats"    "response.freq" "keys"          "scores"       
##  [7] "nvar"          "boot.ci"       "boot"          "Unidim"        "Fit"           "call"         
## [13] "title"
o1 <- omega(bfi[16:20],2,plot=FALSE) #although not a good idea to use omega for only 5 items, the alpha will work.
## Loading required namespace: GPArotation
## 
## Three factors are required for identification -- general factor loadings set to be equal. 
## Proceed with caution. 
## Think about redoing the analysis with alternative values of the 'option' setting.
print(o1$alpha)#print the alpha from omega
## [1] 0.8145354
sp <- splitHalf(bfi[16:20])
print(sp$alpha,digits=6)
## [1] 0.814675
gut <- guttman(bfi[16:20]) #note that Guttman has been deprecated
## Warning: Guttman has been deprecated. The use of the splitHalf function is recommended
print(gut$lambda.3,digits=6)
## [1] 0.814535

The alpha function reports two estimates of alpha, the unstandardized and the standardized. omega and splitHalf just report the standardized version. The standardized versions agree with each other to the 5th decimal. They do not agree with the raw alpha, indicating that the items differ in their variance.

Try it with items that need to be reversed (A1 should be reverse scored)

Things become a little more complicated if some of the items should be reverse scored. alpha will provide a warning if items should be reversed, but will not reverse items unless you ask. splitHalf warns and reverses, omega just reverses (and indicates this with a signed loading) but does not warn. guttman neither warns nor does it reverse (and has been deprecated).

a2 <- alpha(bfi[1:5]) #warning because one item is bad and should be reversed
## Warning in alpha(bfi[1:5]): Some items were negatively correlated with the total scale and probably 
## should be reversed.  
## To do this, run the function again with the 'check.keys=TRUE' option
## Some items ( A1 ) were negatively correlated with the total scale and 
## probably should be reversed.  
## To do this, run the function again with the 'check.keys=TRUE' option
print(a2$total,digits=6)  #show just the alpha stats 
##  raw_alpha std.alpha  G6(smc) average_r      S/N       ase    mean       sd
##   0.431456  0.459819 0.533169  0.145479 0.851232 0.0162882 4.21673 0.736851
a3 <- alpha(bfi[1:5],check.keys=TRUE)  #this reverses 1 item
## Warning in alpha(bfi[1:5], check.keys = TRUE): Some items were negatively correlated with total scale and were automatically reversed.
##  This is indicated by a negative sign for the variable name.
print(a3$total,digits=3)
##  raw_alpha std.alpha G6(smc) average_r  S/N     ase mean    sd
##      0.703     0.713   0.683     0.332 2.48 0.00895 4.65 0.898
o2 <- omega(bfi[1:5],2,plot=FALSE)  #we just want alpha
## 
## Three factors are required for identification -- general factor loadings set to be equal. 
## Proceed with caution. 
## Think about redoing the analysis with alternative values of the 'option' setting.
print(o2$alpha)#print the alpha from omega
## [1] 0.7126594
sp <- splitHalf(bfi[1:5])
## Warning in splitHalf(bfi[1:5]): Some items were negatively correlated with total scale and were
## automatically reversed.
print(sp$alpha,digits=6)
## [1] 0.713029
rbfi <- reverse.code("A1",bfi[1:5]) #reverse code A1 
rgut <- guttman(rbfi) #note that Guttman has been deprecated
## Warning: Guttman has been deprecated. The use of the splitHalf function is recommended
print(rgut$lambda.3,digits=6)
## [1] 0.712659