Here is what I get from extracting 1985 from the fa_s
object of all years
> fa_s[1]
$`1985`
Factor Analysis using method = wls
Call: fa(r = x, fm = "wls", weights = wts2016)
Standardized loadings (pattern matrix) based upon correlation matrix
WLS1 h2 u2 com
CUTGOVT1 0.01 6.7e-05 1.00 1
LESSREG1 -0.23 5.1e-02 0.95 1
PRICECON 0.52 2.7e-01 0.73 1
AIDINDUS 0.57 3.2e-01 0.68 1
HLPHITEC 0.70 4.8e-01 0.52 1
MAKEJOBS 0.66 4.3e-01 0.57 1
SAVEJOBS 0.50 2.5e-01 0.75 1
JOBSALL 0.65 4.3e-01 0.57 1
CUTHOURS 0.31 9.7e-02 0.90 1
HLTHCARE 0.60 3.6e-01 0.64 1
AIDOLD 0.32 1.0e-01 0.90 1
AIDUNEMP 0.42 1.7e-01 0.83 1
EQUALIZE 0.68 4.6e-01 0.54 1
WLS1
SS loadings 3.42
Proportion Var 0.26
Mean item complexity = 1
Test of the hypothesis that 1 factor is sufficient.
The degrees of freedom for the null model are 78 and the objective function was 6.79
The degrees of freedom for the model are 65 and the objective function was 4.39
The root mean square of the residuals (RMSR) is 0.16
The df corrected root mean square of the residuals is 0.18
Fit based upon off diagonal values = 0.72
Measures of factor score adequacy
WLS1
Correlation of (regression) scores with factors 0.93
Multiple R square of scores with factors 0.86
Minimum correlation of possible factor scores 0.71
and by subsetting for 1985 first
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(GPArotation)
library(psych)
library(readr)
# preprocess data from https://drive.google.com/drive/u/0/folders/1Uk7g0LtjwQpD8DjRn9yap6-TZATHEOLA
# saved to NeoliberalismData.csv (fully qualified path for reprex)
mydata <- read_csv("~/projects/demo/NeoliberalismData.csv")
#> Warning: Missing column names filled in: 'X1' [1]
#> Parsed with column specification:
#> cols(
#> X1 = col_double(),
#> YEAR = col_double(),
#> WTSSALL = col_double(),
#> CUTGOVT1 = col_double(),
#> LESSREG1 = col_double(),
#> PRICECON = col_double(),
#> AIDINDUS = col_double(),
#> HLPHITEC = col_double(),
#> MAKEJOBS = col_double(),
#> SAVEJOBS = col_double(),
#> JOBSALL = col_double(),
#> CUTHOURS = col_double(),
#> HLTHCARE = col_double(),
#> AIDOLD = col_double(),
#> AIDUNEMP = col_double(),
#> EQUALIZE = col_double(),
#> YEAR_METRIC = col_double()
#> )
#> Warning: Missing column names filled in: 'X1' [1]
#> Parsed with column specification:
#> cols(
#> X1 = col_double(),
#> YEAR = col_double(),
#> WTSSALL = col_double(),
#> CUTGOVT1 = col_double(),
#> LESSREG1 = col_double(),
#> PRICECON = col_double(),
#> AIDINDUS = col_double(),
#> HLPHITEC = col_double(),
#> MAKEJOBS = col_double(),
#> SAVEJOBS = col_double(),
#> JOBSALL = col_double(),
#> CUTHOURS = col_double(),
#> HLTHCARE = col_double(),
#> AIDOLD = col_double(),
#> AIDUNEMP = col_double(),
#> EQUALIZE = col_double(),
#> YEAR_METRIC = col_double()
#> )
# create test subset, discarding X1, YEAR and YEAR_METRIC (which is constant)
mydata %>% filter(YEAR == 1985) %>% select(-X1,-YEAR,-YEAR_METRIC) -> sub1985
# extract weights
sub1985 %>% select(WTSSALL) %>% .$WTSSALL -> wts1985
# discard WTSSALL
sub1985 %>% select(-WTSSALL) -> sub1985
# create covariance matrix
sub1985 %>% cov() -> cov1985
# create an fa object
fa1985 <- fa(cov1985, fm = "wls", weights = wts1985)
# show the result
fa1985
#> Factor Analysis using method = wls
#> Call: fa(r = cov1985, fm = "wls", weights = wts1985)
#> Standardized loadings (pattern matrix) based upon correlation matrix
#> WLS1 h2 u2 com
#> CUTGOVT1 0.01 6.7e-05 1.00 1
#> LESSREG1 -0.23 5.1e-02 0.95 1
#> PRICECON 0.52 2.7e-01 0.73 1
#> AIDINDUS 0.57 3.2e-01 0.68 1
#> HLPHITEC 0.70 4.8e-01 0.52 1
#> MAKEJOBS 0.66 4.3e-01 0.57 1
#> SAVEJOBS 0.50 2.5e-01 0.75 1
#> JOBSALL 0.65 4.3e-01 0.57 1
#> CUTHOURS 0.31 9.7e-02 0.90 1
#> HLTHCARE 0.60 3.6e-01 0.64 1
#> AIDOLD 0.32 1.0e-01 0.90 1
#> AIDUNEMP 0.42 1.7e-01 0.83 1
#> EQUALIZE 0.68 4.6e-01 0.54 1
#>
#> WLS1
#> SS loadings 3.42
#> Proportion Var 0.26
#>
#> Mean item complexity = 1
#> Test of the hypothesis that 1 factor is sufficient.
#>
#> The degrees of freedom for the null model are 78 and the objective function was 6.79
#> The degrees of freedom for the model are 65 and the objective function was 4.39
#>
#> The root mean square of the residuals (RMSR) is 0.16
#> The df corrected root mean square of the residuals is 0.18
#>
#> Fit based upon off diagonal values = 0.72
#> Measures of factor score adequacy
#> WLS1
#> Correlation of (regression) scores with factors 0.93
#> Multiple R square of scores with factors 0.86
#> Minimum correlation of possible factor scores 0.71
Created on 2020-03-14 by the reprex package (v0.3.0)
So, I'm not sure where your difference comes from. Take a look at your revised function and come back?