[原创]基于R语言的核回归(Kernal Regression)与最近邻回归(NNBR)-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 考研考博>>

考研

>>

[原创]基于R语言的核回归(Kernal Regression)与最近邻回归(NNBR)

[原创]基于R语言的核回归(Kernal Regression)与最近邻回归(NNBR)

发布:fantuanxiaot | 分类:考研

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

1,核回归(KernalRegression),首先定义诸如高斯核函数,Epanechnikov核函数,再基于最优宽窗h,并基于Nadaraya-Waston核估计得到结果,代码如下:1.1,高斯核函数与Epane核函数[hide]#GaussianKernal#高斯核kernalG ...
免费学术公开课,扫码加入


1,核回归(Kernal Regression),首先定义诸如高斯核函数,Epanechnikov核函数,再基于最优宽窗h,并基于Nadaraya-Waston核估计得到结果,代码如下:
1.1,高斯核函数与Epane核函数
[hide]
  1. #Gaussian Kernal
  2. #高斯核
  3. kernalGaussian <- function(xData)
  4. {
  5. #得到相应的核函数

  6. if(ncol(xData)!=1)
  7. {
  8. stop('error input data')
  9. }

  10. stdX <- sd(xData)
  11. #高斯宽带的选择
  12. h <- 1.06*stdX*length(xData)^(-1/5)

  13. kernalX <- 1/(h*sqrt(2*pi)) * exp(-xData^2/(2*h^2))
  14. return(kernalX)

  15. }

  16. #Epanechnikov kernal
  17. kernalEpanechnikov <- function (xData)
  18. {
  19. if(ncol(xData)!=1)
  20. {
  21. stop('error input the data')
  22. }

  23. stdX <- sd(xData)

  24. h<-2.34*stdX*length(xData)^(-1/5)

  25. xPh<- abs(xData/h)
  26. xPh[xPh <=1] <-1
  27. xPh[xPh>1] <- 0

  28. kernalX <- 0.75/h*(1-(xData/h)^2)*xPh
  29. return(kernalX)

  30. }
复制代码
[/hide]
1.2 两个核函数的检测:
[hide]
  1. #两个核函数的检测
  2. testData1 <- as.matrix(seq(-10,10,by = 0.5))
  3. testData2 <- as.matrix(seq(-10,10,length = 100))

  4. kernalGaussian(testData1)

  5. kernalEpanechnikov(testData2)

  6. #高斯核的数据的作图
  7. plot(kernalGaussian(testData2))

  8. #Epanechnikov核函数的作图
  9. plot(kernalEpanechnikov(testData2))
复制代码
[/hide]
1.3 以下是著名的Nadaraya-Waston核估计
[hide]
  1. ##########################################################
  2. #以下是著名的Nadaraya-Waston核估计
  3. #by fantuanxiaot
  4. kernalRegress <- function(xData , yData , kernalName)
  5. {
  6. if(!is.matrix(xData)||!is.matrix(yData))
  7. {
  8. stop('error input the empirical data')
  9. }

  10. #最终返回针对y的核回归拟合的值
  11. nData<-nrow(xData)

  12. if(nData!=nrow(yData))
  13. {
  14. stop('error input the data')
  15. }

  16. if (!is.character(kernalName) || !length(intersect(c('Gaussian','Epanechnikov'),kernalName)) )
  17. {
  18. stop('error input the kernal name')
  19. }

  20. yRegress <- matrix(NaN , nrow = nData , ncol = 1)

  21. for (i in c(1:nData))
  22. {
  23. x <- xData[i]
  24. xXt <- matrix(x , nrow = nData, ncol = 1) - xData

  25. if (setequal(kernalName , 'Gaussian'))
  26. {
  27. khX <- kernalGaussian(xXt)
  28. } else if (setequal(kernalName , 'Epanechnikov'))
  29. {
  30. khX <- kernalEpanechnikov(xXt)
  31. }

  32. yRegress[i] <- sum(yData*khX)/sum(khX)

  33. }

  34. return(yRegress)


  35. }
  36. #核回归的检测
  37. x<- as.matrix(rnorm(100,mean = 0,sd = 0.03))
  38. y<- 0.5*x + as.matrix(rnorm(100,mean = 0,sd = 0.01))

  39. cbind(y,kernalRegress(x,y,'Gaussian') , kernalRegress(x,y,'Epanechnikov'))

  40. plot(c(1:100),y,col = 'white')
  41. lines(c(1:100),y,col = 'blue')
  42. lines(c(1:100),kernalRegress(x,y,'Gaussian'),col = 'red')
  43. lines(c(1:100),kernalRegress(x,y,'Epanechnikov'),col = 'green')
复制代码
[/hide]
2,NNBR(最近邻回归)
一篇基本思路的Paper:
2.1,单变量NBRR源码如下:
[hide]
  1. #单变量的回归
  2. #NNBRknn近邻回归与预测


  3. #这里是基于单变量的时间序列
  4. setwd('D:/MyDriversMatlab/Mfiles13')
  5. rm(list=ls())
  6. nnbrRegress<-function (xData , lags , disType)
  7. {
  8. #lags是滞后的阶数P
  9. #outNum是样本外预测的个数
  10. #disType是计算距离的类别
  11. if (!is.matrix(xData))
  12. {
  13. stop('error input the Current Data')
  14. }


  15. if (ncol(xData)!= 1)
  16. {
  17. stop('error input data')
  18. }

  19. if ((nrow(xData) - lags)<1)
  20. {
  21. stop('error input the Data')
  22. }

  23. #当前的数据集合
  24. currentData <- xData

  25. k <- ceiling(sqrt(nrow(xData) - lags))

  26. #先计算所有的特征向量
  27. currentVector <- xData[c(( nrow(xData)-lags+1):(nrow(xData)))]
  28. currentVector <- t(as.matrix(currentVector))

  29. Vectors<-NULL
  30. xOut<-NULL
  31. #获取其他的特征向量
  32. i<-1
  33. while(TRUE)
  34. {
  35. if ((i+lags - 1) == (nrow(xData)))
  36. {
  37. break
  38. }
  39. vectors<- t(as.matrix(xData[(i):(i+lags - 1)]))

  40. xOut<-c(xOut,xData[i+lags])

  41. Vectors<-rbind(Vectors,vectors)

  42. i<-i+1
  43. }

  44. #再从中寻找距离最小的K个值
  45. nV <- nrow(Vectors)

  46. currData <- matrix(rep(currentVector , nV),nrow = nV,byrow = TRUE)
  47. Distance <- sqrt( apply((Vectors - currData)^2,1,sum) )
  48. #再计算距离的最小的前k个值
  49. #从大到小的几个下标
  50. Index <- order(Distance)
  51. Index <- Index[c(1:k)]

  52. xOut<-xOut[Index]
  53. DistanceOut <- Distance[Index]

  54. #对样本外的结果进行预测
  55. #权重的配置
  56. if (disType == 1)
  57. {
  58. xForecasting <- sum(DistanceOut/sum(DistanceOut)*xOut)
  59. } else
  60. {
  61. xForecasting <- sum((c(k:1)/k)/sum((c(k:1)/k))*xOut)
  62. }
  63. return(xForecasting)

  64. }
  65. data <- as.matrix(cumsum(matrix(rnorm(100),nrow = 100)))
  66. data
  67. nnbrRegress(data,8,1)
  68. nnbrRegress(data,8,2)
  69. #各种不同的滞后阶数
  70. nnbrRegress(data,10,1)
  71. nnbrRegress(data,10,2)
  72. #各种不同的滞后阶数
  73. nnbrRegress(data,15,1)
  74. nnbrRegress(data,15,2)
  75. #eof
复制代码[/hide]
2.2,多变量NNBR源码如下:
[hide]
  1. #D:\MyDriversMatlab\Mfiles13
  2. setwd('D:/MyDriversMatlab/Mfiles13')

  3. #基于knn回归的最近邻算法
  4. rm(list=ls())
  5. nnbrRegressMultivariate<-function (xData , yData , testData)
  6. {
  7. if(nrow(xData)!=nrow(yData))
  8. {
  9. stop('error input data')
  10. }

  11. if (ncol(xData)!=ncol(testData))
  12. {
  13. stop('error input data')
  14. }

  15. if (!is.matrix(xData) ||!is.matrix(yData) || !is.matrix(testData))
  16. {
  17. stop('error input data')
  18. }

  19. #取得特征向量的个数
  20. k<-ceiling(sqrt(nrow(xData)))

  21. yForecasting<-matrix(NaN , nrow = nrow(testData),ncol = 1)

  22. for (i in c(1:nrow(testData)))
  23. {
  24. x<-testData[i,]

  25. xDataRep <-rep(x,nrow(xData))
  26. xDataRep <- matrix(xDataRep,nrow = nrow(xData) , byrow = TRUE)
  27. #计算距离

  28. Distance <- sqrt(apply((xData - xDataRep)^2,1,sum))

  29. Index <- order(Distance)
  30. #选择前k个值
  31. Index<-Index[c(1:k)]
  32. ys<-(yData[Index])
  33. Weight<-(1/Distance)/sum(1/Distance)

  34. yForecasting[i] <-sum(ys*Weight)

  35. }
  36. return(yForecasting)

  37. }


  38. xData <- matrix(rnorm(100),ncol = 4)
  39. yData <- as.matrix(apply(xData,1,mean))
  40. testData <- matrix(rnorm(40),ncol = 4)

  41. nnbrRegressMultivariate(xData , yData , testData)
复制代码[/hide]
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-3863031-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
经管之家 人大经济论坛 大学 专业 手机版