我有一个同时包含随机缺失(MAR)和审查数据的数据集。这些变量是相关的,因此我尝试有条件地估算缺失的数据,以便可以估计相关的多元正态分布的分布参数。我想使用Gibbs MCMC,但是很难执行该程序。我的数据框有5个变量(表示为x1:x5),1099个样本,其中包含MAR,检查值和观察值的某种组合。到目前为止,这是我尝试过的:
# packages
library(msm, tmvtnorm, MCMCpack)
# priors
theta0<-c(rep(0, 5))
Sigma0<-S0<-diag(5)
nu0<-4
# initialize parameters
theta<-c(rep(0, 5))
Tau<-diag(5)
# initialize output matrix
n_samples <- 1000
mu_MCMC <- matrix(0, nrow = n_samples, ncol = 5)
mu_MCMC[1,] <- theta
cov_MCMC <- matrix(0, nrow = n_samples, ncol = 25)
cov_MCMC[1,] <- c(diag(5))
# detection limits
det_lim <- matrix(c(-1.7, 0, 0, 0, 0), nrow = 1, ncol = 5)
# function to detect NaN (i.e., below detection data)
is.nan.data.frame <- function(x)
do.call(cbind, lapply(x, …Run Code Online (Sandbox Code Playgroud) 我正在探索statsmodels.imputation.mice包用于输入缺失值.但是,除了http://www.statsmodels.org之外,我还没有看到它的任何使用示例.从我收集的内容中,可以创建一个mouse.MICEData实例并将其与mice.MICE().fit()结合使用.来自http://www.statsmodels.org/dev/generated/statsmodels.imputation.mice.MICE.html的示例
>>> imp = mice.MICEData(data)
>>> fml = 'y ~ x1 + x2 + x3 + x4'
>>> mice = mice.MICE(fml, sm.OLS, imp)
>>> results = mice.fit(10, 10)
>>> print(results.summary())
Run Code Online (Sandbox Code Playgroud)
但是,MiceData实例中的估算值并不固定.我的意思是,如果
imp = mice.MICEData(data)
Run Code Online (Sandbox Code Playgroud)
每次通话
imp.update('x1')
Run Code Online (Sandbox Code Playgroud)
(假设数据有一列'x1')使用"预测均值匹配"为缺失值绘制一个新样本.如果我将MICEDdata与MICE.fit()一起使用,这一切都很好.但是,假设我想使用此程序包将值重写一次,然后使用另一个程序包中的预测程序(例如来自sklearn)来拟合数据.我想知道,什么是合理的方法.我可以多次运行更新并对每个缺失值进行平均预测.或者,我可以创建具有不同插补值的多个数据集并适合每个集合.但是,如果我的数据集很大,那么它可能会非常昂贵.
有趣的是,我在 stackoverflow 和其他网站上看到了很多不同的答案:
在处理我的训练数据集时,我使用决策树模型估算了某个列的缺失值。所以这是我的问题。使用所有可用数据(训练和测试)来制作插补模型(而不是预测)是否公平,或者我可以在这样做时只接触训练集吗?此外,一旦我开始处理我的测试集,我是否必须只使用我的测试集数据,使用在我的训练集中制作的相同插补模型进行插补,或者我可以使用所有可用的数据来重新训练我的插补模型?
我认为只要我不使用我的测试集进行预测模型训练,将其余数据用于插补之类的事情就可以了。但也许这会打破一个基本规则。想法?
我有一个类似于下面的数据框
id A B C D E
1 2 3 4 5 5
1 NaN 4 NaN 6 7
2 3 4 5 6 6
2 NaN NaN 5 4 1
Run Code Online (Sandbox Code Playgroud)
我想为列做一个空值估算A,B,C在正向充填,但每个组。这意味着,我希望向前填充应用于每个id. 我怎样才能做到这一点?
在 python 的sklearn库中有两个类,它们做的事情大致相同:
sklearn.preprocessing.Imputer和sklearn.impute.SimpleImputer
唯一的区别,我发现是"constant" strategy在类型SimpeImputer。还有其他区别吗?什么时候应该Imputer用SimpleImputer?
考虑data下面包含一些 nan :
Column-1 Column-2 Column-3 Column-4 Column-5
0 NaN 15.0 63.0 8.0 40.0
1 60.0 51.0 NaN 54.0 31.0
2 15.0 17.0 55.0 80.0 NaN
3 54.0 43.0 70.0 16.0 73.0
4 94.0 31.0 94.0 29.0 53.0
5 99.0 52.0 77.0 91.0 58.0
6 84.0 19.0 36.0 NaN 97.0
7 41.0 91.0 62.0 67.0 68.0
8 44.0 38.0 27.0 53.0 37.0
9 58.0 NaN 63.0 57.0 28.0
10 66.0 68.0 89.0 36.0 47.0
11 7.0 81.0 5.0 …Run Code Online (Sandbox Code Playgroud) 我是 R 新手,正在解决一个问题。
我需要一个函数来根据给定大小的窗口内元素的平均值来估算向量中的缺失值。
然而,这个窗口将会移动,因为假设我的NA位置为 30,而我的窗口大小为 10,则应该计算 的平均值x[20:40]。因此,对于每个找到的NA,窗口均值都会不同。
我一直在尝试这个:
impute.to.window.mean <- function(x, window) {
na.idx <- is.na(x) #find missing values in x
for (na in na.idx) {
y <- (x[na]-window):(x[na]+window)
na.idx[na] <- mean(y, na.rm = TRUE)
}
return(x)
}
Run Code Online (Sandbox Code Playgroud)
但这是不正确的,我不知道如何继续。
我有一个包含 21000 行(数据样本)和 102 列(特征)的数据集。我想根据当前数据集生成一个更大的合成数据集,比如 100000 行,这样我就可以将它用于机器学习目的。
我一直在参考@Prashant 在这篇文章中的回答https://stats.stackexchange.com/questions/215938/generate-synthetic-data-to-match-sample-data,但我无法让它工作为我的数据生成更大的合成数据集。
import numpy as np
from random import randrange, choice
from sklearn.neighbors import NearestNeighbors
import pandas as pd
#referring to https://stats.stackexchange.com/questions/215938/generate-synthetic-data-to-match-sample-data
df = pd.read_pickle('df_saved.pkl')
df = df.iloc[:,:-1] # this gives me df, the final Dataframe which I would like to generate a larger dataset based on. This is the smaller Dataframe with 21000x102 dimensions.
def SMOTE(T, N, k):
# """
# Returns (N/100) * n_minority_samples synthetic minority samples.
#
# …Run Code Online (Sandbox Code Playgroud) 我有一个数据集,我尝试在包中使用多重插补mice,miceadds并micemd在多级设置中使用分类/因子变量。我可以将该方法2l.2stage.pois用于连续变量,效果非常好。分类变量的插补也适用于polyreg,但这并没有利用多级数据。
这是说明我的问题的可复制代码。
dat <- data.frame(x=rep(c("A", "B"), 50),
y=rep(c(10:14), 20),
r=rep(c(1:50), 2),
z=rep(c(1:4), 25))
dat[40:44, c("x")] <- NA
dat[60:64, c("y")] <- NA
dat[80:84, c("r")] <- NA
predm <- mice::make.predictorMatrix(data=dat)
predm[, c("z")] <- -2
predm[, c("r")] <- 3
predm[row(predm) == col(predm)] <- 0
meth <- c("x"="polyreg", "y"="2l.2stage.pois", "r"="", "z"="")
imputed = mice(dat, method=meth, predictorMatrix=predm, m=1, maxit=1)
imp <- complete(imputed)
table(imp$x, dat$x, useNA = "always")
table(imp$y, dat$y, useNA = "always")
Run Code Online (Sandbox Code Playgroud)
本质上,我试图polyreg用可能应该以 …
我有一个像 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) imputation ×10
python ×4
r ×4
missing-data ×3
scikit-learn ×3
dataframe ×2
data-science ×1
factors ×1
imputets ×1
multi-level ×1
na ×1
pandas ×1
python-2.7 ×1
r-mice ×1
statsmodels ×1