R中的正弦曲线拟合
Sinusoidal curve fitting in R
我正在尝试使用以下代码将正弦曲线拟合到数据。我不确定为什么它看起来很奇怪,因为线条似乎从 17 点到 9 点,然后 9 点到 20 点,再回到 12 点。我还希望正弦曲线在整个 24 小时内延伸。如果你能在 ggplot2 中做到这一点,那就太棒了。谢谢!
Test_case <- structure(list(TEST_RESULT = c(1.31, 65.44, 8.59, 9.91), Time = c(17,
9, 20, 12)), row.names = c(NA, -4L), class = c("tbl_df", "tbl",
"data.frame"))
Time <- test_case$Time
test_result <- test_case$TEST_RESULT
xc<-cos(2*pi*Time/24)
xs<-sin(2*pi*Time/24)
fit.lm <- lm(test_result ~ xc+xs)
fit <- fitted(fit.lm)
# find predictions for original time series
pred <- predict(fit.lm, newdata=data.frame(Time=Time))
plot(test_result ~ Time, data= test_case, xlim=c(1, 24), ylim=c(0,500))
lines(Time, pred, col="blue")
确保时间变量出现在公式中并且没有被 xc 和 xs 变量隐藏。还要确保预测中使用的时间是有序的,即 0:23 是按升序排列的。另一方面,输入数据不需要按顺序排列,因为我们只是将其绘制为点,因此绘制输入数据的顺序并不重要。
因此使用 test_case
我们得到的问题是:
fit.lm <- lm(test_result ~ cos(2*pi*Time/24) + sin(2*pi*Time/24), test_case)
Time2 <- 0:23
pred2 <- predict(fit.lm, newdata = list(Time = Time2))
plot(test_result ~ Time, data = test_case, xlim = c(1, 24), ylim = c(0, 500))
lines(pred2 ~ Time2, col = "blue")
我正在尝试使用以下代码将正弦曲线拟合到数据。我不确定为什么它看起来很奇怪,因为线条似乎从 17 点到 9 点,然后 9 点到 20 点,再回到 12 点。我还希望正弦曲线在整个 24 小时内延伸。如果你能在 ggplot2 中做到这一点,那就太棒了。谢谢!
Test_case <- structure(list(TEST_RESULT = c(1.31, 65.44, 8.59, 9.91), Time = c(17,
9, 20, 12)), row.names = c(NA, -4L), class = c("tbl_df", "tbl",
"data.frame"))
Time <- test_case$Time
test_result <- test_case$TEST_RESULT
xc<-cos(2*pi*Time/24)
xs<-sin(2*pi*Time/24)
fit.lm <- lm(test_result ~ xc+xs)
fit <- fitted(fit.lm)
# find predictions for original time series
pred <- predict(fit.lm, newdata=data.frame(Time=Time))
plot(test_result ~ Time, data= test_case, xlim=c(1, 24), ylim=c(0,500))
lines(Time, pred, col="blue")
确保时间变量出现在公式中并且没有被 xc 和 xs 变量隐藏。还要确保预测中使用的时间是有序的,即 0:23 是按升序排列的。另一方面,输入数据不需要按顺序排列,因为我们只是将其绘制为点,因此绘制输入数据的顺序并不重要。
因此使用 test_case
我们得到的问题是:
fit.lm <- lm(test_result ~ cos(2*pi*Time/24) + sin(2*pi*Time/24), test_case)
Time2 <- 0:23
pred2 <- predict(fit.lm, newdata = list(Time = Time2))
plot(test_result ~ Time, data = test_case, xlim = c(1, 24), ylim = c(0, 500))
lines(pred2 ~ Time2, col = "blue")