Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从R中的lm提取标准化系数_R_Regression_Lm_Beta_Standardized - Fatal编程技术网

从R中的lm提取标准化系数

从R中的lm提取标准化系数,r,regression,lm,beta,standardized,R,Regression,Lm,Beta,Standardized,我为这个愚蠢的问题道歉…但我似乎找不到一个简单的解决办法 我想从拟合线性模型中提取标准化系数(在R中) 必须有一个简单的方法或功能来做到这一点。你能告诉我是什么吗 编辑(以下是一些评论): 关于我的问题,我应该提供更多的上下文信息。我在为一群心理学家讲授一个介绍性的R工作坊。对于他们来说,没有能力获得标准化系数的线性模型就好像根本没有运行模型一样(好吧,这有点夸张,但你明白了)。当我们做了一些回归时,这是他们的第一个问题,这(我的错)是我没有预料到的(我不是心理学家)。当然我可以自己编程,当然我

我为这个愚蠢的问题道歉…但我似乎找不到一个简单的解决办法

我想从拟合线性模型中提取标准化系数(在R中) 必须有一个简单的方法或功能来做到这一点。你能告诉我是什么吗

编辑(以下是一些评论): 关于我的问题,我应该提供更多的上下文信息。我在为一群心理学家讲授一个介绍性的R工作坊。对于他们来说,没有能力获得标准化系数的线性模型就好像根本没有运行模型一样(好吧,这有点夸张,但你明白了)。当我们做了一些回归时,这是他们的第一个问题,这(我的错)是我没有预料到的(我不是心理学家)。当然我可以自己编程,当然我也可以寻找为我编程的软件包。但同时,我确实认为这是线性模型的一种基本和常见的必需功能,我认为应该有一个基本功能,它不需要安装越来越多的软件包(这对于初学者来说是一个困难)。所以我问(这也是一个向他们展示如何在他们需要帮助时获得帮助的机会)


对于那些认为我问了一个愚蠢的问题的人,我深表歉意,对于那些花时间回答这个问题的人,我深表感谢。

QuantPsyc
软件包中有一个方便的函数,名为
lm.beta
。然而,我认为最简单的方法就是将变量标准化。然后,系数将自动成为标准化的“β”系数(即标准偏差系数)

比如说,

 lm(scale(your.y) ~ scale(your.x), data=your.Data)
women2 <- lapply(women, scale) # standardizes all variables

mod3 <- lm(weight ~ height, data=women2)
coef_alt <- coef(mod3)[2]
coef_alt
> height 
  0.9955 

all.equal(coef_lmbeta, coef_alt)
[1] TRUE
将给你标准化系数

它们真的是一样的吗?以下说明两者是一样的:

library("QuantPsyc")
mod <- lm(weight ~ height, data=women)
coef_lmbeta <- lm.beta(mod)

coef_lmbeta
> height 
  0.9955 

mod2 <- lm(scale(weight) ~ scale(height), data=women)
coef_scale <- coef(mod2)[2]

coef_scale
> scale(height) 
  0.9955 

all.equal(coef_lmbeta, coef_scale, check.attributes=F)
[1] TRUE
如何方便地标准化多个变量?如果您不想标准化数据集中的所有变量,您可以选择公式中出现的所有变量。例如,现在参考
mtcars
-数据集(因为
女性
只包含
身高
体重
):

假设以下是我要估计的回归模型:

 modelformula <- mpg ~ cyl + disp + hp + drat + qsec
我们可以使用它对数据集进行相应的子集划分。比如说,

mycars <- lapply(mtcars[, all.vars(modelformula)], scale) 
这是因为当您仅从标准数据帧中提取一列时,R将重新生成一个向量而不是数据帧
drop=F
将防止这种情况发生。如果使用了例如
tibbles
,这也不会成为问题。见例

class(mtcars[, "mpg"])
[1] "numeric"
class(mtcars[, "mpg", drop=F])
[1] "data.frame"
library(tidyverse)
class(as.tibble(mtcars)[, "mpg"])
[1] "tbl_df"     "tbl"        "data.frame"
数据帧中缺少值的另一个问题(注释中的积分再次转到@JerryT):默认情况下,R的
lm
删除至少缺少一列的所有行<另一方面,“代码>比例”将采用所有未缺失的值,即使观测值在不同的列中缺失值。如果要模拟
lm
的操作,可以先删除所有缺少值的行,如下所示:

all_complete <- complete.cases(df)
df[all_complete,]
all_complete只需使用
colnames(data)
lapply
sapply

例如:

lapply(data[, colnames(data)], scale)

Package
lm.beta
有几个用于标准化系数的函数,包括
lm.beta()
,它需要一个
lm
对象:

res <- lm(y~x)
lm.beta(res) 

res试试这个我喜欢的函数
stdcoeff。它将输入变量重新调整为标准偏差的两倍,以便于解释。它的
标准化
功能可以在
arm
软件包中找到。@CarlWitthoft,您在帮助文件的哪里看到这个问题的解决方案?不管@davidernburg的评论还是下面的
QuantPsyc::lm.beta
答案是正确的,这取决于OP所说的“标准化”(他们没有具体说明)oops是什么意思,实际上我对“几个定义”的理解是错误的——对不起。我读@DavidArenburg的评论读得太快了(我不记得
lm
在那里存储了模型框架);他的评论与
QuantPsyc::lm.beta
whut evvarrr.中的内部代码相同。。很抱歉在这里发牢骚。请注意,这或多或少就是
arm::standarding
所做的(尽管它提供了一些灵活性,以确定响应是否按比例缩放,并使用假人进行一些更为奇特/非标准的操作,用于分类预测)。
lm.beta
方法的优点是它不需要重新拟合模型。标准化多个变量的
dplyr
替代方法是:
mycars%mutate\u each(funs(scale),all.vars(model.formula))
,我相信。确保在scale之前删除na(如果缺失),lappy(mtcars[,all.vars(modelformula),drop=F],scale)如果modelformula中只有一个变量,那么还有一个lm.beta包,它执行以下操作:same@coffeinjunky你在这里是一位非常出色的老师,并且解释得非常好。我认为Lappy应用了按列缩放,所以例如,cyl在第1行有NA,disp在第2行有NA。当一个人做lm时,第1行和第2行都会因为NA而被删除,但是scale只会删除cyl的第1行,disp的第2行。所以我认为最好在scale之前删除na,以与lm的na.action(假设na.exclude或na.omit)@JerryT Fair point保持一致。我没想过!感谢您的解释。将在短时间内更新!如果您的任何输入都不是标量,这将非常不方便。
lapply(data[, colnames(data)], scale)
res <- lm(y~x)
lm.beta(res)