如何用R中的数据绘制我的函数

时间:2014-02-06 10:30:43

标签: r plot prediction nonlinear-functions nonlinear-optimization

根据同时点击的用户,我有关于网站响应时间的数据。

例如:
10个用户同时命中(平均)响应时间300ms
20位用户 - > 450毫秒等

我在R中导入数据,然后从2列数据(用户,响应时间)创建绘图。 此外,我使用函数loess在图中绘制关于这些点的线。

这是我写的代码:

users <- seq(5,250, by=5)
responseTime <- c(179.5,234.0,258.5,382.5,486.0,679.0,594.0,703.5,998.0,758.0,797.0,812.0,804.5,890.5,1148.5,1182.5,1298.0,1422.0,1413.5,1209.5,1488.0,1632.0,1715.0,1632.5,2046.5,1860.5,2910.0,2836.0,2851.5,3781.0,2725.0,3036.0,2862.0,3266.0,3175.0,3599.0,3563.0,3375.0,3110.0,2958.0,3407.0,3035.5,3040.0,3378.0,3493.0,3455.5,3268.0,3635.0,3453.0,3851.5)

data1 <- data.frame(users,responseTime)
data1

plot(data1, xlab="Users", ylab="Response Time (ms)")
lines(data1)

loess_fit <- loess(responseTime ~ users, data1)
lines(data1$users, predict(loess_fit), col = "green")

这是我的情节图片:

enter image description here

我的问题是:

  1. 如何在同一图中绘制非线性函数,将其与其他线进行比较?
    示例:response_time(f(x))= 30 * users ^ 2.

  2. 此外,如何对函数行loess和我的函数进行预测,并将它们显示给图,例如:如果我有数据直到250个用户,则预测直到500个用户

2 个答案:

答案 0 :(得分:1)

如果您知道要绘制的线的等式,那么只需为您的预测定义一个变量:

predictedResponseTime <- 30 * users ^ 2
lines(users, predictedResponseTime)

如果问题是你想要一条线,那么你需要调用一个建模函数。

由于loess是非参数模型,因此不适合使用它来进行数据范围之外的预测。

在这种情况下,使用lm的简单(普通最小二乘)线性回归提供了合理的拟合。

model <- lm(responseTime ~ users)

prediction <- data.frame(users = 1:500)
prediction$responseTime <- predict(model, prediction)
with(prediction, lines(users, responseTime))

答案 1 :(得分:0)

绘制曲线知道基础函数的另一种解决方案是函数curve 在你的f(x)= 30x ^ 2的例子中:

plot(data1, xlab="Users", ylab="Response Time (ms)")
lines(data1)
lines(data1$users, predict(loess_fit), col = "green")
curve(30*x^2,col="red", add=TRUE) #Don't forget the add parameter.