2015-10-18 84 views
1

其实我需要使用线性回归来计算参数theta0和theta1。 我的数据框(data.1)由两列组成,第一个是日期时间,第二个是依赖于此日期的结果。
像这样:R中日期和一些相关输出的线性回归

 data.1[[1]] data.1[[2]] 
2004-07-08 14:30:00  12.41 

现在,我有它迭代的次数来计算参数theta0这段代码,theta1

x=as.vector(data.1[[1]]) 
y=as.vector(data.1[[2]]) 

plot(x,y) 

theta0=10 
theta1=10 
alpha=0.0001 
initialJ=100000 
learningIterations=200000 

J=function(x,y,theta0,theta1){ 
m=length(x) 
sum=0 
for(i in 1:m){ 
    sum=sum+((theta0+theta1*x[i]-y[i])^2) 
} 
sum=sum/(2*m) 
return(sum) 
} 

updateTheta=function(x,y,theta0,theta1){ 
sum0=0 
sum1=0 
m=length(x) 
for(i in 1:m){ 
    sum0=sum0+(theta0+theta1*x[i]-y[i]) 
    sum1=sum1+((theta0+theta1*x[i]-y[i])*x[i]) 
} 
sum0=sum0/m 
sum1=sum1/m 
theta0=theta0-(alpha*sum0) 
theta1=theta1-(alpha*sum1) 
return(c(theta0,theta1)) 
}     

for(i in 1:learningIterations){ 
thetas=updateTheta(x,y,theta0,theta1) 
tempSoln=0 
tempSoln=J(x,y,theta0,theta1) 
if(tempSoln<initialJ){ 
    initialJ=tempSoln 
} 
if(tempSoln>initialJ){ 
    break 
} 
theta0=thetas[1] 
theta1=thetas[2] 
#print(thetas) 
#print(initialJ) 
plot(x,y) 
lines(x,(theta0+theta1*x), col="red") 
    } 
    lines(x,(theta0+theta1*x), col="green") 

现在我想用计算theta0和theta1以下情况:

  1. y=data.1[[2]]x=dates wh ICH是相似的,不论今年
  2. y=data.1[[2]]x=months这是类似当年

请建议不论..

+2

在'R'线性回归通过'lm'功能实现。有关详细信息,请参阅'?lm'。 – nicola

+0

@Mohit如果我的回答对你有帮助,请将其标记为已接受:) – Bas

回答

3

正如@Nicola说,你需要使用lm function线性回归的R
如果您想了解更多关于linear regression退房this或跟随this tutorial

首先你必须确定你的公式。你想使用data.1[[2]]dates/months来计算Theta0Theta1

你的第一个公式将是沿着线的东西:

formula <- Theta0 ~ data.1[[2]] + dates 

,那么你会创建linear model

variablename <- lm(formula, dataset) 

这之后,您可以使用各种计算输出。
例如,你可以计算方差,或只是打印摘要:

anova(variablename) 
summary(variablename) 

旁注:
我注意到您使用=分配变量。这不是推荐的括号。欲了解更多信息,请查看Google's R Style Guide
R将优先使用<-来分配变量。
以你的代码的第一位,它会成为:

x <- as.vector(data.1[[1]]) 
y <- as.vector(data.1[[2]]) 

plot(x,y) 

theta0 <- 10 
theta1 <- 10 
alpha <- 0.0001 
initialJ <- 100000 
learningIterations <- 200000 
+1

'='作业不是“错误”是一种风格选择,甚至可能成为Mohit工作风格指南的一部分。 – hrbrmstr

+0

@Hrbrmstr,编辑它:) – Bas