Sto provando a modellare alcuni dati che seguono una relazione curva sigmoidale. Nel mio campo di lavoro (psicofisica), una funzione di Weibull viene solitamente utilizzata per modellare tali relazioni, piuttosto che il probit.Dati di modellazione con una funzione di collegamento Weibull in R
Sto provando a creare un modello utilizzando R e sto lottando con la sintassi. So che ho bisogno di utilizzare la funzione vglm()
dal pacchetto VGAM
, ma non riesco a ottenere un modello ragionevole. Ecco il mio dati:
# 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))
Ecco un grafico dei dati in dframe1:
library(ggplot2)
# Plot my original data
ggplot(dframe1, aes(independent_variable, dependent_variable)) + geom_point()
Questo dovrebbe essere in grado di essere modellato da una funzione di Weibull, dal momento che i dati in forma di un relazione curva sigmoidea. Qui è il mio tentativo di modellare i dati e generare una trama rappresentante:
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()
Come potete vedere, questo non rappresenta miei dati originali a tutti. Sto generando il mio modello in modo errato o sto generando la mia trama del modello in modo errato. Che cosa sto facendo di sbagliato?
Nota: Ho modificato questa domanda per renderlo più comprensibile; in precedenza avevo utilizzato completamente la funzione sbagliata (weibreg()
). Quindi, alcuni dei commenti sottostanti potrebbero non avere senso. .....
Io inizialmente si indicò 'weibreg()', ma sembra che questo era una falsa pista. Mi dispiace molto. 'weibreg()' apparentemente gestisce solo la regressione di Weibull * per i modelli di sopravvivenza * (che sono comunemente modellati con il Weibull) - ma la psicofisica sembra essere unica in quanto modellano i dati di non sopravvivenza con una funzione di collegamento di Weibull * dove tutti gli altri usa un logit o un probit. Tuttavia, sembra che la funzione 'vglm()' nel pacchetto 'VGAM' possa funzionare: http://rss.acs.unt.edu/Rdoc/library/VGAM/html/weibull.html Se si potesse aggiungere l'output di 'dput (dframe)' al tuo post, cercherò di aiutare di più. –
Grazie Stephan, questa è un'esperienza di apprendimento per me! Ho aggiunto il 'dput()' alla mia domanda. Qualsiasi consiglio su come eseguire la funzione sarebbe apprezzato. – CaptainProg
Beh, spero che tu abbia più di tre osservazioni! Immagino che il tuo valore 'p' derivi da più osservazioni, quindi ti suggerisco di metterle tutte nel frame dei dati. Quindi avrei adattato il modello usando 'model <- vglm (p ~ size, family = weibull, data = dframe)' (dovrai dire 'vglm()' qual è il dipendente e qual è la variabile indipendente) ed esaminare il risultato con 'summary (model)'. Il tuo messaggio di avviso indica che la stima ML produce un parametro di forma non valido; potrebbe scomparire con più dati. Ma certamente non dirò che comprendo profondamente "vglm"; forse qualcun altro può aiutare? –