用局部加权回归观察二位变量的关系,且用MSE来检验回归

来源:互联网 发布:追风软件怎么用 编辑:程序博客网 时间:2024/05/22 10:49

首先有一个二维的变量

> setwd("e:/gh")> ll <- read.table("ll.txt",header=T)> setwd("e:/gh")>   ll <- read.table("ll.txt",header=T)>   head(ll)  water.urban water.rural1          92          802          70          403          79          604         100          905          82          446          90          78

> plot(ll, pch = 20, col = rgb(0, 0, 0, 0.5))


做lowess回归

par(las = 1, mar = c(4, 4, 0.1, 0.1))plot(ll, pch = 20, col = rgb(0, 0, 0, 0.5))for (i in seq(0.01, 1, length = 50)) {  lines(lowess(sort(ll$water.urban), sort(ll$water.rural), f = i), col = gray(i),        lwd = 1.5) }




做线性回归

par(las = 1, mar = c(4, 4, 0.1, 0.1), mgp = c(2.5,1, 0))plot(ll, pch = 20, col = rgb(0, 0, 0, 0.5))abline(lm(ll$water.rural~ ll$water.urban), lwd = 2, col = "red")



验证lowess的稳定性

set.seed(711)par(las = 1, mar = c(4, 4, 0.1, 0.1), mgp = c(2.5,1, 0))plot(ll, pch = 20, col = rgb(0, 0, 0, 0.5))for (i in 1:200) {  idx = sample(nrow(ll), 100, TRUE)   lines(lowess(sort(ll$water.urban[idx]), sort(ll$water.rural[idx])), col = rgb(0,0, 0, 0.05), lwd = 1.5) }



在比例越少的点越稀疏


验证两种回归的优劣,我们用MSE


model1 <- lm(water.rural ~ water.urban, ll)  model2 <- loess(water.rural ~ water.urban, ll)    predictedY1 <- predict(model1, ll)  rmse <- function(error)  {    sqrt(mean(error^2))  }    error1 <- model1$residuals  # same as data$Y - predictedY  rmse(error1) 
</pre><p></p><p>[1] 16.70011</p><p></p><pre name="code" class="plain"><pre name="code" class="plain">  predictedY2 <- predict(model2,ll)  error2 <- ll$water.rural - predictedY2  rmse(error2) 


[1] 14.65294

可以得到loess回归比lm回归效果好


参考:

用局部加权回归散点平滑法观察二维变量之间的关系

0 0
原创粉丝点击