【问题标题】:Adding a column to a matrix as part of a function in R将列添加到矩阵作为 R 中函数的一部分
【发布时间】:2013-02-11 05:24:24
【问题描述】:

我是 R 的新手,我第一次尝试创建函数。我正在尝试创建一个函数,它将为我提供回归系数、R 平方和调整后的 R 平方值,其中 x 是值矩阵,y 是向量。我制作基本方程没有问题,但我需要一种方法让函数向 x 矩阵添加一列 1,这样用户就不必把它放进去。换句话说,如果我的函数很好用在矩阵 c(1) 中创建我的第一列,但我希望由函数完成。我知道对此必须有一个非常简单的答案,但我已经尝试了我能想到的一切并查看了许多不同的问题,但我无法弄清楚(因为我对此很陌生,我找到了很多信息关于 R 在线对我来说真的很难理解)。无论如何,非常感谢任何帮助。我将尽我所能回答任何澄清问题。 我一直在使用以下示例数据集/R 函数对其进行测试:

x<-cbind(c(4,6,8,10),c(5,3,6,7))

y<-c(2,6,9,4)

fit.lm<-lm(y~x)

summary(fit.lm)

如果我可以添加那一列,我的函数将返回与上述函数相同的值......到目前为止我的代码:

mylm<-function(y,x)

{

betahat<-solve(t(x)%*%x)%*%t(x)%*%y

yhat<-predict(lm(y~x))

Rsquare<-1-((sum((yhat-y)^2))/sum((y-mean(y))^2))

AdjRsquare<-1-((sum((yhat-y)^2))/sum((y-mean(y))^2))%*%((length(y)-1)/(length(y)-length(betahat)))

results<-list(B=betahat,R2=Rsquare,R2A=AdjRsquare)

return(results)

}

mylm(y,x)

【问题讨论】:

  • 如果您使用lm 将模型拟合到您的函数中,为什么要手动计算betahat
  • @HSUstudent 欢迎来到 SO。我猜您正在执行此任务以了解与统计相关的 R 编程。我也做过类似的任务。我可以建议少即是多。你有很多描述问题的文本和函数的代码。您真的不希望我们修复您想要特定任务的功能(有一个堆栈站点)。因此,我建议您提供该任务的最小示例,并提供足够的上下文以使我们了解您要执行的操作。
  • 您的问题措辞不佳。您想要一列全为 1 的列在哪里?制作一个 1 的向量:rep(1,length(vector.of.length.i.want.to.cbind.to))
  • 你可以在你的函数中定义x &lt;- cbind(1,x)来创建一个包含截距项的设计矩阵。
  • @Mnel,我认为这就是我在下面的简化解决方案中所建议的。

标签: r function matrix


【解决方案1】:

这是一个答案,但不能准确回答您的问题。需要一些组装。如果这不能回答您的问题,请重新格式化您的问题:

mylm <- function(x){
    cbind(1, x)
}

mylm(x)

【讨论】:

    猜你喜欢
    • 2019-02-16
    • 2014-09-18
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2021-10-08
    相关资源
    最近更新 更多