首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bnlearn包R中的NA/NaN值

bnlearn包R中的NA/NaN值
EN

Stack Overflow用户
提问于 2014-06-09 01:18:58
回答 3查看 4.4K关注 0票数 2

我正在使用R中的bnlearn包来处理Bayesian networks中的大量数据。这些变量是离散的,有300多万次观测。利用bn.fit函数可以很容易地得到条件概率分布。但是,有些变量具有未观察到的值​​(即NA或​​)。

在一些测试中,我得到了这个:

代码语言:javascript
复制
nw.fit <-bn.fit (nw, date, method = 'bayes') 

Error in check.data (date): the data set contains NULL/NaN/NA values​​. 

那么,如何处理这些数据并得到条件概率分布呢?

有人能帮我吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-10 16:42:08

catnet包可以处理丢失的数据,并且是针对离散数据设计的。

您可以使用cnProb(bnet )获得条件概率。

下面是一个例子

代码语言:javascript
复制
rm(list=ls())

### generate random data (not simply independent binomials)
set.seed(123)
n.obs <- 10
a1 <- rbinom(n.obs,1,.3)
a2 <- runif(n.obs)
a3 <- floor(-3*log(.25+3*a2/4))
a3[a3>=2] <- NA
a2 <- floor(2*a2)
my.data <- data.frame(a1,a2,a3 )
### discretize data into proper categories
my.data <- cnDiscretize(my.data,numCategories=2)

my.data
##    a1 a2 a3
## 1   1  2  1
## 2   2  1  2
## 3   1  2  1
## 4   2  2  2
## 5   2  1 NA
## 6   1  2  1
## 7   1  1 NA
## 8   2  1 NA
## 9   1  1 NA
## 10  1  2  1

## say we want a2 conditional on a1,a3

## first generate a network with a1,a3 ->a2
cnet <- cnNew(
          nodes = c("a1", "a2", "a3"),
          cats = list(c("1","2"), c("1","2"), c("1","2")),
          parents = list(NULL, c(1,3), NULL)
          )


## set the empirical probabilities from data=my.data
cnet2 <- cnSetProb(cnet,data=my.data)

## to get the conditional probability table
cnProb(cnet2,which='a2')

##$a2
##         a1        a3         0         1
## A 0.0000000 0.0000000 0.0000000 1.0000000
## B 0.0000000 1.0000000 0.5712826 0.4287174
## A 1.0000000 0.0000000 0.0000000 1.0000000
## B 1.0000000 1.0000000 0.5685786 0.4314214
票数 3
EN

Stack Overflow用户

发布于 2014-06-09 11:38:14

有些变量有近100万的未观测值。这是很多只是删除他们。所以我想继续讲NAs。下面有一个数据的小例子

代码语言:javascript
复制
 A  B   C   D   E   F   G
 1  1   2   2   NA  2   1
 0  1   2   2   1   3   3
 1  3   1   1   NA  2   2
 0  3   1   1   1   2   1
 0  4   1   1   1   2   3
票数 0
EN

Stack Overflow用户

发布于 2015-06-23 02:25:05

按照bnlearn的所有者: Marco提到的这里,解决方案似乎是对缺失的值进行EM估算。

正如@pes前面所指出的,如果所有变量都是绝对的,catnet是一个可以使用的包。

第三种选择是删除缺少值的行,或者使用样条技术(另一组MV计算)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24112535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档