2011-06-21 137 views
3

的F分佈假設我們有我們希望從建立模型兩個變量:情節從LM對象中的R

set.seed(10239) 
x <- rnorm(seq(1,100,1)) 
y <- rnorm(seq(1,100,1)) 
model <- lm(x~y) 

class(model) 
# [1] "lm" 

summary(model) 
# 
# Call: 
# lm(formula = x ~ y) 
# 
# Residuals: 
#  Min  1Q Median  3Q  Max 
# -3.08676 -0.63022 -0.01115 0.75280 2.35169 
# 
# Coefficients: 
#    Estimate Std. Error t value Pr(>|t|) 
# (Intercept) -0.07188 0.11375 -0.632 0.529 
# y   0.06999 0.12076 0.580 0.564 
# 
# Residual standard error: 1.117 on 98 degrees of freedom 
# Multiple R-squared: 0.003416, Adjusted R-squared: -0.006754 
# F-statistic: 0.3359 on 1 and 98 DF, p-value: 0.5635 

你如何繪製model對象的F-分佈?

回答

5

如果您檢查模型str(summary(model))的摘要結構,您會注意到感興趣的F分佈參數可以通過調用summary(model)$fstatistic找到。列表中的第一個元素是F統計量,下面的兩個元素是分子自由度和分母自由度,按照這個順序。因此,要繪製F分佈,嘗試像下面

df <- summary(model)$fstatistic 
curve(df(x, df1 = df[2], df2 = df[3]), from = 0, to = 100) 

東西或者,你也可以從模型本身感興趣的F-分佈的參數。分子的自由度比模型中的係數數少一個,分母的自由度就是觀測總數少於模型中係數數的一倍。

df1 <- length(model$coefficients) - 1 
df2 <- length(model$residuals) - df1 - 1 
curve(df(x, df1 = df1, df2 = df2), from = 0, to = 100) 
+1

一對夫婦的意見的p值:1)'df2'可以使用'DF來計算。剩餘(模型)',ii)在一般情況下,應該謹慎從事一個模型的殘差,而不是使用提取函數。在一個模型有多種殘差的情況下,'$ residuals'可能包含工作殘差(例如'glm()'),這很少會成爲你想要的,而resid(模型)會返回不同的東西,比工作殘差。用於顯示'curve()'的+1。 –

+0

令人困惑的是您調用F統計變量'df',因爲這也是您使用的函數的名稱。將明確使用替代名稱,如'fs'。同樣值得注意的是,曲線函數的第一個參數是一個表達式,所以'df'中的'x'與模型中的'x'不一樣。仍然很好地使用曲線+1。 – James

3

我更喜歡下面的方式來展現F分佈

fstat <- summary(model)$fstatistic 

library(HH) 
old.omd <- par(omd=c(.05,.88, .05,1)) 
F.setup(df1=fstat['numdf'], df2=fstat['dendf']) 
F.curve(df1=fstat['numdf'], df2=fstat['dendf'], col='blue') 
F.observed(fstat['value'], df1=fstat['numdf'], df2=fstat['dendf']) 
par(old.omd) 

enter image description here