--
You received this message because you are subscribed to the Google Groups "lavaan" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lavaan+un...@googlegroups.com.
To post to this group, send email to lav...@googlegroups.com.
Visit this group at http://groups.google.com/group/lavaan.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups "lavaan" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lavaan+unsubscribe@googlegroups.com.
library(MASS)
library(lavaan)
library(psych)
#Generate 3 multivariate normal variables, with differing degrees of correlation.
Sigma<-matrix(c(1,.6,.3,
.6,1,.4,
.3,.4,1),3,3)
data<-as.data.frame(mvrnorm(n=1000,rep(0,3),Sigma))
colnames(data)<-c("x1","x2","x3")
#Specify and estimate a simple CFA model, fixing the variance to 1.
model<-"y=~NA*x1+x2+x3
y~~1*y"
model_fit<-cfa(model,data=data)
summary(model_fit)
#extract from the results the residual variances and the loadings.
v<-diag(inspect(model_fit,"coef")$theta)
l<-inspect(model_fit,"coef")$lambda
#calculate composite reliability
cr<-sum(l)^2/(sum(l)^2+sum(v))
#Calculate omega
omega(data)$omega_h
#results differ slightly, probably due to differences in computation.
I agree that users need to be careful. On one hand, the current practice of calculating alpha (or KR-20) is equivalent to the tau-equivalent model treating dichotomous variables as continuous variables. The normality assumption is violated. On the other hand, reliability is defined as the proportion of true score variance over observed score variance. Using polychoric correlation does not calculate totally based on "observed" score variance but "latent" score variance. Thus, I think both ways are not ideal solutions. If I have no choice, I may go conservative by using KR-20 (the current practice). Some guidelines are available for interpretation of the magnitude. I think the following article may provide the solution.Sunthud
Raykov, T., Dimitrov, D. M., & Asparouhov, T. (2010). Evaluation of scale reliability with binary measures using latent variable modeling. Structural Equation Modeling, 17(2), 265-279.
I could be missing something, but, for what it is worth, it seems to me that reliability estimates based on polychoric correlations require extreme care in interpretation. Normally, one wishes to estimate the reliability of the observed scores. It seems to me that reliability estimates based on polychorics estimate the reliability one would obtain were one able to observe the underlying continuous scores. In many contexts, that may not be a counterfactual that has much practical import.
Keith
------------------------
Keith A. Markus
John Jay College of Criminal Justice, CUNY
http://jjcweb.jjay.cuny.edu/kmarkus
Frontiers of Test Validity Theory: http://www.routledge.com/books/details/9781841692203/
--
You received this message because you are subscribed to the Google Groups "lavaan" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lavaan+un...@googlegroups.com.
Hello everyone,
I would like to calculate Cronbach's Alpha and McDonald's Omega
Alpha I have always calculated with this function:
alpha(data5[c("Fd01","Fd03","Fd04")])
Since I additionally calculate McDonald's omega, I thought that I could skip the separate alpha calculation, because the alpha is also automatically given in the omega function.
By omega function I mean this one:
omegasubsetHa <- subset(data5, select = c("Fd01","Fd03","Fd04"))
omega(omegasubsetHa, nfactors=1)
So far, both calculation methods always resulted in the same value for alpha. But this was not the case in my current calculation, and here I got different values. Using the alpha function I got alpha = 0.42. Using the omega function I got alpha = 0.39.
My question is now: How can it be that for Cronbach's alpha two different values appear? And, if I should not have made a mistake, which value should I now trust and indicate in my study?
Below you find the output of the two analyses.
Thank you very much for looking at it!
---------------------------------------------
Output of the alpha function:
alpha(data5[c("Fd01","Fd03","Fd04")])
Reliability analysis
Call: alpha(x = data5[c("Fd01", "Fd03", "Fd04")])
raw_alpha std.alpha G6(smc) average_r S/N ase mean sd median_r
0.42 0.39 0.4 0.18 0.65 0.059 3.7 0.97 0.042
lower alpha upper 95% confidence boundaries
0.3 0.42 0.53
Reliability if an item is dropped:
raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
Fd01 0.079 0.080 0.042 0.042 0.087 0.110 NA 0.042
Fd03 -0.085 -0.086 -0.041 -0.041 -0.079 0.130 NA -0.041
Fd04 0.694 0.694 0.531 0.531 2.268 0.037 NA 0.531
Item statistics
n raw.r std.r r.cor r.drop mean sd
Fd01 273 0.76 0.74 0.6057 0.36859 2.8 1.5
Fd03 272 0.80 0.78 0.6705 0.43515 3.5 1.5
Fd04 272 0.45 0.50 0.0062 0.00098 4.6 1.3
Non missing response frequency for each item
1 2 3 4 5 6 miss
Fd01 0.18 0.32 0.22 0.12 0.10 0.07 0
Fd03 0.11 0.19 0.20 0.22 0.18 0.10 0
Fd04 0.02 0.07 0.10 0.18 0.33 0.31 0
---------------------------------------------------
Output of the omega function:
omegasubsetHa <- subset(data5, select = c("Fd01","Fd03","Fd04"))
omega(omegasubsetHa, nfactors=1)
Omega_h for 1 factor is not meaningful, just omega_t
Omega
Call: omegah(m = m, nfactors = nfactors, fm = fm, key = key, flip = flip,
digits = digits, title = title, sl = sl, labels = labels,
plot = plot, n.obs = n.obs, rotate = rotate, Phi = Phi, option = option,
covar = covar)
Alpha: 0.39
G.6: 0.41
Omega Hierarchical: 0.59
Omega H asymptotic: 1.02
Omega Total 0.58
Schmid Leiman Factor loadings greater than 0.2
g F1* h2 u2 p2
Fd01 0.53 0.28 0.72 1
Fd03 1.00 1.00 0.00 1
Fd04 0.00 1.00 1
With eigenvalues of:
g F1*
1.3 0.0
general/max Inf max/min = NaN
mean percent general = 1 with sd = 0 and cv of 0
Explained Common Variance of the general factor = 1
The degrees of freedom are 0 and the fit is 0.01
The number of observations was 273 with Chi Square = 1.7 with prob < NA
The root mean square of the residuals is 0.03
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 0 and the fit is 0.01
The number of observations was 273 with Chi Square = 1.7 with prob < NA
The root mean square of the residuals is 0.03
The df corrected root mean square of the residuals is NA
Measures of factor score adequacy
g F1*
Correlation of scores with factors 1.00 0
Multiple R square of scores with factors 1.00 0
Minimum correlation of factor score estimates 0.99 -1
Total, General and Subset omega for each subset
g F1*
Omega total for total scores and subscales 0.58 0.59
Omega general for total scores and subscales 0.59 0.59
Omega group for total scores and subscales 0.00 0.00
Warning messages:
1: In schmid(m, nfactors, fm, digits, rotate = rotate, n.obs = n.obs, :
Omega_h and Omega_asymptotic are not meaningful with one factor
2: In cov2cor(t(w) %*% r %*% w) :
diag(.) had 0 or NA entries; non-finite result is doubtful
what about alpha
example(reliability) # alpha for the total (all 9 items) = 0.76
## all these also yield 0.76
alpha(HolzingerSwineford1939[paste0("x",1:9)])
alpha(cov(HolzingerSwineford1939[paste0("x",1:9)]))example(lavTables)
reliability(fit, return.total = TRUE)
## matches standard calculate on polychorics:
alpha(lavInspect(fit, "sampstat")$cov)
## as opposed to treating binary data as numeric:
alpha(HSbinary)