将多项式拟合到 R 中的短数据系列时出现问题

问题描述 投票:0回答:1

我正在尝试将多项式或黄土拟合到一系列短数据(作物系数(Kc)〜生长度日(gdds))。 实际数据很短,其中

Kc <- c(0.1, 0.41, 0.54, 0.66, 0.85, 1)
gdd <- c(0, 90, 225, 270, 360, 630)

为了产生平滑的结果,我将其中 3 个数据集放在一起,如下所示。

Kc <- c(0.1, 0.41, 0.54, 0.66, 0.85, 1, 1.1, 1.41, 1.54, 1.66, 1.85, 2, 2.1, 2.41, 2.54, 2.66, 2.85, 3)
gdd <- c(0, 90, 225, 270, 360, 630, 630, 720, 855, 900, 990, 1260, 1260, 1350, 1485, 1530, 1620, 1890)
df <- data.frame(gdd = gdd, Kc = Kc)

R 中典型的多项式拟合如下所示:

Kc_fit <- lm(Kc ~ poly(gdd,4))

然而,这些结果相当差,并且增加多项式的次数并不会产生很大的差异。

ggplot(df, aes(x=gdd, y=Kc)) + geom_point() + stat_smooth(method='lm', formula = Kc ~ poly(gdd,4), size = 1)

上面的 ggplot 代码产生了我无法理解的奇怪结果。 不知道为什么会这样做。 否则,是否有人有任何想法可以让我对数据进行平滑多项式、黄土或其他拟合(其中拟合穿过点并且平滑量最小)?

我以前没有在 R 中遇到过这个问题,而且奇怪的是,它在将多项式拟合到这些数据时遇到了麻烦。 谢谢。

r linear-regression polynomials loess
1个回答
0
投票

我不太清楚你所说的“很差”是什么意思:

Kc_fit <- lm(Kc ~ poly(gdd,4), df)
summary(Kc_fit)
Residual standard error: 0.1032 on 13 degrees of freedom
Multiple R-squared:  0.9898,    Adjusted R-squared:  0.9866 

(另一方面,简单的线性模型 (

Kc ~ gdd
) 的倍数 R^2 为 0.9873,调整后的 R^2 为 0.9865,因此添加多项式项并没有多大作用 - 尽管有 2.1四阶模型的 AIC 单位改进...)

您的绘图的问题是

stat_smooth
的公式始终必须根据
x
y
来指定,不是数据框中的原始变量,即在本例中为
stat_smooth(method='lm', formula = y ~ poly(x,4))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.