首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑回归的代码错误

逻辑回归的代码错误
EN

Stack Overflow用户
提问于 2012-05-07 07:11:02
回答 1查看 557关注 0票数 2

我正在使用PopulationGrowth.csv编写以下脚本:

代码语言:javascript
复制
dat <-read.csv("/Path/PopulationGrowth.csv")
class = "data.frame", row.names=c(NA,-16L)
m1 <- nls(pop~SSlogis(Year,asym,xmid,scal),data=dat)
par(las=1,bty="l",mar=c(5,6,2,2)+0.1)  ## graphics tweaks
with(dat,plot(CentralOakland~Year,ylab=""))
mtext("Population",side=2,las=0,line=4)
yearvec <- 1940:2010
lines(yearvec,predict(m1,newdata=data.frame(Year=yearvec)))

在最后一行之后,我得到以下错误:

代码语言:javascript
复制
Error in predict(m1, newdata = data.frame(Year = yearvec)) : object 'm1' not found

以下是我正在处理的数据:

代码语言:javascript
复制
Year CentralOakland
1940 7852 
1950 8452
1960 6701
1970 6135
1980 5872
1990 5406
2000 5281
2010 6086

我还试图预测未来30年的人口趋势。有理由相信,在未来30年内,人口将会增加。需要什么函数来预测这一点?

请耐心听我说,我是新来R的。

EN

回答 1

Stack Overflow用户

发布于 2012-05-07 07:45:59

这里有一些小故障:

  • 你还没有给我们一个可重复的例子:http://tinyurl.com/reproducible-000 ...
  • 你可能想要read.csv而不是quartz=(title...)不知道quartz=(title...)在做什么。也许是quartz(title=...)?在任何情况下,使用plot()应该自动打开一个新的图形窗口
  • 使用attach通常是一个不好的主意
  • 使用lines而不是curve来添加新的(例如)将预测数据设置为绘图。对于线性回归的特定情况(参见下一点),您可以使用abline.
  • by来解决最重要的问题:您在这里所做的是而不是逻辑回归--它使用glm来拟合普通的线性模型(最小二乘回归),这也可以通过lm()更容易地实现。逻辑回归将使用family=binomial而不是family=gaussian。此外,逻辑回归是针对二元响应变量的,因此它不太可能适合于对中奥克兰的人口进行建模。我怀疑你混淆了逻辑回归和逻辑增长曲线--

下面是一些修改后的代码:

代码语言:javascript
复制
dat <- read.csv("/Path/PopulationGrowth.csv")
with(dat,plot(Year,CentralOakland,xlab="Year",ylab="Population",
  main="Central Oakland Population vs. Year"))
g <- lm(CentralOakland~Year,data=dat)
abline(g)
## OR
yearvec <- seq(min(Year),max(Year),length=51)
lines(yearvec,predict(g,newdata=data.frame(Year=yearvec),type="response"))

另一方面,也许这才是你真正想做的(你没有给我们数据,所以我去维基百科找了一些……)

代码语言:javascript
复制
## from http://en.wikipedia.org/wiki/Oakland,_California
dat <- structure(list(year = c(1860L, 1870L, 1880L, 1890L, 1900L, 1910L, 
1920L, 1930L, 1940L, 1950L, 1960L, 1970L, 1980L, 1990L, 2000L, 
2010L), pop = c(1543L, 10500L, 34555L, 48682L, 66960L, 150174L, 
216261L, 284063L, 302163L, 384575L, 367548L, 361561L, 339337L, 
372242L, 399484L, 390724L)), .Names = c("year", "pop"), 
  class = "data.frame", row.names = c(NA,-16L))

配件:

代码语言:javascript
复制
## SSlogis() is a "self-starting" logistic
m1 <- nls(pop~SSlogis(year,asym,xmid,scal),
          data=dat)

绘图:

代码语言:javascript
复制
par(las=1,bty="l",mar=c(5,6,2,2)+0.1)  ## graphics tweaks
with(dat,plot(pop~year,ylab=""))
## add y-label separately 
mtext("population",side=2,las=0,line=4)
yearvec <- 1860:2010
lines(yearvec,predict(m1,newdata=data.frame(year=yearvec)))

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10475061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档