我有变量是标量
x1 <- 0.3
x2 <- 0.5
和矢量
的变量X1 <- list()
X2 <- list()
X1[[1]] <- c(0.2, 0.1, 0.3)
X2[[1]] <- c(0.5, 0.1, 0.8)
X1[[2]] <- c(0.3, 0.9, 0.3)
X2[[2]] <- c(0.3, 0.9, 0.8)
我想建立一个预测模型来预测标量结果y
。
有没有办法保持向量完整?描述here表明有用:
单个标量预测变量x和单个标量响应变量y的最简单情况称为简单线性回归。多个和/或向量值预测变量的扩展(用大写X表示)称为多元线性回归,也称为多变量线性回归。几乎所有真实世界的回归模型都涉及多个预测因子,线性回归的基本描述通常用多元回归模型来表达。
或者这是对我的误解吗?我可以将所有内容组合成一个数据帧作为变量,而不将变量作为标量和较大的向量的一部分进行区分吗?
我可以像cbind
一样m <- cbind(x1,x2,X1,X2)
并运行glm
吗?显然不是,因为这个:
fit <- lm(m[,"X1"]~y)
# invalid type (list) for variable 'm[, "X1"]'
给出了关于列表的错误...
我是R的初学者,尝试构建预测模型,现在除了标量值之外还想添加wordvectors。
我使用text2vec
(http://text2vec.org/glove.html)来构建用于单词表示的全局向量(基本上是n维中单词的语义表示)。现在我试图将这些向量包含在我的预测模型中。
示例数据:
# some users
user.id <- c(LETTERS[1:6])
# that have rated k objects
k1 <- c(0.8, 1.0, 0.2, 0.2, 0.4, 0.2)
k2 <- c(1.0, 0.6, 0.4, 0.2, 0.2, 0.6)
k3 <- c(0.2, 0.4, 1.0, 0.8, 0.2, 0.4)
# combined in a dataframe
m <- data.frame(user.id, k1, k2, k3)
# user.id k1 k2 k3
# 1 A 0.8 1.0 0.2
# 2 B 1.0 0.6 0.4
# 3 C 0.2 0.4 1.0
# 4 D 0.2 0.2 0.8
# 5 E 0.4 0.2 0.2
# 6 F 0.2 0.6 0.4
# a predictive model with three categories
pred <- as.data.frame(cbind(c(0.2, 0.2, 0.8, 0.8, 0.4, 0.5),
c(0.8, 0.8, 0.2, 0.1, 0.4, 0.6),
c(0.2, 0.2, 0.2, 0.1, 0.9, 0.9)))
rownames(pred) <- user.id
# so user A would fall in categorie V2 with a 0.8 probability
# V1 V2 V3
# A 0.2 0.8 0.2
# B 0.2 0.8 0.2
# C 0.8 0.2 0.2
# D 0.8 0.1 0.1
# E 0.4 0.4 0.9
# F 0.5 0.6 0.9
# now fit the predictive model with one of the variables
fit.A <- glm(m[, "kFotoA"]~., data = pred)
这应该给我一个模型来根据某些对象的评级来预测某人属于哪三个类别。 现在我有一大组wordvectors(一行矩阵,行中有224989个术语,列中有50个数字维度),我想将选定的wordvectors添加到模型中。简化的wordvectors样本,包含六个单词(每个用户一个)和五个维度:
rotterdam <- c(-0.5591611, 0.4638168, -0.6657301, -1.00970, -0.4964429)
haven <- c(-1.4801638, 0.9739170, -0.5680999, -0.68331, 0.3181312)
enneagram <- c(0.443401933, -0.147583544, -0.086073533, 0.004635453, -0.069459528)
zee <- c(-1.0437035, 0.6451703, 0.4914247, -0.8297554, -0.1023576)
oerol <- c(0.3234278, 0.3946120, -0.0951997, -0.2936957, -0.7962330)
uvh <- c(0.9152276, 0.2559245, -0.5879705, 0.7476653, 0.1205143)
glove <- rbind(rotterdam, haven, zee, enneagram, oerol, uvh)
我可以简单地将这些wordvector添加到数据框中,但我不想将它们分成标量并将它们保持为矢量。我不清楚如何继续。也许我应该尝试使用nest()
包中的tidyr
函数添加它们并继续使用glm
?如果是这样,我该怎么做?或者我需要像lm
这样的其他函数来组合模型中的标量和向量值变量吗?
我的目标是让具有相似语义结构的词语在预测模型中产生类似的影响,例如单词rotterdam
和haven
的相关性为0.73且应该具有或多或少的可比性影响。
library(text2vec)
sim2(glove, method = "cosine")
# rotterdam haven zee enneagram oerol uvh
# rotterdam 1.0000000 0.72923387 0.6174481 -0.3192074 0.50904216 -0.4043373
# haven 0.7292339 1.00000000 0.7734439 -0.8052958 -0.04653973 -0.4590087
# zee 0.6174481 0.77344390 1.0000000 -0.7948741 0.12561740 -0.8107657
# enneagram -0.3192074 -0.80529576 -0.7948741 1.0000000 0.30833610 0.6381868
# oerol 0.5090422 -0.04653973 0.1256174 0.3083361 1.00000000 0.1023369
# uvh -0.4043373 -0.45900871 -0.8107657 0.6381868 0.10233689 1.0000000