我一直试图弄清楚subsetR lm()函数中的参数是如何工作的.特别是下面的代码对我来说似乎很可疑:
data(mtcars)
summary(lm(mpg ~ wt, data=mtcars))
summary(lm(mpg ~ wt, cyl, data=mtcars))
Run Code Online (Sandbox Code Playgroud)
在每种情况下,回归都有32个观察结果
dim(lm(mpg ~ wt, cyl ,data=mtcars)$model)
[1] 32 2
dim(lm(mpg ~ wt ,data=mtcars)$model)
[1] 32 2
Run Code Online (Sandbox Code Playgroud)
然而系数改变(连同R²).该帮助没有提供太多关于此事的信息:
子集一个可选向量,指定要在拟合过程中使用的观察子集
在R中,如何设置特定变量的权重而不是lm()函数中的观察值?
背景如下.我正在尝试为特定产品建立个人排名系统,比如手机.我可以建立基于价格的线性模型作为因变量和其他特征,如屏幕尺寸,内存,操作系统等作为自变量.然后,我可以用它来预测手机的实际成本(与宣布的价格相反),从而找到最佳的价格/良好系数.这就是我已经做过的事情.
现在我想"突出"一些对我来说很重要的功能.例如,我可能需要一个具有大内存的手机,因此我想给它更高的权重,以便线性模型针对内存变量进行优化.
lm()R中的函数有weights参数,但这些是观察的权重而不是变量(如果这是错误的,请纠正我).我也试着玩配方,但只有翻译错误.有没有办法将变量的权重合并在一起lm()?
当然,lm()功能不是唯一的选择.如果您知道如何使用其他类似的解决方案(例如glm()),这也很好.
UPD.经过几次评论后,我明白了我对这个问题的思考方式是错误的.通过调用获得的线性模型lm()给出了训练样例的最佳系数,并且没有办法(也没有必要)改变变量的权重,对不起我所做的混乱.我实际上正在寻找的是改变现有线性模型中系数的方法,以手动使一些参数比其他参数更重要.继续前面的例子,假设我们有以下价格公式:
price = 300 + 30 * memory + 56 * screen_size + 12 * os_android + 9 * os_win8
Run Code Online (Sandbox Code Playgroud)
该公式描述了价格和电话参数之间依赖关系的最佳可能线性模型.但是,现在我想手动将memory变量前面的数字30 改为60,所以它变为:
price = 300 + 60 * memory + 56 * screen_size + 12 * os_android + 9 * os_win8
Run Code Online (Sandbox Code Playgroud)
当然,这个公式不再反映价格和手机参数之间的最佳关系.同时因变量并不显示实际价格,只是一些良好的价值,考虑到记忆对我来说比一般人重要两倍(基于第一个公式的系数).但是这种善良的价值(或者更确切地说,分数的价值goodness/price)正是我所需要的 - 有了这个我能找到最好的(在我看来)最好的价格手机.
希望所有这一切都有道理.现在我有一个(可能非常简单)的问题.我怎样才能手动设置在现有的线性模型系数,用获得的lm()?也就是说,我正在寻找类似的东西:
coef(model)[2] <- …Run Code Online (Sandbox Code Playgroud) 我正在分析有关芦苇田的数据.我测量的变量是水深,簧片高度,簧片密度等.由于一些变量是相关的,我执行了PCA以将这些变量减少到2个PCA轴(N = 104).
为了执行PCA,我vegan在R中使用了包.我的数据如下所示:
row.names Waterpeil hoogte_max Som Leeftijd_riet PFD oppervlakte onderlaag_num afst_rand
1 1 5 2.5 51 0.15686274 1.616921 8.127192 2 24.154590
2 3 9 2.5 44 0.13636364 1.564643 9.023642 2 8.349288
3 4 0 2.5 84 0.30952381 1.352548 8.498775 2 26.226896
4 5 0 3.5 58 0.43103448 1.384183 9.301617 1 57.320000
5 6 40 2.5 52 0.42307692 1.361262 10.316058 1 45.470000
6 7 5 3.0 19 0.00000000 1.429287 9.927788 1 36.720000
7 9 0 2.5 64 …Run Code Online (Sandbox Code Playgroud) 出于某种原因,当我指定glms(并且lm也是如此)时,R不会预测数据的缺失值.这是一个例子:
y = round(runif(50))
y = c(y,rep(NA,50))
x = rnorm(100)
m = glm(y~x, family=binomial(link="logit"))
p = predict(m,na.action=na.pass)
length(p)
y = round(runif(50))
y = c(y,rep(NA,50))
x = rnorm(100)
m = lm(y~x)
p = predict(m)
length(p)
Run Code Online (Sandbox Code Playgroud)
p的长度应该是100,但是它的50.奇怪的是,我在同一个脚本中有其他预测可以预测丢失的数据.
编辑:事实证明,那些其他预测是非常错误的 - 我正在做imputed.value = rnorm(N,mean.from.predict,var.of.prediction.interval).这回收了来自lm预测或glm预测函数的均值和sd向量length(predict)<N,这与我所寻求的完全不同.
所以我的问题是我的示例代码是什么阻止glm和lm预测缺失值?
谢谢!
我想lm()在一个包含2个预测变量的50M +观测值的大型数据集上运行.分析在远程服务器上运行,只有10GB用于存储数据.我已经对从数据中采样的10K观测值测试了'lm()',结果对象的大小为2GB +.
我需要从lm()ONLY 返回的类"lm"的对象来生成model(summary(lm_object))的摘要统计信息并进行预测(predict(lm_object)).
我做了一些实验用的选项model, x, y, qr的lm.如果我将它们全部设置为FALSE我将尺寸减小38%
library(MASS)
fit1=lm(medv~lstat,data=Boston)
size1 <- object.size(fit1)
print(size1, units = "Kb")
# 127.4 Kb bytes
fit2=lm(medv~lstat,data=Boston,model=F,x=F,y=F,qr=F)
size2 <- object.size(fit2)
print(size2, units = "Kb")
# 78.5 Kb Kb bytes
- ((as.integer(size1) - as.integer(size2)) / as.integer(size1)) * 100
# -38.37994
Run Code Online (Sandbox Code Playgroud)
但
summary(fit2)
# Error in qr.lm(object) : lm object does not have a proper 'qr' component.
# Rank zero or should …Run Code Online (Sandbox Code Playgroud) 当我尝试运行一个带有分类变量作为预测变量的简单线性模型时,我在R中遇到了问题.运行模型时,R会抛出错误
`Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : `
Run Code Online (Sandbox Code Playgroud)
但是,数据似乎没问题(下面附有数据集):
str(minimal)
'data.frame': 330 obs. of 2 variables:
$ swls : num 5.2 NaN 7 6 NaN NaN NaN NaN NaN NaN ...
$ exp.factor: Factor w/ 2 levels "erlebt","nicht erlebt": 1 1 1 1 2 2 2 2 NA 2 ...
Run Code Online (Sandbox Code Playgroud)
似乎数据中也有足够的变化,所以我发现的类似线程不适用于此:
table(minimal$exp.factor)
erlebt nicht erlebt
148 163
Run Code Online (Sandbox Code Playgroud)
`但是,lm()仍然拒绝工作:
lm(swls ~ exp.factor, data = minimal)
Fehler in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
Kontraste können nur auf …Run Code Online (Sandbox Code Playgroud) 我想知道有没有办法输出R中岭回归的摘要?这是lm.ridge{MASS}功能的结果.
对于标准线性模型,您只需要进行summary(lm_model)岭回归模型吗?感谢帮助.
我想将一个lm对象持久化到一个文件并将其重新加载到另一个程序中.我知道我可以通过saveRDS/ 写入/读取二进制文件来做到这一点readRDS,但我希望有一个ASCII文件而不是二进制文件.在更一般的层面上,我想知道为什么我在dput输出中阅读的习语一般不符合我的预期.
下面是简单拟合的示例,以及模型的成功和不成功的重新创建:
dat_train <- data.frame(x=1:4, z=c(1, 2.1, 2.9, 4))
fit <- lm(z ~ x, dat_train)
rm(dat_train) # Just to make sure fit is not dependent upon `dat_train existence`
dat_score <- data.frame(x=c(1.5, 3.5))
## This works (of course)
predict(fit, dat_score)
# 1 2
# 1.52 3.48
Run Code Online (Sandbox Code Playgroud)
保存到二进制文件工作:
## http://stackoverflow.com/questions/5118074/reusing-a-model-built-in-r
saveRDS(fit, "model.RDS")
fit2 <- readRDS("model.RDS")
predict(fit2, dat_score)
# 1 2
# 1.52 3.48
Run Code Online (Sandbox Code Playgroud)
这样做(dput它在R会话中不是文件):
fit2 <- eval(dput(fit))
predict(fit2, dat_score)
# 1 …Run Code Online (Sandbox Code Playgroud) 可以使用公式的快捷方式 lm()
m <- matrix(rnorm(100), ncol=5)
lm(m[,1] ~ m[,2:5]
Run Code Online (Sandbox Code Playgroud)
在这里它将是相同的
lm(m[,1] ~ m[,2] + m[,3] + m[,4] + m[,5]
Run Code Online (Sandbox Code Playgroud)
但是在变量不是同一级别的情况下(至少这是我现在的假设)这不起作用,我得到错误:
Error in model.frame.default(formula = hm[, 1] ~ hm[, 2:4], drop.unused.levels = TRUE) :
invalid type (list) for variable 'hm[, 2:4]'
Run Code Online (Sandbox Code Playgroud)
数据(hm):
N cor.distance switches time
1 50 0.04707842 2 0.003
2 100 -0.10769441 2 0.004
3 200 -0.01278359 2 0.004
4 300 0.04229509 5 0.008
5 500 -0.04490092 6 0.010
6 1000 0.01939561 4 0.007
Run Code Online (Sandbox Code Playgroud)
是否还有一些捷径可以避免编写长公式?
我正在尝试使用以下代码运行boxcox转换:
urban1 <- subset(ski,urban <= 4,na.rm=TRUE)
ski$gender <- as.numeric((as.character(ski$gender)),na.rm=TRUE)
urban1 <- as.numeric((as.character(urban1)))
x <- (ski$gender*urban1)
y <- ski$EPSI.
bc <- boxcox(y ~ x)
(trans <- bc$x[which.max(bc$y)])
model3 <- lm(y ~ x)
model3new <- lm(y^trans ~ x)
ski$EPSI. <- ski$EPSI. + 1
Run Code Online (Sandbox Code Playgroud)
但我一直收到这个错误:
lm.fit中的错误(x,y,偏移=偏移,singular.ok = singular.ok,...):0(非NA)情况调用:... eval - > eval - > boxcar - > boxcar.公式 - > lm - > lm.fit执行暂停
提前致谢!
lm ×10
r ×10
regression ×2
eval ×1
formula ×1
glm ×1
matrix ×1
memory ×1
missing-data ×1
pca ×1
prediction ×1
summary ×1