2012-12-21 50 views
0

我有以下图片: Plot如何在R中绘制一条平滑线或95%的逐点间隔?

而且我想顺利红色和蓝色线。但我不知道该怎么做。红色和蓝色线分别表示黑点的较低的95%间隔。 (请注意,我没有使用任何回归公式来获得95%的间隔) 我阅读了黄土功能,但是当我尝试使用它时。我找回了同样的情节。 那么有什么特别的R功能可以让我平滑这两条线。

或者,有没有办法获得“95%的智慧间隔”这个问题?

的代码下面给出:

residual.plot <- function(a,b) 
{ 
    log.y1 <- log(a) - b * log(energy) 
    fitted.y <- exp(log.y1) 
    diff <- count - fitted.y 
    #normal approximation 
    low.interval <- c() 
    high.interval <- c() 
    for(i in 1:350) 
    { 
     low <- diff[i] - sqrt( exp(log(a) - b * log(energy[i])))*qnorm(0.975) 
     high <- diff[i] + sqrt( exp(log(a) - b * log(energy[i])) )*qnorm(0.975) 
     low.interval <- append(low.interval, low) 
     high.interval <- append(high.interval, high) 
    } 
    par(mfrow = c(1,1)) 
    plot(energy, diff, ylim = c(-10,10), type = "p", pch = 7) 
    lines(energy, low.interval, type = "p", col = "red", pch = 1) 
    lines(energy, high.interval, type = "p", col = "blue", pch = 1) 


} 
+0

你能否提供你的'a'和'b'变量? ('dput(a)'和'dput(b)'会很好) –

+2

神秘'count'从哪里来?和'能量'?无论如何,如果你想平滑95%的间隔,你必须从你的模型中计算出它们。你的模型是什么?有没有一个模型?我实际上看不到一个... – Spacedman

+0

对不起。数量和能量是数据集中的变量,它是在函数之外定义的。 – mynameisJEFF

回答

5

首先,从此再也不敢再次发布这样的代码。您提交2不可饶恕的大罪:

  • 你生长在一个迭代循环对象(吨问题存在)
  • 你不使用的R矢量化工作的事实。

这就是说,最简单的方法是使用lowess,前提是数据中没有NA值。你的功能应该再是这样的:

residual.plot <- function(a,b,count,energy) 
{ 
    log.y1 <- log(a) - b * log(energy) 
    fitted.y <- exp(log.y1) 
    diff <- count - fitted.y 

    #normal approximation 
     low <- diff - sqrt( exp(log(a) - b * log(energy)))*qnorm(0.975) 
     high <- diff + sqrt( exp(log(a) - b * log(energy)) )*qnorm(0.975) 

    par(mfrow = c(1,1)) 
    plot(energy, diff, ylim = c(-10,10), type = "p", pch = 7) 
    lines(lowess(energy, low), type = "p", col = "red", pch = 1) 
    lines(lowess(energy, high), type = "p", col = "blue", pch = 1) 


} 

PS:为了使功能非常有用,你不应该指望变量从功能以外的例如像countenergy。将它们作为参数添加到函数中,以便稍后在使用其他数据集时使用该函数。

+0

我猜你想要'线(lowess(energy,low),...)' –

+1

+1!我希望我能+2!没有太多的“lowess”位 - 这是有用的,并且回答了直接的问题 - 但是关于编写_R-ic_代码的一些提示。因此,许多R的新人未能获得大部分语言的“矢量化”性质。关于使用'函数参数'的提示是一种通用编程的最佳实践,但要注意R函数中的参数大多是“按值”传递的。对于新手甚至更多经验丰富的R从业者来说,一个好的阅读是'R Inferno'(http://www.burns-stat.com/pages/Tutor/R_inferno.pdf) – mjv

+0

我是R的新手。你是什么人意思是由R作品矢量化 – mynameisJEFF

相关问题