从R中的lm对象绘制F分布

时间:2011-06-21 01:57:00

标签: r models

假设我们有两个变量,我们希望从中构建模型:

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分布?

2 个答案:

答案 0 :(得分:5)

如果您检查模型摘要str(summary(model))的结构,您会注意到可以通过调用summary(model)$fstatistic找到感兴趣的F分布的参数。列表中的第一个元素是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 :(得分:3)

我更喜欢以下方式来显示F分布的p值

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