假设我有一个响应变量和一个包含三个协变量的数据(作为玩具示例):
y = c(1,4,6)
d = data.frame(x1 = c(4,-1,3), x2 = c(3,9,8), x3 = c(4,-4,-2))
Run Code Online (Sandbox Code Playgroud)
我想对数据进行线性回归:
fit = lm(y ~ d$x1 + d$x2 + d$y2)
Run Code Online (Sandbox Code Playgroud)
有没有办法编写公式,这样我就不必写出每个协变量?例如,像
fit = lm(y ~ d)
Run Code Online (Sandbox Code Playgroud)
(我希望数据框中的每个变量都是协变量.)我问,因为我的数据框中实际上有50个变量,所以我想避免写出来x1 + x2 + x3 + etc.
假设有一些data.frame foo_data_frame,并且想要找到某些其他列的目标列Y的回归.为此目的,通常使用一些公式和模型.例如:
linear_model <- lm(Y ~ FACTOR_NAME_1 + FACTOR_NAME_2, foo_data_frame)
Run Code Online (Sandbox Code Playgroud)
如果公式是静态编码的话,这确实很有效.如果希望使用常数的因变量(例如2)对多个模型进行根处,则可以这样处理:
for (i in seq_len(factor_number)) {
for (j in seq(i + 1, factor_number)) {
linear_model <- lm(Y ~ F1 + F2, list(Y=foo_data_frame$Y,
F1=foo_data_frame[[i]],
F2=foo_data_frame[[j]]))
# linear_model further analyzing...
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是当程序运行期间变量的数量动态变化时,如何做同样的影响?
for (number_of_factors in seq_len(5)) {
# Then root over subsets with #number_of_factors cardinality.
for (factors_subset in all_subsets_with_fixed_cardinality) {
# Here I want to fit model with factors from factors_subset.
linear_model <- lm(Does R provide smth to …Run Code Online (Sandbox Code Playgroud) 我想强制特定的变量进入glm回归而不完全指定每个变量.我的真实数据集有大约200个变量.到目前为止,我还没有在我的在线搜索中找到这样的样本.
例如(只有3个变量):
n=200
set.seed(39)
samp = data.frame(W1 = runif(n, min = 0, max = 1), W2=runif(n, min = 0, max = 5))
samp = transform(samp, # add A
A = rbinom(n, 1, 1/(1+exp(-(W1^2-4*W1+1)))))
samp = transform(samp, # add Y
Y = rbinom(n, 1,1/(1+exp(-(A-sin(W1^2)+sin(W2^2)*A+10*log(W1)*A+15*log(W2)-1+rnorm(1,mean=0,sd=.25))))))
Run Code Online (Sandbox Code Playgroud)
如果我想包含所有主要术语,这有一个简单的快捷方式:
glm(Y~., family=binomial, data=samp)
Run Code Online (Sandbox Code Playgroud)
但是说我想要包括所有主要术语(W1,W2和A)加上W2 ^ 2:
glm(Y~A+W1+W2+I(W2^2), family=binomial, data=samp)
Run Code Online (Sandbox Code Playgroud)
这有什么捷径吗?
[在发布之前编辑自己:]这个有效! glm(formula = Y ~ . + I(W2^2), family = binomial, data = samp)
好的,那么这个呢!
我想省略一个主要的术语变量,只包括两个主要术语(A,W2)和W2 ^ 2和W2 ^ 2:A:
glm(Y~A+W2+A*I(W2^2), family=binomial, data=samp)
Run Code Online (Sandbox Code Playgroud)
显然只有几个变量不需要快捷方式,但我使用高维数据.当前数据集"仅"有200个变量,但其他一些变量有成千上万个.
当我们在R中拟合统计模型时,比如说
lm(y ~ x, data=dat)
Run Code Online (Sandbox Code Playgroud)
我们使用R的特殊公式语法:"y~x"
是否存在从这样的公式转换为相应的公式的东西?在这种情况下,它可以写成:
y = B0 + B1*x
Run Code Online (Sandbox Code Playgroud)
这将非常有用!首先,因为有更复杂的公式,我不相信我的翻译.其次,在用R/Sweave/knitr编写的科学论文中,有时候模型应该以方程式形式报告,并且为了完全可重复的研究,我们希望以自动化方式进行.
它看起来很简单,但是我不知道如何在R中进行编码。我有一个带有约100个变量的数据框(df),并且我想在响应中进行多元回归,即我的第一个变量(Y)和变量25至60作为回归变量。问题是我不想像这样写每个变量名:
lm(Y~var25+var26+.......var60, data=df)
Run Code Online (Sandbox Code Playgroud)
我想使用[,25:60]之类的东西来选择一个完整的范围。我已经尝试过了,但是没有用:
test <- lm(Y~df[, 25:60], data=df)
summary(test)
Run Code Online (Sandbox Code Playgroud)
有想法吗?
可能重复:
构建模型时对许多变量进行简短的公式调用
我有一个很大的数据框(112个变量),我想用R做逐步逻辑回归.我知道如何设置glm模型和stepAIC模型,但我宁愿不输入所有的标题来输入自变量.是否有一种快速方法可以将glm模型作为独立变量提供给整个数据框,以便将每个列识别为包含在模型中的x变量?我试过了:
ft<-glm(MFDUdep~MFDUind, family=binomial)
Run Code Online (Sandbox Code Playgroud)
但它不起作用(错误的数据类型).MFDUdep和MFDUind都是数据帧,MFDUind包含111个'x'变量并MFDUdep包含单个"y".