Seite 1 von 1

Nicht lineare Regression - log Verlauf mit Schleife

Verfasst: Di Jun 22, 2021 12:34 pm
von Luisa0912
Hallo zusammen,

für meine Masterarbeit möchte ich gerne eine nicht lineare Regression mit logistischem Verlauf in R darstellen. Es geht darum den Kostenverlauf einer Maschine darzustellen. Dazu habe ich den Kostenverlauf kumuliert in % dargestellt plus die jeweiligen Monate. R soll mir dann die Parameter ausspucken.

Ich bin allerdings totale R Anfängerin und habe dementsprechend die eine oder andere Hürde zu bewerkstelligen :-)

Dazu habe ich folgenden Code verwendet:

Code: Alles auswählen

# Modell laden
df <- read.csv2("Test_R.csv")

# Plottdarstellung und Vorhersage Modell 0
plot(df$Monate,df$y)
modell = nls(y~SSlogis(Monate,alpha,Wendepunkt,scale),data=df)
summary(modell)
predict(modell)
plot(df$Monate,df$y)
lines(df$Monate,predict(modell),col="blue",lty=2,lwd=3)
summary(modell)$coefficients[,1]
Dieser Code funktioniert auch einwandfrei. Allerdings hat meine CSV Datei nicht nur eine Spalte. Ich kann natürlich den Code x-beliebig kopieren, charmanter fände ich allerdings eine Schleife.

Damit habe ich allerdings so meine Probleme:

Code: Alles auswählen

for (i in 1:ncol(df)-1){
  modell= nls(i~SSlogis(Monate,alpha,Wendepunkt,scale),data=df)
  summary(modell)$coefficients[,1] }


--> da bekomme ich folgende Fehlermeldung:

Fehler in model.frame.default(formula = ~i + Monate, data = df) :
Variablenlängen sind unterschiedlich (gefunden für 'Monate')

Vielleicht hat ja die/der ein oder andere einen Tipp für mich :-)

Die CSV Datei habe ich mal mit 2 Spalten als Beispiel (+ 1 Spalte für die Monate) angehangen.

Herzlichen Dank & liebe Grüße,

Luisa

Re: Nicht lineare Regression - log Verlauf mit Schleife

Verfasst: Di Jun 22, 2021 12:55 pm
von EDi
Ich mache sowas immer als Kombination aus dplyr + tidyr + purrr + broom.

Code: Alles auswählen



# Pkgs --------------------------------------------------------------------

library("tidyr")
library("dplyr")
library("purrr")
library("broom")
library("ggplot2")


# Load --------------------------------------------------------------------

df <- read.csv2("http://forum.r-statistik.de/download/file.php?id=1499")


# Clean -------------------------------------------------------------------

# bring to long format
dfl <- tidyr::pivot_longer(df, -Monate, names_to = "variable")


# Analyze ----------------------------------------------------------------------

# or (more flexible) in several steps
res <- dfl %>%
  group_by(variable) %>% # for each variable
  tidyr::nest() %>%
  mutate(
    # fit model
    fit = purrr::map(data, ~ nls(value ~ SSlogis(Monate, alpha,Wendepunkt,scale), data = .x)),
    # extract coefs from model   
    coefs = purrr::map(fit, broom::tidy),
    # compute gofs from model
    gofs = purrr::map(fit, broom::glance),
    # compute fitted values
    pred = purrr::map(fit, fitted)
  )

# we get for each variable a column
res

# all ceofs now in a nice data.frame
res %>%
  unnest(coefs)

# or the gofs for all models in a dat.frame
res %>%
  unnest(gofs)

# access individual models
res$fit[[2]]

# plot  all models
res %>%
  unnest(c(data, pred)) %>%
  ggplot(aes(x = Monate)) +
    geom_point(aes(y = value)) +
    geom_line(aes(y = pred)) +
    facet_wrap(~variable)


Diese herangehensweise finde ich super strukturiert, übersichtlich und praktisch, weil alles zusammen in einem data.frame lebt. Daurch kann man auch danch direkt weiter plotten...
Nutze ich auch gerne bei Simulationen.
Mann kann das aber auch alles mit base-R umsetzen... Finde ich aber mühseliger...

Re: Nicht lineare Regression - log Verlauf mit Schleife

Verfasst: Di Jun 22, 2021 2:04 pm
von Luisa0912
Lieber @EDi,

vielen Dank für deine Hilfe und den Code - Das klappt ja wunderbar.

Ich versuche ihn mal zu verstehen, ansonsten würde ich mich nochmal melden, wenn ich darf :-)

Liebe Grüße

Re: Nicht lineare Regression - log Verlauf mit Schleife

Verfasst: Di Jun 22, 2021 9:23 pm
von EDi