【问题标题】:How to plot Chow-test results in R?如何在 R 中绘制 Chow 测试结果?
【发布时间】:2020-01-05 02:53:24
【问题描述】:

我使用以下代码在 R 中运行了 Chow 测试:

mydata <- read.csv(file="chow.csv", header=TRUE, sep=",")
sctest(fuel~pred, data=mydata, type="Chow", point=44)

我能够成功获得 F 统计量和 p 值,但我想查看图表,即分割回归,您将一条曲线分成两部分(在点 44),如附图所示。

谁能告诉我R是否可以用给定的信息绘制这个图?谢谢你。 enter image description here

【问题讨论】:

  • 如果您要为mydata 提供可重现的最小数据,这将有所帮助(例如,包括dput(mydata)dput(head(mydata, 20)) 的输出)。这样我们就有了工作要做。您还应该明确包括您一直在使用的非基础 R 库。例如,我假设sctest 来自strucchange?

标签: r graph stability


【解决方案1】:

我不认为你可以用sctest 的结果来绘制它,但从你的数据中绘制它应该很容易。只需创建每个相关的线性回归,然后绘制线段。

由于您没有提供任何数据,我将使用 NHANES 包中的 NHANES 数据进行说明。

library(NHANES)
data(NHANES)
plot(Height ~ Age, data=NHANES, pch=20, col="#00000022")

在 Age=16 时,身高似乎会随着年龄的变化而发生结构性变化。 您想将完整数据上的线性模型与两个线性模型(Age 16)进行比较。所以只需生成它们并绘制它们。

## Full data
LM0 = lm(Height ~ Age, data=NHANES)
abline(LM0, col="red", type=2, lwd=3)

## Age <= 16
LM1 = lm(Height ~ Age, data=NHANES[NHANES$Age <= 16,])
y1 = predict(LM1, newdata=data.frame(Age=c(0,16)))

## Age > 16
LM2 = lm(Height ~ Age, data=NHANES[NHANES$Age > 16,])
y2 = predict(LM2, newdata=data.frame(Age=c(16,80)))

lines(x=c(0,16), y=y1, col="green", lty=3, lwd=3)
lines(x=c(16,80), y=y2, col="green", lty=3, lwd=3)

编辑

根据 cmets 中提供的数据,这里是另一个示例。至少在给出的几个点上,将这些数据分成两个模型似乎并不明显,但我选择了一个强调不同模型的划分点。

mydata =  structure(list(fuel = c(346591L, 344841L, 369015L, 346062L, 
    337494L, 355830L, 380516L, 391917L, 356761L, 359326L, 348208L, 
    358639L, 351659L, 323356L, 364712L), pred = c(346293.4, 344855.5, 
    355014.2, 342456.1, 347042.1, 371000.1, 376011.6, 391521.4, 
    364751.5, 358650, 356547.3, 355159.8, 359598.2, 349122.6, 357969.6)), 
    .Names = c("fuel", "pred"), row.names = c(NA, 15L), class = "data.frame")

plot(pred ~ fuel, data=mydata)
LM0 = lm(pred ~ fuel, data=mydata)
abline(LM0, lty=2)

LM1 = lm(pred ~ fuel, data=mydata[mydata$fuel <= 347500,])
y1  = predict(LM1, newdata=data.frame(fuel=c(320000,347500)))
lines(c(320000,350000), y1, lty=3)

LM2 = lm(pred ~ fuel, data=mydata[mydata$fuel >  347500,])
y2  = predict(LM2, newdata=data.frame(fuel=c(347500,395000)))
lines(c(350000,395000), y2, lty=3)

【讨论】:

  • 谢谢两位。请允许我提供一些数据。 Dput(头部(MyData,15))结构(列表(燃料= C(346591L,344841L,369015L,3555830L,380516L,355830L,356761L,359326L,328208L,358639L,351659L,323356L,364712L),PEAT = C(346293.4,344855.5,3005014.2,342456.1,347042.1,301000.1,346011.6,3191521.4,364751.5,3008650,356547.3,355159.8,359598.2,3012.6,357969.6),.names = C(“燃料”,“Pred”),行。 names = c(NA, 15L), class= "data.frame") 不过,不确定“L”是什么意思。
猜你喜欢
  • 2016-04-22
  • 2011-10-13
  • 1970-01-01
  • 2017-09-09
  • 2014-08-18
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
相关资源
最近更新 更多