选择了未定义的列(贝叶斯分析)

Posted

技术标签:

【中文标题】选择了未定义的列(贝叶斯分析)【英文标题】:undefined columns selected (Bayesian analysis) 【发布时间】:2016-12-07 12:09:00 【问题描述】:

我正在为贝叶斯分析复制一个 R 代码,但我遇到了这个错误,我试图解决它,还在这里阅读了其他问题,但它仍然不起作用。 我使用相同的数据集和相同的变量(来自 OECD)。谁能告诉我为什么它不起作用? 我的代码是这样的:

rm(list=ls())
# Name of variables to be extracted
v.resp=c("pv1math") # Response Variable
v.treat=c("IC02Q01","IC02Q02","IC02Q03") # Treatment variable(s)
# Student Confoundings
v.student.conf=c("Age", "Gender", "isced_0", "IMMIG", "HEDRES", "WEALTH", "ESCS","FAMSTRUC","hisced","hisei","HOMEPOS", "TIMEINT")
# School Confoundings
v.school.conf=c("CLSIZE","SCMATEDU","STRATIO","SMRATIO","PublicPrivate")

## LOAD DATA
dat <- read.dta("name.dta")
## Weighted sample with weights in the w vector
w=dat$W_FSTUWT

R 中的子集数据

dat=dat[c(v.resp,v.treat,v.student.conf,v.school.conf)]
names(dat)[names(dat)==v.resp]="y"
w=w[complete.cases(dat)]
w=w/sum(w)
nw=function(w) w/sum(w)
dat=dat[complete.cases(dat),]
dim(dat)

当我跑线时 dat=dat[c(v.resp,v.treat,v.student.conf,v.school.conf)]我得到了错误 [.data.frame(dat, c(v.resp, v.treat, v.student.conf, v.school.conf)) 中的错误:选择了未定义的列

我有 25000 个观察值和 900 个变量,但我想用 21 个变量和与它们相关的观察值对我的数据进行子集化(肯定少于 25000 个)。我在 )] 之间放了逗号,但什么也没有,运行其他行我会丢失所有数据。

我也从“Quick-R 网站”运行此代码,但再次出现相同的错误消息

# select variables v1, v2, v3
myvars <- c("v1", "v2", "v3")
newdata <- mydata[myvars] 

我想了解它为什么不起作用。我正在从将它们用于同一数据集的论文中复制并粘贴这些代码。 谢谢。

【问题讨论】:

你能运行any(c(v.resp,v.treat,v.student.conf,v.school.conf) %in% names(dat))吗?如果它返回 FALSE,则数据框中不存在列名。也许read.dta 根本没有正确传输列名 谢谢!我试过了,我没有那个错误消息,观察结果比以前少,但我应该有 21 个变量(我想保留的变量)时仍然有 900 个变量 【参考方案1】:

消息指出:选择了未定义的列。这就是这里的情况:您只选择了您想要的行,但忘记告诉哪些列。使用 [ ] 进行子集化时,必须指定行和列。因此,您需要一个逗号来分隔行和列的信息。由于您没有对行进行选择,因此您无需在逗号后指定任何内容。但逗号是必需的。调整后的代码:

dat=dat[c(v.resp,v.treat,v.student.conf,v.school.conf),]

唯一的区别是结束前的逗号]

【讨论】:

以上是关于选择了未定义的列(贝叶斯分析)的主要内容,如果未能解决你的问题,请参考以下文章

贝叶斯分析中的“低级参数”是啥?

机器学习朴素贝叶斯

朴素贝叶斯:朴素贝叶斯定义朴素贝叶斯公式分解朴素贝叶斯分类流程高斯型朴素贝叶斯多项式朴素贝叶斯伯努利型朴素贝叶斯朴素贝叶斯预测概率校准朴素贝叶斯优缺点

史诗级干货长文朴素贝叶斯

三种常用的朴素贝叶斯实现算法——高斯朴素贝叶斯伯努利朴素贝叶斯多项式朴素贝叶斯

什么是朴素贝叶斯算法?如何学习应用?