标签: lm

修改lm或loess函数以在ggplot2的geom_smooth中使用它

我需要修改lm(或最终loess)函数,以便我可以在ggplot2 geom_smooth(或stat_smooth)中使用它.

例如,这是stat_smooth通常使用的方式:

> qplot(data=diamonds, carat, price, facets=~clarity) + stat_smooth(method='lm')`
Run Code Online (Sandbox Code Playgroud)

我想定义一个自定义lm2函数作为method参数的值stat_smooth,所以我可以自定义它的行为.

> lm2 <- function(formula, data, ...)
  {
      print(head(data))
      return(lm(formula, data, ...))
  }
> qplot(data=diamonds, carat, price, facets=~clarity) + stat_smooth(method='lm2')
Run Code Online (Sandbox Code Playgroud)

请注意,我已将其用作method='lm2'参数stat_smooth.当我执行此代码时,获取错误:

eval中的错误(expr,envir,enclos):'nthcdr'需要一个列表来降低CDR

我不太懂.lm2在外面运行时,该方法非常有效stat_smooth.我玩了一下,我有不同类型的错误,但由于我不熟悉R的调试工具,我很难调试它们.老实说,我没有得到我应该把它放在return()电话里面.

r ggplot2 lm

9
推荐指数
1
解决办法
2502
查看次数

在R中选择哪个级别是lm回归中的因子的基本类别的最佳方式

假设我想使用lmfactor作为右侧变量运行回归.选择因子中哪个级别为基本类别(排除以避免多重共线性的级别)的最佳方法是什么.请注意,我对排除拦截不感兴趣,因为我有很多因素.

我还想要一个基于公式的解决方案,而不是直接作用于data.frame的解决方案,尽管如果你认为你有一个非常好的解决方案,请发布它.

我的解决方案是:

base_cat <- function(x) c(x,1:(x-1),(x+1):100) 
a_reg <- lm(y ~ x1 + x2 + factor(x3, levels=base_cat(30)) #suppose that x3 has draws from the integers 1 to 100.
Run Code Online (Sandbox Code Playgroud)

左边的类别lm是因子中的第一个级别,因此这只是重新排序级别,以便指定的级别是第一个级别base_cat(),然后将其余级别放在后面.

还有其他想法吗?

r lm r-factor

9
推荐指数
1
解决办法
1770
查看次数

当高阶参数保留时,如何在模型中删除低阶参数?

问题:只要高阶参数(即交互)保留在模型中,我就无法删除模型中的低阶参数(例如,主效应参数).即使这样做,模型也会被重构,新模型不会嵌套在更高的模型中.
请参阅以下示例(因为我来自我使用的ANOVA contr.sum):

d <- data.frame(A = rep(c("a1", "a2"), each = 50), B = c("b1", "b2"), value = rnorm(100))
options(contrasts=c('contr.sum','contr.poly'))
m1 <- lm(value ~ A * B, data = d)
m1

## Call:
## lm(formula = value ~ A * B, data = d)
## 
## Coefficients:
## (Intercept)           A1           B1        A1:B1  
##   -0.005645    -0.160379    -0.163848     0.035523  

m2 <- update(m1, .~. - A)
m2

## Call:
## lm(formula = value ~ B + A:B, data = d)

## …
Run Code Online (Sandbox Code Playgroud)

r lm

9
推荐指数
2
解决办法
3612
查看次数

线性模型(lm),因变量是因子/分类变量

我想用lm函数进行线性回归(或者另一个,如果有效的话).我的因变量是一个叫做的因子AccountStatus:

拖欠1:0天,拖欠2:30-60天,拖欠3:60-90天,拖欠4:90天.(4)

作为独立变量,我有几个数字变量:贷款到价值,债务到收入和利率.

是否可以使用这些变量进行线性回归?我在互联网上看到了一些关于假人的东西,但这些都是针对自变量的.

这不起作用:

fit <- lm(factor(AccountStatus) ~ OriginalLoanToValue, data=mydata)
summary(fit)
Run Code Online (Sandbox Code Playgroud)

r lm r-factor

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

lm()回归与整个数据帧的交互

我知道有一个快捷方式R可以lm()在所有数据帧上运行回归,如下所示:

reg<-lm(y~.,data=df)
Run Code Online (Sandbox Code Playgroud)

df具有解释变量x1,x2,... x5,所以它与写入相同

reg<-lm(y~x1+x2+x3+x4+x5,data=df)
Run Code Online (Sandbox Code Playgroud)

但这不包括像x1:x2这样的交互术语,...是否有快捷方式在R数据框的所有列上运行回归?我正在寻找2个具有相同效果的快捷方式

reg<-lm(y~x1*x2,x1*x3,x1*x4,x1*x5,x2*x3,...)
reg<-lm(y~x1*x2*x3*x4*x5) # this one will have interactions between the 5 variables
Run Code Online (Sandbox Code Playgroud)

regression r lm

9
推荐指数
2
解决办法
5446
查看次数

`poly()`如何生成正交多项式?如何理解"coefs"归来?

我对正交多项式的理解是它们采用的形式

y(x)= a1 + a2(x - c1)+ a3(x - c2)(x - c3)+ a4(x - c4)(x - c5)(x - c6)......最多为期望的条款

其中a1,a2 是每个正交项的系数(在拟合之间变化),并且c1,c2 是正交项内的系数,确定使得这些项保持正交性(使用相同x值的拟合之间一致)

我理解poly()用于拟合正交多项式.一个例子

x = c(1.160, 1.143, 1.126, 1.109, 1.079, 1.053, 1.040, 1.027, 1.015, 1.004, 0.994, 0.985, 0.977) # abscissae not equally spaced

y = c(1.217395, 1.604360, 2.834947, 4.585687, 8.770932, 9.996260, 9.264800, 9.155079, 7.949278, 7.317690, 6.377519, 6.409620, 6.643426)

# construct the orthogonal polynomial
orth_poly <- poly(x, degree …
Run Code Online (Sandbox Code Playgroud)

regression r matrix linear-regression lm

9
推荐指数
1
解决办法
2359
查看次数

如何从lm结果中获得RMSE?

我知道根均方误差$sigma的概念之间存在细微差别.所以,我想知道在R中获取RMSE 功能的最简单方法是什么?lm

res<-lm(randomData$price ~randomData$carat+
                     randomData$cut+randomData$color+
                     randomData$clarity+randomData$depth+
                     randomData$table+randomData$x+
                     randomData$y+randomData$z)

length(coefficients(res))
Run Code Online (Sandbox Code Playgroud)

包含24个系数,我不能再手动制作我的模型了.那么,我如何根据系数驱动来评估RMSE lm

regression r linear-regression lm

9
推荐指数
3
解决办法
2万
查看次数

数据帧错误*tmp*替换x数据有y

我是R的初学者.这是一个非常简单的代码,我试图保存剩余项:

# Create variables for child's EA:

dat$cldeacdi <- rowMeans(dat[,c('cdcresp', 'cdcinv')],na.rm=T)
dat$cldeacu <- rowMeans(dat[,c('cucresp', 'cucinv')],na.rm=T)

# Create a residual score for child EA:

dat$cldearesid <- resid(lm(cldeacu ~ cldeacdi, data = dat))
Run Code Online (Sandbox Code Playgroud)

我收到以下消息:

Error in `$<-.data.frame`(`*tmp*`, cldearesid, value = c(-0.18608488908881,  : 
  replacement has 366 rows, data has 367
Run Code Online (Sandbox Code Playgroud)

我搜索了这个错误,但找不到任何可以解决这个问题的东西.另外,我为妈妈的EA创建了完全相同的代码,它保存了残差,没有错误.如果有人能帮我解决这个问题,我将不胜感激.

regression r lm

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

在lm lapply调用列表中使用权重参数

这是我的问题(虚构数据,以便可重现):

set.seed(42)
df<-data.frame("x"=rnorm(1000),"y"=rnorm(1000),"z"=rnorm(1000))
df2<-data.frame("x"=rnorm(100),"y"=rnorm(100),"z"=rnorm(100))
breaks<-c(-1000,-0.68,-0.01315,0.664,1000)
divider<-cut(df$x,breaks)
divider2<-cut(df2$x,breaks)
subDF<-by(df,INDICES=divider,data.frame)
subDF2<-by(df2,INDICES=divider2,data.frame)
reg<-lapply(subDF,lm,formula=x~.)
pre<-lapply(1:4,function(x){predict(reg[[x]],subDF2[[x]])})
lapply(1:4,function(x){summary(reg[[x]])$r.squared})
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常.我正在做的是:根据值x,我分成df4个数据帧并对每个数据帧进行回归,以便能够预测其他数据集的值.数据帧的分割是为了更好地预测,因为范围对x实际数据有很大影响.

我想要做的是为回归添加权重参数,以更加重视最新数据.我的权重参数是:weights<-0.999^seq(250,1,by=-1)如果有250个数据.种子为42,之前的断裂,所有4个维度都是250.

当我尝试做的时候reg<-lapply(subDF,lm,formula=x~.,weights=0.999^seq(250,1,by=-1)),我收到了这个错误:

Error in eval(expr, envir, enclos) : 
  ..2 used in an incorrect context, no ... to look in
Run Code Online (Sandbox Code Playgroud)

这是一个很奇怪,因为lapply有一个...参数,在这里使用formula但它不接受weights.

所以我真的不知道如何添加这些权重.我应该在我的代码中纠正什么,或者我(几乎)完全改变它以便能够使用权重?

对于该示例并且为了使它(可能)更容易,我剪切了断点以使4个子集具有相同的维度,但理想情况下,即使4个子集不具有相同的维度,所以答案也将起作用(因此,breaks<-c(-1000,-0.75,0,0.75,1000)对于实例)

CrossValidated上的这篇文章有着相同的问题,但没有一个有效的解决方案,所以这对我没有帮助.

r lapply lm

8
推荐指数
2
解决办法
194
查看次数

在不同变量上运行 lm 的函数

我想创建一个函数,该函数可以在给定数据集中的不同变量上运行回归模型(例如使用 lm)。在这个函数中,我将指定我正在使用的数据集、因变量 y 和自变量 x 作为参数。我希望这是一个函数而不是循环,因为我想在脚本的各个地方调用代码。我的天真函数看起来像这样:

lmfun <- function(data, y, x) {
  lm(y ~ x, data = data)
}
Run Code Online (Sandbox Code Playgroud)

该函数显然不起作用,因为 lm 函数无法将 y 和 x 识别为数据集的变量。

我做了一些研究并偶然发现了以下有用的小插图:使用 dplyr 编程。小插图为我面临的类似问题提供了以下解决方案:

df <- tibble(
  g1 = c(1, 1, 2, 2, 2),
  g2 = c(1, 2, 1, 2, 1),
  a = sample(5),
  b = sample(5)
)

my_sum <- function(df, group_var) {
  group_var <- enquo(group_var)
  df %>%
    group_by(!! group_var) %>%
    summarise(a = mean(a))
}
Run Code Online (Sandbox Code Playgroud)

我知道 lm 不是 dplyr 包中的一个函数,但想提出一个与此类似的解决方案。我尝试了以下方法:

lmfun <- function(data, …
Run Code Online (Sandbox Code Playgroud)

r lm quosure

8
推荐指数
1
解决办法
496
查看次数

标签 统计

lm ×10

r ×10

regression ×4

linear-regression ×2

r-factor ×2

ggplot2 ×1

lapply ×1

matrix ×1

quosure ×1