R中日期和一些相关输出的线性回归
Linear Regression in R for Date and some dependant output
实际上我需要使用线性回归来计算参数 theta0 和 theta1。
我的数据框 (data.1) 由两列组成,第一列是日期时间,第二列是依赖于此日期的结果。
像这样:
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:
y=data.1[[2]]
和 x=dates
无论年份如何都相似
y=data.1[[2]]
和 x=months
无论年份如何都相似
请推荐..
正如@Nicola 所说,您需要在 R
.
中使用 lm
function 进行线性回归
如果您想了解有关 linear regression
的更多信息,请查看 this or follow this tutorial
首先你必须确定你的公式。您想要使用 data.1[[2]]
和 dates
/months
计算 Theta0
和 Theta1
。
你的第一个公式应该是这样的:
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
实际上我需要使用线性回归来计算参数 theta0 和 theta1。
我的数据框 (data.1) 由两列组成,第一列是日期时间,第二列是依赖于此日期的结果。
像这样:
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:
y=data.1[[2]]
和x=dates
无论年份如何都相似y=data.1[[2]]
和x=months
无论年份如何都相似
请推荐..
正如@Nicola 所说,您需要在 R
.
中使用 lm
function 进行线性回归
如果您想了解有关 linear regression
的更多信息,请查看 this or follow this tutorial
首先你必须确定你的公式。您想要使用 data.1[[2]]
和 dates
/months
计算 Theta0
和 Theta1
。
你的第一个公式应该是这样的:
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