【发布时间】:2016-08-25 00:39:56
【问题描述】:
我是 r 的新手(但我主要用 python 编写代码),我正在尝试写下简单线性回归的代码以供我自己理解,我正处于估计 beta1 的阶段
给定一个预测列 x 和一个响应 y 我想用伪代码做:
sum((x[i] - mean(x)) * (y[i] - mean(y)) / sum(x[i] - mean(x))^2
所以在 r 中:
m <- rbind(c(2,3),c(1,2),c(0,3)))
自从我读到 for 循环是魔鬼......我想也许我可以做这样的事情:
beta1 <- function(x, y){
c <- cbind(x,y)
b1 <- apply(c, 2, function(v) v - mean(v))
b1 <- b1[,1] * b1[,2]
b1top <- sum(b1)
b1bottom <- sum((x - mean(x))^2)
b1 <- b1top / b1bottom
return(b1)
}
beta1(m)
[1] 0
现在,抛开实现可能开始错误不谈......有哪些方法可以缩短工作量,就函数内部的代码行而言?
【问题讨论】:
-
您是否正在寻找在 R 中进行计算的最有效方法?还是您的主要目标是改进您已有的代码?
-
@Simon 是这篇文章的一个示例效率,我可以采用并推广到我将要写的其他内容,我可以在哪里将两个或多个步骤合二为一,诸如此类。可能使用功能组合?
-
因为 R 是矢量化的(类似于 Python 中的 matlab 或 numpy.array),您不必遍历每个矢量中的各个元素。只要
x和y的长度相同sum((x - mean(x)) * (y - mean(y)) / sum(x - mean(x))^2其中x是一个n 长度向量,y是一个n 长度向量,你就可以直接使用你编写的没有索引的伪代码
标签: r statistics regression