楼主: 我的素质低
49270 130

[R] 〖素质笔记〗三大非参数估计方法——核估计(R实现)   [推广有奖]

学术权威

83%

还不是VIP/贵宾

-

TA的文库  其他...

〖素质文库〗

结构方程模型

考研资料库

威望
8
论坛币
23388 个
通用积分
28302.3504
学术水平
2705 点
热心指数
2881 点
信用等级
2398 点
经验
223563 点
帖子
2977
精华
52
在线时间
2175 小时
注册时间
2012-11-24
最后登录
2024-1-13

一级伯乐勋章 初级学术勋章 初级热心勋章 初级信用勋章 中级热心勋章 中级学术勋章 中级信用勋章 高级学术勋章 高级热心勋章 高级信用勋章 特级学术勋章

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
昨天跟着fantuanxiaot师兄—— [原创]基于R语言的核回归(Kernal Regression)与最近邻回归(NNBR) 的帖子学习了以下,觉得核回归的方式比较原来的必须服从某些假定的回归方法好很多,在网上找了找相关的内容,把找到的内容,分享给坛友~
   用于函数估计的非参数方法大致上有三种:核方法、局部多项式方法、样条方法。非参的函数估计的优点在于稳健,对模型没有什么特定的假设,只是认为函数光滑,避免了模型选择带来的风险;但是,表达式复杂,难以解释,计算量大是非参的一个很大的毛病。所以说使用非参有风险,选择需谨慎。


[size=17.3333339691162px]    核方法常见的有Nadaraya-Watson核估计与Gasser-Muller核估计方法。


    核密度估计的原理其实是很简单的。在我们对某一事物的概率分布的情况下。如果某一个数在观察中出现了,我们可以认为这个数的概率密度很大,和这个数比较近的数的概率密度也会比较大,而那些离这个数远的数的概率密度会比较小。


    基于这种想法,针对观察中的第一个数,我们都可以f(x-xi)去拟合我们想象中的那个远小近大概率密度。当然其实也可以用其他对称的函数。针对每一个观察中出现的数拟合出多个概率密度分布函数之后,取平均。如果某些数是比较重要,某些数反之,则可以取加权平均。

    NW核估计形式为:


1.png


    GM核估计形式为:


2.png




  1. #  定义x.y.bw(窗宽)
  2. x <- seq(-1, 1, length = 40)
  3. y <- 5 * x * cos(5 * pi * x)
  4. h <- 0.055
复制代码
  1. #  核估计法一:NW method核估计
  2. fx.hat <- function(z, h) {
  3.     dnorm((z - x)/h)/h
  4. }
  5. NWSMOOTH <- function(h, y, x) {
  6.     n <- length(y)
  7.     s.hat <- rep(0, n)
  8.     for (i in 1:n) {
  9.         a <- fx.hat(x[i], h)
  10.         s.hat[i] <- sum(y * a/sum(a))
  11.     }
  12.     return(s.hat)
  13. }

  14. NWsmooth.val <- NWSMOOTH(h, y, x)

  15. plot(x, y, xlab = "Predictor", ylab = "Response", col = 1)
  16. f <- function(x) 5 * x * cos(5 * pi * x)
  17. curve(f, -1, 1, ylim = c(-15.5, 15.5), lty = 1, add = T, col = 1)
  18. lines(x, NWsmooth.val, lty = 2, col = 2)
  19. A <- data.frame(x = seq(-1, 1, length = 1000))
  20. model.linear <- lm(y ~ poly(x, 9))
  21. lines(seq(-1, 1, length = 1000), predict(model.linear, A), lty = 3, col = 3)
  22. letters <- c("NW method", "orignal model", "9 order poly-reg")
  23. legend("bottomright", legend = letters, lty = c(2, 1, 3), col = c(2, 1, 3),
  24.     cex = 0.5)
复制代码


3.png

  1. #  核估计法二:GMSMOOTH估计
  2. GMSMOOTH <- function(y, x, h) {
  3. n <- length(y)
  4. s <- c(-Inf, 0.5 * (x[-n] + x[-1]), Inf)
  5. s.hat <- rep(0, n)

  6. for (i in 1:n) {
  7. fx.hat <- function(z, h, x) {
  8. dnorm((x - z)/h)/h
  9. }
  10. a<- y * integrate(fx.hat, s, s[i + 1], h =
  11. h, x = x)$value
  12. s.hat <- sum(a)

  13. }return(s.hat)
  14. }

  15. GMsmooth.val <- GMSMOOTH(y, x, h)
  16. plot(x, y, xlab = "Predictor", ylab = "Response", col =1)

  17. f <- function(x) 5 * x * cos(5 * pi * x)
  18. curve(f, -1, 1, ylim = c(-15.5, 15.5), lty = 1, add = T,col = 1)
  19. lines(x, GMsmooth.val, lty = 2, col = 2)
  20. A <- data.frame(x = seq(-1, 1, length = 1000))
  21. model.linear <- lm(y ~ poly(x, 9))
  22. lines(seq(-1, 1, length = 1000), predict(model.linear,A), lty = 3, col = 3)
  23. letters <- c("GM method", "orignal model", "9 order polyreg")
  24. legend("bottomright", legend = letters, lty = c(2, 1, 3),col = c(2, 1, 3),cex = 0.5)
复制代码

本帖隐藏的内容


4.png
  1. #  两估计方法对比
  2. fx.hat <- function(z, h) {
  3.   dnorm((z - x)/h)/h
  4. }
  5. NWSMOOTH <- function(h, y, x) {
  6.   n <- length(y)
  7.   s.hat <- rep(0, n)
  8.   for (i in 1:n) {
  9.     a <- fx.hat(x, h)
  10.     s.hat <- sum(y * a/sum(a))
  11.   }
  12.   return(s.hat)
  13. }

  14. NWsmooth.val <- NWSMOOTH(h, y, x)

  15. GMSMOOTH <- function(y, x, h) {
  16.   n <- length(y)
  17.   s <- c(-Inf, 0.5 * (x[-n] + x[-1]), Inf)
  18.   s.hat <- rep(0, n)
  19.   for (i in 1:n) {
  20.     fx.hat <- function(z, h, x) {
  21.       dnorm((x - z)/h)/h
  22.     }
  23.     a <- y * integrate(fx.hat, s, s[i + 1], h = h, x = x)$value
  24.     s.hat <- sum(a)
  25.   }
  26.   return(s.hat)
  27. }

  28. GMsmooth.val <- GMSMOOTH(y, x, h)

  29. plot(x, y, xlab = "Predictor", ylab = "Response", col = 1)
  30. f <- function(x) 5 * x * cos(5 * pi * x)
  31. curve(f, -1, 1, ylim = c(-15.5, 15.5), lty = 1, add = T, col = 1)
  32. lines(x, NWsmooth.val, lty = 2, col = 2)
  33. lines(x, GMsmooth.val, lty = 3, col = 3)
  34. letters <- c("orignal model", "NW method", "GM method")
  35. legend("bottomright", legend = letters, lty = 1:3, col = 1:3, cex = 0.5)
复制代码




5.png



    从图中可以看到NW估计的方差似乎小些,事实也确实如此,GM估计的渐进方差约为NW估计的1.5倍。但是GM估计解决了一些计算的难题。


学习于:yujunbeta老师博客,http://blog.csdn.net/yujunbeta/article/details/26058533
小亮老师博客,http://blog.sina.com.cn/s/blog_62b37bfe0101homb.html




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:非参数估计 参数估计 核估计 非参数 R实现 表达式 多项式 模型 网上

回帖推荐

niuniuyiwan 发表于9楼  查看完整内容

用直方图来估计密度函数的缺点是:即使随机变量是连续的,直方图得到的是不连续的阶梯函数,即不光滑的密度估计,而核密度则有效克服了直方图不光滑的缺点。
已有 11 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
kongqingbao280 + 100 精彩帖子
271828haha + 1 + 1 + 1 观点有启发 awesome!
remlus + 100 精彩帖子
np84 + 100 精彩帖子
wwqqer + 100 精彩帖子
arthistory4 + 20 精彩帖子
shyxinanjz + 10 + 3 + 3 精彩帖子
william9225 + 100 精彩帖子
xddlovejiao1314 + 100 + 100 + 5 + 5 + 5 精彩帖子
niuniuyiwan + 5 精彩帖子

总评分: 经验 + 740  论坛币 + 170  学术水平 + 19  热心指数 + 19  信用等级 + 16   查看全部评分

本帖被以下文库推荐

心晴的时候,雨也是晴;心雨的时候,晴也是雨!
扣扣:407117636,欢迎一块儿吐槽!!
沙发
timesever 发表于 2015-8-23 10:24:01 |只看作者 |坛友微信交流群

回帖奖励 +2

顶!
顶!
就是喜欢这类帖子!
已有 1 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论

总评分: 经验 + 10  论坛币 + 3   查看全部评分

使用道具

藤椅
三世相思2013 学生认证  发表于 2015-8-23 10:36:08 |只看作者 |坛友微信交流群

回帖奖励 +2

很好的帖子
已有 1 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论

总评分: 经验 + 10  论坛币 + 3   查看全部评分

使用道具

板凳
niuniuyiwan 在职认证  发表于 2015-8-23 14:34:52 |只看作者 |坛友微信交流群

回帖奖励 +2

好帖,谢谢分享。
已有 1 人评分经验 论坛币 热心指数 收起 理由
xddlovejiao1314 + 20 + 5 + 1 鼓励积极发帖讨论

总评分: 经验 + 20  论坛币 + 5  热心指数 + 1   查看全部评分

使用道具

报纸
Alfred_G 学生认证  发表于 2015-8-24 08:15:56 |只看作者 |坛友微信交流群

回帖奖励 +2

good~分享之
已有 2 人评分经验 论坛币 收起 理由
niuniuyiwan + 10 + 5 精彩帖子
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论

总评分: 经验 + 20  论坛币 + 8   查看全部评分

使用道具

地板
xddlovejiao1314 学生认证  发表于 2015-8-24 11:11:40 |只看作者 |坛友微信交流群

回帖奖励 +2

在牛A与牛C之间的路上越走越远了。
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
我的素质低 + 5 + 5 + 5 精彩帖子
niuniuyiwan + 18 + 5 鼓励积极发帖讨论

总评分: 经验 + 18  论坛币 + 5  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

7
海的方向 发表于 2015-8-28 09:28:33 |只看作者 |坛友微信交流群

回帖奖励 +2

素质笔记 我看行
已有 2 人评分经验 论坛币 热心指数 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论
我的素质低 + 5 + 2 精彩帖子

总评分: 经验 + 10  论坛币 + 8  热心指数 + 2   查看全部评分

使用道具

8
诸葛山下 发表于 2015-8-30 10:22:32 |只看作者 |坛友微信交流群

回帖奖励 +2

就此帖请教一个问题:已知我获得一组数据(全整数型),按频率画出其直方图。现在我想得到此数据的概率密度函数来拟合一下它的直方图上所体现出的数据分布。经典的做法是在直方图上添加一个正态分布曲线,然而是否有办法直接拟合出数据本身的分布曲线来和正态分布曲线作出对比?
此文提到的核估计适用于解决此问题吗?
已有 1 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论

总评分: 经验 + 10  论坛币 + 3   查看全部评分

使用道具

9
niuniuyiwan 在职认证  发表于 2015-8-30 10:50:40 |只看作者 |坛友微信交流群
诸葛山下 发表于 2015-8-30 10:22
就此帖请教一个问题:已知我获得一组数据(全整数型),按频率画出其直方图。现在我想得到此数据的概率密度 ...
用直方图来估计密度函数的缺点是:即使随机变量是连续的,直方图得到的是不连续的阶梯函数,即不光滑的密度估计,而核密度则有效克服了直方图不光滑的缺点。
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论
我的素质低 + 100 + 100 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 110  论坛币 + 103  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

10
律政飞鲨 在职认证  发表于 2015-8-31 15:14:20 |只看作者 |坛友微信交流群

回帖奖励 +2

很好的帖子
已有 1 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论

总评分: 经验 + 10  论坛币 + 3   查看全部评分

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 07:47