我在试着找一条曲线的切线向量.曲线的方程是一个问题,我有不同的点,基于这些点,我在寻找函数的近似值,它描述了曲线,并拟合点.

When I plot my data it looks like this: enter image description here

在应用多项式回归(基于本文:https://www.statology.org/curve-fitting-in-r/)之后,我得到以下结果:

fit <- lm(cl2[,3] ~ poly(cl2[,2], 3))
    summary(fit)
Call:
lm(formula = cl2[, 3] ~ poly(cl2[, 2], 3))

Residuals:
     Min       1Q   Median       3Q      Max 
-0.31834 -0.10187  0.02132  0.09577  0.27393 

Coefficients:
                     Estimate Std. Error   t value Pr(>|t|)    
(Intercept)        -109.89121    0.03789 -2900.217  < 2e-16 ***
poly(cl2[, 2], 3)1    7.33365    0.16516    44.403  < 2e-16 ***
poly(cl2[, 2], 3)2   -4.43572    0.16516   -26.857 4.25e-14 ***
poly(cl2[, 2], 3)3    1.14772    0.16516     6.949 4.66e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1652 on 15 degrees of freedom
Multiple R-squared:  0.9946,    Adjusted R-squared:  0.9935 
F-statistic: 913.7 on 3 and 15 DF,  p-value: < 2.2e-16

当我对曲线进行拟合时,结果看起来不错:

lines(cl2[,2], predict(fit, data.frame(cl2[,2:3])))

enter image description here

根据系数S,我假设曲线的方程式为:

1.14x**3-4.43 x**2+7.33*x-109

当我计算y估计时,我得到了非常奇怪的数字:

和当前(_C):

[1]-108.4569-108.1504-108.0895-108.0728-108.0461-108.1777-108.2751-108.4619-108.6918 [10]-108.9750-109.3552-109.7625-110.3328-110.9580-111.4312-112.0062-112.7337-113.5880 [19]-114.3681

Y_RESPECTED:

[1]-8935267-8980331-9044297-9115821-9166614-9270340-9355643-9456574-9533497-9602089 [11]-9631113-9670175-9715100-9754453-9798813-9851816-9880888-9926067-9940310

这里出了什么问题?

我try 将POLY函数的原始变量设置为真,得到了不同的系数,但问题仍然存在.


Edit

dput格式的数据

y_actual <-
c(-108.4569, -108.1504, -108.0895, -108.0728, -108.0461, -108.1777, 
-108.2751, -108.4619, -108.6918, -108.975, -109.3552, -109.7625, 
-110.3328, -110.958, -111.4312, -112.0062, -112.7337, -113.588, 
-114.3681)

y_predicted <-
c(-8935267, -8980331, -9044297, -9115821, -9166614, -9270340, 
-9355643, -9456574, -9533497, -9602089, -9631113, -9670175, -9715100, 
-9754453, -9798813, -9851816, -9880888, -9926067, -9940310)

编辑:

x_values <- c(-197.3419, -197.6753, -198.1467, -198.6710, -199.0418, -199.7946, -200.4095, -201.1323, -201.6797, -202.1654, -202.3702, -202.6451, -202.9605, -203.2359, -203.5455, -203.9142, -204.1158, -204.4285, -204.5268)

推荐答案

要从coef生成公式,请使用sprintf表示幂函数级数.parsed变成一个函数,我们可以用curve除以points来绘制它.

> cf <- lm(cl2[, 3] ~ poly(cl2[, 2], 3, raw=TRUE)) |> coef()
> (eq <- paste(sprintf('%s*x^%s', cf, seq_along(cf) - 1L), collapse='+'))
[1] "-2007.84158109665*x^0+-24.0105660224912*x^1+-0.0949876187837792*x^2+-0.000111799887426291*x^3"
> f <- eval(parse(text=paste('\\(x)', eq)))
> curve(f, min(cl2[, 2]), max(cl2[, 2]), col=2, panel.first=points(cl2[, -1]))

enter image description here


Data:

cl2 <- structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, -205, -204, -203, -202, -201, -200, -199, -198, -197, -196, 
-195, -194, -193, -192, -191, -190, -189, -188, -187, -114.3681, 
-113.588, -112.7337, -112.0062, -111.4312, -110.958, -110.3328, 
-109.7625, -109.3552, -108.975, -108.6918, -108.4619, -108.2751, 
-108.1777, -108.0461, -108.0728, -108.0895, -108.1504, -108.4569
), dim = c(19L, 3L), dimnames = list(NULL, c("", "x", "y")))

R相关问答推荐

从多个前置日期中获取最长日期

在R中列表的结尾添加数字载体

找出疾病消失的受试者

用相同方法得到不同函数的ROC最优截断值

在R中使用数据集名称

如何在R中对深度嵌套的tibbles中的非空连续行求和?

标识R中多个列中缺少的唯一值

如何自定义3D散点图的图例顺序?

在rpart. plot或fancyRpartPlot中使用带有下标的希腊字母作为标签?

如何指定我的函数应该查找哪个引用表?

更改STAT_VALLES/STAT_PEAKS中的箭头线宽/大小

将箭头绘制在图形外部,而不是图形内部

如何阻止围堵地理密度图?

带RStatix的Wilcoxon环内检验

替换在以前工作的代码中有x行&q;错误(geom_sf/gganimate/dow_mark)

Broom.Mixed::Augment不适用于Sample::分析

在直方图中显示两个变量

汇总数据:在跨越()all_of()Dynamic_list_of_vars=>;所选内容不能有缺失值的汇总()中出错

使用卡环从R中的列中删除单位(&C)

如何使用包含要子集的值的列表或数据框来子集多个列?