bassAckward.Rd
Goldberg (2006) described a hierarchical factor structure organization from the “top down". The original idea was to do successive factor analyses from 1 to nf factors organized by factor score correlations from one level to the next. Waller (2007) discussed a simple way of doing this for components without finding the scores. Using the factor correlations (from Gorsuch) to organize factors hierarchically results may be organized at many different levels. The algorithm may be applied to principal components (pca) or to true factor analysis.
bassAckward(r, nfactors = 1, fm = "minres", rotate = "oblimin", scores = "tenBerge",
adjust=TRUE, plot=TRUE,cut=.3, use = "pairwise", cor = "cor", weight = NULL,
correct = 0.5,...)
bassAckward.diagram(x,digits=2,cut = .3,labels=NULL,marg=c(1.5,.5,1.0,.5),
main="BassAckward",items=TRUE,sort=TRUE,lr=TRUE,curves=FALSE,organize=TRUE,
values=FALSE,...)
A correlation matrix or a data matrix suitable for factoring
Factors from 1 to nfactors will be extracted. If nfactors is a a vector, then just the number of factors specified in the vector will be extracted. (See examples).
Factor method. The default is 'minres' factoring. Although to be consistent with the original Goldberg article, we can also do principal components (fm ="pca").
What type of rotation to apply. The default for factors is oblimin. Unlike the normal call to pca where the default is varimax, in bassAckward the default for pca is oblimin.
What factor scoring algorithm should be used. The default is "tenBerge", other possibilities include "regression", or "bartlett"
If using any other scoring proceure that "tenBerge" should we adjust the correlations for the lack of factor score fit?
By default draw a bassAckward diagram
How to treat missing data. Use='pairwise" finds pairwise complete correlations.
What kind of correlation to find. The default is Pearson.
Should cases be weighted? Default, no.
If finding tetrachoric or polychoric correlations, what correction should be applied to empty cells (defaults to .5)
The object returned by bassAckward
Number of digits to display on each path
Values greater than the abs(cut) will be displayed in a path diagram.
Labels may be taken from the output of the bassAckward function or can be specified as a list.
Margins are set to be slightly bigger than normal to allow for a cleaner diagram
The main title for the figure
if TRUE, show the items associated with the factors
if TRUE, sort the items by factor loadings
Should the graphic be drawn left to right or top to bottom
Should we show the correlations between factors at the same level
Rename and sort the factors at two lowest levels for a more pleasing figure
If TRUE, then show the percent variance accounted for by this factor.
Other graphic parameters (e.g., cex)
This is essentially a wrapper to the fa
and pca
combined with the faCor
functions. They are called repeatedly and then the weights from the resulting solutions are used to find the factor/component correlations.
Although the default is do all factor solutions from 1 to the nfactors, this can be simplified by specifying just some of the factor solutions. Thus, for the 135 items of the spi, it is more reasonable to ask for 3,5, and 27 item solutions.
The function bassAckward.diagram
may be called using the diagram
function or may be called directly.
The output from bassAckward.diagram
is the sorted factor structure suitable for using fa.lookup
.
Although not particularly pretty, it is possible to do Schmid-Leiman rotations at each level. Specify the rotation as rotate="schmid".
Echo the call
Echos the factor method used
A list of the factor loadings at each level
A list of the factor correlations at each level
The factors at each level
Summary of the factor names
Factor labels including items for each level
The correlation matrix analyzed
The factor correlations at each level
The factor analysis loadings at each level, now includes Phi values
The variance accounted for by each factor at each level
Goldberg, L.R. (2006) Doing it all Bass-Ackwards: The development of hierarchical factor structures from the top down. Journal of Research in Personality, 40, 4, 347-358.
Gorsuch, Richard, (1983) Factor Analysis. Lawrence Erlebaum Associates.
Revelle, William. (in prep) An introduction to psychometric theory with applications in R. Springer. Working draft available at https://personality-project.org/r/book/
Waller, N. (2007), A general method for computing hierarchical component structures by Goldberg's Bass-Ackwards method, Journal of Research in Personality, 41, 4, 745-752, DOI: 10.1016/j.jrp.2006.08.005
Goldberg calculated factor/component scores and then correlated these. Waller suggests just looking at the unrotated components and then examining the correlations when rotating different numbers of components. I do not follow the Waller procedure, but rather find successive factors and then find factor/component correlations following Gorsuch.
It is important to note that the BassAckward solution is not a hierarchical solution in the standard meaning. The factors are not factors of factors as is found in a hierarchical model (e.g. sim.hierarchical
or omega
, but is merely way of organising solutions with a different number of factors. In each case, unlike omega
the factors are of the original variables, not the lower level factors. Thus, detailed statistics for any level of the hierarchy may be found by doing a factoring with that particular number of factors.
To find basic statistics for the multiple factorings, examine the fa object. For more detail just do the factoring at that level.
To see the items associated with the lowest level factors, use fa.lookup
. For the items associated with other levels, use fa.lookup
specifying the level. (See examples.)
bassAckward(Thurstone,4,main="Thurstone data set")
#>
#> Call: bassAckward(r = Thurstone, nfactors = 4, main = "Thurstone data set")
#>
#> 1 F1
#> 2 F1
#> 3 F1 F2
#> 4 F1 F2 F3
#> Use print with the short = FALSE option to see the correlations, or use the summary command.
f.labels <- list(level1=cs(Approach,Avoid),level2=cs(PosAffect,NegAffect,Constraint),
level3 = cs(Extraversion,Agreeableness,Neuroticism,Conscientiousness,Openness))
ba <- bassAckward(bfi[1:25],c(2,3,5),labels=f.labels,
main="bfi data set from psychTools", values=TRUE)
print(ba,short=FALSE)
#>
#> Call: bassAckward(r = bfi[1:25], nfactors = c(2, 3, 5), labels = f.labels,
#> main = "bfi data set from psychTools", values = TRUE)
#>
#> 1 F1 F2
#> 2 F1 F2
#> 3 F2 F1 F3
#> Factor correlations
#> F1 F2
#> F1 1.00 -0.17
#> F2 -0.17 1.00
#>
#> Factor correlations
#> F1 F2
#> F1 0.89 -0.15
#> F2 -0.13 0.99
#> F3 0.49 -0.17
#>
#> Factor correlations
#> F1 F2 F3
#> F1 0.05 0.87 0.18
#> F2 0.81 -0.17 0.42
#> F3 0.28 -0.03 0.67
#> F4 0.77 -0.03 0.46
#> F5 0.23 -0.03 -0.19
#show the items associated with the 5 level solution
fa.lookup(ba,dictionary=bfi.dictionary)
#> F1 F2 F3 F4 F5 ItemLabel
#> E2 -0.68 -0.05 -0.06 0.10 -0.02 q_901
#> E4 0.59 0.29 -0.08 0.01 0.02 q_1410
#> E1 -0.56 -0.08 -0.10 -0.06 0.11 q_712
#> E5 0.42 0.05 0.21 0.15 0.27 q_1768
#> E3 0.42 0.25 0.28 0.08 0.00 q_1205
#> A3 0.12 0.66 0.03 -0.03 0.02 q_1206
#> A2 0.00 0.64 0.03 -0.02 0.08 q_1162
#> A5 0.23 0.53 0.04 -0.11 0.01 q_1419
#> A4 0.06 0.43 -0.15 -0.06 0.19 q_1364
#> A1 0.17 -0.41 -0.06 0.21 0.07 q_146
#> O3 0.15 0.08 0.61 0.03 0.02 q_492
#> O5 0.10 0.04 -0.54 0.13 -0.03 q_1964
#> O1 0.10 0.02 0.51 0.02 0.07 q_128
#> O2 0.06 0.16 -0.46 0.19 -0.08 q_316
#> O4 -0.32 0.17 0.37 0.13 -0.02 q_1738
#> N1 0.10 -0.11 -0.05 0.81 0.00 q_952
#> N2 0.04 -0.09 0.01 0.78 0.01 q_974
#> N3 -0.10 0.08 0.02 0.71 -0.04 q_1099
#> N5 -0.20 0.21 -0.15 0.49 0.00 q_1505
#> N4 -0.39 0.09 0.08 0.47 -0.14 q_1479
#> C2 -0.09 0.08 0.04 0.15 0.67 q_530
#> C4 0.00 0.04 -0.05 0.17 -0.61 q_626
#> C3 -0.06 0.09 -0.07 0.03 0.57 q_619
#> C5 -0.14 0.02 0.09 0.19 -0.55 q_1949
#> C1 -0.03 -0.02 0.15 0.07 0.55 q_124
#> Item Giant3 Big6
#> E2 Find it difficult to approach others. Plasticity Extraversion
#> E4 Make friends easily. Plasticity Extraversion
#> E1 Don't talk a lot. Plasticity Extraversion
#> E5 Take charge. Plasticity Extraversion
#> E3 Know how to captivate people. Plasticity Extraversion
#> A3 Know how to comfort others. Cohesion Agreeableness
#> A2 Inquire about others' well-being. Cohesion Agreeableness
#> A5 Make people feel at ease. Cohesion Agreeableness
#> A4 Love children. Cohesion Agreeableness
#> A1 Am indifferent to the feelings of others. Cohesion Agreeableness
#> O3 Carry the conversation to a higher level. Plasticity Openness
#> O5 Will not probe deeply into a subject. Plasticity Openness
#> O1 Am full of ideas. Plasticity Openness
#> O2 Avoid difficult reading material. Plasticity Openness
#> O4 Spend time reflecting on things. Plasticity Openness
#> N1 Get angry easily. Stability Emotional Stability
#> N2 Get irritated easily. Stability Emotional Stability
#> N3 Have frequent mood swings. Stability Emotional Stability
#> N5 Panic easily. Stability Emotional Stability
#> N4 Often feel blue. Stability Emotional Stability
#> C2 Continue until everything is perfect. Stability Conscientiousness
#> C4 Do things in a half-way manner. Stability Conscientiousness
#> C3 Do things according to a plan. Stability Conscientiousness
#> C5 Waste my time. Stability Conscientiousness
#> C1 Am exacting in my work. Stability Conscientiousness
#> Little12 Keying IPIP100
#> E2 Sociability -1 B5:E
#> E4 Sociability 1 B5:E
#> E1 Sociability -1 B5:E
#> E5 Assertiveness 1 B5:E
#> E3 Assertiveness 1 B5:E
#> A3 Compassion 1 B5:A
#> A2 Compassion 1 B5:A
#> A5 Compassion 1 B5:A
#> A4 Compassion 1 B5:A
#> A1 Compassion -1 B5:A
#> O3 Intellect 1 B5:O
#> O5 Openness -1 B5:O
#> O1 Intellect 1 B5:O
#> O2 Intellect -1 B5:O
#> O4 Openness 1 B5:O
#> N1 Balance -1 B5:N
#> N2 Balance -1 B5:N
#> N3 Balance -1 B5:N
#> N5 Balance -1 B5:N
#> N4 Balance -1 B5:N
#> C2 Orderliness 1 B5:C
#> C4 Industriousness -1 B5:C
#> C3 Orderliness 1 B5:C
#> C5 Industriousness -1 B5:C
#> C1 Orderliness 1 B5:C
#now show the items associated with the 3 level solution
fa.lookup(ba$fa[[2]],dictionary=bfi.dictionary)
#> F1 F2 F3 ItemLabel Item
#> E4 0.69 -0.07 -0.09 q_1410 Make friends easily.
#> A5 0.64 -0.06 -0.02 q_1419 Make people feel at ease.
#> A3 0.63 0.06 0.01 q_1206 Know how to comfort others.
#> E3 0.63 0.09 0.07 q_1205 Know how to captivate people.
#> E2 -0.58 0.21 0.03 q_901 Find it difficult to approach others.
#> E1 -0.54 0.01 0.11 q_712 Don't talk a lot.
#> A2 0.52 0.07 0.07 q_1162 Inquire about others' well-being.
#> E5 0.44 0.09 0.29 q_1768 Take charge.
#> A4 0.36 -0.04 0.09 q_1364 Love children.
#> O3 0.35 0.11 0.25 q_492 Carry the conversation to a higher level.
#> A1 -0.21 0.09 0.02 q_146 Am indifferent to the feelings of others.
#> N3 0.03 0.76 0.00 q_1099 Have frequent mood swings.
#> N2 0.00 0.74 0.02 q_974 Get irritated easily.
#> N1 0.01 0.74 -0.02 q_952 Get angry easily.
#> N4 -0.19 0.59 -0.04 q_1479 Often feel blue.
#> N5 -0.01 0.52 -0.05 q_1505 Panic easily.
#> O4 -0.01 0.27 0.17 q_1738 Spend time reflecting on things.
#> C2 0.02 0.11 0.63 q_530 Continue until everything is perfect.
#> C4 0.04 0.23 -0.59 q_626 Do things in a half-way manner.
#> C1 -0.01 0.04 0.59 q_124 Am exacting in my work.
#> C3 0.01 -0.01 0.48 q_619 Do things according to a plan.
#> C5 -0.07 0.29 -0.44 q_1949 Waste my time.
#> O1 0.23 0.08 0.27 q_128 Am full of ideas.
#> O2 0.06 0.13 -0.27 q_316 Avoid difficult reading material.
#> O5 -0.03 0.03 -0.26 q_1964 Will not probe deeply into a subject.
#> Giant3 Big6 Little12 Keying IPIP100
#> E4 Plasticity Extraversion Sociability 1 B5:E
#> A5 Cohesion Agreeableness Compassion 1 B5:A
#> A3 Cohesion Agreeableness Compassion 1 B5:A
#> E3 Plasticity Extraversion Assertiveness 1 B5:E
#> E2 Plasticity Extraversion Sociability -1 B5:E
#> E1 Plasticity Extraversion Sociability -1 B5:E
#> A2 Cohesion Agreeableness Compassion 1 B5:A
#> E5 Plasticity Extraversion Assertiveness 1 B5:E
#> A4 Cohesion Agreeableness Compassion 1 B5:A
#> O3 Plasticity Openness Intellect 1 B5:O
#> A1 Cohesion Agreeableness Compassion -1 B5:A
#> N3 Stability Emotional Stability Balance -1 B5:N
#> N2 Stability Emotional Stability Balance -1 B5:N
#> N1 Stability Emotional Stability Balance -1 B5:N
#> N4 Stability Emotional Stability Balance -1 B5:N
#> N5 Stability Emotional Stability Balance -1 B5:N
#> O4 Plasticity Openness Openness 1 B5:O
#> C2 Stability Conscientiousness Orderliness 1 B5:C
#> C4 Stability Conscientiousness Industriousness -1 B5:C
#> C1 Stability Conscientiousness Orderliness 1 B5:C
#> C3 Stability Conscientiousness Orderliness 1 B5:C
#> C5 Stability Conscientiousness Industriousness -1 B5:C
#> O1 Plasticity Openness Intellect 1 B5:O
#> O2 Plasticity Openness Intellect -1 B5:O
#> O5 Plasticity Openness Openness -1 B5:O
# compare the 3 factor solution to what get by extracting 3 factors directly
f3 <- fa(bfi[1:25],3)
f3$loadings - ba$fa[[2]]$loadings # these are the same
#>
#> Loadings:
#> MR1 MR2 MR3
#> A1
#> A2
#> A3
#> A4
#> A5
#> C1
#> C2
#> C3
#> C4
#> C5
#> E1
#> E2
#> E3
#> E4
#> E5
#> N1
#> N2
#> N3
#> N4
#> N5
#> O1
#> O2
#> O3
#> O4
#> O5
#>
#> MR1 MR2 MR3
#> SS loadings 0 0 0
#> Proportion Var 0 0 0
#> Cumulative Var 0 0 0
#do pca instead of factors just summarize, don't plot
summary(bassAckward(bfi[1:25],c(1,3,5,7),fm="pca",
main="Components",plot=FALSE))
#> Warning: NaNs produced
#>
#> Call: bassAckward(r = bfi[1:25], nfactors = c(1, 3, 5, 7), fm = "pca",
#> plot = FALSE, main = "Components")
#>
#> Factor correlations
#> C1
#> C1 1
#>
#> Factor correlations
#> C1
#> C1 0.83
#> C2 -0.56
#> C3 0.59
#>
#> Factor correlations
#> C1 C2 C3
#> C1 -0.13 0.99 -0.10
#> C2 0.84 -0.24 0.17
#> C3 0.25 -0.21 0.86
#> C4 0.70 -0.01 0.14
#> C5 0.17 0.08 0.61
#>
#> Factor correlations
#> C1 C2 C3 C4 C5
#> C1 0.97 -0.17 -0.15 -0.10 -0.03
#> C2 -0.15 0.95 0.15 0.25 0.17
#> C3 -0.10 0.15 0.99 0.13 0.15
#> C4 -0.05 0.45 0.29 0.78 0.02
#> C5 0.23 -0.09 -0.20 0.06 -0.84
#> C6 0.32 -0.02 -0.08 0.34 0.63
#> C7 0.15 0.21 0.06 -0.61 0.01
##not run, but useful example
# \donttest{
f.labels <- list(level1 = cs(Neg,Pos,Constrain),level2 = cs(Extra,Neuro,Cons,Open,Agree),
level3 = cs(attnseeking,sociability,impulsivity,
charisma,sensationseek,emotexpr,humor,anxiety,
emotstab,irritability,wellbeing,industry,order,author,honesty,perfect,easygoing,
selfcontrol,conservatism,creativity,introspect,art,
intellect,conform,adaptability,compassion,trust))
if(require("psychTools") ) {
sp5 <- bassAckward(psychTools::spi[11:145], c(3,5,27),labels=f.labels,
main="spi data set from psychTools")}
#> Loading required package: psychTools
#> Warning: there is no package called ‘psychTools’
# }