我有一张如下图所示的图表。如何在x轴上找到水平灰线切割曲线的坐标?
下面是我用来生成x,y值的玩具数据集
df <- structure(list(x = c(0, -1, -2, -3, -4, -5, -6, -7, -8),
y = c(-5.22672371336103, -2.04798328990208,
-0.998312848674327, -1.13656559451279, -1.80175393429754,
-2.67597356058193, -3.62933726371666, -4.61213085819315,
-5.60579419730348)), .Names = c("x", "y"
), row.names = c(NA, -9L), class = "data.frame")
plot(df$x, df$y, asp = 1)
abline(h=-1.92, col = "gray60")
lines(df$x, df$y)
答案 0 :(得分:2)
我确信有更聪明的方法可以做到这一点,但这是一种使用样条和蛮力的方法。
spl <- splinefun(df)
s <- seq(min(df$x), max(df$x), by=5e-3)
est <- spl(s)
xs <- s[diff(sign(diff(c(0, abs(-1.92 - est))))) > 0]
plot(df$x, df$y, asp=1)
abline(h=-1.92, col = "gray60")
lines(s, est)
abline(v=xs, col="blue")
答案 1 :(得分:2)
这是另一种解决方案。
让我先分别定义x和y向量。
h
不是关注两条曲线之间的交点,为了简化,我要做的是取代/移动曲线y<-y+1.92
单位。
fit4 <- lm(y~poly(x,4,raw=TRUE))
summary(fit4)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.2879360 0.0525516 -62.57 3.91e-07 ***
poly(x, 4, raw = TRUE)1 -4.4218115 0.1044875 -42.32 1.86e-06 ***
poly(x, 4, raw = TRUE)2 -1.4833140 0.0583804 -25.41 1.42e-05 ***
poly(x, 4, raw = TRUE)3 -0.1799201 0.0112986 -15.92 9.09e-05 ***
poly(x, 4, raw = TRUE)4 -0.0080516 0.0007005 -11.49 0.000327 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.05373 on 4 degrees of freedom
Multiple R-squared: 0.9995, Adjusted R-squared: 0.9991
F-statistic: 2130 on 4 and 4 DF, p-value: 6.605e-07
现在我的问题更简单:计算曲线的根。
我适合4度多项式(这有点随机,我不得不承认)。
coef<-fit4$coefficients
polyroot(coef)
正如你所看到的,我的R平方非常好......所以足够。
现在,我得到系数并得到我的多项式的根。
{{1}}
-1.094和-4.136。