【发布时间】:2018-10-18 17:39:28
【问题描述】:
我需要做一个贝叶斯线性回归(使用重新思考包),这需要我的分类变量是数字(我认为),所以我试图创建虚拟变量,以便不同的类别由 (0,1, 2,3...)。我在下面模拟了一些数据,向您展示我的数据是什么样的。请记住,我的实际数据包含更多在这里表示的分类变量,因此使用一堆 ifelse 函数并不理想:
#simulated data
X <- data.frame(
Longest.axis = rnorm(50,10,5),
Time..hrs. = round(runif(50,0,4)),
Strain = sapply(1:50,function(x) {ifelse(x<12,"Msmeg_2788","Msmeg_WT")}),
Item.Name = sapply(1:50,
function(x)
{ifelse(x<6,"Q109.jpg",
ifelse(x<20,"Q340.jpg",
ifelse(x<40,"Q11.jpg","Q230.jpg")
)
)}
)
)
下面我展示了我创建虚拟变量的尝试:
#create dummy variables
Straindummy <- model.matrix(X$Strain)
Item.Namedummy <- model.matrix(X$Item.Name)
它返回以下错误:
Error: $ operator is invalid for atomic vectors
这是我尝试进行多元贝叶斯线性回归的尝试,以防您需要它来建议我应该做什么:
library(rethinking)
model <- map(
alist(
X$Longest.Axis ~ dnorm(mu,sigma),
mu <- a + b1*Straindummy+b2*Item.Namedummy+b3*X$Time..hrs.,
a ~ dnorm(10,10),
b1 ~ dnorm(0,1),
b2 ~ dnorm(0,1),
b3 ~ dnorm(0,1),
sigma ~ dunif(0,10)
),
data = X )
如果您能提供任何帮助,谢谢!
【问题讨论】:
-
试试
model.matrix(~ Item.Name, X)或model.matrix(~ Strain, X)如果你不需要拦截,model.matrix(~ Strain-1, X) -
我认为你想要
mu =或者mu ~,而不是mu <-在你的alist()中。正如 akrun 所示,给model.matrix一个公式和一个数据框,而不仅仅是一列。 (尤其是不存在的列) -
简短的回答是......不要那样做。它不是必需的,会分散您识别真正错误的注意力,并阻止您有效地使用 R 的公式机制。
-
我在西雅图待了 9 年,大约一年前搬走了。自 96 年以来就没有住在湾区
-
@Gregor:你一定是把你和另一个 SO 常规混为一谈了。我在特拉弗斯城长大,所以当我查看你的个人资料时感到很惊讶。