2016-04-13 4 views
0

ich bereits folgendes data.frame vorbereitet:Nehmen optim {} Statistiken auf fusionierten Datensätze mit unterschiedlicher Zeit granularities

> head(DF) 
time  x  y 
33.8351 NA 952.7843 
40  1030  NA 
40.11 1031  NA 
40.22 1039  NA 
40.32 1046  NA 
40.43 1053  NA 

Aufgrund der NA Werte gibt optim mir folgende Fehlermeldung:

Error in optim(par = c(0, 1), min.RSS, data = DF) : 
function cannot be evaluated at initial parameters 

Also was soll ich hier machen? Erstellen Sie ein Dataset mit gerundeten Werten, um eine Mindestanzahl gefüllter Zeilen zu erhalten und den Rest zu löschen. Ich habe keine Ahnung.

EDIT: Ich versuche, die Restsumme der Quadrate meiner Daten gegen ein lineares Modell mit zwei Parametern zu minimieren.

min.RSS <- function(data, par) { 
       with(data, sum((par[1] + par[2] * x - y)^2)) 
    } 

Stellen Sie sich vor, das Problem wie folgt aus: Es mit einer begrenzten Anzahl von Datenpunkten und einer Kurve (viel größere Menge B von Datenpunkten) ein Datensatz A ist. Ziel ist es, die Kurve so zu skalieren, dass sie optimal mit dem Datensatz A übereinstimmt. Die Neuskalierung ist das lineare Modell und ich versuche, die Steigung und den y-Achsenabschnitt der linearen Gleichung zu optimieren.

+0

Was versuchen Sie zu optimieren? Ist die min.RSS selbstdefinierte Funktion? – Psidom

+0

Entschuldigung, dass ich die Funktion nicht hinzugefügt habe. Aktualisiert. –

+0

Ist es wichtig, NA in Ihrem Datenrahmen zu halten? Können Sie Zeilen entfernen, die NA-Felder enthalten? – Psidom

Antwort

0

Interpolieren Sie die Daten. Hier verwenden wir DF in der Anmerkung am Ende gezeigt. Im Folgenden verwenden wir na.locf aus dem Zoo-Paket. Siehe auch na.approx und na.spline aus dem gleichen Paket für andere Interpolationsschemata.

library(zoo) 
lm(y ~ x, na.locf(DF)) 

geben:

Call: 
lm(formula = y ~ x, data = na.locf(DF)) 

Coefficients: 
(Intercept)   x 
     952.8   0.0 

Hinweis: Der Eingang DF in reproduzierbarer Form ist:

Lines <- "time  x  y 
33.8351 NA 952.7843 
40  1030  NA 
40.11 1031  NA 
40.22 1039  NA 
40.32 1046  NA 
40.43 1053  NA" 
DF <- read.table(text = Lines, header = TRUE) 
Verwandte Themen