【发布时间】: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 <- cbind(1,x)来创建一个包含截距项的设计矩阵。 -
@Mnel,我认为这就是我在下面的简化解决方案中所建议的。