拟合具有多个 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 的线性模型 的相关文章

  • 如何获得 STAN 中最大似然估计的标准误差?

    我在 Stan 中使用最大似然优化 但不幸的是optimizing 函数不报告标准错误 gt MLb4c lt optimizing get stanmodel fitb4c data win data init inits STAN OP
  • 替换列表列表中的元素

    The applyR 中的函数是简化 for 循环以获得输出的好方法 是否有一个等效的函数可以帮助人们在替换向量的值时避免 for 循环 通过示例可以更好地理解这一点 Take this list for example x list li
  • 将命名参数列表传递给函数?

    我想编写一个小函数来从适当的分布生成样本 例如 makeSample lt function n dist params values lt makeSample 100 unif list min 0 max 10 values lt m
  • 基于另一个数据集获取数据集的子集

    假设我有一个数据集 即 dat1 ID block plot SPID TotHeight 1 1 1 4 44 5 2 1 1 4 51 3 1 1 4 28 7 4 1 1 4 24 5 5 1 1 4 27 3 6 1 1 4 20
  • 如何对同一列上的数据帧列表中的所有数据帧进行排序?

    我有一个数据框列表dataframes list 举个例子 我把dput dataframes list 在底部 我想对列列表中的所有数据框进行排序enrichment 我可以对一个数据框进行排序 first dataframe lt da
  • 如何从 R 运行带有特定模块的 perl 脚本?

    我可以从终端运行 perl 脚本 myperlscript pl 没有任何问题 但是 如果我尝试从 RStudio 中运行相同的 perl 脚本 则会出现以下错误 command lt myperlscript pl outputfile
  • R foreach问题(某些进程返回NULL)

    我遇到了问题foreach我正在 R 中使用的程序的一部分 该程序用于运行不同参数的模拟 然后将结果返回到单个列表 然后用于生成报告 当并非所有分配的模拟运行都在报告上实际可见时 就会出现问题 从各方面来看 似乎只有分配的运行的一个子集实际
  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0
  • kernlab 中 SVM 训练之外的核矩阵计算

    我正在开发一种新算法 该算法可以生成修改后的核矩阵以用于 SVM 训练 但遇到了一个奇怪的问题 出于测试目的 我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型 例如 Model with kernelMatri
  • R独特的列或行与NA无可比拟

    有谁知道如果incomparables的论证unique or duplicated 曾经被实施过incomparables FALSE 也许我不明白它应该如何工作 无论如何 我正在寻找一个巧妙的解决方案 以仅保留与另一列相同的唯一列 或行
  • API 请求和curl::curl_fetch_memory(url, handle = handle) 中的错误:SSL 证书问题:证书已过期

    几天前 我运行了代码几个月 没有任何问题 GET url myurl query 今天我遇到一个错误 Error in curl curl fetch memory url handle handle SSL certificate pro
  • Purrr::map_df() 删除 NULL 行

    使用时purrr map df 我偶尔会传递一个数据框列表 其中一些项目是NULL 当我做 map df 返回行数少于原始列表的数据框 我想发生的事情是这样的map df calls dplyr bind rows 它忽略了NULL价值观
  • 将每列的值乘以 R 中另一个 data.frame 中的权重

    我有两个data frames df and weights 代码如下 df看起来像这样 id a b d EE f 1 this 0 23421153 0 02324956 0 5457353 0 73068586 0 5642554 2
  • ggplot2 geom_密度和geom_histogram在一个图中

    如何制作一个所有条形加起来为 1 的直方图 并在适合的上方添加一个密度层 set seed 1234 df lt data frame sex factor rep c F M each 200 weight round c rnorm 2
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • 基于时间窗口的不规则时间序列的优化滚动函数

    有没有办法使用 rollapply 来自zoo包或类似的东西 优化功能 rollmean rollmedian等 使用基于时间的窗口计算滚动函数 而不是基于大量观察的函数 我想要的很简单 对于不规则时间序列中的每个元素 我想计算一个具有 N
  • 文本挖掘 pdf 文件/词频问题

    我正在尝试挖掘一篇具有丰富 pdf 编码和图表的文章的 pdf 我注意到 当我挖掘一些 pdf 文档时 我得到的高频词是 phi taeoe toe sigma gamma 等 它与某些 pdf 文档配合良好 但与其他文档配合使用时却得到这
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集

随机推荐

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