Ich möchte vorschlagen, dass es wichtig ist, ein physikalisch realistisches, praktisch nützliches Modell der Energiekosten zu entwickeln. Dadurch lassen sich Kostenänderungen besser erkennen, als dies mit einer Visualisierung der Rohdaten möglich ist. Wenn wir dies mit der auf SO angebotenen Lösung vergleichen , haben wir eine sehr schöne Fallstudie zum Unterschied zwischen der Anpassung einer Kurve an Daten und der Durchführung einer aussagekräftigen statistischen Analyse.
(Dieser Vorschlag basiert darauf, dass ein solches Modell vor einem Jahrzehnt an meinen eigenen Haushaltsgebrauch angepasst und zur Verfolgung von Änderungen in diesem Zeitraum angewendet wurde. Beachten Sie, dass das Modell nach seiner Anpassung zum Zwecke der Nachverfolgung leicht in einer Tabelle berechnet werden kann Änderungen, daher sollten wir uns nicht durch die (In-) Funktionen der Tabellenkalkulationssoftware eingeschränkt fühlen.)
Für diese Daten liefert ein solches physikalisch plausibles Modell ein wesentlich anderes Bild der Energiekosten und Nutzungsmuster als ein einfaches alternatives Modell (eine quadratische Anpassung der kleinsten Quadrate des täglichen Gebrauchs an die monatliche Durchschnittstemperatur). Folglich kann das einfachere Modell nicht als zuverlässiges Werkzeug zum Verstehen, Vorhersagen oder Vergleichen von Energieverbrauchsmustern angesehen werden.
Analyse
Das Newtonsche Gesetz der Kühlung besagt, dass die Heizkosten (während einer Zeiteinheit) in guter Näherung direkt proportional zur Differenz zwischen der Außentemperatur und der Innentemperatur . Diese Proportionalitätskonstante sei . Die Kosten für die Kühlung sollten ebenfalls proportional zu dieser Temperaturdifferenz sein, mit einer ähnlichen - aber nicht unbedingt identischen - Proportionalitätskonstante . (Jedes davon wird durch die Isolierfähigkeit des Hauses sowie die Effizienz der Heiz- und Kühlsysteme bestimmt.)t 0 - α βtt0- αβ
Die Schätzung von und (ausgedrückt als Kilowatt (oder Dollar) pro Grad pro Zeiteinheit) gehört zu den wichtigsten Dingen, die erreicht werden können,βαβ da sie es uns ermöglichen , zukünftige Kosten vorherzusagen und die Effizienz der zu messen Haus und seine Energiesysteme.
Da es sich bei diesen Daten um den gesamten Stromverbrauch handelt, umfassen sie nicht heizbare Kosten wie Beleuchtung, Kochen, Computer und Unterhaltung. Interessant ist auch eine Schätzung dieses durchschnittlichen Basisenergieverbrauchs (pro Zeiteinheit), die ich als : Sie gibt Aufschluss darüber, wie viel Energie eingespart werden kann, und ermöglicht Vorhersagen über zukünftige Kosten, wenn Effizienzverbesserungen bekannter Größenordnung vorgenommen werden . (Zum Beispiel habe ich nach vier Jahren einen Ofen durch einen ersetzt, der 30% effizienter sein soll - und genau das war es auch.)γ
Schließlich gehe ich als (Brutto-) Annäherung davon aus, dass das Haus das ganze Jahr über auf einer nahezu konstanten Temperatur wird. (In meinem persönlichen Modell ich von zwei Temperaturen aus, , für Winter und Sommer - aber in diesem Beispiel sind noch nicht genügend Daten vorhanden, um beide zuverlässig abzuschätzen, und sie wären sowieso ziemlich nahe beieinander.) Der Wert hilft dabei, die Konsequenzen einer leicht unterschiedlichen Temperatur des Hauses zu bewerten. Dies ist eine wichtige Energiesparoption.t 0 ≤ t 1t0t0≤ t1
Die Daten stellen eine außerordentlich wichtige und interessante Komplikation : Sie reflektieren Gesamtkosten während der Zeiten , in denen Außentemperaturen schwanken - und sie schwanken viel, in der Regel etwa ein Viertel ihres Jahresbereich pro Monat. Wie wir sehen werden, erzeugt dies einen wesentlichen Unterschied zwischen dem gerade beschriebenen korrekten zugrunde liegenden Momentanmodell und den Werten der monatlichen Summen. Der Effekt ist besonders ausgeprägt in den Zwischenmonaten, in denen sowohl (als auch keine) Erwärmung und Abkühlung stattfinden. Jedes Modell, das diese Variation nicht berücksichtigt, würde fälschlicherweise "denken", dass die Energiekosten während eines Monats mit einer Durchschnittstemperatur von bei der Basisrate liegen sollten , aber die Realität sieht anders aus.t 0γt0
Wir haben (ohne weiteres) keine detaillierten Informationen über die monatlichen Temperaturschwankungen, abgesehen von ihren Bereichen. Ich schlage vor, dies mit einem Ansatz zu behandeln, der praktisch, aber ein wenig inkonsistent ist. Mit Ausnahme der extremen Temperaturen tritt in jedem Monat normalerweise ein allmählicher Temperaturanstieg oder -abfall auf. Dies bedeutet, dass wir die Verteilung als ungefähr gleichmäßig betrachten können. Wenn der Bereich einer einheitlichen Variablen die Länge , hat diese Variable eine Standardabweichung von . Ich benutze diese Beziehung, um die Bereiche (von bis ) in Standardabweichungen umzuwandeln . Aber im Wesentlichen, um ein gut benommenes Modell zu erhalten, werde ich die Variation an den Enden dieser Bereiche mit Normal herabgewichtens = L / √L.s = L / 6- -√Avg. Low
Avg. High
Verteilungen (mit diesen geschätzten SDs und Mitteln von Avg. Temp
).
Schließlich müssen wir die Daten auf eine gemeinsame Zeiteinheit standardisieren. Obwohl dies in der Daily kWh Avg.
Variablen bereits vorhanden ist, fehlt es an Genauigkeit. Teilen wir stattdessen die Summe durch die Anzahl der Tage, um die verlorene Genauigkeit zurückzugewinnen.
So kostet das Modell des Zeiteinheitskühl bei einer Außentemperatur von ist ,tY.t
y( t ) = γ+ α ( t - t0) Ich( t < t0) + β( t - t0) Ich( t > t0) + ε ( t )
Dabei ist die Indikatorfunktion und repräsentiert alles, was in diesem Modell nicht explizit erfasst wird. Es müssen vier Parameter geschätzt werden: und . (Wenn Sie sich bei wirklich sicher sind, können Sie den Wert festlegen, anstatt ihn zu schätzen.)εichεα , β, γt0t0
Die gemeldeten Gesamtkosten während eines Zeitraums bis in dem die Temperatur mit der Zeit variiert, sind daherx0x1t ( x )x
Kosten ( x0, x1) = ∫x1x0y( t ) dt= ∫x1x0( γ+ α ( t ( x ) - t0) Ich( t ( x ) < t0) + β( t ( x ) - t0) Ich( t ( x ) > t0) + ε ( t ( x ) ) ) t'( x ) dx .
Wenn das Modell überhaupt gut ist, sollten die Schwankungen in auf einen Wert nahe Null gemittelt werden und scheinen sich von Monat zu Monat zufällig zu ändern. Annäherung der Schwankungen in mit einer Normalverteilung von Mittelwert (dem monatlichen Durchschnitt) und Standardabweichung (wie zuvor aus dem monatlichen Bereich angegeben) und Durchführung der Integralausbeutenε ( t )ε¯t ( x )t¯s ( t¯)
y¯( t¯) = γ+ ( β- α ) s ( t¯)2ϕs( t¯- t0) + ( t¯- t0) ( β+ ( α - β) Φs( t0- t¯) ) + ε¯( t¯) .
In dieser Formel ist die kumulative Verteilung einer Normalvariablen aus Mittelwert Null und Standardabweichung ; ist seine Dichte.Φss ( t¯)ϕ
Modellbefestigung
Obwohl dieses Modell eine nichtlineare Beziehung zwischen Kosten und Temperatur ausdrückt, ist es in den Variablen und dennoch linear . Da es jedoch in nichtlinear ist und nicht bekannt ist, benötigen wir ein nichtlineares Anpassungsverfahren. Zur Veranschaulichung habe ich es einfach in einen Wahrscheinlichkeitsmaximierer ( für die Berechnung) abgelegt, vorausgesetzt, die sind unabhängig und identisch verteilt, mit Normalverteilungen von Mittelwert Null und gemeinsamer Standardabweichung .α , β,γt0t0R
ε¯σ
Für diese Daten sind die Schätzungen
( α^, β^,γ^, t0^, σ^) = ( - 1,489 , 1,371 , 10,2 , 63,4 , 1,80 ) .
Das heisst:
Die Heizkosten betragen ca. kWh / Tag / Grad F.1,49
Die Kosten für die Kühlung ca. kWh / Tag / Grad F. Die Kühlung ist etwas effizienter.1,37
Der Basisenergieverbrauch (ohne Heizen / Kühlen) beträgt kWh / Tag. (Diese Zahl ist ziemlich ungewiss. Zusätzliche Daten helfen dabei, sie besser zu bestimmen.)10.2
Das Haus wird auf einer Temperatur nahe Grad F gehalten.63.4
Die anderen im Modell nicht explizit berücksichtigten Abweichungen weisen eine Standardabweichung von kWh / Tag auf.1,80
Konfidenzintervalle und andere quantitative Ausdrücke der Unsicherheit in diesen Schätzungen können auf standardmäßige Weise mit der Maximum-Likelihood-Maschinerie erhalten werden.
Visualisierung
Zur Veranschaulichung dieses Modells sind in der folgenden Abbildung die Daten, das zugrunde liegende Modell, die Anpassung an die monatlichen Durchschnittswerte und eine einfache quadratische Anpassung der kleinsten Quadrate dargestellt.
Die monatlichen Daten werden als dunkle Kreuze angezeigt. Die horizontalen grauen Linien, auf denen sie liegen, zeigen die monatlichen Temperaturbereiche. Unser zugrunde liegendes Modell, das das Newtonsche Gesetz widerspiegelt, wird durch die roten und blauen Liniensegmente gezeigt, die sich bei einer Temperatur von treffen . Unsere Anpassung an die Daten ist keine Kurve , da sie von den Temperaturbereichen abhängt. Es wird daher als einzelne durchgezogene blaue und rote Punkte angezeigt. (Da die monatlichen Bereiche jedoch nicht sehr unterschiedlich sind, scheinen diese Punkte eine Kurve zu zeichnen - fast die gleiche wie die gestrichelte quadratische Kurve.) Schließlich ist die gestrichelte Kurve die quadratische Anpassung der kleinsten Quadrate (an die dunklen Kreuze) ).t0
Beachten Sie, wie stark die Anpassungen vom zugrunde liegenden (Momentan-) Modell abweichen, insbesondere bei mittleren Temperaturen! Dies ist der Effekt der monatlichen Mittelwertbildung. (Denken Sie daran, dass die Höhen der roten und blauen Linien über jedes horizontale graue Segment "verschmiert" werden. Bei extremen Temperaturen wird alles auf die Linien zentriert, aber bei mittleren Temperaturen werden die beiden Seiten des "V" gemittelt, was die Notwendigkeit widerspiegelt zum Erhitzen zu bestimmten Zeiten und zum Abkühlen zu anderen Zeiten während des Monats.)
Modellvergleich
Die beiden Anpassungen - die hier sorgfältig entwickelte und die einfache, einfache, quadratische Anpassung - stimmen sowohl untereinander als auch mit den Datenpunkten eng überein. Die quadratische Anpassung ist nicht ganz so gut, aber dennoch anständig: Der angepasste mittlere Rest (für drei Parameter) beträgt kWh / Tag, während der angepasste mittlere Rest des Newtonschen Gesetzesmodells (für vier Parameter) kWh / Tag beträgt . etwa 5% niedriger. Wenn Sie lediglich eine Kurve durch die Datenpunkte zeichnen möchten, wird dies aufgrund der Einfachheit und relativen Genauigkeit der quadratischen Anpassung empfohlen.2,071.97
Die quadratische Anpassung ist jedoch völlig nutzlos, um zu lernen, was los ist! Seine Formel,
y¯(t¯)=219.95−6.241t¯+0.04879(t¯)2,
offenbart nichts von Nutzen direkt. Um ehrlich zu sein, könnten wir es ein wenig analysieren:
Dies ist eine Parabel mit einem Scheitelpunkt bei Grad F. Wir könnten dies als Schätzung der konstanten nehmen. Es unterscheidet sich nicht wesentlich von unserer ersten Schätzung von Grad. Die prognostizierten Kosten bei dieser Temperatur jedoch kWh / Tag. Dies ist doppelt so viel wie der Grundverbrauch an Energie , der mit dem Newtonschen Gesetz übereinstimmt.63,4t^0=6.241/(2×0.04879)=64.063.4219.95−6.241(63.4)+0.04879(63.4)2=20.4
Die Grenzkosten für Heizen oder Kühlen ergeben sich aus dem Absolutwert der Ableitung . Mit dieser Formel würden wir beispielsweise die Heizkosten eines Hauses bei einer Außentemperatur von Grad auf kWh / Tag / Grad F schätzen. Dies ist das Doppelte des mit Newton geschätzten Werts Gesetz . 90-6.241+2(0,04879)(90)=2,54y¯′(t¯)=−6.241+2(0.04879)t¯90−6.241+2(0.04879)(90)=2.54
In ähnlicher Weise würden die Kosten für die Beheizung des Hauses bei einer Außentemperatur von Grad auf geschätzt kWh / Tag / Grad F. Dies ist mehr als das Doppelte des nach dem Newtonschen Gesetz geschätzten Wertes.| - 6,241 + 2 ( 0,04879 ) ( 32 ) | = 3,1232|−6.241+2(0.04879)(32)|=3.12
Bei den mittleren Temperaturen irrt die quadratische Anpassung in die andere Richtung. Tatsächlich prognostiziert es an seinem Scheitelpunkt im Bereich von bis Grad nahezu null marginale Heiz- oder Kühlkosten, obwohl diese mittlere Temperatur Tage umfasst, die so kühl wie Grad und so warm wie Grad sind. (Nur wenige Leute, die diesen Beitrag lesen, haben ihre Hitze noch bei Grad (= Grad C)!)68 50 78 50 10606850785010
Kurz gesagt, obwohl es in der Visualisierung fast genauso gut aussieht , ist die quadratische Anpassung bei der Schätzung grundlegender interessierender Größen im Zusammenhang mit dem Energieverbrauch grob fehlerhaft. Die Verwendung zur Bewertung von Nutzungsänderungen ist daher problematisch und sollte nicht empfohlen werden.
Berechnung
Dieser R
Code führte die gesamte Berechnung und das Plotten durch. Es kann leicht an ähnliche Datensätze angepasst werden.
#
# Read and process the raw data.
#
x <- read.csv("F:/temp/energy.csv")
x$Daily <- x$Usage / x$Length
x <- x[order(x$Temp), ]
#pairs(x)
#
# Fit a quadratic curve.
#
fit.quadratic <- lm(Daily ~ Temp+I(Temp^2), data=x)
# par(mfrow=c(2,2))
# plot(fit.quadratic)
# par(mfrow=c(1,1))
#
# Fit a simple but realistic heating-cooling model with maximum likelihood.
#
response <- function(theta, x, s) {
alpha <- theta[1]; beta <- theta[2]; gamma <- theta[3]; t.0 <- theta[4]
x <- x - t.0
gamma + (beta-alpha)*s^2*dnorm(x, 0, s) + x*(beta + (alpha-beta)*pnorm(-x, 0, s))
}
log.L <- function(theta, y, x, s) {
# theta = (alpha, beta, gamma, t.0, sigma)
# x = time
# s = estimated SD
# y = response
y.hat <- response(theta, x, s)
sigma <- theta[5]
sum((((y - y.hat) / sigma) ^2 + log(2 * pi * sigma^2))/2)
}
theta <- c(alpha=-1, beta=5/4, gamma=20, t.0=65, sigma=2) # Initial guess
x$Spread <- (x$Temp.high - x$Temp.low)/sqrt(6) # Uniform estimate
fit <- nlm(log.L, theta, y=x$Daily, x=x$Temp, x$Spread)
names(fit$estimate) <- names(theta)
#$
# Set up for plotting.
#
i.pad <- 10
plot(range(x$Temp)+c(-i.pad,i.pad), c(0, max(x$Daily)+20), type="n",
xlab="Temp", ylab="Cost, kWh/day",
main="Data, Model, and Fits")
#
# Plot the data.
#
l <- matrix(mapply(function(l,r,h) {c(l,h,r,h,NA,NA)},
x$Temp.low, x$Temp.high, x$Daily), 2)
lines(l[1,], l[2,], col="Gray")
points(x$Temp, x$Daily, type="p", pch=3)
#
# Draw the models.
#
x0 <- seq(min(x$Temp)-i.pad, max(x$Temp)+i.pad, length.out=401)
lines(x0, cbind(1, x0, x0^2) %*% coef(fit.quadratic), lwd=3, lty=3)
#curve(response(fit$estimate, x, 0), add=TRUE, lwd=2, lty=1)
t.0 <- fit$estimate["t.0"]
alpha <- fit$estimate["alpha"]
beta <- fit$estimate["beta"]
gamma <- fit$estimate["gamma"]
cool <- "#1020c0"; heat <- "#c02010"
lines(c(t.0, 0), gamma + c(0, -alpha*t.0), lwd=2, lty=1, col=cool)
lines(c(t.0, 100), gamma + c(0, beta*(100-t.0)), lwd=2, lty=1, col=heat)
#
# Display the fit.
#
pred <- response(fit$estimate, x$Temp, x$Spread)
points(x$Temp, pred, pch=16, cex=1, col=ifelse(x$Temp < t.0, cool, heat))
#lines(lowess(x$Temp, pred, f=1/4))
#
# Estimate the residual standard deviations.
#
residuals <- x$Daily - pred
sqrt(sum(residuals^2) / (length(residuals) - 4))
sqrt(sum(resid(fit.quadratic)^2) / (length(residuals) - 3))