Grafische Darstellung von Intercept / Kovariate

Grafische Darstellung von Intercept / Kovariate

Beitragvon thorben-meyer » Mo 14. Mär 2022, 12:22

Hallo zusammen,

mit Hilfe von R / Lavaan habe ich in einem SEM die Veränderung von einem Persönlichkeitsmerkmal mit den Kovariaten Alter und Geschlecht berechnet. Nun möchte ich die Veränderung von Intercept und Slope in Abhängigkeit zum Alter gerne grafisch darstellen - also Alter auf der X-Achse und die jeweiligen Ausprägungen des Intercepts bzw. Slopes auf der y-Achse.

Leider habe ich bisher keinen Weg gefunden, um diese Plots zu erstellen. Hat jemand vielleicht eine Idee, wie das möglich wäre in R-Studio?

Viele Grüße und danke vorab
Thorben
thorben-meyer
Grünschnabel
Grünschnabel
 
Beiträge: 6
Registriert: Mi 23. Feb 2022, 17:01
Danke gegeben: 1
Danke bekommen: 0 mal in 0 Post

Re: Grafische Darstellung von Intercept / Kovariate

Beitragvon strukturmarionette » Mo 14. Mär 2022, 13:41

strukturmarionette
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 4313
Registriert: Fr 17. Jun 2011, 22:15
Danke gegeben: 32
Danke bekommen: 582 mal in 579 Posts

Re: Grafische Darstellung von Intercept / Kovariate

Beitragvon Holgonaut » Sa 19. Mär 2022, 15:26

Hallo Thorben,

kannst du mal mehr zum Modell sagen? Prinzipiell lassen sich Parameter aus einem lavaan Objekte per broom::tidy(.) in ein tibble verwandeln. Das kann dann mit ggplot einfach visualisiert werden.

Hier mal ein einfaches Beispiel (inkl. Datengenerierung. Relevant ist nur der letzte Befehl)

x = rnorm(100)
m = .3*x + rnorm(100)
y = .5*m + rnorm(100)
data = data.frame(x,m,y)

library(tidyverse)
library(lavaan)
library(broom)

model <- '
y~m
m~x'

fit = sem(model, data, meanstructure = TRUE)
tidy(fit)

Grüße
Holger
Holgonaut
Foren-Unterstützer
Foren-Unterstützer
 
Beiträge: 767
Registriert: Do 2. Jun 2011, 18:20
Danke gegeben: 3
Danke bekommen: 207 mal in 198 Posts

folgende User möchten sich bei Holgonaut bedanken:
thorben-meyer

Re: Grafische Darstellung von Intercept / Kovariate

Beitragvon thorben-meyer » Mo 21. Mär 2022, 18:55

Hallo Holger,

danke für deine Nachricht und die Hilfe. broom::tidy sieht wirklich nach dem richtigen Tool für mein Anliegen aus.

Zu meinen Daten - ich habe die Persönlichkeit in einer einer altersheterogene Stichprobe zu drei Messzeitpunkten erhoben. Nun möchte ich zeigen, wie sich insgesamt 15 Traits im Alter von 15 bis 20 verändern. Dazu habe ich ein LGM gerechnet und berichte Intercept (also Unterschiede in dem Trait zu beginn der Messung) und Slope (Veränderung des Traits). Also Kovariate habe ich Alter und Geschlecht, für mich ist dann letztlich insbesondere der Zusammenhang mit Alter interessant. Und ich möchte dann wie gesagt für jedes Trait zwei Graphen machen, jeweils mit Alter auf der x-Achse und dann Intercept bzw. Slope auf der y-Achse.

Ich habe es anhand deiner Anleitung leider noch nicht hingekriegt den Graphen zu erstellen. Mit broom::tidy erhalte ich zwar eine schöne Übersicht, bin mir aber unsicher, wie ich da heraus den Plot mit Intercept / Alter erstelle?

Hier einmal ein Code und im Anhang ein Screenshot aus einer anderen Studie wie es am Ende im Optimalfall aussehen soll.


Code: Alles auswählen
# Geselligkeit

lgcmGeselligkeit <- '
# Messmodell
GeselligkeitT1 =~ 1*SQ1_bfi_extra_1 + b*SQ1_bfi_extra_4R + c*SQ1_bfi_extra_7R + d*SQ1_bfi_extra_10
GeselligkeitT2 =~ 1*SQ2_bfi_extra_1 + b*SQ2_bfi_extra_4R + c*SQ2_bfi_extra_7R + d*SQ2_bfi_extra_10
GeselligkeitT3 =~ 1*SQ3_bfi_extra_1 + b*SQ3_bfi_extra_4R + c*SQ3_bfi_extra_7R + d*SQ3_bfi_extra_10

# intercept und slope mit fixed Koeffizienten
i =~ 1*GeselligkeitT1 + 1*GeselligkeitT2 + 1*GeselligkeitT3 # intercept mit fixed Koeffizienten
s =~ 0*GeselligkeitT1 + 1*GeselligkeitT2 + 2*GeselligkeitT3 # linearer Slope

i ~~ s

#Itemkorrelationen
SQ1_bfi_extra_1 ~~ SQ2_bfi_extra_1 + SQ3_bfi_extra_1
SQ2_bfi_extra_1 ~~ SQ3_bfi_extra_1   

SQ1_bfi_extra_4R ~~ SQ2_bfi_extra_4R + SQ3_bfi_extra_4R
SQ2_bfi_extra_4R ~~ SQ3_bfi_extra_4R

SQ1_bfi_extra_7R ~~ SQ2_bfi_extra_7R + SQ3_bfi_extra_7R
SQ2_bfi_extra_7R ~~ SQ3_bfi_extra_7R

SQ1_bfi_extra_10 ~~ SQ2_bfi_extra_10 + SQ3_bfi_extra_10
SQ2_bfi_extra_10 ~~ SQ3_bfi_extra_10

#Kovariate

i ~ SQ1_age  + SQ1_sex
s ~ SQ1_age  + SQ1_sex

'

lgcmGeselligkeitfit <- growth(lgcmGeselligkeit, data = daten, missing = "fiml")
summary(lgcmGeselligkeitfit, fit.measures=TRUE)


fit = growth(lgcmGeselligkeit, data = daten, missing = "fiml")
library(tidyverse)
library(broom)
broom::tidy(fit)



Es ist auch das erste Mal, dass ich mit Lavaan arbeite, falls Euch sonst noch eine Unstimmigkeit oder so in meinem Modell auffällt, bin ich auch sehr dankbar für einen Hinweis.

Viele Grüße & vielen Dank
Thorben

PS: Screenshot ließ sich leider nicht mit hochladen, da " Das Kontingent für Dateianhänge ist bereits vollständig ausgenutzt" zu sein scheint.
thorben-meyer
Grünschnabel
Grünschnabel
 
Beiträge: 6
Registriert: Mi 23. Feb 2022, 17:01
Danke gegeben: 1
Danke bekommen: 0 mal in 0 Post

Re: Grafische Darstellung von Intercept / Kovariate

Beitragvon bele » Mo 21. Mär 2022, 22:04

Hallo Thorben,
Vielleicht erklärst Du uns, wie die Daten jetzt aussehen und wie die Spalten darin heißen, die gegeneinander geplottet werden sollen. Hilfreich wäre das Ergebnis von dput(broom::tidy(fit))

LG, Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 5774
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 15
Danke bekommen: 1356 mal in 1343 Posts

Re: Grafische Darstellung von Intercept / Kovariate

Beitragvon Holgonaut » So 27. Mär 2022, 15:19

Hi,

ich würd die Grafik vom Modell lösen und dass mit einem ggplot line plot machen.

Dort würdest du die AV entlang der Zeitvariable plotten, gruppiert nach Person. Kann zwar ziemlich messy aussehen, aber da kann man ja dran rumschrauben, ist es gut aussieht.

Hier ein nettes Video von Hadley Wickham dazu
https://www.youtube.com/watch?v=go5Au01 ... leyWickham

Grüße
Holger
Holgonaut
Foren-Unterstützer
Foren-Unterstützer
 
Beiträge: 767
Registriert: Do 2. Jun 2011, 18:20
Danke gegeben: 3
Danke bekommen: 207 mal in 198 Posts

Re: Grafische Darstellung von Intercept / Kovariate

Beitragvon thorben-meyer » Di 29. Mär 2022, 18:00

Hallo Holger und Bele,

danke für eure Hilfe. Ich habe es nun über die predict-Funktion ganz gut lösen können. Hier mein Code dazu. Der Zwischenschritt ist fehlenden Werten geschuldet.

plot <- as.data.frame(predict(lgcmGeselligkeitfit))
datenna <- drop_na(daten, SQ1_age)
dim(datenna)
datenna$i <- plot$i
datenna$s <- plot$s
ggplot(datenna, aes(x=SQ1_age, y = i)) +
labs(x = "Alter", y = "Intercept") +
geom_smooth(formula=y ~ poly(x, 1, raw=TRUE),
method = 'lm', se = FALSE)

Liebe Grüße
Thorben
thorben-meyer
Grünschnabel
Grünschnabel
 
Beiträge: 6
Registriert: Mi 23. Feb 2022, 17:01
Danke gegeben: 1
Danke bekommen: 0 mal in 0 Post

Re: Grafische Darstellung von Intercept / Kovariate

Beitragvon bele » Di 29. Mär 2022, 20:26

Hallo Thorben,

thorben-meyer hat geschrieben:
Code: Alles auswählen
plot <- as.data.frame(predict(lgcmGeselligkeitfit))


Auch wenn Du Dich entschieden hast, ggplot2-Grafiken zu verwenden, bleibt plot eine Grafikfunktion. Ich würde Dir abraten, Variablen so zu benennen wie Funktionen. R kommt damit im Allgemeinen recht gut klar, aber wenn Du mal einen Fehler machst, führt sowas gerne zu völlig unverständlichen Fehlermeldungen.

LG,
Bernhard
----
`Oh, you can't help that,' said the Cat: `we're all mad here. I'm mad. You're mad.'
`How do you know I'm mad?' said Alice.
`You must be,' said the Cat, `or you wouldn't have come here.'
(Lewis Carol, Alice in Wonderland)
bele
Schlaflos in Seattle
Schlaflos in Seattle
 
Beiträge: 5774
Registriert: Do 2. Jun 2011, 23:16
Danke gegeben: 15
Danke bekommen: 1356 mal in 1343 Posts

Re: Grafische Darstellung von Intercept / Kovariate

Beitragvon thorben-meyer » Mi 30. Mär 2022, 16:04

Lieber Bernhard,

danke dir, da hast du Recht und das ist ein guter Hinweis.

Liebe Grüße,
Thorben
thorben-meyer
Grünschnabel
Grünschnabel
 
Beiträge: 6
Registriert: Mi 23. Feb 2022, 17:01
Danke gegeben: 1
Danke bekommen: 0 mal in 0 Post


Zurück zu Pfadanalyse, Strukturgleichungsmodelle & CFA

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste