関数 sapply を使用して for ループを書き換え、ヒステリシス温度と汚染物質の影響のグラフを描画します。

For ループは、R 言語で使用する最も一般的なループです。利点はシンプルで使いやすいことですが、欠点は、特に比較的大量のデータを含むデータを実行する場合に遅いことです。apply ファミリ関数は C++ で書かれており、非常に高速に実行され、for ループの置き換えに非常に適しています。今日はforループを書き換えてヒステリシス温度と汚染物質の影響図を描くsapply関数を紹介します。
まずデータと R パッケージをインポートします

library(mgcv)
library(splines)
library(tsModel)
bc<-read.csv("E:/r/test/chicago.csv",sep=',',header=TRUE)

ここに画像の説明を挿入
こちらは1987年から2000年までのアメリカ・シカゴの大気汚染と死亡者数のデータです(公式アカウントからの返信:シカゴ2、データが取得可能です)、まずはデータの構成を見てみましょう、死亡:死亡者数(あたり) day)、pm10: 大気汚染物質 pm10 の中央値、pm25median、o3median: 二酸化硫黄の中央値、time: 日数、これが現在の時刻、tmpd: 華氏温度、date: 日付温度差と死亡率を 2 週間以内に調査
ヒステリシス関係、ループを記述する必要があります
最初にベクトルと null 値を生成し、後でループを実行します

maxlag <- 0:13
b<-NULL
for (i in maxlag) {
    
    
  fit <- glm(death~pm10 + Lag(temp,seq(0, i)), data = bc, family = poisson)
  summ <- summary(fit)
  summ.coef <- summ$coefficients["pm10",2]
  c(coef(fit)["pm10"], summ.coef)
  a<-rbind(coef(fit)["pm10"],summ.coef)
  b<-cbind(b,a)
}
models<-b

ここに画像の説明を挿入
このようにして、2週間の温度履歴が死亡率に及ぼす影響に関するデータが出てきたので、グラフを描きます

rng <- range(models[1, ] - 1.96*models[2,], models[1, ] + 1.96*models[2,], 0)
par(mar = c(4, 5, 1, 1))
plot(maxlag, models[1, ], type = "b",pch = 20, ylim = rng, xlab = "Maximum temperature lag",
     ylab = expression(hat(beta)*" for "* PM[10]*" at lag 1"))
lines(maxlag, models[1, ] + 1.96*models[2, ], lty = 2)
lines(maxlag, models[1, ] - 1.96*models[2,], lty = 2)
abline(h = 0, lty = 3)

ここに画像の説明を挿入
このようにして、温度履歴と死亡率の関係の影響曲線が出てきます。次にsapply関数を使ってこのforループを書き換えますが、
まずこのforループを説明するプログラムを書く必要があります。

function(mlag) {
    
    
  fit <- glm(death~pm10 + Lag(temp,seq(0, mlag)), data = bc, family = poisson)
  summ <- summary(fit)
  summ.coef <- summ$coefficients["pm10",2]
  c(coef(fit)["pm10"], summ.coef)
  }

書いたらsapply関数を使ってまとめます

models <- sapply(maxlag, function(mlag) {
    
    
  fit <- glm(death~pm10 + Lag(temp,seq(0, mlag)), data = bc, family = poisson)
  summ <- summary(fit)
  summ.coef <- summ$coefficients["pm10",2]
  c(coef(fit)["pm10"], summ.coef)
  })

2 つのループによって生成されたモデル関数はまったく同じです
ここに画像の説明を挿入
。最終的な描画も同じです。データが小さいため、違いがわかりません。大規模なデータは明らかに動作が異なります。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/dege857/article/details/129399361