标签: imputation

用序列中的缺失值替换 NAs (R)

我有一个像 DF

在此处输入图片说明

现在我想用 15 替换 Col B = NA,因为这是缺失值。C 列第一个 NA 为 14,第二个 NA 为 15。D 列第一个 NA 为 13,第二个 NA 为 14,第三个 NA 为 15。因此数字遵循从上到下或从下到上的顺序。

可重现的样本数据

structure(list(`Col A` = c(11, 12, 13, 14, 15), `Col B` = c(NA, 
11, 12, 13, 14), `Col C` = c(NA, NA, 11, 12, 13), `Col D` = c(NA, 
NA, NA, 11, 12)), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud)

r dataframe na imputation

6
推荐指数
1
解决办法
86
查看次数

Pyspark Dataframe Imputations - 根据指定条件用Column Mean替换未知和缺失值

给定Spark数据帧,我想基于该列的非缺失值和非未知值计算列平均值.然后我想采取这个意思并用它来替换列的缺失和未知值.

例如,假设我正在使用:

  • 名为df的数据帧,其中每个记录代表一个个体,所有列都是整数或数字
  • 名为age的列(每条记录的年龄)
  • 名为missing_age的列(如果该个人没有年龄,则等于1,否则为0)
  • 名为unknown_age的列(如果该个人的未知年龄,则等于1,否则为0)

然后我可以计算出这个均值,如下所示.

calc_mean = df.where((col("unknown_age") == 0) & (col("missing_age") == 0))
.agg(avg(col("age")))
Run Code Online (Sandbox Code Playgroud)

或者通过SQL和Windows函数,

mean_compute = hiveContext.sql("select avg(age) over() as mean from df 
where missing_age = 0 and unknown_age = 0")
Run Code Online (Sandbox Code Playgroud)

希望使用SQL/Windows的功能,如果我能帮助它.我的挑战是采用这种方法并使用非SQL方法替换未知/缺失值.

我已经尝试过使用when(),where(),replace(),withColumn,UDF和组合......无论我做什么,我都会得到错误或结果不是我所期望的.这是我尝试过的很多东西之一的例子.

imputed = df.when((col("unknown_age") == 1) | (col("missing_age") == 1),
calc_mean).otherwise("age")
Run Code Online (Sandbox Code Playgroud)

我已经搜索过网络,但没有找到类似的插补类型问题,所以任何帮助都非常感谢.这可能是我错过的非常简单的事情.

附注 - 我正在尝试将此代码应用于Spark Dataframe中列名中没有unknown_或missing_的所有列.我可以将Spark相关代码包装在Python'for循环'中并循环遍历所有适用的列来执行此操作吗?

更新:

还想出了如何遍历列...这是一个例子.

for x in df.columns:
    if 'unknown_' not in x and 'missing_' not in x:
        avg_compute = df.where(df['missing_' + x] != 1).agg(avg(x)).first()[0]
        df = df.withColumn(x …
Run Code Online (Sandbox Code Playgroud)

python replace aggregation pyspark imputation

5
推荐指数
1
解决办法
6314
查看次数

使用预测模型估算缺失值

我试图在Python中计算缺失值,并且sklearn似乎没有超出平均值(均值,中位数或模式)插补的方法.橙色插补模型似乎提供了一个可行的选择.然而,似乎Orange.data.Table没有认识到np.nan或以某种方式归因于失败.

import Orange
import numpy as np

tmp = np.array([[1, 2, np.nan, 5, 8, np.nan], [40, 4, 8, 1, 0.2, 9]])
data = Orange.data.Table(tmp)
imputer = Orange.feature.imputation.ModelConstructor()
imputer.learner_continuous = Orange.classification.tree.TreeLearner(min_subset=20)
imputer = imputer(data )
impdata = imputer(data)
for i in range(0, len(tmp)):
    print impdata[i]
Run Code Online (Sandbox Code Playgroud)

输出是

[1.000, 2.000, 1.#QO, 5.000, 8.000, 1.#QO]
[40.000, 4.000, 8.000, 1.000, 0.200, 9.000]
Run Code Online (Sandbox Code Playgroud)

知道我错过了什么吗?谢谢!

python python-2.7 orange scikit-learn imputation

5
推荐指数
1
解决办法
3892
查看次数

从模型性能计算中排除缺失值

我有一个数据集,我想建立一个模型,最好是caret包.我的数据实际上是一个时间序列,但问题不是特定于时间序列,而是我CreateTimeSlices为数据分区工作.

我的数据有一定数量的缺失值NA,我将它们分别caret编码为代码.我还记录了他们的位置:

# a logical vector same size as the data, which obs were imputed NA
imputed=c(FALSE, FALSE, FALSE, TRUE, FALSE, FALSE)
imputed[imputed] <- NA; print(imputed)
#### [1] FALSE FALSE FALSE    NA FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

我知道Caret train函数中有一个选项可以排除NA或用不同的技术对它们进行估算.那不是我想要的.我需要在已经估算的数据集上构建模型,但我想从错误指标(RMSE,MAE,...)的计算中排除推算点.

我不知道如何在插入符号中这样做.在我的第一个脚本中,我尝试手动完成整个交叉验证,然后我有一个自定义的错误度量:

actual = c(5, 4, 3, 6, 7, 5)
predicted = c(4, 4, 3.5, 7, 6.8, 4)
Metrics::rmse(actual, predicted) # with all the points
#### [1] 0.7404953 …
Run Code Online (Sandbox Code Playgroud)

r missing-data r-caret imputation

5
推荐指数
1
解决办法
275
查看次数

最快的方法是使用大数据来估算列

我有一个大的数值数据集(约700行,350,000列,作为R中的data.table读入)包含一些NA,我想尽快用列表示替换.我发现之前的帖子用NA代替NA,但是当我修改解决方案而不是输入列意味着时,我得到j,列号.似乎我必须遗漏一些明显的东西...关于如何计算列的任何建议意味着使用这种方法?

在大型data.table中替换NA的最快方法

#original code
f_dowle3 = function(DT) {
     for(j in seq_len(ncol((DT)))
         set(DT,which(is.na(DT[[j]])),j,0)
 }

#modified code
impute = function(DT) {
     for(j in 2:ncol(DT))
         set(DT,which(is.na(DT[[j]])),j,mean(DT[,j],na.rm = TRUE))
 }

test_impute = fread("test_impute.csv")

test_impute
    ID snp1 snp2 snp3 snp4
 1:  1    2    1    1    0
 2:  2    2    2    0    0
 3:  3    2   NA    0   NA
 4:  4    2    1    2    0
 5:  5    2   NA    2    0
 6:  6    2    1    1    0
 7:  7    1    1   NA    0
 8:  8   NA …
Run Code Online (Sandbox Code Playgroud)

r large-data data.table imputation

5
推荐指数
1
解决办法
493
查看次数

测试 R 中的缺失值

我有一个时间序列数据集,其中有一些缺失值。我想估算缺失值,但我不确定哪种方法最合适,例如包中的线性、样条或 stine imputeTS

为了完整起见,我想测试一下我的数据是否是 MCAR、MAR、NMAR。我有一个合理的想法,它是 MCAR,但我有兴趣进行测试。

str(wideRawDF)
'data.frame':   1343 obs. of  13 variables:
 $ Period.Start.Time: POSIXct, format: "2017-01-20 16:30:00" "2017-01-20 16:45:00" "2017-01-20 17:00:00" "2017-01-20 17:15:00" ...
 $ DO0182U09A3      : num  -102 -101 -101 -101 -101 ...
 $ DO0182U09B3      : num  -103.4 -102.8 -103.3 -95.9 -103 ...
 $ DO0182U09C3      : num  -103.9 -104.2 -103.9 -99.2 -104.1 ...
 $ DO0182U21A1      : num  -105 -105 -105 -104 -102 ...
 $ DO0182U21A2      : num  -105 -104 -105 -105 -105 ...
 $ DO0182U21A3      : …
Run Code Online (Sandbox Code Playgroud)

r missing-data imputation imputets

5
推荐指数
1
解决办法
2982
查看次数

scikit-learn 在另一个特征的标称值组内估算特征的平均值

我想估算一个特征的平均值,但仅根据另一列中具有相同类别/标称值的其他示例计算平均值,我想知道使用 scikit-learn 的 Imputer 类是否可以实现这一点?这样只会更容易添加到管道中。

例如:

使用来自 kaggle 的泰坦尼克号数据集:来源

我将如何去计算每个的fare平均值pclass。其背后的想法是,不同阶层的人票价之间会有很大差异。

更新:在与一些人讨论后,我应该使用的短语是“估算班级内的平均值”。

我已经研究了下面Vivek的评论,当我有时间做我想做的事情时,我将构造一个通用管道函数:)我很清楚如何做到这一点,并将在完成后作为答案发布。

classification machine-learning mean scikit-learn imputation

5
推荐指数
1
解决办法
1934
查看次数

R中的“ missforest”错误

在使用“ missforest”包在R中执行数据插补时,需要帮助来解决以下错误。

> imputed<- missForest(dummy, maxiter = 10, ntree = 100, variablewise = TRUE,
+                      decreasing = TRUE, verbose = TRUE,
+                      mtry = floor(sqrt(ncol(dummy))), replace = TRUE)
Error in sample.int(length(x), size, replace, prob) : 
  invalid first argument
Run Code Online (Sandbox Code Playgroud)

r imputation

5
推荐指数
1
解决办法
1148
查看次数

R 中的 mouse 包,更新到 mouse 3.0 后,mipo 对象不再返回方差协方差矩阵

将鼠标(链式方程的多重方程)包更新到版本 >3 后,我的代码停止工作。我希望从乘法插补数据集的线性回归中检索估计的方差-协方差矩阵。在 2.46.0 版本中,可以使用pool函数轻松访问该数量(小鼠将其称为t ) 。在 mouse >3.0 版本中,池函数不再返回完整的方差-协方差矩阵,它仅返回方差-协方差矩阵的对角元素。

这是一个工作示例:

首先创建一些包含缺失值的数据集:

set.seed(243)
iris$Sepal.Length[sample(length(iris$Sepal.Length), size = 5)] <- NA
iris$Sepal.Width[sample(length(iris$Sepal.Width), size = 5)] <- NA
iris$Petal.Length[sample(length(iris$Petal.Length), size = 5)] <- NA
iris$Species[sample(length(iris$Species), size = 5)] <- NA
Run Code Online (Sandbox Code Playgroud)

第二次乘法估算缺失数据

iris.mi <- mice(iris, 5)
Run Code Online (Sandbox Code Playgroud)

第三,对每个乘法插补数据集执行线性回归,将结果存储在 mira 对象中

mira.out <- with(iris.mi, lm(Sepal.Width ~ Sepal.Length + Petal.Length + Petal.Width + Species))
Run Code Online (Sandbox Code Playgroud)

第四,使用鲁宾规则汇集这些分析的结果。这是通过小鼠中的池函数实现的。

pool.out <- pool(analyses)
Run Code Online (Sandbox Code Playgroud)

在 mouse 包的 2.46.0 版本中,可以通过输入来检索完整的方差协方差矩阵t

pool.out$t
Run Code Online (Sandbox Code Playgroud)

在 mouse 包的较新版本 (>3.0) 中, pool.out$t 对象不存在。我们所能做的就是通过输入来检索差异

pool.out$pooled
Run Code Online (Sandbox Code Playgroud)

并选择标记为t …

r updates r-mice imputation

5
推荐指数
1
解决办法
1696
查看次数

小鼠的完整功能到底是做什么的?

我正在研究如何使用多重插补结果。以下是我的理解,如有错误请指出。

假设您有一个包含缺失值的数据集,并且您想要进行回归分析。您可以对 m = 5 次执行多重插补,并且对于每个插补数据集(现在有 5 个插补数据集)运行回归分析,然后通过 Rubin 规则(或使用 R)“汇集”这些 m = 5 模型的系数估计值包“池”)。

我的问题是,在小鼠中你有一个函数complete(),并且手册说你可以使用 提取完整的数据集complete(object)

但是如果我使用 mouse m = 5 次,那么使用是否仍然有意义complete()complete()我会得到哪些插补结果?

另外,如果我只使用 m = 1 的小鼠,这有意义吗?谢谢。

statistics r r-mice imputation

5
推荐指数
2
解决办法
4723
查看次数