拟合具有多个 LHS 的线性模型

2023-12-29

我是 R 新手,我想用以下脚本来改进*apply函数(我读过apply,但我无法使用它)。我想用lm多个自变量(数据框中的列)的函数。我用了

for (i in (1:3) {
  assign(paste0('lm.',names(data[i])), lm(formula=formula(i),data=data))
  } 

Formula(i)定义为

formula=function(x)
{
  as.formula ( paste(names(data[x]),'~', paste0(names(data[-1:-3]), collapse = '+')), env=parent.frame() )
}

谢谢。


如果我没有理解错的话,您正在使用这样的数据集:

set.seed(0)
dat <- data.frame(y1 = rnorm(30), y2 = rnorm(30), y3 = rnorm(30),
                  x1 = rnorm(30), x2 = rnorm(30), x3 = rnorm(30))

x1, x2 and x3是协变量,并且y1, y2, y3是三个独立的响应。您正在尝试拟合三个线性模型:

y1 ~ x1 + x2 + x3
y2 ~ x1 + x2 + x3
y3 ~ x1 + x2 + x3

目前您正在使用循环y1, y2, y3,每次拟合一个模型。您希望通过替换来加快该过程for循环与lapply.

你走错了路。 lm()是一项昂贵的操作。只要你的数据集不小,成本for循环可以忽略不计。更换for循环与lapply没有带来任何性能提升。

由于您具有相同的 RHS(~)对于所有三个模型,模型矩阵对于三个模型是相同的。因此,所有模型的 QR 分解只需进行一次。lm允许这样做,并且您可以使用:

fit <- lm(cbind(y1, y2, y3) ~ x1 + x2 + x3, data = dat)
#Coefficients:
#             y1         y2         y3       
#(Intercept)  -0.081155   0.042049   0.007261
#x1           -0.037556   0.181407  -0.070109
#x2           -0.334067   0.223742   0.015100
#x3            0.057861  -0.075975  -0.099762

如果你检查str(fit),您会看到这不是三个线性模型的列表;相反,它是一个具有单个线性模型$qr对象,但具有多个 LHS。所以$coefficients, $residuals and $fitted.values是矩阵。除了通常的“lm”类之外,生成的线性模型还有一个附加的“mlm”类。我创建了一个特殊的mlm /questions/tagged/mlm标签收集有关该主题的一些问题,并按其总结tag wiki https://stackoverflow.com/tags/mlm/info.

如果您有更多协变量,您可以使用以下方法避免键入或粘贴公式.:

fit <- lm(cbind(y1, y2, y3) ~ ., data = dat)
#Coefficients:
#             y1         y2         y3       
#(Intercept)  -0.081155   0.042049   0.007261
#x1           -0.037556   0.181407  -0.070109
#x2           -0.334067   0.223742   0.015100
#x3            0.057861  -0.075975  -0.099762

Caution:不要写

y1 + y2 + y3 ~ x1 + x2 + x3

这将治疗y = y1 + y2 + y3作为单个响应。使用cbind().


跟进:

我对概括感兴趣。我有一个数据框df,其中首先n列是因变量(y1,y2,y3,....)接下来m列是自变量(x1+x2+x3+....). For n = 3 and m = 3 it is fit <- lm(cbind(y1, y2, y3) ~ ., data = dat))。但是如何通过使用结构来自动执行此操作df。我的意思是像(for i in (1:n)) fit <- lm(cbind(df[something] ~ df[something], data = dat))。我用它创造的“东西”paste and paste0。谢谢。

因此,您正在对公式进行编程,或者想要在循环中动态生成/构造模型公式。有很多方法可以做到这一点,并且许多 Stack Overflow 问题都与此有关。通常有两种方法:

  1. use reformulate https://stackoverflow.com/q/12967797/4891738;
  2. use paste / paste0 and formula / as.formula.

我更喜欢reformulate然而,为了简洁,它不支持公式中的多个 LHS。如果要改造LHS还需要一些特殊处理 https://stackoverflow.com/q/26374106/4891738。所以在下面我会使用paste解决方案。

为您提供数据框df,你可以这样做

paste0("cbind(", paste(names(df)[1:n], collapse = ", "), ")", " ~ .")

一个更好看的方法是使用sprintf and toString构建 LHS:

sprintf("cbind(%s) ~ .", toString(names(df)[1:n]))

这是一个使用的示例iris数据集:

string_formula <- sprintf("cbind(%s) ~ .", toString(names(iris)[1:2]))
# "cbind(Sepal.Length, Sepal.Width) ~ ."

您可以将此字符串公式传递给lm, as lm会自动将其强制转换为公式类。或者你可以使用自己进行强制formula (or as.formula):

formula(string_formula)
# cbind(Sepal.Length, Sepal.Width) ~ .

Remark:

R 核心的其他地方也支持这个多重 LHS 公式:

  • 函数的公式法aggregate https://stackoverflow.com/q/41075121/4891738;
  • 方差分析aov https://stackoverflow.com/q/51937380/4891738.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拟合具有多个 LHS 的线性模型 的相关文章

  • 如何在 R 中为回归量创建“宏”?

    对于长且重复的模型 我想创建一个 宏 在 Stata 中称为 宏 并通过以下命令完成 global var1 var2 其中包含回归量的模型公式 例如来自 library car lm income education prestige d
  • rpart是自动剪枝吗?

    Is rpart自动修剪 生成的决策树rpart比具有自动修剪功能的 Oracle Data Mining 生成的级别要多得多 否 但拟合函数的默认值可能会 提前 停止分割 对于 早期 的某些定义 See rpart control对于您可
  • 在 Shiny 中叠加两个 ggplot

    我有一个非常大的数据集 我正在使用 ggplot 在 Shiny 上绘制它 我有一个与 x 轴上的值相关联的滑块 我想用它对选定的数据子集重新着色 并让其余数据保持原样 最简单的选择是重新创建整个绘图 但由于它是一个大型数据集 因此这是一个
  • R闪亮主面板显示样式和字体

    我正在学习闪亮的应用程序 并且有一些关于调整布局的基本问题 特别是样式和字体 希望得到指点或明确的答案 谢谢 考虑一个基本的输入输出应用程序 用户在 sidebarPanel 中输入数据 然后在 mainPanel 中反应性地输出结果 如何
  • R data.table 多个条件连接

    我设计了一种解决方案 用于从两个单独数据表的多个列中查找值 并添加基于新列的值计算 多个条件比较 代码如下 它涉及在计算两个表中的值时使用 data table 和联接 但是 这些表没有联接在我正在比较的列上 因此我怀疑我可能无法获得 da
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • 空间数据xyz到矩阵

    我有一个大数据框 100 000 行 其中包含 LON LAT VALUE 我想将其转换为矩阵 EPSG 中的坐标 3035 我使用以下命令尝试了 reshape2 包 acast df lon lat value var value 效果
  • R参考类问题

    我正在尝试在 R 中创建一个简单的参考类 这是我的代码 R 初学者 MyClass lt setRefClass MyClass fields list a numeric b numeric methods list initialize
  • 函数“[<-”将_替换_一个元素,但不会追加_元素_

    我在使用时注意到以下几点 lt 我成功于替换元素但不位于追加向量的一个元素 例子 VarX lt integer VarX 1 lt 11 lt VarX 2 22 VarX 1 11 Expected the value of VarX
  • R data.table 1.9.2 关于 setkey 的问题

    这似乎是 1 8 10 后引入的一个错误 与包含列表的 DT 的 setkey 相关 运行下面两个代码来查看问题 library data table dtl lt list dtl 1 lt data table scenario 1 p
  • 如何确定 R 包的作者?

    如何确定包的作者是谁 鉴于我们拥有这个广泛使用的代码库 我认为参考我在分析中使用的软件是合适的 有没有办法以编程方式检索作者和任何其他相关信息 在伪代码中 我想执行以下操作 references base 我怎样才能做到这一点 为了能够引用
  • R 编程常用工具

    如果已经以不同的方式问过这个问题 我深表歉意 但我找不到任何达到我想要的东西 我真的是从其他软件包 SPSS 开始接触 R 的 当我了解真正可以做什么时 我意识到我还需要其他 工具 这让我想到了我的问题 您有哪些用于开发 R 代码的设置 我
  • 如何在 R 中将字符串解析为层次结构或树

    有没有办法将表示组的字符串解析为 R 中的层次结构 假设我的小组结构如下 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 3 1 1 3 1 1 1 3 2 1 1 3 3 1 2 1 2 1 1 2 1 1 1 2 1 2 1
  • ValueError:不支持连续[重复]

    这个问题在这里已经有答案了 我正在使用 GridSearchCV 进行线性回归的交叉验证 不是分类器也不是逻辑回归 我还使用 StandardScaler 对 X 进行标准化 我的数据框有 17 个特征 X 和 5 个目标 y 观察 约11
  • 合并数据框而不重复行

    我想合并两个数据框 但如果有多个匹配项 则不想重复行 相反 我想总结一下那天的观察结果 来自 合并 提取两个数据框中与指定列匹配的行并将其连接在一起 如果有多个匹配项 则所有可能的匹配项各贡献一行 这是一些示例代码 days lt as d
  • 按特定样本前缀对列名称向量进行子集化

    假设我有一个如下所示的数据框 ca01 lt c 1 10 ca02 lt c 2 11 ca03 lt c 3 12 stuff 1 lt rep test 10 other lt rep 9 10 data lt data frame
  • RStudio 如何确定控制台宽度,为什么它似乎总是出错?

    我刚刚发现wid lt options width在 RStudio 中 它似乎是我日常控制台使用中令人烦恼的根源 或者更确切地说 更接近根源 我应该先说一下 我目前使用的是 R 3 2 2 RStudio 0 99 491 Linux M
  • 如何绘制堆积比例图?

    我有一个数据框 x lt data frame id letters 1 3 val0 1 3 val1 4 6 val2 7 9 id val0 val1 val2 1 a 1 4 7 2 b 2 5 8 3 c 3 6 9 我想绘制一个
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor
  • 通过使用 navbarPanel() 并隐藏导航栏构建多页闪亮应用程序用户端(在 ui.R 中)?

    我想构建一个多页闪亮应用程序 我可以在其中控制用户可以看到哪个页面 迪安 阿塔利确实这个演示应用程序中有类似的东西 https github com daattali advanced shiny tree master multiple

随机推荐

  • 在Java中读取IDX文件类型

    我已经用 Java 构建了一个图像分类器 我想针对此处提供的图像进行测试 http yann lecun com exdb mnist http yann lecun com exdb mnist 不幸的是 如果您下载 train imag
  • Jasper 报告导出到 pdf 时出现字体大小问题

    我正在使用 Jaspersoft Studio 5 6 它在 Jaspersoft Studio 的设计视图中正确显示 在预览视图中 它也可以正确显示 使用 java 或 pdf 当我从 Java 应用程序执行报告时 三个文本以相同的大小显
  • jQuery 自动完成中未定义的结果

    所以我已经运行了最新版本的 jQuery 和 UI 我正在使用基本的自动完成调用并返回有效的 JSON 通过 JSONLint 验证 input cust id autocomplete source yoda app base asset
  • 为什么我没有 keras.applications 模块?

    from scipy misc import imsave import numpy as np import time from keras applications import vgg16 from keras import back
  • Android:当我启动新活动并按返回返回到它时,列表视图会自我复制

    我有两个列表视图 它们是视图寻呼机选项卡中的片段 当您单击列表视图中的项目时 它会启动一个新活动 但是 当我按后退按钮返回到选项卡式列表视图时 列表视图已加倍 如果我打开活动并再次返回 它会再次加倍 并且它将继续这样做 另外 我还有另一个带
  • Python括号约定[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 应用程序提交:无效的二进制文件 - 无效的签名

    我正在尝试向 iOS 应用商店提交更新 我将从 Buzztouch 应用程序转到 Sprite Kit 应用程序 我能够存档 Xcode 项目并提交 该应用程序进入 上传已接收 状态 但大约一分钟后 它更改为 无效二进制文件 我收到一封电子
  • 如何使用 ggplotly - R 使散点图点打开超链接

    我想让我的散点图点可单击 并在单击时打开每个点各自的超链接 我正在尝试使用 ggplotly 来做到这一点 使用plotly 构建绘图时有一个简单的方法可以做到这一点 请参见下面的第一个示例 但是 当我在 ggplotly 上运行它时 单击
  • 用于报告和日常交易的数据库

    我有一个保存大量数据的系统 使用的数据库是SQL Server 其中一张表大约有 300000 行 而且这种大小的表数量相当多 该表会定期更新 我们将其称为发生事务的 事务数据库 现在 我们需要实现报告功能 一些架构师提出了一个不同的数据库
  • ggplot2:在绘图顶部添加辅助变换的 x 轴

    2016 年 4 月编辑 该线程中的解决方案不再正确显示添加的轴 关于此问题的新线程已在以下位置打开ggplot2 2 1 0 破坏了我的代码 辅助变换轴现在显示不正确 https stackoverflow com questions 3
  • 如何解决 Git 存储库中的合并冲突?

    如何解决 Git 存储库中的合并冲突 Try git mergetool 它会打开一个 GUI 引导您解决每个冲突 然后您可以选择如何合并 有时事后需要进行一些手动编辑 但通常本身就足够了 这肯定比手工完成整个事情要好得多 As per 乔
  • 使用 EF Core 填充 DropdownList(来自另一个模型)

    我有2节课 Photos and Albums我需要在我的照片 创建视图中包含相册名称 并为相册名称创建下拉菜单 我的查看照片 创建中的模型是 ImageViewModel 我怎么才能得到它 public class Album publi
  • Python类继承调用顺序

    有一个著名的Python例子 class A object def go self print go A go class B A def go self super B self go print go B go class C A de
  • NLTK(python)中的语料库和词典有什么区别[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有人可以告诉我 a 和 a 之间的区别吗Corpora corpus and lexicon在NLTK 是什么电影数据集 what i
  • 如何强制使用两个 Maven 配置文件中的一个?

    我有一个 Maven 项目 它定义了两个单独的配置文件 developer and release 你肯定明白了 在这里 我希望随时激活这两个配置文件之一 但决不能同时激活两者 如果两者都以某种方式激活 则此构建没有意义并且应该失败 如果两
  • jQuery Ajax GET 和 contentType?

    关于 jQuery ajax 方法 Does contentType当请求本身是一个时 属性就会被计算在内GET要求 例子 ajax type GET url webservices xxx asmx yyy data JSON strin
  • 我应该如何将 after_create 与模型中的条件一起使用

    我有一个在创建对象后调用的方法 after create send welcome email 有没有办法将其限制为某个条件 例如对象的属性值 after create send welcome email unless self role
  • 如何获取 .net 中进程的用户名或所有者

    如何在 C 中找到给定进程的所有者 System Diagnostics Process 类似乎没有任何属性或方法可以让我获得此信息 我认为它必须可用 因为它显示在 Windows 任务管理器的 用户名 列下 我的具体场景涉及查找作为 本地
  • Silverlight 4:HtmlBrush 在哪里?

    这很奇怪 我在 Reflector 中加载 System Windows dll C Program Files x86 Microsoft Silverlight 4 0 50401 0 System Windows dll 并搜索htm
  • 拟合具有多个 LHS 的线性模型

    我是 R 新手 我想用以下脚本来改进 apply函数 我读过apply 但我无法使用它 我想用lm多个自变量 数据框中的列 的函数 我用了 for i in 1 3 assign paste0 lm names data i lm form