r语言插补法_R语言缺失值的处理:线性回归模型插补

2023-11-03

在当我们缺少值时,系统会告诉我用-1代替,然后添加一个指示符,该变量等于-1。这样就可以不删除变量或观测值。

我们在这里模拟数据,然后根据模型生成数据。未定义将转换为NA。一般建议是将缺失值替换为-1,然后拟合未定义的模型。默认情况下,R的策略是删除缺失值。如果未定义50%,则缺少数据,将删除一半的行

n=1000

x1=runif(n)

x2=runif(n)

e=rnorm(n,.2)

y=1+2*x1-x2+e

alpha=.05

indice=sample(1:n,size=round(n*alpha))

base=data.frame(y=y,x1=x1)

base$x1[indice]=NA

reg=lm(y~x1+x2,data=base)

我们模拟10,000,然后看看未定义的分布,

m=10000

B=rep(NA,m)

hist(B,probability=TRUE,col=rgb(0,0,1,.4),border="white",xlab="missing values = 50%")

lines(density(B),lwd=2,col="blue")

abline(v=2,lty=2,col="red")

当然,丢失值的比率较低-丢失的观测值较少,因此估计量的方差较小。

现在让我们尝试以下策略:用固定的数值替换缺失的值,并添加一个指标,

B=rep(NA,m)

hist(B,probability=TRUE,col=rgb(0,0,1,.4),border="white")

lines(density(B),lwd=2,col="blue")

abline(v=2,lty=2,col="red")

不会有太大变化,遗漏值的比率下降到5%,

例如仍有5%的缺失值,我们有

如果我们查看样本,尤其是未定义的点,则会观察到

缺失值是完全独立地随机选择的,

x1=runif(n)

plot(x1,y,col=clr)

(此处缺失值的1/3为红色)。但可以假设缺失值的最大值,例如,

x1=runif(n)

clr=rep("black",n)

clr[indice]="red"

plot(x1,y,col=clr)

有人可能想知道,估计量会给出什么?

它变化不大,但是如果仔细观察,我们会有更多差异。如果未定义变量会发生什么,

for(s in 1:m){

base$x1[indice]=-1

reg=lm(y~x1+x2+I(x1==(-1)),data=base)

B[s]=coefficients(reg)[2]

}

这次,我们有一个有偏差的估计量。

set.seed(1)

indice=sample(1:n,size=round(n*alpha),prob = x1^3)

base$x1[indice]=-1

coefficients(reg1)

(Intercept) x1 x2 I(x1 == (-1))TRUE

1.0988005 1.7454385 -0.5149477 3.1000668

base$x1[indice]=NA

coefficients(reg2)

(Intercept) x1 x2

1.1123953 1.8612882 -0.6548206

正如我所说的,一种更好的方法是推算。这个想法是为未定义的缺失预测值预测。最简单的方法是创建一个线性模型,并根据非缺失值进行校准。然后在此新基础上估算模型。

for(s in 1:m){

base$x1[indice]=NA

reg0=lm(x1~x2,data=base[-indice,])

base$x1[indice]=predict(reg0,newdata=base[indice,])

reg=lm(y~x1+x2,data=base)

}

hist(B,probability=TRUE,col=rgb(0,0,1,.4),border="white")

lines(density(B),lwd=2,col="blue")

abline(v=2,lty=2,col="red")

在数字示例中,我们得到

base$x1[indice]=NA

coefficients(reg3)

(Intercept) x1 x2

1.1593298 1.8612882 -0.6320339

这种方法至少能够纠正偏差

然后,如果仔细观察,我们获得与第一种方法完全相同的值,该方法包括删除缺少值的行。

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 1.15933 0.06649 17.435 < 2e-16 ***

x1 1.86129 0.21967 8.473 < 2e-16 ***

x2 -0.63203 0.20148 -3.137 0.00176 **

---

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.051 on 997 degrees of freedom

Multiple R-squared: 0.1094, Adjusted R-squared: 0.1076

F-statistic: 61.23 on 2 and 997 DF, p-value: < 2.2e-16

Coefficients: Estimate Std. Error t value Pr(>|t|)

(Intercept) 1.11240 0.06878 16.173 < 2e-16 ***

x1 1.86129 0.21666 8.591 < 2e-16 ***

x2 -0.65482 0.20820 -3.145 0.00172 **

---

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.037 on 797 degrees of freedom

(200 observations deleted due to missingness)

Multiple R-squared: 0.1223, Adjusted R-squared: 0.12

F-statistic: 55.5 on 2 and 797 DF, p-value: < 2.2e-16

除了进行线性回归外,还可以使用另一种插补方法。

在模拟的基础上,我们获得

for(j in indice) base0$x1[j]=kpp(j,base0,k=5)

reg4=lm(y~x1+x2,data=base)

coefficients(reg4)

(Intercept) x1 x2

1.197944 1.804220 -0.806766

如果我们看一下10,000个模拟中的样子,就会发现

for(s in 1:m){

base0=base

for(j in indice) base0$x1[j]=kpp(j,base0,k=5)

reg=lm(y~x1+x2,data=base0)

B[s]=coefficients(reg)[2]

}

hist(B,probability=TRUE,col=rgb(0,0,1,.4),border="white")

lines(density(B),lwd=2,col="blue")

abline(v=2,lty=2,col="red")

这里的偏差似乎比没有插补时要弱一些,换句话说,在我看来,插补方法似乎比旨在用任意值替换NA并在回归中添加指标的策略更强大。

参考文献

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

r语言插补法_R语言缺失值的处理:线性回归模型插补 的相关文章

  • 按钮切换 按钮背景改变文字背景改变

    using System Collections using System Collections Generic using UnityEngine using UnityEngine UI public class MainUI Mon
  • 常用数据集预处理(dota)

    从数据集中选出自己需要的类别 import os import cv2 import shutil catogary bridge 列表 def customname fullname 返回不带后缀的文件名 return os path b
  • CHATGPT问答集锦

    CHATGPT问答集锦是一个由人工智能聊天机器人CHATGPT生成的全面问答集合 涵盖科学 技术 医学 经济等多个领域的问题 用户可以通过与CHATGPT机器人对话的方式 快速获取答案和解决问题 CHATGPT问答集锦的优点在于其智能化和高
  • 智能人员考勤系统(C语言)

    智能人员考勤系统 C语言 智能人员考评系统 include
  • 汇总

    说说文件描述符 文件描述符就是一个整数 在open时产生 起到一个索引的作用 进程通过PCB中的文件描述符表找到该fd所指向的文件指针 文件描述符的操作 返回一个文件描述符 内核会在每个进程空间中维护一个文件描述符表 所以打开的文件都将通过
  • 华为OD机试真题B卷 Java 实现【5键键盘的输出】,附详细解题思路

    一 题目描述 有一个特殊的5键键盘 上面有a ctrl c ctrl x ctrl v ctrl a五个键 a键在屏幕上输出一个字母a ctrl c将当前选择的字母复制到剪贴板 ctrl x将当前选择的字母复制到剪贴板 并清空选择的字母 c
  • JAVA线程池自定义拒绝策略以及利用反射获取任务参数

    目录 前言 线程池拒绝策略的触发条件 AbortPolicy拒绝并抛出异常 DiscardPolicy丢弃任务并不做任何操作 DiscardOldestPolicy丢弃最老的任务 CallerRunsPolicy调用主线程处理
  • 如何使用C#以编程方式将MPP文件转换为PDF?

    Microsoft Project文件用于组织和管理项目中的不同任务 您可以使用C 以编程方式将MPP文件转换为PDF 本文将介绍以下内容 使用C 以编程方式将MPP转换为PDF 在C 中将MPP转换为多页PDF 在C 中将MPP转换为受密
  • 高并发系统设计负载均衡架构

    菜菜哥 上次你给我讲的分库分表策略对我帮助很大 有帮助就好 上次请我的咖啡也很好喝 呵呵 不过随着访问量的不断加大 网站我又加了nginx做负载均衡 好呀 看来要进阶高级工程师啦 负载均衡也很简单呀 一个nginx就搞定了 现
  • mysql主从复制配置

    1 准备工作 主从数据库版本最好一致 主从数据库内数据保持一致 我的主从服务器的IP为 主服务器ip 192 168 84 128 从服务器ip 192 168 0 100 2 找到主数据库的配置文件my cnf 或者my ini 我的在
  • ubuntu 从18.04升级20.04用什么命令

    在 Ubuntu 18 04 中升级到 20 04 的命令是 sudo do release upgrade 使用这个命令之前建议先备份重要数据 因为升级过程中可能会有数据丢失的风险 然后输入密码进入升级模式 会提示确认是否升级 输入y 确
  • vs2013安装部署中没有visual studio installer

    vs2013安装部署中没有visual studio installer 下载安装Microsoft Visual Studio 2013 Installer Projects 下载地址 https marketplace visualst
  • LIF神经元膜电压公式-迭代式推导,及其在STBP中的应用

    膜电压公式 m d u d t
  • 利用ESP定律进行脱壳

    目录 预备知识 壳的概念 UPX PEiD OllyDbg 实验目的 实验环境 实验步骤一 实验步骤二 实验步骤三 预备知识 基础的汇编语言命令以及对汇编程序的基本审计能力 壳的概念 加壳的全称应该是可执行程序资源压缩 是保护文件的常用手段
  • 抖音api开放平台对接_抖音视频API解析接口

    发布抖音视频接口一枚 无限制免费调用 但需要AppKey 更新 2019 09 23 1 视频统计信息公开 2019 06 23 1 修复无水印解析失败BUG 2 接口返回内容调整 已获取视频播放量等统计信息 目前暂未公开 接口地址 htt
  • Connect was not declared in this scope

    QT程序中的事件机制是通过SIGNAL SLOT 信号 槽 来实现的 创建一个信号与槽的连接就是使用connect方法 它是QObject类下面的一个静态方法 基本上 所有的QT对象的基类都是QObject 所以 在非QObject的派生类
  • alsa-lib应用层接口分析

    ALSA lib接口调用简介 ALSA逻辑 在我当前看来 总共有两条线 1 录放音流控 2 amixer cset控件 录放音流控 自定义名称 相当于操作OSS的 dev dsp设备 可以设置三大参数等 并且启动录放音 这里 aplay m
  • Spring Boot底层原理详解及整合

    Spring Boot框架 通过Spring Boot 可以构建一个基于Spring框架的Java Application 简化配置 自动装配 开箱即用 JavaConfiguration用Java类代替XML的配置方式 Spring Bo
  • Java实现图的深度和广度优先遍历算法

    概述 最近要学习写网络爬虫 所以把图的深度和广度搜索都再温习一下 图结构展示 实现过程 首先 我们来看看图结构在代码中的实现 有三块逻辑 1 图中的节点 java view plain copy public class GraphNode

随机推荐

  • MongoDB(三):MongoDB图形化界面工具

    一 下载 MongoDBCompass 官方提供的 下载地址 https www mongodb com download center compass jmp docs 二 解压 启动 三 启动MongoDB 连接MongoDB服务 出现
  • Vue笔记——Vue组件中引入jQuery

    如果想在普通的HTML页面引入jQuer库的话 直接使用即可 但是如果要在Vue组件中使用jQuery库的话 使用这样的方式就不行了 需要使用以下方法 一 安装jQuery依赖 在使用jQuery之前 我们首先要通过以下命令来安装jQuer
  • Json字符串属性里面有逗号问题

    今天小编写 代码时候 后台给我返回的一个json字符串 name group id 123 所以不能通过name group id这样来 取值 不然会报没有id属性 看到这里相信很多程序员和小编一样肯定会骂后台传递的值不对 小编也是这样骂的
  • 快速排序详解(图解实例)

    快速排序 Quicksort 是对冒泡排序的一种改进 它的基本思想是 通过一趟排序将要排序的数据 分割成独立的两部分 其中一部分的所有数据都比另外一部分的所有数据都要小 然后再按此方法 对这两部分数据分别进行快速排序 整个排序过程可以递归进
  • 红外人体感应传感器SR602模块使用说明

    一 HC SR602模块 红外人体感应传感器HC SR602是基于红外线技术的自动控制模块 专用于感应周围人体的存在 该模块相较于HC SR501 灵敏度较高 抗干扰能力大 且简单易用 二 HC SR602模块主要参数 工作电压 3 3V
  • 使用手柄控制Unity及效果展示(1)

    Unity支持手柄的控制 效果图如下所示 这是一篇针对手柄控制U3D入门的过程记载 主要以实现功能为目的 分四个部分进行过程展示 Input System包的下载 设备的查找 Input Actions控件的使用 主要代码的解释及编写 这里
  • 【css】落叶飘动效果,点击落叶飘动停止

    做项目有个需求是要求做落叶下落效果 做了一下 整体是依靠css中animation属性来控制的 keyframes move控制动画轨迹 使用伪元素checked控制动画运行和暂停 css3文档中有这样的例子 利用伪元素checked控制动
  • python 删除一个字符串内重复的内容

    使用py将 a dai liu dai 去掉重复的dai a dai liu dai a list a split 将字符串拆分成列表 a set set a list 将列表转换为集合 去除重复的元素 result join a set
  • jest搭建vue项目单元测试-vue-cli创建新项目

    说到项目会分为新建的醒目和老项目两种 我们先来说新项目 新项目加入jest单元测试 1 创建项目 使用vue脚手架创建项目 test vue jest vue create test vue jest 2 创建项目过程中配置选项 在配置项中
  • OK彻底解决ping主机ping虚拟机之间ping不通的问题

    时间轴 一个月前 2022 8 重新玩虚拟机 因为计算机网络这块不扎实 知识点模糊 不懂其中各种原由 当然现在也不是很明白 后续还需要系统的回顾 在那是一直有几个问题 遇到以下问题需要解决 1 怎么选择桥接 nat的连接方式 现在也不清楚
  • 第七章 单行函数

    MySQL系列文章目录 http t csdn cn YTPe9 文章目录 MySQL系列文章目录 前言 一 函数的理解 1 什么是函数 2 不同DBMS函数的差异 3 MySQL的内置函数及分类 二 数值函数 1 基本函数 2 角度与弧度
  • C 语言char类型与int类型的转化

    目录 一 char转int 法一 直接转换 ASSCII编码表 ASCII可显示字符 法二 利用库函数转换 二 数字换成字符串 1 用sprintf 2 用库函数 char和int的转换有两种方式 这两种方式适合于在输出时使用 一 char
  • Android studio实现个人体重指数计算

    Java代码 package com example work1 import android app Activity import android app AlertDialog import android content Dialo
  • 基于 Android NDK 的学习之旅----- C调用Java(附源码)

    许多成熟的C引擎要移植到Android 平台上使用 一般都会 提供 一些接口 让Android sdk 和 jdk 实现 下文将会介绍 C 如何 通过 JNI 层调用 Java 的静态和非静态方法 1 主要流程 1 新建一个测试类TestP
  • linux执行命令缺少共享库解决方法和ldd命令说明

    linux执行命令缺少共享库解决方法和ldd命令说明 root xiaogaokui which ldd usr bin ldd root xiaogaokui file usr bin ldd usr bin ldd Bourne Aga
  • ZStack-K8s三层互联互通方案

    1 准备条件 zstack社区版 kubernetes 1 15 0 zstack 创建私有网络 kubernetes 选择Calico网络方案 kubernetes创建在zstack创建的扁平网络中或者是kubernetes和zstack
  • web H5 调用高德地图 通过ip定位获取当前城市

    web H5 调用高德地图 通过ip定位获取当前城市 一 使用步骤注册高德账号 创建应该获取key 登录之后 点击 应用 头部导航栏 注册地址拿走 https lbs amap com dev id choose 注意这里有服务类型 提交完
  • 拉格朗日法插补数据缺失值(Python代码实现)

    1 查询缺失值位置 isnull for i in df columns for j in df index if df isnull loc j i isnull append j i isnull 2 拉格朗日插值 传入存在缺失值的列
  • PCL 三维点云边界提取(C++详细过程版)

    边界提取 一 概述 二 代码实现 三 结果展示 本文由CSDN点云侠原创 爬虫自重 如果你不是在点云侠的博客中看到该文章 那么此处便是不要脸的爬虫 一 概述 点云边界提取在PCL里有现成的调用函数 具体算法原理和实现代码见 PCL 点云边界
  • r语言插补法_R语言缺失值的处理:线性回归模型插补

    在当我们缺少值时 系统会告诉我用 1代替 然后添加一个指示符 该变量等于 1 这样就可以不删除变量或观测值 我们在这里模拟数据 然后根据模型生成数据 未定义将转换为NA 一般建议是将缺失值替换为 1 然后拟合未定义的模型 默认情况下 R的策