Nicht lineare Regression - log Verlauf mit Schleife

Modelle zur Korrelations- und Regressionsanalyse

Moderator: EDi

Antworten
Luisa0912
Beiträge: 2
Registriert: Di Jun 22, 2021 12:21 pm

Nicht lineare Regression - log Verlauf mit Schleife

Beitrag 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
Dateianhänge
Test_R.csv
(216 Bytes) 98-mal heruntergeladen
Zuletzt geändert von jogo am Mi Jun 23, 2021 10:52 am, insgesamt 1-mal geändert.
Grund: Formatierung verbessert. http://forum.r-statistik.de/viewtopic.php?f=20&t=29
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Nicht lineare Regression - log Verlauf mit Schleife

Beitrag 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...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Luisa0912
Beiträge: 2
Registriert: Di Jun 22, 2021 12:21 pm

Re: Nicht lineare Regression - log Verlauf mit Schleife

Beitrag 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
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Nicht lineare Regression - log Verlauf mit Schleife

Beitrag von EDi »

Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten