This function fits a factor analysis model or SEM, by maximum weighted likelihood.

svyfactanal(formula, design, factors, 
   n = c("none", "sample", "degf","effective", "min.effective"), ...)

Arguments

formula

Model formula specifying the variables to use

design

Survey design object

factors

Number of factors to estimate

n

Sample size to be used for testing: see below

...

Other arguments to pass to factanal.

Details

The population covariance matrix is estimated by svyvar and passed to factanal

Although fitting these models requires only the estimated covariance matrix, inference requires a sample size. With n="sample", the sample size is taken to be the number of observations; with n="degf", the survey degrees of freedom as returned by degf. Using "sample" corresponds to standardizing weights to have mean 1, and is known to result in anti-conservative tests.

The other two methods estimate an effective sample size for each variable as the sample size where the standard error of a variance of a Normal distribution would match the design-based standard error estimated by svyvar. With n="min.effective" the minimum sample size across the variables is used; with n="effective" the harmonic mean is used. For svyfactanal the test of model adequacy is optional, and the default choice, n="none", does not do the test.

Value

An object of class factanal

References

.

See also

factanal

The lavaan.survey package fits structural equation models to complex samples using similar techniques.

Examples

data(api)
dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)

svyfactanal(~api99+api00+hsg+meals+ell+emer, design=dclus1, factors=2)
#> 
#> Call:
#> svyfactanal(~api99 + api00 + hsg + meals + ell + emer, design = dclus1,     factors = 2)
#> 
#> Uniquenesses:
#> api99 api00   hsg meals   ell  emer 
#> 0.009 0.058 0.978 0.230 0.005 0.865 
#> 
#> Loadings:
#>       Factor1 Factor2
#> api99 -0.990   0.108 
#> api00 -0.959   0.151 
#> hsg           -0.143 
#> meals  0.877         
#> ell    0.727   0.683 
#> emer   0.367         
#> 
#>                Factor1 Factor2
#> SS loadings      3.333   0.521
#> Proportion Var   0.556   0.087
#> Cumulative Var   0.556   0.642
#> 
#> The degrees of freedom for the model is 4 and the fit was 0.0898 

svyfactanal(~api99+api00+hsg+meals+ell+emer, design=dclus1, factors=2, n="effective")
#> 
#> Call:
#> svyfactanal(~api99 + api00 + hsg + meals + ell + emer, design = dclus1,     factors = 2, n = "effective")
#> 
#> Uniquenesses:
#> api99 api00   hsg meals   ell  emer 
#> 0.009 0.058 0.978 0.230 0.005 0.865 
#> 
#> Loadings:
#>       Factor1 Factor2
#> api99 -0.990   0.108 
#> api00 -0.959   0.151 
#> hsg           -0.143 
#> meals  0.877         
#> ell    0.727   0.683 
#> emer   0.367         
#> 
#>                Factor1 Factor2
#> SS loadings      3.333   0.521
#> Proportion Var   0.556   0.087
#> Cumulative Var   0.556   0.642
#> 
#> Test of the hypothesis that 2 factors are sufficient.
#> The chi square statistic is 2.94 on 4 degrees of freedom.
#> The p-value is 0.567 

##Population dat for comparison
factanal(~api99+api00+hsg+meals+ell+emer, data=apipop, factors=2)
#> 
#> Call:
#> factanal(x = ~api99 + api00 + hsg + meals + ell + emer, factors = 2,     data = apipop)
#> 
#> Uniquenesses:
#> api99 api00   hsg meals   ell  emer 
#> 0.024 0.023 0.799 0.005 0.392 0.732 
#> 
#> Loadings:
#>       Factor1 Factor2
#> api99  0.839  -0.522 
#> api00  0.864  -0.480 
#> hsg   -0.272   0.357 
#> meals -0.471   0.879 
#> ell   -0.468   0.623 
#> emer  -0.433   0.284 
#> 
#>                Factor1 Factor2
#> SS loadings      2.152   1.872
#> Proportion Var   0.359   0.312
#> Cumulative Var   0.359   0.671
#> 
#> Test of the hypothesis that 2 factors are sufficient.
#> The chi square statistic is 580.89 on 4 degrees of freedom.
#> The p-value is 2.12e-124