2

PopulationGrowth.csv を使用して次のスクリプトを作成しています。

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)))

最後の行の後、次のエラーが表示されます。

Error in predict(m1, newdata = data.frame(Year = yearvec)) : object 'm1' not found

これが私が扱っているデータです:

Year CentralOakland
1940 7852 
1950 8452
1960 6701
1970 6135
1980 5872
1990 5406
2000 5281
2010 6086

また、今後 30 年間の人口動向を予測しようとしています。今後 30 年間で人口が増加すると信じるに足る理由があります。これを予測するために必要な関数は何ですか?

我慢してください、私はRの初心者です。

4

1 に答える 1

6

ここにはいくつかの小さな不具合があります。

  • あなたは再現可能な例を私たちに与えていません:例えばhttp://tinyurl.com/reproducible-000を参照してください...
  • あなたはread.csvおそらくread.table
  • 何をしているのかわかりませんquartz=(title...)。たぶんquartz(title=...)?いずれにせよ、を使用plot()すると、新しいグラフィックス ウィンドウが自動的に開きます。
  • を使用するattachことはしばしば悪い考えです
  • 新しい(たとえば)予測データセットをプロットに追加するのlinesではなく、使用してください。curve線形回帰の特定のケース (次のポイントを参照) では、 を使用できますabline
  • 最も重要なこと: ここで行っていることは、ロジスティック回帰ではありませんglm。通常の線形モデル (最小二乗回帰) に適合させるために使用していlm()ます。ロジスティック回帰では、family=binomialではなくを使用しますfamily=gaussian。さらに、ロジスティック回帰はバイナリ応答変数を対象としているため、中央オークランドの人口をモデル化するのに適している可能性は低いです...ロジスティック回帰とロジスティック成長曲線を混同していると思われます...

修正されたコードを次に示します。

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"))

一方で、これはあなたが本当にやりたかったことかもしれません (データを提供してくれなかったので、ウィキペディアに行っていくつか入手しました ...)

## 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))

フィッティング:

## SSlogis() is a "self-starting" logistic
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(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)))

ここに画像の説明を入力

于 2012-05-06T23:45:59.473 に答える