12
12
# ' @examples
13
13
# ' library(psycho)
14
14
# ' library(lavaan)
15
- # '
16
- # ' model <- ' visual =~ x1 + x2 + x3
17
- # ' textual =~ x4 + x5 + x6
18
- # ' speed =~ x7 + x8 + x9 '
19
- # ' x <- lavaan::cfa(model, data=HolzingerSwineford1939)
20
- # '
15
+ # '
16
+ # ' model <- " visual =~ x1 + x2 + x3\ntextual =~ x4 + x5 + x6\nspeed =~ x7 + x8 + x9 "
17
+ # ' x <- lavaan::cfa(model, data = HolzingerSwineford1939)
18
+ # '
21
19
# ' rez <- analyze(x)
22
20
# ' print(rez)
23
- # '
24
- # '
25
21
# ' @author \href{https://dominiquemakowski.github.io/}{Dominique Makowski}
26
22
# '
27
23
# ' @seealso
30
26
# ' @importFrom lavaan parameterEstimates fitmeasures
31
27
# '
32
28
# ' @export
33
- analyze.blavaan <- function (x , CI = 90 , standardize = FALSE ,... ) {
29
+ analyze.blavaan <- function (x , CI = 90 , standardize = FALSE , ... ) {
34
30
fit <- x
35
31
36
32
37
33
# Processing
38
34
# -------------
39
35
values <- list ()
40
- values $ CI = CI
36
+ values $ CI <- CI
41
37
42
38
# Fit measures
43
39
values $ Fit_Measures <- interpret_lavaan(fit )
@@ -47,14 +43,16 @@ analyze.blavaan <- function(x, CI=90, standardize=FALSE,...) {
47
43
# -------------
48
44
computations <- .get_info_computations(fit )
49
45
fitmeasures <- values $ Fit_Measures $ text
50
- text <- paste0(" A Bayesian model was fitted (" ,
51
- computations ,
52
- " ). The fit indices are as following: " ,
53
- fitmeasures )
46
+ text <- paste0(
47
+ " A Bayesian model was fitted (" ,
48
+ computations ,
49
+ " ). The fit indices are as following: " ,
50
+ fitmeasures
51
+ )
54
52
55
53
# Summary
56
54
# -------------
57
- summary <- .summary_blavaan(fit , CI = CI , standardize = standardize )
55
+ summary <- .summary_blavaan(fit , CI = CI , standardize = standardize )
58
56
59
57
# Plot
60
58
# -------------
@@ -74,30 +72,36 @@ analyze.blavaan <- function(x, CI=90, standardize=FALSE,...) {
74
72
# ' @keywords internal
75
73
.get_info_computations <- function (fit ) {
76
74
chains <- blavaan :: blavInspect(fit , " n.chains" )
77
- sample = fit @ external $ sample
78
- warmup = fit @ external $ burnin
79
- text = paste0(chains ,
80
- " chains, each with iter = " ,
81
- sample ,
82
- " ; warmup = " ,
83
- warmup )
75
+ sample <- fit @ external $ sample
76
+ warmup <- fit @ external $ burnin
77
+ text <- paste0(
78
+ chains ,
79
+ " chains, each with iter = " ,
80
+ sample ,
81
+ " ; warmup = " ,
82
+ warmup
83
+ )
84
84
return (text )
85
85
}
86
86
87
87
88
88
89
89
90
90
# ' @keywords internal
91
- .process_blavaan <- function (fit , standardize = FALSE , CI = 90 ){
91
+ .process_blavaan <- function (fit , standardize = FALSE , CI = 90 ) {
92
92
# Get relevant rows
93
- PE <- parameterEstimates(fit , se = FALSE , ci = FALSE , remove.eq = FALSE , remove.system.eq = TRUE ,
94
- remove.ineq = FALSE , remove.def = FALSE ,
95
- add.attributes = TRUE )
96
- if (! (" group" %in% names(PE ))) PE $ group <- 1
93
+ PE <- parameterEstimates(fit ,
94
+ se = FALSE , ci = FALSE , remove.eq = FALSE , remove.system.eq = TRUE ,
95
+ remove.ineq = FALSE , remove.def = FALSE ,
96
+ add.attributes = TRUE
97
+ )
98
+ if (! (" group" %in% names(PE ))) PE $ group <- 1
97
99
newpt <- fit @ ParTable
98
100
pte2 <- which(newpt $ free > 0 )
99
- relevant_rows <- match(with(newpt , paste(lhs [pte2 ], op [pte2 ], rhs [pte2 ], group [pte2 ], sep = " " )),
100
- paste(PE $ lhs , PE $ op , PE $ rhs , PE $ group , sep = " " ))
101
+ relevant_rows <- match(
102
+ with(newpt , paste(lhs [pte2 ], op [pte2 ], rhs [pte2 ], group [pte2 ], sep = " " )),
103
+ paste(PE $ lhs , PE $ op , PE $ rhs , PE $ group , sep = " " )
104
+ )
101
105
102
106
# Priors
103
107
priors <- rep(NA , nrow(PE ))
@@ -108,12 +112,12 @@ analyze.blavaan <- function(x, CI=90, standardize=FALSE,...) {
108
112
109
113
110
114
# Posterior
111
- if (standardize == FALSE ){
115
+ if (standardize == FALSE ) {
112
116
posteriors <- blavaan :: blavInspect(fit , " draws" ) %> %
113
117
as.matrix() %> %
114
118
as.data.frame()
115
119
names(posteriors ) <- names(lavaan :: coef(fit ))
116
- } else {
120
+ } else {
117
121
posteriors <- blavaan :: standardizedposterior(fit ) %> %
118
122
as.data.frame()
119
123
}
@@ -127,7 +131,7 @@ analyze.blavaan <- function(x, CI=90, standardize=FALSE,...) {
127
131
Effect <- c()
128
132
CI_lower <- c()
129
133
CI_higher <- c()
130
- for (effect in names(posteriors )){
134
+ for (effect in names(posteriors )) {
131
135
posterior <- posteriors [[effect ]]
132
136
Effect <- c(Effect , effect )
133
137
MPE <- c(MPE , mpe(posterior )$ MPE )
@@ -137,10 +141,9 @@ analyze.blavaan <- function(x, CI=90, standardize=FALSE,...) {
137
141
CI_values <- HDI(posterior , prob = CI / 100 )
138
142
CI_lower <- c(CI_lower , CI_values $ values $ HDImin )
139
143
CI_higher <- c(CI_higher , CI_values $ values $ HDImax )
140
-
141
144
}
142
145
143
- if (standardize == FALSE ){
146
+ if (standardize == FALSE ) {
144
147
Effects <- rep(NA , nrow(PE ))
145
148
Effects [relevant_rows ] <- Effect
146
149
MPEs <- rep(NA , nrow(PE ))
@@ -153,7 +156,7 @@ analyze.blavaan <- function(x, CI=90, standardize=FALSE,...) {
153
156
CI_lowers [relevant_rows ] <- CI_lower
154
157
CI_highers <- rep(NA , nrow(PE ))
155
158
CI_highers [relevant_rows ] <- CI_higher
156
- } else {
159
+ } else {
157
160
Effects <- Effect
158
161
MPEs <- MPE
159
162
Medians <- Median
@@ -162,45 +165,51 @@ analyze.blavaan <- function(x, CI=90, standardize=FALSE,...) {
162
165
CI_highers <- CI_higher
163
166
}
164
167
165
- data <- data.frame (" Effect" = Effects ,
166
- " Median" = Medians ,
167
- " MAD" = MADs ,
168
- " MPE" = MPEs ,
169
- " CI_lower" = CI_lowers ,
170
- " CI_higher" = CI_highers ,
171
- " Prior" = priors )
168
+ data <- data.frame (
169
+ " Effect" = Effects ,
170
+ " Median" = Medians ,
171
+ " MAD" = MADs ,
172
+ " MPE" = MPEs ,
173
+ " CI_lower" = CI_lowers ,
174
+ " CI_higher" = CI_highers ,
175
+ " Prior" = priors
176
+ )
172
177
173
178
return (data )
174
179
}
175
180
176
181
177
182
178
183
# ' @keywords internal
179
- .summary_blavaan <- function (fit , CI = 90 , standardize = FALSE ){
180
-
181
- solution <- lavaan :: parameterEstimates(fit , se = TRUE , ci = TRUE , standardized = FALSE , level = CI / 100 )
184
+ .summary_blavaan <- function (fit , CI = 90 , standardize = FALSE ) {
185
+ solution <- lavaan :: parameterEstimates(fit , se = TRUE , ci = TRUE , standardized = FALSE , level = CI / 100 )
182
186
183
187
solution <- solution %> %
184
- rename(" From" = " rhs" ,
185
- " To" = " lhs" ,
186
- " Operator" = " op" ,
187
- " Coef" = " est" ,
188
- " SE" = " se" ,
189
- " CI_lower" = " ci.lower" ,
190
- " CI_higher" = " ci.upper" ) %> %
188
+ rename(
189
+ " From" = " rhs" ,
190
+ " To" = " lhs" ,
191
+ " Operator" = " op" ,
192
+ " Coef" = " est" ,
193
+ " SE" = " se" ,
194
+ " CI_lower" = " ci.lower" ,
195
+ " CI_higher" = " ci.upper"
196
+ ) %> %
191
197
mutate(Type = dplyr :: case_when(
192
198
Operator == " =~" ~ " Loading" ,
193
- Operator == " ~" ~ " Regression" ,
199
+ Operator == " ~" ~ " Regression" ,
194
200
Operator == " ~~" ~ " Correlation" ,
195
- TRUE ~ NA_character_ )) %> %
201
+ TRUE ~ NA_character_
202
+ )) %> %
196
203
select(one_of(c(" To" , " Operator" , " From" , " Type" ))) %> %
197
204
mutate_(" Effect" = " as.character(paste0(To, Operator, From))" ) %> %
198
- full_join(.process_blavaan(fit , CI = CI , standardize = standardize ) %> %
199
- mutate_(" Effect" = " as.character(Effect)" ), by = " Effect" ) %> %
205
+ full_join(.process_blavaan(fit , CI = CI , standardize = standardize ) %> %
206
+ mutate_(" Effect" = " as.character(Effect)" ), by = " Effect" ) %> %
200
207
select_(" -Effect" ) %> %
201
- mutate_(" Median" = " replace_na(Median, 1)" ,
202
- " MAD" = " replace_na(MAD, 0)" ,
203
- " MPE" = " replace_na(MPE, 100)" ) %> %
208
+ mutate_(
209
+ " Median" = " replace_na(Median, 1)" ,
210
+ " MAD" = " replace_na(MAD, 0)" ,
211
+ " MPE" = " replace_na(MPE, 100)"
212
+ ) %> %
204
213
select(one_of(c(" From" , " Operator" , " To" , " Median" , " MAD" , " CI_lower" , " CI_higher" , " MPE" , " Prior" , " Type" ))) %> %
205
214
dplyr :: filter_(" Operator != '~1'" )
206
215
0 commit comments