r - 为 S 形残差(正弦波曲线)选择哪种非线性回归
问题描述
我正在尝试对两个变量的时间序列数据进行统计分析(总共有 20 个变量我想用我的自变量回归)。一开始我尝试使用常规的 lm 函数:
lm_par1 <- lm(rm_SWI_010~Parrot_cal, data=wheat_new)
summary(lm_par1)
然而,我的残差看起来呈 S 形,呈非线性模式,如正弦波曲线。例如,几乎我所有的残差看起来都是正弦曲线。
一个想法是在我的因变量的 2 到 7 天之间生成 rollmean,以减少正弦形状的噪声。尽管如此,正弦曲线仍然同样可见。
n=7
wheat_new[, aux:=c(0, rep(1:(.N-1)%/%n))]
wheat_new[, rm_SWI_010:=mean(SWI_010, na.rm=T), by=.(aux)][, aux:=NULL]
由于rollmean导致无处可去,我正在考虑使用非线性回归来检查它是否解决了我的残差问题。到目前为止,我有以下代码:
model <- drm(SWI_005 ~ Parrot_cal, fct = MM.2(),
data = wheat_new)
summary(model)
或者
yy <- nls(SWI_005~c*Parrot_cal^z, data=wheat_new,
start= c(c=14, z=.27))
summary(yy)
两种代码都有效,但是我无法检查与 lm 函数一起使用的残差:
wheat_new[, res_par1:yy$residuals]
res_par1 <-ggplot(wheat_new, aes(x=date, y=res_par1))+
geom_point(colour='blue', size=2.2, alpha=0.5)+
theme_minimal() +
scale_x_date(labels = date_format('%b'), date_breaks = '1 month') +
geom_hline(yintercept=c(0), size=0.75, color='black', linetype='dashed') +
geom_smooth(method='lm', size=1, colour='black', linetype = 'dashed', alpha=0.2)+
ylab('Residuals')+xlab('Date') +
labs(title=('Residual Plot'))
res_par1 <- res_par1 + theme_bw(base_family='Playfair', base_size = 15, base_rect_size = 1)
res_par1
现在我正在寻找有关正确选择非线性回归以及如何检查残差的想法。需要提及的一个重要事实是,自然界中没有低于萎蔫点的值,也没有高于田间容量的值(在我的情况下,WP = 9 vol% 和 FC = 23 vol%)。这些数据具有不同的土壤湿度传感器。
Date ASS_TOP SWI_001 SWI_005 SWI_010 B1_005 B1_015 Precip B2_005 B2_015 B3_005 B3_015 SMAP Parrot_cal
1: 04.04.2019 12.21 13.02 13.42 13.96 9.0 9.6 0.0 9.0 9.6 8.5 9.5 NA 14.8
2: 05.04.2019 12.99 14.77 13.76 14.08 8.7 9.6 1.9 8.7 9.6 9.8 9.5 14.89 14.7
3: 06.04.2019 12.73 13.76 13.66 14.02 9.0 9.6 0.5 9.0 9.6 9.9 9.5 NA 14.8
4: 07.04.2019 12.08 13.14 13.52 13.91 8.7 9.6 0.0 8.7 9.6 9.6 9.5 NA 14.7
5: 08.04.2019 11.69 13.70 13.61 13.92 8.7 9.6 0.0 8.7 9.6 9.6 9.5 14.58 14.7
6: 09.04.2019 11.17 12.72 13.30 13.72 8.7 9.6 0.0 8.7 9.6 9.6 9.5 NA 14.6
7: 10.04.2019 12.99 13.72 13.50 13.78 9.7 9.6 2.4 9.7 9.6 10.6 9.5 NA 14.5
8: 11.04.2019 12.34 13.22 13.41 13.71 9.5 9.6 0.0 9.5 9.6 9.5 9.5 14.32 14.5
9: 12.04.2019 11.82 12.94 13.29 13.62 9.2 9.6 0.0 9.2 9.6 9.2 9.5 NA 14.4
10: 13.04.2019 11.43 12.71 13.16 13.52 9.1 9.6 0.0 9.1 9.6 9.1 9.5 NA 14.4
11: 14.04.2019 11.30 12.80 13.11 13.46 8.9 9.6 0.0 8.9 9.6 8.9 9.5 13.98 14.3
12: 15.04.2019 11.04 12.73 13.03 13.39 8.7 9.6 0.0 8.7 9.6 8.6 9.5 NA 14.3
13: 16.04.2019 10.78 12.12 12.82 13.25 8.4 9.6 0.0 8.4 9.6 8.4 9.5 NA 9.9
14: 19.04.2019 10.26 12.73 12.75 13.10 7.7 9.6 0.0 7.7 9.6 7.5 9.5 NA 11.4
15: 20.04.2019 10.26 13.03 12.86 13.12 7.5 9.6 0.0 7.5 9.6 7.5 9.5 13.20 14.7
16: 21.04.2019 10.13 12.11 12.62 12.98 7.4 9.6 0.0 7.4 9.6 7.5 9.5 NA 14.6
17: 22.04.2019 10.13 12.63 12.67 12.96 7.4 9.6 0.0 7.4 9.6 7.5 9.5 NA 14.5
18: 23.04.2019 11.82 13.05 12.73 12.96 8.6 9.6 1.3 8.6 9.6 8.6 9.5 13.00 14.4
19: 24.04.2019 11.17 12.70 12.69 12.92 8.3 9.6 0.0 8.3 9.6 8.2 9.5 NA 14.4
20: 25.04.2019 10.78 12.87 12.73 12.92 7.9 9.6 0.0 8.0 9.6 7.8 9.5 NA 14.5
21: 26.04.2019 10.39 12.29 12.60 12.83 7.5 9.6 0.0 7.6 9.6 7.5 9.5 12.77 14.4
22: 27.04.2019 10.26 11.77 12.39 12.70 7.4 9.6 0.0 7.4 9.6 7.5 9.5 NA 14.2
23: 28.04.2019 10.13 11.47 12.20 12.57 7.4 9.6 0.0 7.4 9.6 7.5 9.5 NA 14.1
24: 29.04.2019 10.78 12.78 12.46 12.68 8.4 9.6 1.1 8.4 9.6 8.4 9.5 13.20 14.1
25: 30.04.2019 18.32 15.99 13.47 13.19 19.9 9.6 12.3 19.9 9.6 20.0 9.5 NA 17.2
26: 01.05.2019 16.63 14.49 13.53 13.25 15.7 9.6 0.0 15.7 9.6 15.8 9.5 NA 19.8
27: 02.05.2019 14.68 13.78 13.50 13.26 11.5 9.6 0.0 11.5 9.6 12.1 9.5 13.54 18.4
28: 03.05.2019 20.14 15.44 14.03 13.56 14.4 9.6 4.7 14.3 9.6 15.0 9.5 NA 20.1
29: 04.05.2019 21.44 15.68 14.33 13.76 16.2 9.6 3.2 16.2 9.6 16.8 9.5 NA 20.5
30: 05.05.2019 23.00 16.83 14.70 13.97 21.0 9.6 5.0 20.9 9.6 21.6 9.5 14.41 23.0
31: 06.05.2019 22.09 15.67 14.80 14.09 20.1 9.6 0.2 20.0 9.6 20.7 9.5 NA 22.7
32: 07.05.2019 20.79 14.22 14.56 14.04 18.0 9.6 0.0 18.0 9.6 18.7 9.5 NA 21.9
33: 08.05.2019 19.10 13.19 14.21 13.91 15.4 9.6 0.0 15.3 9.6 16.2 9.5 14.52 21.1
34: 09.05.2019 21.18 15.05 14.64 14.17 17.7 9.6 4.0 17.6 9.6 18.5 9.5 NA 21.2
35: 10.05.2019 19.36 14.28 14.52 14.15 14.7 9.6 0.8 14.6 9.6 15.6 9.5 NA 21.2
36: 11.05.2019 23.00 15.32 14.72 14.29 21.4 9.6 9.5 21.3 9.6 22.3 9.5 15.07 21.0
37: 12.05.2019 23.00 16.47 15.13 14.55 21.8 9.6 1.6 21.7 9.6 22.7 9.5 NA 22.8
38: 13.05.2019 22.22 15.53 15.18 14.66 20.1 9.6 0.3 20.0 9.6 21.1 9.5 NA 22.5
39: 14.05.2019 23.00 16.02 15.31 14.77 20.9 9.6 1.9 20.8 9.6 21.8 9.5 15.66 22.1
40: 15.05.2019 23.00 17.05 15.66 15.00 23.8 9.6 3.3 23.7 9.6 24.7 9.5 NA 22.9
41: 16.05.2019 23.00 17.03 15.91 15.20 26.3 11.3 5.7 26.3 11.2 28.9 9.5 NA 23.2
42: 17.05.2019 21.44 15.46 15.68 15.14 19.4 15.3 0.0 19.4 15.2 26.1 9.5 16.08 22.3
43: 18.05.2019 20.01 14.60 15.40 15.05 16.4 15.3 0.0 16.4 15.2 23.1 9.5 NA 21.7
44: 19.05.2019 18.71 14.20 15.15 14.95 13.7 15.3 0.0 13.7 15.2 20.4 9.5 NA 21.1
45: 20.05.2019 22.87 15.73 15.45 15.13 18.4 15.3 7.4 18.4 15.2 25.1 9.5 16.54 22.0
46: 21.05.2019 22.74 15.13 15.36 15.11 17.4 15.3 0.8 17.4 15.2 24.1 9.5 NA 22.0
47: 22.05.2019 23.00 17.64 16.00 15.47 19.4 15.3 3.3 19.3 15.2 26.1 9.5 NA 22.5
48: 23.05.2019 21.70 16.31 15.93 15.49 17.2 15.3 0.0 17.2 15.2 24.0 9.5 17.36 22.6
49: 24.05.2019 19.75 14.77 15.59 15.35 12.7 15.3 0.0 12.6 15.2 19.5 9.5 NA 21.9
50: 25.05.2019 17.93 13.98 15.23 15.18 9.5 15.3 0.0 8.9 15.2 15.4 9.5 NA 21.1
51: 26.05.2019 16.24 13.05 14.76 14.94 9.3 12.6 0.0 8.7 12.0 11.9 9.5 17.06 20.3
52: 27.05.2019 16.37 14.59 14.83 14.96 9.1 12.6 1.5 9.5 10.7 11.8 9.5 NA 19.8
53: 28.05.2019 21.96 17.32 15.60 15.35 19.9 12.6 12.0 20.4 10.7 22.7 9.5 NA 21.7
54: 29.05.2019 22.87 16.79 15.80 15.48 20.4 12.6 1.5 20.9 10.7 23.2 9.5 18.49 22.5
55: 30.05.2019 23.00 16.19 15.82 15.53 22.6 12.6 3.4 23.0 10.7 25.3 9.5 NA 22.8
56: 31.05.2019 21.18 15.06 15.61 15.45 18.0 13.1 0.0 18.0 11.6 21.3 9.5 NA 22.3
57: 01.06.2019 18.97 14.10 15.24 15.27 13.6 13.1 0.0 13.6 11.6 16.9 9.5 18.19 21.5
58: 02.06.2019 16.76 13.56 14.89 15.08 9.6 13.1 0.0 9.5 11.6 12.0 9.5 NA 20.5
59: 03.06.2019 14.81 12.97 14.49 14.86 9.3 10.4 0.0 9.3 8.4 9.4 9.5 NA 19.6
60: 04.06.2019 12.86 12.83 14.19 14.66 9.1 9.3 0.0 9.1 8.4 9.1 9.5 17.27 18.6
61: 05.06.2019 11.69 12.88 13.97 14.51 8.9 9.3 0.0 8.9 8.4 8.8 9.5 NA 17.6
62: 06.06.2019 11.17 12.43 13.62 14.27 8.7 9.3 0.0 8.8 8.4 8.6 9.5 NA 17.1
63: 07.06.2019 16.24 13.25 13.66 14.23 12.3 9.3 7.7 12.3 8.4 12.3 9.5 17.22 18.1
64: 08.06.2019 13.77 13.10 13.58 14.14 9.8 9.3 0.0 9.7 8.4 10.0 9.5 NA 17.5
65: 09.06.2019 12.08 12.78 13.40 13.99 9.6 9.3 0.0 9.4 8.4 9.7 9.5 NA 16.7
66: 10.06.2019 11.17 12.88 13.32 13.89 9.3 9.3 0.0 9.2 8.4 9.4 9.5 16.37 16.1
67: 11.06.2019 10.65 13.04 13.27 13.79 9.0 9.3 0.0 8.9 8.4 9.0 9.5 NA 15.6
68: 12.06.2019 10.26 13.38 13.35 13.78 8.6 9.3 0.0 8.6 8.4 8.6 9.5 NA 15.1
69: 13.06.2019 10.13 12.98 13.25 13.69 8.3 9.3 0.0 8.3 8.4 8.3 9.5 15.64 14.9
70: 14.06.2019 10.13 13.17 13.24 13.65 8.0 9.3 0.0 8.0 8.4 7.9 9.5 NA 14.7
71: 15.06.2019 10.00 13.45 13.30 13.64 7.6 9.3 0.0 7.7 8.4 7.5 9.5 NA 14.5
72: 16.06.2019 10.00 13.01 13.24 13.58 8.5 9.3 1.2 8.6 8.4 8.2 9.5 14.99 14.4
73: 17.06.2019 10.00 13.24 13.27 13.57 8.2 9.3 0.0 8.3 8.4 7.9 9.5 NA 14.3
74: 18.06.2019 10.00 12.71 13.12 13.46 7.8 9.3 0.0 7.9 8.4 7.5 9.5 NA 14.2
75: 19.06.2019 10.65 13.28 13.21 13.48 8.4 9.3 1.0 8.6 8.4 8.0 9.5 14.50 14.1
76: 20.06.2019 10.39 13.13 13.19 13.44 8.4 9.3 0.2 8.6 8.4 8.0 9.5 NA 14.0
77: 21.06.2019 10.26 12.94 13.13 13.39 8.4 9.3 0.1 8.6 8.4 8.0 9.5 NA 13.9
78: 22.06.2019 10.13 14.04 13.40 13.50 8.6 9.3 0.5 8.8 8.4 8.1 9.5 14.64 13.8
79: 23.06.2019 13.38 15.80 14.03 13.82 11.8 9.3 4.9 11.9 8.4 12.0 9.5 NA 13.9
80: 24.06.2019 11.82 14.83 14.08 13.87 10.1 9.3 0.0 10.1 8.4 10.7 9.5 NA 14.0
81: 25.06.2019 11.04 13.72 13.90 13.79 9.6 9.3 0.0 9.6 8.4 10.0 9.5 14.33 13.9
82: 26.06.2019 10.52 13.44 13.80 13.75 8.9 9.3 0.0 9.0 8.4 9.1 9.5 NA 13.8
83: 27.06.2019 10.26 13.51 13.76 13.74 8.2 9.3 0.0 8.3 8.4 8.2 9.5 NA 13.7
84: 28.06.2019 10.13 12.45 13.42 13.56 7.5 9.3 0.0 7.6 8.4 7.4 9.5 13.82 13.5
85: 29.06.2019 10.13 12.19 13.18 13.43 6.8 9.3 0.0 7.0 8.4 6.7 9.5 NA 13.4
86: 30.06.2019 10.00 12.08 12.96 13.29 6.0 9.3 0.0 6.2 8.4 6.7 9.5 NA 13.3
87: 01.07.2019 13.51 13.86 13.62 13.61 8.0 9.3 2.8 8.2 8.4 8.5 9.5 13.54 13.2
88: 02.07.2019 12.47 13.51 13.53 13.55 8.0 9.3 0.1 8.2 8.4 8.5 9.5 NA 13.1
89: 03.07.2019 11.56 12.96 13.38 13.46 7.9 9.3 0.0 8.2 8.4 8.4 9.5 NA 13.1
90: 04.07.2019 11.04 12.82 13.29 13.41 7.9 9.3 0.0 8.2 8.4 8.4 9.5 13.20 13.1
91: 05.07.2019 10.65 12.43 13.13 13.31 7.9 9.3 0.0 8.1 8.4 8.4 9.5 NA 12.7
解决方案
使用最后注释中可重现的小麦,如果添加滞后,残差与时间的关系看起来更加随机(见最后的图)。请注意,滞后项在 0.1% 的水平上是显着的,即非常显着。
关于代码,dyn 将确保系列对齐。确保没有加载 dplyr,因为 dplyr 破坏了 R 的滞后泛型。
关于从 nls 拟合中绘制残差,它可以以与 lm 相同的方式完成: plot(resid(nls(...))) 。
library(dyn)
wheat.z <- zoo(wheat)
fm <- dyn$lm(SWI_010 ~ Parrot_cal + lag(SWI_010, -1), wheat.z)
plot(resid(fm), type = "p")
anova(fm)
给予:
Analysis of Variance Table
Response: SWI_010
Df Sum Sq Mean Sq F value Pr(>F)
Parrot_cal 1 35.315 35.315 2157.1 < 2.2e-16 ***
lag(SWI_010, -1) 1 18.052 18.052 1102.6 < 2.2e-16 ***
Residuals 87 1.424 0.016
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
笔记
wheat <- structure(list(Parrot_cal = c(14.8, 14.7, 14.8, 14.7, 14.7, 14.6,
14.5, 14.5, 14.4, 14.4, 14.3, 14.3, 9.9, 11.4, 14.7, 14.6, 14.5,
14.4, 14.4, 14.5, 14.4, 14.2, 14.1, 14.1, 17.2, 19.8, 18.4, 20.1,
20.5, 23, 22.7, 21.9, 21.1, 21.2, 21.2, 21, 22.8, 22.5, 22.1,
22.9, 23.2, 22.3, 21.7, 21.1, 22, 22, 22.5, 22.6, 21.9, 21.1,
20.3, 19.8, 21.7, 22.5, 22.8, 22.3, 21.5, 20.5, 19.6, 18.6, 17.6,
17.1, 18.1, 17.5, 16.7, 16.1, 15.6, 15.1, 14.9, 14.7, 14.5, 14.4,
14.3, 14.2, 14.1, 14, 13.9, 13.8, 13.9, 14, 13.9, 13.8, 13.7,
13.5, 13.4, 13.3, 13.2, 13.1, 13.1, 13.1, 12.7), SWI_010 = c(13.96,
14.08, 14.02, 13.91, 13.92, 13.72, 13.78, 13.71, 13.62, 13.52,
13.46, 13.39, 13.25, 13.1, 13.12, 12.98, 12.96, 12.96, 12.92,
12.92, 12.83, 12.7, 12.57, 12.68, 13.19, 13.25, 13.26, 13.56,
13.76, 13.97, 14.09, 14.04, 13.91, 14.17, 14.15, 14.29, 14.55,
14.66, 14.77, 15, 15.2, 15.14, 15.05, 14.95, 15.13, 15.11, 15.47,
15.49, 15.35, 15.18, 14.94, 14.96, 15.35, 15.48, 15.53, 15.45,
15.27, 15.08, 14.86, 14.66, 14.51, 14.27, 14.23, 14.14, 13.99,
13.89, 13.79, 13.78, 13.69, 13.65, 13.64, 13.58, 13.57, 13.46,
13.48, 13.44, 13.39, 13.5, 13.82, 13.87, 13.79, 13.75, 13.74,
13.56, 13.43, 13.29, 13.61, 13.55, 13.46, 13.41, 13.31)), class = "data.frame", row.names = c(NA,
-91L))
推荐阅读
- android - Recyclerview + CardView OnClickListener
- python - HTML文本文件将href墨水保存到文件
- python-3.x - 在 Airflow 安装期间与依赖项冲突
- android - 无法解析符号“路径”
- mysql - 无法使用 Node.js 将图像从 MySQL 加载到 React.js
- algorithm - 证明一台共享机器和一台无限并行容量的调度算法
- reactjs - 如何使用 react-modal 组件关闭我的 Modal?
- vba - 访问 VBA 以将注释附加到文本框(已编辑)
- java - 如何在 JavaFX 中重新启动计时器?
- reactjs - 如何取消firebase的useEffect订阅