lon*_*wq1 5 plot r best-fit-curve
现在我有一个大的数据集,温度一直在上升和下降.我想平滑我的数据并绘制出最适合所有温度的线条,
这是数据:
weather.data
date mtemp
1 2008-01-01 12.9
2 2008-01-02 12.9
3 2008-01-03 14.5
4 2008-01-04 15.7
5 2008-01-05 17.0
6 2008-01-06 17.8
7 2008-01-07 20.2
8 2008-01-08 20.8
9 2008-01-09 21.4
10 2008-01-10 20.8
11 2008-01-11 21.4
12 2008-01-12 22.0
Run Code Online (Sandbox Code Playgroud)
等等...............直到2009年12月31日
我当前的图表看起来像这样,我的数据适合回归,如运行平均值或黄土:
但是,当我试图将它与运行平均值相符时,它变成了这样:

这是我的代码.
plot(weather.data$date,weather.data$mtemp,ylim=c(0,30),type='l',col="orange")
par(new=TRUE)
Run Code Online (Sandbox Code Playgroud)
有人能帮我一把吗?
nic*_*ico 15
根据您的实际数据以及您希望如何平滑它,以及为什么要平滑它有多种选择.
我向您展示了线性回归(一阶和二阶)和局部回归(LOESS)的例子.这些可能是也可能不是用于数据的良好统计模型,但如果没有看到它就很难分辨.在任何情况下:
time <- 0:100
temp <- 20+ 0.01 * time^2 + 0.8 * time + rnorm(101, 0, 5)
# Generate first order linear model
lin.mod <- lm(temp~time)
# Generate second order linear model
lin.mod2 <- lm(temp~I(time^2)+time)
# Calculate local regression
ls <- loess(temp~time)
# Predict the data (passing only the model runs the prediction
# on the data points used to generate the model itself)
pr.lm <- predict(lin.mod)
pr.lm2 <- predict(lin.mod2)
pr.loess <- predict(ls)
par(mfrow=c(2,2))
plot(time, temp, "l", las=1, xlab="Time", ylab="Temperature")
lines(pr.lm~time, col="blue", lwd=2)
plot(time, temp, "l", las=1, xlab="Time", ylab="Temperature")
lines(pr.lm2~time, col="green", lwd=2)
plot(time, temp, "l", las=1, xlab="Time", ylab="Temperature")
lines(pr.loess~time, col="red", lwd=2)
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用移动平均线.
例如:
library(zoo)
mov.avg <- rollmean(temp, 5, fill=NA)
plot(time, temp, "l")
lines(time, mov.avg, col="orange", lwd=2)
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
39236 次 |
| 最近记录: |