2014-02-20 81 views
0

我有兩個文件。一個文件在三個處理實驗(處理= A,B,C)中有五個「通量」觀察值。在這三種處理中,溫度已被操縱。 Flux的觀察結果是在24小時內的5個點上進行的。第二個文件(Temp)包含24小時期間三種處理的溫度。循環中的線性插值

我想用線性插值法來預測24小時內每小時的通量值。請注意,三種處理之間的插值方程將略有不同。

這可以在循環中完成,以便在Temp.csv文件中估計每小時的通量值?然後在24小時內整合(總結)這些值?

這些文件可在Dropbox的位置:Temp Data

這說明:流量和溫度之間跨越三個治療的最合適的線性關係的斜率不同:

#subset data in flux by treatment 
fluxA<-flux[which(flux$Treatment=='A'),] 
fluxB<-flux[which(flux$Treatment=='B'),] 
fluxC<-flux[which(flux$Treatment=='C'),] 

#Regression of Flux~Temperature 
modelA<-lm (Flux~Temperature, data=fluxA) 
summary (modelA) 

modelB<-lm (Flux~Temperature, data=fluxB) 
summary (modelB) 

modelC<-lm (Flux~Temperature, data=fluxC) 
summary (modelC) 

#plot the regressions 
plot (Flux~Temperature, data=fluxA,pch=16, xlim=c(0,28), ylim=c(0,20)) 
abline(modelA) 

points(Flux~Temperature, data=fluxB,pch=16, col="orange") 
abline(modelB, col="orange") 

points(Flux~Temperature, data=fluxC,pch=16, col="red") 
abline(modelC, col="red") 
+0

你並不需要一個循環。但是,從你的問題來看,你不知道你想做什麼。它看起來並不像你想插入(flux文件中沒有時間值)。相反,您似乎希望(線性)迴歸「通量〜溫度」,並預測您的臨時數據。請澄清。 – Roland

+0

這是正確的,我想用溫度來預測通量。我只認爲這必須在循環中發生,因爲三種處理的線性迴歸係數是不同的。 @Roland –

+0

此外,請注意,這只是一個很大的更大的數據集的一小部分,但如果這樣做的話,那麼處理較大的數據集應該以幾乎相同的方式工作 –

回答

1
caldat <- read.csv(text="Treatment,Temperature,Flux 
A,18.64,7.75 
A,16.02,8.49 
A,17.41,9.24 
A,21.06,4.42 
A,22.8,5.61 
B,19.73,5.7 
B,17.45,8.37 
B,19.2,5.27 
B,20.97,3.37 
B,27.6,2.26 
C,23.79,9.91 
C,15.89,15.8 
C,21.93,10.28 
C,24.79,6.33 
C,26.64,6.64 
") 

plot(Flux~Temperature, data=caldat, col=Treatment) 
mod <- lm(Flux~Temperature*Treatment, data=caldat) 
summary(mod) 
points(rep(seq(16,28, length.out=1e3),3), 
     predict(mod, newdata=data.frame(Temperature=rep(seq(16,28, length.out=1e3),3), 
             Treatment=rep(c("A", "B", "C"), each=1e3))), 
     pch=".", col=rep(1:3, each=1e3)) 

enter image description here

如果這是一個合適的「好」模型,您需要仔細考慮。使用標準迴歸診斷。

preddata <- read.csv(text="Time,A,B,C 
100,17.8,21.64,23.04 
200,17.5,21.3,22.7 
300,17.23,21,22.39 
400,16.92,20.67,22.08 
500,16.47,20.3,21.74 
600,15.78,19.75,21.24 
700,15.19,19.14,20.63 
800,14.58,18.47,20 
900,14.22,17.99,19.49 
1000,13.77,17.55,19.08 
1100,13.39,17.02,18.62 
1200,13.34,16.76,18.26 
1300,13.17,16.62,18.05 
1400,13.24,16.58,17.91 
1500,13.31,16.63,17.86 
1600,13.26,16.61,17.81 
1700,13.12,16.57,17.75 
1800,12.9,16.45,17.65 
1900,12.74,16.32,17.54 
2000,12.57,16.2,17.42 
2100,12.36,16.04,17.28 
2200,12.1,15.83,17.1 
2300,11.79,15.57,16.88 
2400,11.53,15.3,16.64 
") 

library(reshape2) 
preddata <- melt(preddata, id="Time", 
       variable.name="Treatment", value.name="Temperature") 
preddata$Flux <- predict(mod, newdata=preddata) 

plot(Flux~Time, data=preddata, col=Treatment) 

enter image description here

總通量:

aggregate(Flux ~ Treatment, data=preddata, FUN=sum) 
# Treatment  Flux 
#1   A 247.5572 
#2   B 159.6803 
#3   C 309.6186 
+0

感謝您的答案。這個預測是否獨立處理每個實驗性治療?這樣每次治療的溫度和通量之間的迴歸關係是不同的,還是僅僅是一個迴歸來估計所有治療的通量? –

+0

該模型爲每次治療估計獨立的截距和斜率。如果你沒有看到這個,你應該學習關於線性迴歸的教程。 – Roland