• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    同等学历教学

    同等学历教学

    免费
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      同等学历教学

      同等学历教学

      免费
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      R语言

      • 首页
      • 博客
      • R语言
      • 奇异值检测和处理

      奇异值检测和处理

      • 发布者 weinfoadmin
      • 分类 R语言
      • 日期 2017年10月8日
      测试开头

      本文介绍数据奇异值检测和处理的知识。数据奇异值若是不检测和处理,会影响模型准确性,甚至对预测形成误导。

      • 1 为什么要奇异值检测和处理

      • 2 奇异值检测

        • 2.1 单变量方法

        • 2.2 双变量方法

        • 2.3 多变量模型方法

        • 2.4 奇异值包:outliers

      • 3 奇异值处理

        1 为什么要奇异值检测和处理

        因为奇异值可以大大地偏向或者改变拟合估计和预测。
        举例说明:汽车数据集,对比没有奇异值和有奇异值的简单线性回归模型的拟合,然后做预测。

        R代码

        1. ## 汽车数据集

        2. data(cars)

        3. dim(cars)

        4. par(mfrow = c(1,2))

        5. ## 原始数据集

        6. cars1 <- cars[1:30, ]

        7. ## 情形一:没有奇异值

        8. plot(

        9.  cars1$speed,

        10.  cars1$dist,

        11.  xlim = c(0, 28),

        12.  ylim = c(0, 230),

        13.  main = "没有奇异值 n 简单线性回归模型",

        14.  xlab = "速度",

        15.  ylab = "距离",

        16.  pch = "*",

        17.  col = "red",

        18.  cex = 2

        19. )

        20. abline(

        21.  lm(dist ~ speed, data = cars1),

        22.  col = "blue",

        23.  lwd = 3,

        24.  lty = 2

        25. )

        26. ## 情形二:有奇异值

        27. ## 人工构造奇异值

        28. cars.outliers <- data.frame(

        29.  speed = c(19, 19, 20, 20, 20),

        30.  dist = c(190, 186, 210, 220, 218)

        31. )

        32. cars2 <- rbind(cars1, cars.outliers)

        33. plot(

        34.  cars2$speed,

        35.  cars2$dist,

        36.  xlim = c(0, 28),

        37.  ylim = c(0, 230),

        38.  main = "有奇异值 n 简单线性回归模型",

        39.  xlab = "速度",

        40.  ylab = "距离",

        41.  pch = "*",

        42.  col = "red",

        43.  cex = 2

        44. )

        45. abline(

        46.  lm(dist ~ speed, data = cars2),

        47.  col = "blue",

        48.  lwd = 3,

        49.  lty = 2

        50. )

        结果
        奇异值检测和处理

        总结
        异常值导致预测模型斜率的变化,若是利用异常值数据拟合模型(右图),导致预测结果带来高误差。

        2 奇异值检测

        2.1 单变量方法

        对于连续变量,奇异值位于1.5IQR范围之外。
        IQR = 75%四分位数-25%四分位数
        R代码

        1. ## 数据获取

        2. url <- "http://rstatistics.net/wp-content/uploads/2015/09/ozone.csv"  

        3. inputData <- read.csv(url)

        4. ## 异常值

        5. outlier.values <- boxplot.stats(

        6.  inputData$pressure_height

        7. )$out

        8. print(outlier.values)

        9. par(mfrow=c(1,1))

        10. ## 异常值可视化

        11. boxplot(

        12.  inputData$pressure_height,

        13.  main = "Pressure Height",

        14.  boxwex=0.1

        15. )

        16. mtext(

        17.  paste("Outliers: ", paste(outlier.values, collapse=", ")),

        18.  cex=0.6

        19. )

        结果
        奇异值检测和处理

        2.2 双变量方法

        双变量x和y的盒子图,x是类别变量。
        R代码

        1. par(mfrow=c(1,2))

        2. boxplot(

        3.  ozone_reading ~ Month,

        4.  data = inputData,

        5.  main = "Ozone reading across months"

        6. )

        7. boxplot(

        8.  ozone_reading ~ Day_of_week,

        9.  data = inputData,

        10.  main = "Ozone reading for days of week"

        11. )

        结果
        奇异值检测和处理
        总结
        由图可知,月份对臭氧变化有影响,而星期没有。异常值见盒子图中空心圆圈。

        2.3 多变量模型方法

        Cooks Distance,简称CD
        计算每个样本(观测)对预测结果的影响程度。
        一般情况,一个样本的CD大于4倍CD的平均值,则被当做对预测是有影响力,这样的样本,可以当做异常值处理。
        代码

        1. mod <- lm(ozone_reading ~ ., data=inputData)

        2. cooksd <- cooks.distance(mod)

        3. par(mfrow=c(1,1))

        4. plot(

        5.  cooksd,

        6.  pch = "*",

        7.  cex = 2,

        8.  main = "Influential Obs by Cooks distance"

        9. )

        10. abline(

        11.  h = 4 * mean(cooksd, na.rm = TRUE),

        12.  col = "red"

        13. )

        14. text(

        15.  x=1:length(cooksd)+1,

        16.  y=cooksd,

        17.  labels=ifelse(cooksd>4*mean(cooksd, na.rm=T),names(cooksd),""),

        18.  col="red"

        19. )

        20. influential <- as.numeric(names(cooksd)[(cooksd > 4*mean(cooksd, na.rm=T))])  # influential row numbers

        21. View(head(inputData[influential, ]))

        结果
        奇异值检测和处理

        2.4 奇异值包:outliers

        outliers异常值包提供了许多有用函数来做异常值检测和处理,特别是outlier() 和scores() 函数。
        奇异值包outliers的使用方法,阅读包文档。

        3 奇异值处理

        方法一:插值替换法
        使用均值或者中位数或者众数填补
        方法二:预测法
        把异常值当做NA,然后利用NA的处理方法,拟合恰当模型,预测出NA的值

        参考资料:
        1 R做异常值检测:http://r-statistics.co/Outlier-Treatment-With-R.html



        文章推荐:


        1 R做机器学习简易教程           

        2 R语言做数据探索

        3 电商评论情感分析




        公众号推荐:

        数据科学与人工智能,分享数据科学和人工智能的内容。

        奇异值检测和处理




        阅读原文,更多精彩!

        分享是收获,传播创价值!

        测试结尾

        请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

        • 分享:
        作者头像
        weinfoadmin

        上一篇文章

        R导论(An Introduction to R)
        2017年10月8日

        下一篇文章

        R平台玩深度学习教程
        2017年10月20日

        你可能也喜欢

        3-1665801675
        R语言学习:重读《R数据科学(中文版)》书籍
        28 9月, 2022
        6-1652833487
        经典铁死亡,再出新思路
        16 5月, 2022
        1-1651501980
        R语言学习:阅读《R For Everyone 》(第二版)
        1 5月, 2022

        搜索

        分类

        • R语言
        • TCGA数据挖掘
        • 单细胞RNA-seq测序
        • 在线会议直播预告与回放
        • 数据分析那些事儿分类
        • 未分类
        • 生信星球
        • 老俊俊的生信笔记

        投稿培训

        免费

        alphafold2培训

        免费

        群晖配置培训

        免费

        最新博文

        Nature | 单细胞技术揭示衰老细胞与肌肉再生
        301月2023
        lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
        301月2023
        如何快速批量修改 Git 提交记录中的用户信息
        261月2023
        logo-eduma-the-best-lms-wordpress-theme

        (00) 123 456 789

        weinfoadmin@weinformatics.cn

        恒诺新知

        • 关于我们
        • 博客
        • 联系
        • 成为一名讲师

        链接

        • 课程
        • 事件
        • 展示
        • 问答

        支持

        • 文档
        • 论坛
        • 语言包
        • 发行状态

        推荐

        • iHub汉语代码托管
        • iLAB耗材管理
        • WooCommerce
        • 丁香园论坛

        weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

        • 关于我们
        • 博客
        • 联系
        • 成为一名讲师

        要成为一名讲师吗?

        加入数以千计的演讲者获得100%课时费!

        现在开始

        用你的站点账户登录

        忘记密码?

        还不是会员? 现在注册

        注册新帐户

        已经拥有注册账户? 现在登录

        close
        会员购买 你还没有登录,请先登录
        • ¥99 VIP-1个月
        • ¥199 VIP-半年
        • ¥299 VIP-1年
        在线支付 激活码

        立即支付
        支付宝
        微信支付
        请使用 支付宝 或 微信 扫码支付
        登录
        注册|忘记密码?