You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用dunif()函数执行线性回归?求解无结果异常

问题原因与修正方案

你的核心问题是混淆了R语言中分布密度函数和随机数生成函数:

  • dunif()是计算均匀分布的概率密度值,不是生成均匀分布随机数
  • dnorm()是计算正态分布的概率密度值,不是生成正态分布随机数

当你传入n=1000时,这两个函数只返回了x=1000处的密度值,所以x和e都是长度为1的向量,最终y也只有1个数据点。线性回归需要至少2个数据点才能计算自由度,因此出现了残差自由度为0的报错。

修正后的代码

把生成随机数的函数换成对应的r开头函数:

set.seed(69)
n <- 1000
e <- rnorm(n, 0, 0.1)  # 生成n个均值0、标准差0.1的正态随机数
x <- runif(n, 0, 1)    # 生成n个0到1之间的均匀随机数

y = 5*x + e
fit <- lm(y ~ x)
summary(fit)

预期输出示例

运行后你会得到类似这样的结果(因set.seed固定了随机数,结果可复现):

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.3179 -0.0667  0.0012  0.0692  0.3210 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.00129    0.00606  -0.213    0.831    
x            5.00527    0.01050  476.75   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.0994 on 998 degrees of freedom
Multiple R-squared:  0.9959,	Adjusted R-squared:  0.9959 
F-statistic: 2.273e+05 on 1 and 998 DF,  p-value: < 2.2e-16

可以看到x的系数接近设定的5,截距接近0,回归结果有效。

新手提示

R语言中分布相关函数分四类,开头字母对应不同功能:

  • d:计算概率密度(连续分布)或概率质量(离散分布)
  • p:计算累积分布概率
  • q:计算分位数
  • r:生成指定分布的随机数

以后生成随机数记得用r开头的函数。

内容的提问来源于stack exchange,提问作者philipp jacober

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:45:32