【问题标题】:How does R Locfit package calculate residualsR Locfit 包如何计算残差
【发布时间】:2016-07-11 04:44:02
【问题描述】:

我正在使用以下数据使用 locfit 回归,并且对如何计算残差感到困惑。

http://pastebin.com/2iLaSxQD 存储为station.means(我将文本文件称为January_raw_means.txt)

b <- read.table("./January_raw_means.txt", sep = "", header = TRUE)
station.means <- apply(b, 2, as.numeric) 
# Above is to store it as it is found within the original code.

我使用以下代码调用 locfit:

locfit.regression <-   locfit(SD ~ Tmean + Elevation + Longitude + Latitude, 
                                 alpha = 0.3, 
                                 data = data.frame(station.means), maxk = 150)

然后使用这个调用残差:

locfit.residuals <- residuals(locfit.regression)

第一个站点(数据行)的值为:

> locfit.residuals[1]
[1] 2.529492

但是,拟合值是

> fitted(locfit.regression, type = "fit")[1]
[1] 18.68174

但是观察到的值是:

> station.means[1, "SD"]
[1] 26.62326

造成这种差异的原因是什么?我尝试找到一个与从残差 + 拟合计算的值相对应的观察值,但没有骰子。甚至尝试更改最后几位以防四舍五入。

> 2.529492 + 18.68174
[1] 21.21123
> which(station.means == 21.21123)
integer(0)
> which((station.means >= 21.21120) & (station.means <= 21.21125))
integer(0)

发生了什么事?

【问题讨论】:

  • 显然station.means[[1]] 不是文本文件。发布创建 R 数据对象的代码,或上传 dput(station.mean[[1]] ) 的输出`
  • 按照要求做了,变量名更清楚了。
  • 如果没有看到所有的 station.means[1, ],我们无法确定其中一个协变量中没有 NA 值,因此您可能没有真正比较正确的值。如果您希望我们相信您发现了值得调查的错误,请发布有关数据和模型拟合的更多详细信息。
  • 问题实际上出在我认为没有必要发布的 for 循环中。我正在编辑原始问题以突出显示该问题(或者最好将其发布为答案?)
  • 当一个无法用于构建答案的问题发布的答案时,我感到很生气。您应该编辑问题,以便它提出一个可以回答的问题。如果你选择然后回答那很好。

标签: r regression


【解决方案1】:

(我知道这可能是一条评论,但“答案编辑”提高了清晰度。)当我下载该数据并运行代码时,我得到以下信息:

> locfit.residuals[1]
[1] -0.137262
> fitted(locfit.regression, type = "fit")[1]
[1] 26.76052
> station.means[1, "SD"]
      SD 
26.62326 
> station.means[1, "SD"]-fitted(locfit.regression, type = "fit")[1]
       SD 
-0.137262 

所以当前版本的 R 和兼容版本的 locfit 确实没有差异:

> require(locfit)
Loading required package: locfit
locfit 1.5-9.1   2013-03-22

我上面的评论提出了一个合理的假设(第 1 行中的缺失值)这可能如何在更大的数据集中发生。可以通过以下方式进行测试:

station.means[ complete.cases(station.means), "SD"][1] - fitted(locfit.regression, type = "fit")[1]

complete.cases 函数返回一个逻辑向量,只要数据帧中的行数,因此适合作为“[”的i 位置中的选择向量。所以我最好的猜测是,这个问题与“如何”计算残差无关,而是“哪些”残差实际上存在。

【讨论】:

    猜你喜欢
    • 2016-01-09
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    相关资源
    最近更新 更多