问题标签 [glm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 将多个 glm 图导出为 PNG?
所以,
我正在尝试导出我的线性模型的图。当我将其作为 PDF 进行时,PDF 有四页和四个不同的图表。当我导出为 PNG 时,我只得到第一个图表。如何导出以便将所有四个图形作为单独的 PNG 文件获取?
对 PDF 有效的方法:
什么不适用于 PNG(并且花了两个小时在互联网上和情节文档中挖掘无济于事):
如何获取我的图像?
谢谢,
-Wm
r - 从 glm 中提取标准错误
我做了一个glm
,我只想提取每个系数的标准误差。我在互联网上看到了这个功能se.coef()
,但它不起作用,它返回"Error: could not find function "se.coef""
。
r - 尽管指定了随机效应,但 nlme 错误“组的公式无效”
我已经对此进行了一些搜索,但是我发现的邮件列表帖子与未指定随机效果的人相关联,nlme
而我已经这样做了。我还拥有 Pinheiro 和 Bates 所著的《S 和 S-Plus 中的混合效应模型》一书,但无法从书中解决我的问题。
我仍在进行营养数据分析,现在已经转向真实数据。数据来自一项人口调查,并采用重复测量设计,因为每个受访者都有两次 24 小时的营养素摄入量召回。
我已经成功地将 lme4 模型拟合到我的数据中,现在我试图找出如果我使用非线性方法会发生什么。我的数据快照如下:
关于数据的摘要信息是:
使用该lme4
软件包,我已经成功地拟合了一个线性混合效应模型(随机效应来自受试者,IntakeDay
是与 相关的重复测量因子BoxCoxXY
,它是 的变换IntakeAmt
):
我一直在尝试使用该nlme
包来查看拟合非线性模型来比较两者,但我无法让我的语法正常工作。我最初的问题是我的数据似乎没有相关的 SelfStart 模型,所以我过去常常geeglm
生成起始值(保存到名为 的数据框的系数Male.nlme.start
)。但现在我得到了错误:
我无法弄清楚我做错了什么,nlme
我使用的语法是:
无论是否包含在整体模型规范中,我都尝试过分析RespondentID
,这似乎没有影响。
我试图坚持使用非线性方法的原因是 SAS 中的原始分析使用了非线性方法。虽然从 lme 分析来看,我的残差等看起来不错,但我很想知道非线性方法会产生什么影响。
如果有帮助,traceback()
最后一次分析尝试的结果包括RespondentID
:
谁能建议我哪里出错了?我开始怀疑是否(1)有太多因素级别RespondentID
无法使用,nlme
或者(2)该方法只有在我为 提供开始参数时才有效RespondentID
,这对于我拥有的数据来说似乎是荒谬的,因为这是我的主题标识符。
更新:回答 Ben,SASnlmixed
模型是固定效应的一般对数似然函数:
在哪里:
Scale
geeglm
= 来自和的色散值
Lambda.Value
= 与先前用于通过公式boxcox()
转换IntakeAmt
为的最大对数似然输出相关联的 lambda 值BoxCoxXY
Male.Data$BoxCoxXY <- (Male.Data$IntakeAmt^Lambda.Value-1)/Lambda.Value
SAS代码中的random
语句是:
所以模型中有两个误差项,它们都适合作为随机效应。第二个方括号表示按行顺序列出的随机效应方差矩阵的下三角形,并使用 SAS 语法中的 SAS 宏变量指定。
我得到的模型摘要是正常的单行概述,显示协变量矩阵 (BX) 加上一个误差分量,所以这里没有太多帮助。
第二次更新:我意识到我没有删除与女性受试者相关的 RespondentID 级别,因为我在将 RespondentID 分解为整个数据框之前按性别拆分为单独的数据框以进行分析。nlme
在删除 RespondentID 的未使用因子水平后,我重复了分析,我得到了同样的错误。结果lmer
是一样的——很高兴知道。:)
r - 如何通过观察提取 lmer 固定效应?
我有一个 lme 对象,由一些重复测量的营养摄入数据构成(每个 RespondentID 有两个 24 小时摄入期):
我可以RespondentID
使用ranef(Male.lme1)
. 我还想通过 收集固定效果的结果RespondentID
。coef(Male.lme1)
不完全提供我需要的东西,如下所示。
我已将拟合结果附加到我的数据中,head(Male.Data)
显示
前几行coef(Male.lme1)
是:
为了演示coef
结果如何与 Male.Data 中的拟合估计值相关(使用Male.Data$lmefits <- fitted(Male.lme1)
,对于具有 AgeFactor 级别 9-13 的第一个 RespondentID 抓取: - 拟合值是15.22633
,它等于 - 来自 coeffs -(Intercept) + (AgeFactor9-13) = 14.28304 + 0.9432941
是否有一个聪明的命令可供我使用,它会自动想要我想要的,即提取每个受试者的固定效应估计值,或者我是否面临一系列if
试图将正确的 AgeFactor 级别应用于每个受试者以获得的语句在从截距中扣除随机效应贡献后,正确的固定效应估计?
更新,抱歉,试图减少我提供的输出并忘记了 str()。输出是:
未使用 BodyWeight 和 Gender(这是男性数据,因此所有 Gender 值都相同),并且 NutrientID 对数据同样是固定的。
自从我发布以来,我一直在做可怕的 ifelse 声明,所以会立即尝试你的建议。:)
更新 2:这与我当前的数据完美配合,并且应该是新数据的未来证明,感谢 DWin 在评论中提供的额外帮助。:)
r - R 中的 Bigglm:源代码的限制和改进(例如调用 Fortran)
我最近一直在使用 R 在 100 mb csv 文件(900 万行 x 5 列)上运行广义线性模型(GLM)。该文件的内容包括 5 列,称为 depvar、var1、var2、var3、var4,并且都是随机分布的,因此这些列包含的数字是 0,1 或 2。基本上我使用 biglm 包来运行 GLM这个数据文件和 R 在大约 2 分钟内处理了这个。这是在使用 R 版本 2.10(我目前正在更新到 2.14)、4 核和 8 GB RAM 的 linux 机器上。基本上我想在 30 到 60 秒左右更快地运行代码。一种解决方案是添加更多内核和 RAM,但这只是一个临时解决方案,因为我意识到数据集只会变得更大。理想情况下,我想找到一种方法让 bigglm 的代码更快。我在数据集上运行了一些 R 分析代码。
然后在输入此命令后,我编写了如下所示的 bigglm 代码:
运行这些代码大约需要 2 到 3 分钟后,我键入以下内容来查看我的分析代码:
然后我得到的是 bigglm 过程的细分以及哪些单独的行需要很长时间。在查看此内容后,我惊讶地发现调用 fortran 代码需要很长时间(大约 20 秒)。此代码可以在 Bigglm 的基本文件中找到:
在 bigglm 0.8.tar.gz 文件中
基本上我要问社区的是,这段代码可以做得更快吗?例如通过更改代码来调用 Fortran 代码来进行 QR 分解。此外还有其他函数,如 as.character 和 model.matrix 也需要很长时间。我没有在此处附加分析文件,因为我相信根据我提供的信息可以轻松复制它,但基本上我是在暗示大数据的大问题并在此大数据上处理 GLM。这是 R 社区共享的一个问题,我认为任何反馈或帮助将不胜感激。您可能可以使用不同的数据集轻松复制此示例,并查看 bigglm 代码中花费了这么长时间的内容,看看它们是否与我发现的相同。如果是这样,有人可以帮我弄清楚如何让 bigglm 运行得更快。在 Ben 请求之后,我上传了我拥有的分析代码片段以及我的 csv 文件的前 10 行:
这个 CSV 输出是从我的文本编辑器 UltraEdit 复制的,可以看出 var1 取值 0 或 1,var2 取值 0 和 1,var3 取值 0,1,2,var4 取值 0,1, 2,3 和 depvar 取值 1 或 0。此 csv 可以使用 RAND 函数在 excel 中复制最多约 100 万行,然后可以复制和粘贴多次以在文本编辑器中获得大量行像超编辑。基本上将 RAND() 键入一列以获得 100 万列,然后在 RAND() 列旁边的列中进行舍入(列)以获得 1 和零。同样的想法适用于 0,1,2,3。
分析文件很长,所以我附上了花费最多时间的行:
我主要对调用 Fortran 的 .Call 函数感到惊讶。可能我没看懂。一旦使用此功能,似乎所有计算都已完成。我认为这就像一个用于提取 Fortran 代码的链接函数。此外,如果 Fortran 正在完成所有工作以及所有迭代加权最小二乘/QR,那么为什么其余代码要花这么长时间。
r - 是否可以仅使用响应变量拟合线性模型?
如果我这样做,我会得到两个系数(截距和年份)
但正确答案是 0.944
有没有办法为响应变量指定 glm 公式?如果我对第一个数据框使用第二个公式,我会得到错误的答案,因为“。” 还包括“年”。在第二个数据框中,我在作弊,因为只有一列。
r - 逻辑回归 - glm 中的 cbind 命令
我在 R 中进行逻辑回归。有人可以澄清运行这两条线的区别是什么吗?
数据如下所示:(注意:响应是二进制的。0=Die 1=Not die)
r - 绘制概率方程
我运行了一个 logit 模型并试图绘制概率曲线。我在这里发布问题而不是统计板,因为它更像是一个 R 问题而不是统计数据,或者至少我是这样认为的。
我的模型看起来像:
Status1
是一个有两个级别的因子,our_bid
范围从 0 到 20,状态是 11 个级别(人口最多的 10 个,其他的一个),类型有三个级别。
为了获得预测的概率,我运行了以下代码
当我尝试绘制曲线时会出现问题。在给定模型的情况下,我试图为我们的出价变化提供一般曲线。
我是否必须在 plot 命令中指定所有自变量?我究竟做错了什么?
math - 如何向量化方程?
在观看了 Andrew Ng 教授关于 GLM 的讲座后,我正在尝试实现 Softmax 回归算法来解决 K 分类器问题。我以为我理解了他所说的一切,直到最终编写代码来实现 Softmax 回归的成本函数,如下所示:
我遇到的问题是试图找出一种将其矢量化的方法。我再次认为我了解如何对这样的方程进行矢量化,因为我能够为线性和逻辑回归做到这一点,但是在查看了该公式之后,我被卡住了。
虽然我很想为此找到一个矢量化解决方案(我意识到已经发布了一个类似的问题:Softmax Regression 的矢量化实现),但我更感兴趣的是你们中的任何人是否可以告诉我一种方式(你的方式)有条不紊地将这样的方程转换为矢量化形式。例如,对于那些是 ML 专家或经验丰富的老手,当您第一次阅读文献中的新算法,并看到它们以与上述等式相似的符号编写时,您如何将它们转换为矢量化形式?
我意识到我可能会像那个问莫扎特的学生一样,“你怎么弹得这么好?” 但我的问题只是出于对这种材料变得更好的渴望,并假设并非每个人都生来就知道如何向量化方程,所以肯定有人设计了他们自己的系统,如果是这样,请分享!提前谢谢了!
干杯
r - 在 R 中,使用 binomial() 和 lapply 将 predict() 值限制在 0 和 1 之间
我有一个 GLM,family=binomial(link=logit) 模型,我在 predict() 函数中应用,如下所示。预测值超出零和 1,但我想将它们保留为概率。所以我使用了 binomial()$inverse 命令,然后可以在 apply 函数中使用该命令。
这在我第一次运行时工作得很好,但是在关闭 R 并重新启动后,我现在收到此错误:
我已经为此苦苦挣扎了好几个小时,因为这段代码通常可以工作。有谁知道我做错了什么?有没有更好的方法来做到这一点?
我的代码如下。我也尝试过其他变体,但无法正常工作。