[英]Fitting differential equations: how to fit a set of data to a differential equation in R
[英]How to fit a known linear equation to my data in R?
我使用線性模型來獲得最適合我的數據的 lm() 函數。 從文獻中我知道最佳擬合是斜率 = 1 和截距 = 0 的線性回歸。我想看看這個方程 (y=x) 對我的數據有多好? 我如何繼續以找到 R^2 和 p 值?
這是我的數據(y = 建模,x = 測量)
measured<-c(67.39369,28.73695,60.18499,49.32405,166.39318,222.29022,271.83573,241.72247, 368.46304,220.27018,169.92343,56.49579,38.18381,49.33753,130.91752,161.63536,294.14740,363.91029,358.32905,239.84112,129.65078,32.76462,30.13952,52.83656,67.35427,132.23034,366.87857,247.40125,273.19316,278.27902,123.24256,45.98363,83.50199,240.99459,266.95707,308.69814,228.34256,220.51319,83.97942,58.32171,57.93815,94.64370,264.78007,274.25863,245.72940,155.41777,77.45236,70.44223,104.22838,294.01645,312.42321,122.80831,41.65770,242.22661,300.07147,291.59902,230.54478,89.42498,55.81760,55.60525,111.64263,305.76432,264.27192,233.28214,192.75603,75.60803,63.75376)
modelled<-c(42.58318,71.64667,111.08853,67.06974,156.47303,240.41188,238.25893,196.42247,404.28974,138.73164,116.73998,55.21672,82.71556,64.27752,145.84891,133.67465,295.01014,335.25432,253.01847,166.69241,68.84971,26.03600,45.04720,75.56405,109.55975,202.57084,288.52887,140.58476,152.20510,153.99427,75.70720,92.56287,144.93923,335.90871,NA,264.25732,141.93407,122.80440,83.23812,42.18676,107.97732,123.96824,270.52620,388.93979,308.35117,100.79047,127.70644,91.23133,162.53323,NA ,276.46554,100.79440,81.10756,272.17680,387.28700,208.29715,152.91548,62.54459,31.98732,74.26625,115.50051,324.91248,210.14204,168.29598,157.30373,45.76027,76.07370)
現在我想看看方程 y=x 與上面提供的數據(R^2 和 p 值)的擬合程度如何?
如果有人可以幫助我解決這個(基本)問題,我將非常感激,因為我在 stackoverflow 上找不到我的問題的答案?
最好的問候西里爾
讓我們弄清楚你在這里問什么。 您有一個現有模型,即“ modelled
值是measured
值的預期值”,或者換句話說, measured = modelled + e
,其中e
是正態分布殘差。
您說“最佳擬合”應該是截距為 0 且斜率為 1 的直線,這是另一種說法。
問題是,這種“最佳擬合”並不是您實際數據的最佳擬合,我們可以通過以下方式輕松看到:
summary(lm(measured ~ modelled))
#>
#> Call:
#> lm(formula = measured ~ modelled)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -103.328 -39.130 -4.881 40.428 114.829
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 23.09461 13.11026 1.762 0.083 .
#> modelled 0.91143 0.07052 12.924 <2e-16 ***
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#>
#> Residual standard error: 55.13 on 63 degrees of freedom
#> Multiple R-squared: 0.7261, Adjusted R-squared: 0.7218
#> F-statistic: 167 on 1 and 63 DF, p-value: < 2.2e-16
這向我們展示了在減少殘差平方和方面可以對您的數據產生最佳擬合的線。
但我想你要問的是“我的數據與模型的擬合程度如何measured = modelled + e
?”
試圖強迫lm
給你一個固定的截距和斜率可能不是回答這個問題的最好方法。 請記住,斜率的 p 值只能告訴您實際斜率是否與 0 顯着不同。上述模型已經證實了這一點。 如果你想知道measured = modelled + e
的r 平方,你只需要知道由modelled
解釋的measured
方差的比例。 換句話說:
1 - var(measured - modelled) / var(measured)
#> [1] 0.7192672
這非常接近lm
調用的 r 平方。
我認為您有足夠的證據表明您的數據與模型measured = modelled
一致,因為lm
模型中的斜率包括其 95% 置信區間內的值 1,截距包含其 95% 內的值 0置信區間。
正如評論中提到的,您可以使用lm()
函數,但這實際上是為您估計斜率和截距,而您想要的是不同的東西。
如果斜率 = 1 且截距 = 0,則本質上您有一個擬合並且您的modelled
已經是預測值。 你需要這個擬合的 r 平方。 R平方定義為:
R2 = MSS/TSS = (TSS − RSS)/TSS
請參閱此鏈接以了解 RSS 和 TSS 的定義。
我們只能處理完整的觀察(非 NA)。 所以我們計算它們中的每一個:
TSS = nonNA = !is.na(modelled) & !is.na(measured)
# residuals from your prediction
RSS = sum((modelled[nonNA] - measured[nonNA])^2,na.rm=T)
# total residuals from data
TSS = sum((measured[nonNA] - mean(measured[nonNA]))^2,na.rm=T)
1 - RSS/TSS
[1] 0.7116585
如果measured
和modelled
應該代表未公開模型的實際值和擬合值,如另一個答案下面的評論中所述,那么如果fm
是該未公開模型的lm
對象,則
summary(fm)
將顯示該模型的 R^2 和 p 值。
R 平方值實際上可以僅使用measured
和modelled
來計算,但是如果未公開的模型中有或沒有截距,則公式會有所不同。 跡象是沒有截距,因為如果有截距sum(modelled - measured, an.rm = TRUE)
應該是 0 但實際上它遠非如此。
在任何情況下,R^2 和 p 值都顯示在 summary(fm) 的輸出中,其中 fm 是未公開的線性模型,因此如果您有未公開的lm
對象,則沒有必要將討論限制為measured
和modelled
模型。
例如,如果未公開的模型如下,則使用內置的CO2
數據框:
fm <- lm(uptake ~ Type + conc, CO2)
summary(fm)
我們有這個輸出,其中最后兩行顯示 R 平方和 p 值。
Call:
lm(formula = uptake ~ Type + conc, data = CO2)
Residuals:
Min 1Q Median 3Q Max
-18.2145 -4.2549 0.5479 5.3048 12.9968
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 25.830052 1.579918 16.349 < 2e-16 ***
TypeMississippi -12.659524 1.544261 -8.198 3.06e-12 ***
conc 0.017731 0.002625 6.755 2.00e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7.077 on 81 degrees of freedom
Multiple R-squared: 0.5821, Adjusted R-squared: 0.5718
F-statistic: 56.42 on 2 and 81 DF, p-value: 4.498e-16
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.