Nothing
#created 1/20/2026 as helper function for CFA (code from omega -- might use in omega)
#need to handle a gmodel
omegaStats <- function(r,loads =NULL,Phi=NULL,gload=NULL,group=NULL, h2=NULL,covar=FALSE,lavaan=NULL){
cl <- match.call()
nvar <- ncol(r)
if(!is.null(lavaan)) { fit <- lavaan #grab the lavaan output
loads <- fit@Model@GLIST$lambda
colnames(loads) <- fit@Model@dimNames[[3]][[1]]
rownames(loads) <- fit@Model@dimNames[[1]][[1]]
Phi <- fit@Model@GLIST$psi
rownames(Phi) <- colnames(Phi) <- colnames(loads)
}
## normal case
if(is.null(gload)) gload <- loads[,1]
if(is.null(group)) group <- loads[,-1]
if(is.null(loads) ) loads <- cbind(gload,group)
if(is.null(h2)) h2 <- rowSums(loads^2)
# if(is.null(Phi)) {h2 <- diag(loads %*% t(loads) )} else {h2 <- diag(group %*% Phi %*% t(group))}
nfactors <- ncol(group)
Vt <- sum(r) #find the total variance in the scale
Vitem <- sum(diag(r))
gsq <- (sum(gload))^2
u2 <- diag(r) - h2
uniq <- sum(u2)
om.tot <- (Vt-uniq)/Vt
om.limit <- gsq/(Vt-uniq)
alpha <- ((Vt-Vitem)/Vt)*(nvar/(nvar-1))
sum.smc <- sum(smc(r,covar=covar))
lambda.6 <- (Vt +sum.smc-sum(diag(r)))/Vt
omega_h <- gsq/Vt
om.tot <- (Vt-uniq)/Vt
om.limit <- gsq/(Vt-uniq)
alpha <- ((Vt-Vitem)/Vt)*(nvar/(nvar-1))
Loads<- cbind(gload,group)
R2<- fsi(f=Loads,phi=NULL,r=r)
#find the subset omegas (taken from omega)
omg <- omgo <- omt<- rep(NA,nfactors+1)
sub <- apply(loads,1,function(x) which.max(abs(x[2:(nfactors+1)]))) #find the items
grs <- 0
for(group in (1:nfactors)) {
groupi <- which(sub==group)
if(length(groupi) > 0) {
Vgr <- sum(r[groupi,groupi])
gr <- sum(loads[groupi,(group+1)]) #?
grs <- grs + gr^2
omg[group+1] <- gr^2/Vgr
omgo[group+1] <- sum(loads[groupi,1])^2/Vgr
omt[group+1] <- (gr^2+ sum(loads[groupi,1])^2)/Vgr
}
omgo[1] <- sum(loads[,1])^2/sum(r) #omega h
omg[1] <- grs/sum(r) #omega of subscales
omt[1] <- om.tot
om.group <- data.frame(total=omt,general=omgo,group=omg)
rownames(om.group) <- colnames(loads)[1:(nfactors+1)]
om.group <- as.matrix(om.group)
}
result <- list(
Call=cl,
omega_h=omega_h,
omega_lim=om.limit,
omega_total=om.tot,
alpha=alpha,
R2=R2,Phi=Phi,
omega.group=om.group,
loadings=loads,
communality =h2)
class(result) <- c("psych","CFA.bifactor")
return(result)
}
if(FALSE) {
Loads<- cbind(gload,group)
sigma <- Loads %*% Phi %*% t(Loads)
FDs <- diag(Phi %*% t(lambda) %*% solve(sigma) %*% lambda %*% Phi)^0.5
FD <- diag(PHI %*% t(group) %*% solve(r) %*% group %*% Phi)^0.5
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.