Ich versuche, einige Daten zu modellieren, die einer sigmoiden Kurvenbeziehung folgen. In meinem Arbeitsgebiet (Psychophysik) wird normalerweise eine Weibull-Funktion verwendet, um solche Beziehungen zu modellieren, anstatt Probit.Modellierung von Daten mit einer Weibull-Link-Funktion in R
Ich versuche ein Modell mit R zu erstellen und kämpfe mit Syntax. Ich weiß, dass ich die vglm()
Funktion aus dem VGAM
Paket verwenden muss, aber ich bin nicht in der Lage, ein vernünftiges Modell heraus zu bekommen. Hier ist meine Daten:
# Data frame example data
dframe1 <- structure(list(independent_variable = c(0.3, 0.24, 0.23, 0.16,
0.14, 0.05, 0.01, -0.1, -0.2), dependent_variable = c(1, 1,
1, 0.95, 0.93, 0.65, 0.55, 0.5, 0.5)), .Names = c("independent_variable",
"dependent_variable"), class = "data.frame", row.names = c(NA,
-9L))
Hier ist eine grafische Darstellung der Daten in dframe1:
library(ggplot2)
# Plot my original data
ggplot(dframe1, aes(independent_variable, dependent_variable)) + geom_point()
Dies sollte durch eine Weibull-Funktion modelliert werden können, da die Daten ein passen sigmoide Kurvenbeziehung. Hier ist mein Versuch, die Daten zu modellieren und generieren eine repräsentative Darstellung:
library(VGAM)
# Generate model
my_model <- vglm(formula = dependent_variable ~ independent_variable, family = weibull, data = dframe1)
# Create a new dataframe based on the model, so that it can be plotted
model_dframe <- data.frame(dframe1$independent_variable, fitted(my_model))
# Plot my model fitted data
ggplot(model_dframe, aes(dframe1.independent_variable, fitted.my_model.)) + geom_point()
Wie Sie sehen können, ist dies nicht meine ursprünglichen Daten überhaupt darstellen. Ich erzeuge entweder mein Modell falsch oder ich erzeuge mein Diagramm des Modells falsch. Was mache ich falsch?
Hinweis: Ich habe diese Frage bearbeitet, um sie verständlicher zu machen; zuvor hatte ich die falsche Funktion komplett benutzt (weibreg()
). Daher sind einige der folgenden Kommentare möglicherweise nicht sinnvoll. .....
Ich wies ursprünglich auf 'weibreg()', aber es scheint, als ob dies eine falsche Fährte war. Es tut mir sehr leid. 'Weibreg()' behandelt anscheinend nur die Weibull-Regression * für Überlebensmodelle * (die üblicherweise mit der Weibull modelliert werden) - aber die Psychophysik scheint insofern einzigartig zu sein, als sie Nicht-Überlebensdaten mit einer Weibull * -Linkfunktion * modelliert, wo alle anderen dies tun würden Verwenden Sie einen Logit oder Probit. Es sieht jedoch so aus, als könnte die 'vglm()' Funktion im 'VGAM' Paket funktionieren: http://rss.acs.unt.edu/Rdoc/library/VGAM/html/weibull.html Wenn Sie die Ausgabe hinzufügen könnten von 'dput (dframe)' zu deinem Beitrag werde ich versuchen, mehr zu helfen. –
Danke Stephan, das ist eine Lernerfahrung für mich! Ich habe die 'dput()' zu meiner Frage hinzugefügt. Jeder Rat, wie man die Funktion ausführt, würde geschätzt werden. – CaptainProg
Nun, ich hoffe, Sie haben mehr als drei Beobachtungen! Ich nehme an, dass Ihr 'p'-Wert aus mehreren Beobachtungen stammt, also schlage ich vor, dass Sie sie alle in den Datenrahmen einfügen. Dann würde ich das Modell mit 'Modell <- vglm (p ~ size, family = weibull, data = dframe)' anpassen (Sie müssen 'vglm()' was ist die abhängige und was ist die unabhängige Variable) und untersuchen das Ergebnis mit 'Zusammenfassung (Modell)'. Ihre Warnmeldung bedeutet, dass die ML-Schätzung einen ungültigen Formparameter ergibt. Es kann mit mehr Daten verschwinden. Aber ich werde sicherlich nicht sagen, dass ich 'vglm' tief verstehe; vielleicht kann jemand anderes helfen? –