标签: lm

子集参数如何在lm()函数中起作用?

我一直试图弄清楚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 linear-regression lm

7
推荐指数
1
解决办法
2万
查看次数

如何在线性模型中手动设置变量系数?

在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)

r linear-regression lm

7
推荐指数
1
解决办法
2万
查看次数

提取PCA轴以进行进一步分析

我正在分析有关芦苇田的数据.我测量的变量是水深,簧片高度,簧片密度等.由于一些变量是相关的,我执行了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)

r pca lm

7
推荐指数
2
解决办法
1万
查看次数

Predict.glm不会预测响应中的缺失值

出于某种原因,当我指定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预测缺失值?

谢谢!

r prediction missing-data lm glm

7
推荐指数
2
解决办法
1万
查看次数

如何最小化类"lm"对象的大小而不影响它传递给predict()

我想lm()在一个包含2个预测变量的50M +观测值的大型数据集上运行.分析在远程服务器上运行,只有10GB用于存储数据.我已经对从数据中采样的10K观测值测试了'lm()',结果对象的大小为2GB +.

我需要从lm()ONLY 返回的类"lm"的对象来生成model(summary(lm_object))的摘要统计信息并进行预测(predict(lm_object)).

我做了一些实验用的选项model, x, y, qrlm.如果我将它们全部设置为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)

memory r lm

7
推荐指数
2
解决办法
1749
查看次数

`对比<-`(`*tmp*`,value = contr.funs [1 + isOF [nn]])中的错误与明显正确的数据集

当我尝试运行一个带有分类变量作为预测变量的简单线性模型时,我在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

7
推荐指数
1
解决办法
9436
查看次数

如何执行lm.ridge摘要?

我想知道有没有办法输出R中岭回归的摘要?这是lm.ridge{MASS}功能的结果.

对于标准线性模型,您只需要进行summary(lm_model)岭回归模型吗?感谢帮助.

regression r summary lm

7
推荐指数
1
解决办法
1万
查看次数

如何正确地"拟合"拟合的线性模型(通过`lm`)到ASCII文件并在以后重新创建?

我想将一个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)

regression r linear-regression lm

7
推荐指数
1
解决办法
235
查看次数

在公式中使用R中的lm()的快捷方式

可以使用公式的快捷方式 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)

是否还有一些捷径可以避免编写长公式?

r matrix formula lm

6
推荐指数
2
解决办法
3791
查看次数

lm.fit(x,y,offset = offset,singular.ok,...)中的错误0具有boxcox公式的非NA情况

我正在尝试使用以下代码运行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执行暂停

提前致谢!

eval r lm

6
推荐指数
2
解决办法
4万
查看次数

标签 统计

lm ×10

r ×10

linear-regression ×3

regression ×2

eval ×1

formula ×1

glm ×1

matrix ×1

memory ×1

missing-data ×1

pca ×1

prediction ×1

summary ×1