1

我有一个带有 2 条直线的频谱图,我使用以下命令制作:(a 是频谱左侧的斜率,b 是右侧的斜率。此处的边界为 3200 Hz)

a=0.009909
b=-0.003873

plot(spec, type="l", main...)

abline(a, col="orange")
abline(b, col="skyblue")
abline(v=3200, lty=2)

在此处输入图像描述

我想做的是绘制橙色线直到 3200 Hz 和从 3200 Hz 开始的天蓝色线,如下图(大致由 photoshop 创建,抱歉):

在此处输入图像描述

这与功能 abline() 可能吗?或者有什么办法吗?

非常感谢你!

4

2 回答 2

2

如果您有拟合模型,那么最好的解决方案是使用该predict()方法为感兴趣的区间上的一组等距点生成预测。

使用来自@thelatemail 答案的数据

df <- data.frame(y = c(1.4, 2.3, 3.8, 3.6, 5.9, 5.4, 7.6, 7.4, 8.1,
                       8.7, 7.4, 6.9, 5.4, 4.7, 2.7, 1.8, 1.1),
                 x = 1:17,
                 ind = rep(c(TRUE,FALSE), times = c(8,9)))

fit1 <- lm(y ~ x, data = df, subset = ind)
fit2 <- lm(y ~ x, data = df, subset = !ind)

## regions in a new data frame over which to predict
r1 <- data.frame(x = seq(from = 1, to = 8, length.out = 20))
r2 <- data.frame(x = seq(from = 9, to = 17, length.out = 20))

## predict
p1 <- predict(fit1, newdata = r1)
p2 <- predict(fit2, newdata = r2)

## add lines to plot
plot(y ~ x, data = df, type = "l")
lines(p1 ~ x, data = r1, col = "red")
lines(p2 ~ x, data = r2, col = "blue")

这给

在此处输入图像描述

这是一种比手动写出方程式更灵活的方法,并且适用于许多类型的模型,它们都有predict()方法。

于 2012-11-16T09:46:11.753 回答
1

编辑以修复错误

这是一个可以扩展到您的数据的基本示例。它依赖于为每个数据子集生成最佳拟合线的系数,首先使用glm然后在lines语句中调用它们。

test <- c(1.4, 2.3, 3.8, 3.6, 5.9, 5.4, 7.6, 7.4, 8.1, 8.7, 7.4, 6.9, 
5.4, 4.7, 2.7, 1.8, 1.1)

plot(test,type="l",ylim=c(0,12))
fit1 <- glm(test[1:8] ~ I(1:8))
fit2 <- glm(test[9:17] ~ I(1:9))

# ...$coefficients[2] is the slope, ...$coefficients[1] is the intercept
lines(1:9, 1:9 * fit1$coefficients[2] + fit1$coefficients[1],col="red")
lines(9:17,1:9 * fit2$coefficients[2] + fit2$coefficients[1],col="blue")

在此处输入图像描述

于 2012-11-15T02:06:29.993 回答