Psychological Network Analysis with Nestimate

Nestimate supports psychological network analysis (PNA) through partial correlation and graphical lasso estimation. This vignette uses the srl_strategies dataset — frequency counts of 9 self-regulated learning strategies for 250 students — to estimate, regularize, and bootstrap a psychological network.

Data

The 9 strategies fall into three clusters: metacognitive (Planning, Monitoring, Evaluating), cognitive (Elaboration, Organization, Rehearsal), and resource management (Help_Seeking, Time_Mgmt, Effort_Reg).

library(Nestimate)
data(srl_strategies)
head(srl_strategies)
#>   Planning Monitoring Evaluating Elaboration Organization Rehearsal
#> 1       13         15         13           5            3        13
#> 2       14         11         12          10           25        19
#> 3       24         20         22          14            3        10
#> 4       19         18         15          17           27        13
#> 5       17         21         15           8            5        12
#> 6        4          6          5          26           24        25
#>   Help_Seeking Time_Mgmt Effort_Reg
#> 1           27        12         21
#> 2           15        17         24
#> 3            6        12         29
#> 4           13        11         20
#> 5            6         7          8
#> 6           14        11         17

Correlation network

The simplest approach estimates pairwise Pearson correlations.

net_cor <- build_network(srl_strategies, method = "cor")
net_cor
#> Correlation Network [undirected]
#>   Sample size: 250
#>   Weights: [-0.130, 0.485]  |  +26 / -10 edges
#> 
#>   Weight matrix:
#>                Planning Monitoring Evaluating Elaboration Organization Rehearsal
#>   Planning        0.000      0.423      0.358      -0.096       -0.083    -0.019
#>   Monitoring      0.423      0.000      0.485       0.195        0.028     0.132
#>   Evaluating      0.358      0.485      0.000       0.077        0.313     0.076
#>   Elaboration    -0.096      0.195      0.077       0.000        0.432     0.341
#>   Organization   -0.083      0.028      0.313       0.432        0.000     0.339
#>   Rehearsal      -0.019      0.132      0.076       0.341        0.339     0.000
#>   Help_Seeking   -0.108     -0.116      0.023       0.008        0.123    -0.130
#>   Time_Mgmt       0.285      0.015      0.079      -0.033        0.085    -0.106
#>   Effort_Reg     -0.010     -0.008      0.250       0.050        0.135     0.029
#>                Help_Seeking Time_Mgmt Effort_Reg
#>   Planning           -0.108     0.285     -0.010
#>   Monitoring         -0.116     0.015     -0.008
#>   Evaluating          0.023     0.079      0.250
#>   Elaboration         0.008    -0.033      0.050
#>   Organization        0.123     0.085      0.135
#>   Rehearsal          -0.130    -0.106      0.029
#>   Help_Seeking        0.000     0.209      0.176
#>   Time_Mgmt           0.209     0.000      0.467
#>   Effort_Reg          0.176     0.467      0.000

Partial correlation network

Partial correlations control for all other variables, revealing direct associations.

net_pcor <- build_network(srl_strategies, method = "pcor")
net_pcor
#> Partial Correlation Network (unregularised) [undirected]
#>   Sample size: 250
#>   Weights: [-0.235, 0.502]  |  +21 / -15 edges
#> 
#>   Weight matrix:
#>                Planning Monitoring Evaluating Elaboration Organization Rehearsal
#>   Planning        0.000      0.268      0.283      -0.103       -0.146     0.046
#>   Monitoring      0.268      0.000      0.432       0.274       -0.213     0.095
#>   Evaluating      0.283      0.432      0.000      -0.156        0.406    -0.098
#>   Elaboration    -0.103      0.274     -0.156       0.000        0.380     0.181
#>   Organization   -0.146     -0.213      0.406       0.380        0.000     0.274
#>   Rehearsal       0.046      0.095     -0.098       0.181        0.274     0.000
#>   Help_Seeking   -0.121     -0.054      0.039       0.004        0.102    -0.144
#>   Time_Mgmt       0.397     -0.007     -0.207      -0.031        0.158    -0.137
#>   Effort_Reg     -0.235     -0.099      0.330       0.049       -0.092     0.096
#>                Help_Seeking Time_Mgmt Effort_Reg
#>   Planning           -0.121     0.397     -0.235
#>   Monitoring         -0.054    -0.007     -0.099
#>   Evaluating          0.039    -0.207      0.330
#>   Elaboration         0.004    -0.031      0.049
#>   Organization        0.102     0.158     -0.092
#>   Rehearsal          -0.144    -0.137      0.096
#>   Help_Seeking        0.000     0.161      0.051
#>   Time_Mgmt           0.161     0.000      0.502
#>   Effort_Reg          0.051     0.502      0.000

Regularized network (EBICglasso)

The graphical lasso applies L1 regularization to the precision matrix, producing a sparse network. The gamma parameter controls sparsity via EBIC model selection — higher values yield sparser networks.

net_glasso <- build_network(srl_strategies, method = "glasso",
                            params = list(gamma = 0.5))
net_glasso
#> Partial Correlation Network (EBICglasso) [undirected]
#>   Sample size: 250
#>   Weights: [0.089, 0.413]  |  +13 / -0 edges
#> 
#>   Weight matrix:
#>                Planning Monitoring Evaluating Elaboration Organization Rehearsal
#>   Planning        0.000      0.295      0.161       0.000        0.000     0.000
#>   Monitoring      0.295      0.000      0.361       0.105        0.000     0.000
#>   Evaluating      0.161      0.361      0.000       0.000        0.221     0.000
#>   Elaboration     0.000      0.105      0.000       0.000        0.329     0.228
#>   Organization    0.000      0.000      0.221       0.329        0.000     0.218
#>   Rehearsal       0.000      0.000      0.000       0.228        0.218     0.000
#>   Help_Seeking    0.000      0.000      0.000       0.000        0.000     0.000
#>   Time_Mgmt       0.205      0.000      0.000       0.000        0.000     0.000
#>   Effort_Reg      0.000      0.000      0.161       0.000        0.000     0.000
#>                Help_Seeking Time_Mgmt Effort_Reg
#>   Planning            0.000     0.205      0.000
#>   Monitoring          0.000     0.000      0.000
#>   Evaluating          0.000     0.000      0.161
#>   Elaboration         0.000     0.000      0.000
#>   Organization        0.000     0.000      0.000
#>   Rehearsal           0.000     0.000      0.000
#>   Help_Seeking        0.000     0.141      0.089
#>   Time_Mgmt           0.141     0.000      0.413
#>   Effort_Reg          0.089     0.413      0.000 
#> 
#>   Gamma: 0.50  |  Lambda: 0.1319

Predictability

Node predictability measures how well each node is predicted by its neighbors (R-squared from the network structure).

pred <- predictability(net_glasso)
round(pred, 3)
#>     Planning   Monitoring   Evaluating  Elaboration Organization    Rehearsal 
#>        0.251        0.316        0.332        0.241        0.279        0.161 
#> Help_Seeking    Time_Mgmt   Effort_Reg 
#>        0.051        0.274        0.252

Bootstrap inference

Non-parametric bootstrap assesses edge stability and significance.

boot <- boot_glasso(net_glasso, iter = 100,
                    centrality = c("strength", "expected_influence"),
                    seed = 42)

Edge significance

summary(boot, type = "edges")
#>                            edge     weight     ci_lower   ci_upper inclusion
#> 36      Time_Mgmt -- Effort_Reg 0.32491515  0.222754811 0.50668633      1.00
#> 3      Monitoring -- Evaluating 0.30049766  0.224522700 0.45126425      1.00
#> 10  Elaboration -- Organization 0.26232453  0.177858297 0.41011844      1.00
#> 1        Planning -- Monitoring 0.22902145  0.154652739 0.34674453      1.00
#> 14     Elaboration -- Rehearsal 0.15760204  0.045592763 0.26115952      1.00
#> 9    Evaluating -- Organization 0.15443135  0.084298534 0.37810093      1.00
#> 15    Organization -- Rehearsal 0.15232840  0.065005184 0.29110149      1.00
#> 22        Planning -- Time_Mgmt 0.13034652  0.007669914 0.37098345      0.97
#> 2        Planning -- Evaluating 0.12953651  0.062889945 0.29148262      0.99
#> 31     Evaluating -- Effort_Reg 0.09309602  0.000000000 0.26185859      0.92
#> 28    Help_Seeking -- Time_Mgmt 0.06512062  0.000000000 0.20520166      0.87
#> 5     Monitoring -- Elaboration 0.03881843  0.000000000 0.25949667      0.86
#> 35   Help_Seeking -- Effort_Reg 0.01956134  0.000000000 0.12836204      0.56
#> 4       Planning -- Elaboration 0.00000000 -0.161388943 0.00000000      0.54
#> 6     Evaluating -- Elaboration 0.00000000 -0.137731264 0.00000000      0.14
#> 7      Planning -- Organization 0.00000000 -0.161263938 0.00000000      0.56
#> 8    Monitoring -- Organization 0.00000000 -0.217307688 0.00000000      0.30
#> 11        Planning -- Rehearsal 0.00000000 -0.035825718 0.03982327      0.09
#> 12      Monitoring -- Rehearsal 0.00000000  0.000000000 0.13942125      0.45
#> 13      Evaluating -- Rehearsal 0.00000000 -0.061390791 0.03029809      0.13
#> 16     Planning -- Help_Seeking 0.00000000 -0.142952390 0.00000000      0.55
#> 17   Monitoring -- Help_Seeking 0.00000000 -0.139007954 0.00000000      0.50
#> 18   Evaluating -- Help_Seeking 0.00000000  0.000000000 0.02674340      0.07
#> 19  Elaboration -- Help_Seeking 0.00000000 -0.016900994 0.02373987      0.10
#> 20 Organization -- Help_Seeking 0.00000000  0.000000000 0.17737711      0.57
#> 21    Rehearsal -- Help_Seeking 0.00000000 -0.221492991 0.00000000      0.58
#> 23      Monitoring -- Time_Mgmt 0.00000000 -0.071890228 0.00000000      0.21
#> 24      Evaluating -- Time_Mgmt 0.00000000 -0.189055191 0.00000000      0.25
#> 25     Elaboration -- Time_Mgmt 0.00000000 -0.094009550 0.00000000      0.14
#> 26    Organization -- Time_Mgmt 0.00000000  0.000000000 0.16349181      0.31
#> 27       Rehearsal -- Time_Mgmt 0.00000000 -0.142222286 0.00000000      0.54
#> 29       Planning -- Effort_Reg 0.00000000 -0.219379453 0.00000000      0.45
#> 30     Monitoring -- Effort_Reg 0.00000000 -0.104007421 0.00000000      0.25
#> 32    Elaboration -- Effort_Reg 0.00000000  0.000000000 0.08776618      0.19
#> 33   Organization -- Effort_Reg 0.00000000  0.000000000 0.08132141      0.32
#> 34      Rehearsal -- Effort_Reg 0.00000000  0.000000000 0.08917994      0.15

Centrality stability

summary(boot, type = "centrality")
#> $strength
#>           node      value   ci_lower  ci_upper
#> 1     Planning 0.48890448 0.37476117 1.5043481
#> 2   Monitoring 0.56833754 0.47147750 1.3200063
#> 3   Evaluating 0.67756154 0.55524956 1.6594405
#> 4  Elaboration 0.45874500 0.32637547 1.1827810
#> 5 Organization 0.56908428 0.46301831 1.5629458
#> 6    Rehearsal 0.30993044 0.25585130 0.9233126
#> 7 Help_Seeking 0.08468196 0.04323831 0.8343392
#> 8    Time_Mgmt 0.52038228 0.36990833 1.4011174
#> 9   Effort_Reg 0.43757251 0.28061194 1.1406496
#> 
#> $expected_influence
#>           node      value   ci_lower  ci_upper
#> 1     Planning 0.48890448  0.2131390 0.6396731
#> 2   Monitoring 0.56833754  0.4300082 0.8265708
#> 3   Evaluating 0.67756154  0.5552496 1.0610893
#> 4  Elaboration 0.45874500  0.2855666 0.7125323
#> 5 Organization 0.56908428  0.4468574 0.9984274
#> 6    Rehearsal 0.30993044  0.1011004 0.4730121
#> 7 Help_Seeking 0.08468196 -0.1307542 0.2177518
#> 8    Time_Mgmt 0.52038228  0.3513479 0.8549979
#> 9   Effort_Reg 0.43757251  0.2806119 0.6824216