Chciałbym zasugerować, że ważne jest opracowanie fizycznie realistycznego, praktycznie użytecznego modelu kosztu energii. Będzie to działało lepiej w wykrywaniu zmian kosztów niż jakakolwiek wizualizacja surowych danych może być osiągnięta. Porównując to z rozwiązaniem oferowanym w SO , mamy bardzo ładne studium przypadku różnicy między dopasowaniem krzywej do danych a przeprowadzeniem znaczącej analizy statystycznej.
(Ta sugestia opiera się na dopasowaniu takiego modelu do własnego użytku domowego dziesięć lat temu i zastosowaniu go do śledzenia zmian w tym okresie. Pamiętaj, że po dopasowaniu modelu można go łatwo obliczyć w arkuszu kalkulacyjnym w celu śledzenia zmiany, więc nie powinniśmy czuć się ograniczeni przez (nie) możliwości oprogramowania arkusza kalkulacyjnego.)
W przypadku tych danych taki fizycznie wiarygodny model generuje zasadniczo inny obraz kosztów energii i wzorców zużycia niż prosty model alternatywny (kwadratowe dopasowanie codziennego użytkowania z najmniejszymi kwadratami do średniej miesięcznej temperatury). W związku z tym prostszego modelu nie można uznać za niezawodne narzędzie do rozumienia, przewidywania lub porównywania wzorców zużycia energii.
Analiza
Prawo chłodzenia Newtona mówi, że w dobrym przybliżeniu koszt ogrzewania (w jednostce czasu) powinien być wprost proporcjonalny do różnicy między temperaturą zewnętrzną a temperaturą wewnętrzną . Niech ta stała proporcjonalności będzie równa . Koszt chłodzenia powinien być również proporcjonalny do tej różnicy temperatur, z podobną - choć niekoniecznie identyczną - stałą proporcjonalności . (Każdy z nich zależy od właściwości izolacyjnych domu, a także od wydajności systemów ogrzewania i chłodzenia.)tt0−αβ
Oszacowanie i (które wyrażone są w kilowatach (lub dolarach) na stopień na jednostkę czasu) są jednymi z najważniejszych rzeczy, które można osiągnąć,αβ ponieważ pozwalają nam przewidzieć przyszłe koszty, a także zmierzyć wydajność dom i jego systemy energetyczne.
Ponieważ dane te dotyczą całkowitego zużycia energii elektrycznej, obejmują koszty niezwiązane z ogrzewaniem, takie jak oświetlenie, gotowanie, przetwarzanie i rozrywka. Interesujące jest również oszacowanie tego średniego podstawowego zużycia energii (na jednostkę czasu), które nazwiemy : zapewnia ono dolną granicę ilości energii, jaką można zaoszczędzić, i umożliwia przewidywanie przyszłych kosztów, gdy zostaną wprowadzone ulepszenia wydajności o znanej wielkości . (Na przykład po czterech latach wymieniłem piec na jeden, który twierdził, że jest o 30% bardziej wydajny - i rzeczywiście tak było).γ
Wreszcie, w przybliżeniu (brutto) założę, że dom jest utrzymywany w prawie stałej temperaturze przez cały rok. (W moim modelu osobistym zakładam dwie temperatury, , odpowiednio dla zimy i lata - ale w tym przykładzie nie ma jeszcze wystarczających danych, aby wiarygodnie oszacować obie z nich, a i tak byłyby całkiem blisko.) wartość pomaga ocenić konsekwencje utrzymania domu w nieco innej temperaturze, co jest jedną z ważnych opcji oszczędzania energii.t0t0≤t1
Dane stanowią szczególnie ważną i interesującą komplikację : odzwierciedlają całkowite koszty w okresach wahań temperatur zewnętrznych - i zmieniają się znacznie, zwykle około jednej czwartej rocznego zakresu każdego miesiąca. Jak zobaczymy, tworzy to zasadniczą różnicę między opisanym właśnie prawidłowym modelem chwilowym a wartościami sum miesięcznych. Efekt jest szczególnie wyraźny w miesiącach pośrednich, w których ma miejsce (lub żadne) ogrzewanie i chłodzenie. Każdy model, który nie uwzględnia tej zmiany, błędnie „pomyślałby”, że koszty energii powinny być na poziomie stawki podstawowej w dowolnym miesiącu ze średnią temperaturą , ale rzeczywistość jest zupełnie inna.γt0
Nie mamy (łatwo) szczegółowych informacji o miesięcznych wahaniach temperatury poza ich zakresami. Proponuję potraktować to z praktycznym podejściem, ale trochę niespójnym. Z wyjątkiem ekstremalnych temperatur, każdego miesiąca zwykle następuje stopniowy wzrost lub spadek temperatury. Oznacza to, że możemy przyjąć, że rozkład będzie w przybliżeniu jednolity. Gdy zakres zmiennej jednolitej ma długość , zmienna ta ma odchylenie standardowe . Korzystam z tej zależności, aby przekonwertować zakresy (z na ) na odchylenia standardowe. Ale w zasadzie, aby uzyskać ładnie zachowany model, obniżę wariancję na końcach tych zakresów, używając opcji NormalnyLs=L/6–√Avg. Low
Avg. High
rozkłady (z tymi szacowanymi SD i średnimi podanymi przez Avg. Temp
).
Wreszcie musimy ustandaryzować dane do wspólnego czasu jednostkowego. Chociaż jest to już obecne w Daily kWh Avg.
zmiennej, brakuje jej precyzji, więc podzielmy sumę przez liczbę dni, aby odzyskać utraconą precyzję.
W ten sposób, model jednostkowej czas chłodzenia koszty przy temperaturze zewnętrznej jestYt
y(t)=γ+α(t−t0)I(t<t0)+β(t−t0)I(t>t0)+ε(t)
gdzie jest funkcją wskaźnika, a reprezentuje wszystko, co w inny sposób nie zostało wyraźnie zapisane w tym modelu. Ma cztery parametry do oszacowania: i . (Jeśli jesteś naprawdę pewny co do możesz ustalić jego wartość zamiast ją szacować).Iεα,β,γt0t0
Odnotowano całkowite koszty podczas okresu czasu do gdy temperatura różni się w czasie będzie zatemx0x1t(x)x
Cost(x0,x1)=∫x1x0y(t)dt=∫x1x0(γ+α(t(x)−t0)I(t(x)<t0)+β(t(x)−t0)I(t(x)>t0)+ε(t(x)))t′(x)dx.
Jeśli model jest w ogóle dobry, wahania w powinny uśredniać się do wartości bliskiej zeru i będą się losowo zmieniać z miesiąca na miesiąc. Przybliżenie fluktuacji z rozkładem normalnym średniej (średnia miesięczna) i odchylenia standardowego (jak poprzednio podano z zakresu miesięcznego) i wykonanie całek dajeε(t)ε¯t(x)t¯s(t¯)
y¯(t¯)=γ+(β−α)s(t¯)2ϕs(t¯−t0)+(t¯−t0)(β+(α−β)Φs(t0−t¯))+ε¯(t¯).
W tym wzorze jest skumulowanym rozkładem Normalnej średniej zerowej i odchylenia standardowego ; to jego gęstość.Φss(t¯)ϕ
Model dopasowany
Model ten, choć wyraża nieliniowy związek między kosztami a temperaturą, jest jednak liniowy w zmiennych i . Ponieważ jednak jest on nieliniowy w , a nie jest znane, potrzebujemy procedury dopasowania nieliniowego. Aby to zilustrować, po prostu zrzuciłem go do maksymalizatora prawdopodobieństwa (używając do obliczeń), zakładając, że są niezależne i identycznie rozmieszczone, z normalnymi rozkładami średniej zerowej i wspólnego odchylenia standardowego .α,β,γt0t0R
ε¯σ
W przypadku tych danych szacunki wynoszą
(α^,β^,γ^,t0^,σ^)=(−1.489,1.371,10.2,63.4,1.80).
To znaczy:
Koszt ogrzewania wynosi około kWh / dzień / stopień F.1.49
Koszt chłodzenia wynosi około kWh / dzień / stopień F. Chłodzenie jest nieco bardziej wydajne.1.37
Podstawowe zużycie energii (inne niż ogrzewanie / chłodzenie) wynosi kWh / dzień. (Liczba ta jest dość niepewna; dodatkowe dane pomogą ją lepiej określić).10.2
Dom jest utrzymywany w temperaturze blisko stopnia F.63.4
Inne warianty, które nie zostały wyraźnie uwzględnione w modelu, mają odchylenie standardowe wynoszące kWh / dzień.1.80
Przedziały ufności i inne ilościowe wyrażenia niepewności w tych szacunkach można uzyskać standardowymi metodami z mechanizmem maksymalnego prawdopodobieństwa.
Wyobrażanie sobie
Aby zilustrować ten model, poniższy rysunek przedstawia dane, model bazowy, dopasowanie do średnich miesięcznych i proste dopasowanie kwadratowe metodą najmniejszych kwadratów.
Dane miesięczne są wyświetlane jako ciemne krzyże. Poziome szare linie, na których leżą, pokazują miesięczne zakresy temperatur. Nasz podstawowy model, odzwierciedlający prawo Newtona, jest pokazany przez czerwone i niebieskie segmenty linii spotykające się w temperaturze . Nasze dopasowanie do danych nie jest krzywą , ponieważ zależy od zakresów temperatur. Jest zatem pokazany jako pojedyncze stałe niebieskie i czerwone punkty. (Niemniej jednak, ponieważ zakresy miesięczne niewiele się różnią, wydaje się, że punkty te wykreślają krzywą - prawie taką samą jak przerywana krzywa kwadratowa.) Wreszcie przerywana krzywa jest kwadratowo dopasowana do najmniejszych kwadratów (do ciemnych krzyży ).t0
Zauważ, jak bardzo pasowania odbiegają od bazowego (chwilowego) modelu, szczególnie w średnich temperaturach! Jest to efekt miesięcznego uśredniania. (Pomyśl o wysokościach rozmazanych czerwonych i niebieskich linii na każdym poziomym szarym segmencie. W ekstremalnych temperaturach wszystko jest wyśrodkowane na liniach, ale w temperaturach środkowych obie strony „V” są uśredniane razem, odzwierciedlając potrzebę do ogrzewania w niektórych momentach i chłodzenia w innych momentach w ciągu miesiąca.)
Porównanie modeli
Oba pasowania - ten starannie dopracowany tutaj i prosty, łatwy, kwadratowy krój - są ściśle zgodne zarówno ze sobą, jak i z punktami danych. Kwadratowe dopasowanie nie jest tak dobre, ale nadal jest przyzwoite: skorygowana średnia resztkowa (dla trzech parametrów) wynosi kWh / dzień, podczas gdy skorygowana średnia resztkowa modelu prawa Newtona (dla czterech parametrów) wynosi kWh / dobę, około 5% mniej. Jeśli wszystko, co chcesz zrobić, to wykreślić krzywą przechodzącą przez punkty danych, zaleciłaby to prostota i względna wierność kwadratowego dopasowania.2.071.97
Jednak kwadratowe dopasowanie jest całkowicie bezużyteczne do uczenia się, co się dzieje! Jego formuła,
y¯(t¯)=219.95−6.241t¯+0.04879(t¯)2,
nie ujawnia nic bezpośredniego użycia. Szczerze mówiąc, moglibyśmy to trochę przeanalizować:
Jest to parabola z wierzchołkiem w stopni F. Możemy to potraktować jako oszacowanie stałej temperatury domu. Nie różni się znacząco od naszego pierwszego oszacowania na stopnia. Jednak przewidywany koszt w tej temperaturze wynosi kWh / dzień. Jest to dwukrotność podstawowego zużycia energii zgodnego z prawem Newtona.t^0=6.241/(2×0.04879)=64.063.4219.95−6.241(63.4)+0.04879(63.4)2=20.4
Koszt krańcowy ogrzewania lub chłodzenia jest uzyskiwany z bezwzględnej wartości pochodnej, . Na przykład, stosując tę formułę, oszacowalibyśmy koszt ogrzewania domu, gdy temperatura zewnętrzna wynosi stopni, jako kWh / dzień / stopień F. Jest to dwukrotność wartości szacowanej dla Newtona prawo .y¯′(t¯)=−6.241+2(0.04879)t¯90−6.241+2(0.04879)(90)=2.54
Podobnie koszt ogrzewania domu przy temperaturze zewnętrznej wynoszącej stopnie szacuje się na kWh / dzień / stopień F. Jest to ponad dwukrotność wartości oszacowanej według prawa Newtona.32|−6.241+2(0.04879)(32)|=3.12
W średnich temperaturach kwadratowe dopasowanie błądzi w przeciwnym kierunku. Rzeczywiście, w swoim wierzchołku w zakresie od do stopni przewiduje prawie zerowe krańcowe koszty ogrzewania lub chłodzenia, mimo że ta średnia temperatura obejmuje dni tak chłodne jak stopni i tak ciepłe jak stopni. (Niewiele osób czytających ten post będzie nadal mieć wyłączoną temperaturę stopni (= stopni C)!)606850785010
Krótko mówiąc, choć wygląda tak dobrze w wizualizacji, dopasowanie kwadratowe rażąco błędnie szacuje podstawowe wielkości zainteresowania związane ze zużyciem energii. Jego stosowanie do oceny zmian w użyciu jest zatem problematyczne i należy go zniechęcać.
Obliczenie
Ten R
kod wykonał wszystkie obliczenia i kreślenie. Można go łatwo dostosować do podobnych zestawów danych.
#
# 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))