2011-06-21 61 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