标签: linear-regression

如何用scikit-learn做高斯/多项式回归?

scikit-learn是否提供使用高斯或多项式内核进行回归的工具?我查看了API,但我没有看到.有人在scikit之上构建了一个包 - 学习这样做吗?

machine-learning linear-regression scikit-learn

8
推荐指数
2
解决办法
1万
查看次数

为什么我的线性回归拟合线看起来不对?

我已经绘制了一个二维直方图,我可以用线,点等添加到图中.现在我试图在密集点的区域应用线性回归拟合,但是我的线性回归线似乎完全偏离它的位置应该?为了证明这里是我左边的情节,有一个低回归拟合和线性拟合.

lines(lowess(na.omit(a),na.omit(b),iter=10),col='gray',lwd=3)

abline(lm(b[cc]~a[cc]),lwd=3)
Run Code Online (Sandbox Code Playgroud)

这里a和b是我的值,cc是最密集部分内的点(即大多数点在那里),红色+黄色+蓝色.

在此输入图像描述

为什么我的回归线看起来不像右边那样(手绘合身)?如果我正在绘制一条最合适的线,它会在那里吗?

我有很多类似的情节,但我仍然得到相同的结果....

在此输入图像描述

是否有任何替代线性回归拟合对我来说可能更好?

r scatter-plot linear-regression best-fit

8
推荐指数
1
解决办法
1796
查看次数

R - 强制某个参数在lm()中具有正系数

我想知道如何约束某些参数lm()以获得正系数.有一些包或函数(例如display)可以使所有系数和拦截为正.

例如,在这个例子中,我只想强迫x1x2具有正系数.

    x1=c(NA,rnorm(99)*10)
    x2=c(NA,NA,rnorm(98)*10)
    x3=rnorm(100)*10
    y=sin(x1)+cos(x2)-x3+rnorm(100)

    lm(y~x1+x2+x3)

    Call:
      lm(formula = y ~ x1 + x2 + x3)       
    Coefficients:
      (Intercept)           x1           x2           x3  
    -0.06278      0.02261     -0.02233     -0.99626
Run Code Online (Sandbox Code Playgroud)

我试过功能nnnpls()nnls,它可以轻松控制系数符号.遗憾的是,由于数据中的NA问题,我无法使用它,因为此函数不允许NA.

我看到函数NA可用于应用约束但我无法使其工作.

有人能让我知道我该怎么办?

regression r linear-regression lm glm

8
推荐指数
1
解决办法
6899
查看次数

采用plm包装的重量

我的数据框如下所示:

unique.groups<- letters[1:5]
unique_timez<- 1:20
groups<- rep(unique.groups, each=20)
my.times<-rep(unique_timez, 5)

play.data<- data.frame(groups, my.times, y= rnorm(100), x=rnorm(100), POP= 1:100)
Run Code Online (Sandbox Code Playgroud)

我想运行以下加权回归:

plm(y~x + factor(my.times) , 
data=play.data, 
index=c('groups','my.times'), model='within', weights= POP)
Run Code Online (Sandbox Code Playgroud)

但我不相信plm包允许重量.答案我正在寻找下面模型中的系数:

fit.regular<- lm(y~x + factor(my.times) + factor(my.groups),
weights= POP, data= play.data)
desired.answer<- coefficients(fit.regular)
Run Code Online (Sandbox Code Playgroud)

但是,我正在寻找plm包的答案,因为使用更大的数据集和许多组获得带有plm的估计器的系数要快得多.

r linear-regression panel-data plm

8
推荐指数
1
解决办法
1427
查看次数

R中的lm函数不给出分类数据中所有因子水平的系数

我正在尝试使用分类属性对R进行线性回归,并观察到我没有得到每个不同因子水平的系数值.

请参阅下面的代码,我有状态的5个因子级别,但只能看到4个系数值.

> states = c("WA","TE","GE","LA","SF")
> population = c(0.5,0.2,0.6,0.7,0.9)
> df = data.frame(states,population)
> df
  states population
1     WA   0.5
2     TE   0.2
3     GE   0.6
4     LA   0.7
5     SF   0.9
> states=NULL
> population=NULL
> lm(formula=population~states,data=df)

Call:
lm(formula = population ~ states, data = df)

Coefficients:
(Intercept)     statesLA     statesSF     statesTE     statesWA  
        0.6          0.1          0.3         -0.4         -0.1
Run Code Online (Sandbox Code Playgroud)

我还通过执行以下操作尝试使用更大的数据集,但仍然看到相同的行为

for(i in 1:10)
{
    df = rbind(df,df)
}
Run Code Online (Sandbox Code Playgroud)

编辑:感谢eipi10,MrFlick和经济的回应.我现在明白其中一个级别被用作参考级别.但是当我得到一个状态值为"GE"的新测试数据时,如何用等式y = m1x1 + m2x2 + ... + c代替?

我也尝试将数据展平,使得每个因子级别都得到它的单独列,但是对于其中一个列,我得到NA作为系数.如果我有一个状态为'WA'的新测试数据,我怎样才能获得'人口价值'?我用什么代替它的系数?

> df1 …
Run Code Online (Sandbox Code Playgroud)

r linear-regression lm

8
推荐指数
1
解决办法
1万
查看次数

在R中提取回归P值

我在查询文件中的不同列上执行多次回归.我的任务是从R中的回归函数lm中提取某些结果.

到目前为止,我有,

> reg <- lm(query$y1 ~ query$x1 + query$x2)
> summary(reg)

Call:
lm(formula = query$y1 ~ query$x1 + query$x2)

Residuals:
    1     2     3     4 
  7.68 -4.48 -7.04  3.84 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  1287.26     685.75   1.877    0.312
query$x1      -29.30      20.92  -1.400    0.395
query$x2     -116.90      45.79  -2.553    0.238

Residual standard error: 11.97 on 1 degrees of freedom
Multiple R-squared:  0.9233,    Adjusted R-squared:  0.7699 
F-statistic: 6.019 on 2 and 1 DF,  p-value: 0.277
Run Code Online (Sandbox Code Playgroud)

要提取系数,r平方和F统计,我使用以下内容:

reg$coefficients
summary(reg)$r.squared
summary(reg)$fstatistic
Run Code Online (Sandbox Code Playgroud)

我想提取0.2值的p值. …

r linear-regression p-value

8
推荐指数
3
解决办法
1万
查看次数

使用多变量多项式的特征映射

考虑一下我们有一个数据矩阵 数据点 我们有兴趣将这些数据点映射到更高维度的特征空间.我们可以通过使用d次多项式来做到这一点.因此对于一系列 数据指向新的数据矩阵

我研究了一个相关的脚本(Andrew Ng.在线课程),它将二维数据点转换为更高的特征空间.但是,我无法想出一种在任意高维样本中推广的方法,.这是代码:

d = 6;
m = size(D,1); 
new = ones(m);
for k = 1:d
    for l = 0:k
        new(:, end+1) = (x1.^(k-l)).*(x2.^l);
    end
end
Run Code Online (Sandbox Code Playgroud)

我们可以矢量化这段代码吗?还给出了数据矩阵 你能否就如何使用d维多项式将任意维度的数据点转换为更高维数的方法提出建议?

PS:d维数据点的推广将非常有用.

mapping matlab machine-learning octave linear-regression

8
推荐指数
1
解决办法
2976
查看次数

plot.lm()如何确定残差与拟合图的异常值?

plot.lm()如何确定残差与拟合图的哪些点是异常值(即标记的内容)?我在文档中找到的唯一一件事是:

细节

sub.caption-默认情况下,函数调用 - 在每个绘图上显示为副标题(在x轴标题下),当绘图位于不同页面上时,或者当有多个绘图时作为外边距中的副标题(如果有)每页.

'Scale-Location'图也称为'Spread-Location'或'S-L'图,它采用绝对残差的平方根来减小偏度(sqrt(| E |))比| | E | 对于高斯零均值E).

'S-L',QQ和剩余杠杆图使用具有相同方差的标准化残差(在假设下).它们以R [i] /(s*sqrt(1-h.ii))给出,其中h.ii是帽子矩阵的对角线条目,影响()$ hat(另见帽子),以及残差 - 杠杆图使用R [i]的标准化Pearson残差(residuals.glm(type ="pearson")).

Residual-Leverage图显示Cook的距离等于Cook.levels的值(默认为0.5和1),并省略带有警告的杠杆的情况.如果杠杆率是恒定的(通常是在平衡的aov情况下的情况),则该图使用因子水平组合而不是x轴的杠杆作用.(因子水平按平均拟合值排序.)

在Cook的距离与杠杆/(1-leverage)图中,幅度相等的标准化残差的轮廓是通过原点的线.轮廓线标有大小.

但它没有说明如何生成残差与拟合图以及如何选择要标记的点.

更新:Zheyuan Li的回答表明,残差与拟合图标点的方式实际上只是通过查看残差最大的3个点.确实如此.它可以通过以下"极端"示例来证明.

x = c(1,2,3,4,5,6)
y = c(2,4,6,8,10,12)
foo = data.frame(x,y)
model = lm(y ~ x, data = foo)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

plot regression r linear-regression lm

8
推荐指数
1
解决办法
1770
查看次数

沿线性回归线绘制条件密度曲线"P(Y | X)"

这是我的数据框,有两列Y(响应)和X(协变量):

## Editor edit: use `dat` not `data`
dat <- structure(list(Y = c(NA, -1.793, -0.642, 1.189, -0.823, -1.715, 
    1.623, 0.964, 0.395, -3.736, -0.47, 2.366, 0.634, -0.701, -1.692, 
    0.155, 2.502, -2.292, 1.967, -2.326, -1.476, 1.464, 1.45, -0.797, 
    1.27, 2.515, -0.765, 0.261, 0.423, 1.698, -2.734, 0.743, -2.39, 
    0.365, 2.981, -1.185, -0.57, 2.638, -1.046, 1.931, 4.583, -1.276, 
    1.075, 2.893, -1.602, 1.801, 2.405, -5.236, 2.214, 1.295, 1.438, 
    -0.638, 0.716, 1.004, -1.328, -1.759, -1.315, 1.053, 1.958, -2.034, 
    2.936, -0.078, -0.676, -2.312, …
Run Code Online (Sandbox Code Playgroud)

plot regression r linear-regression lm

8
推荐指数
1
解决办法
412
查看次数

使用group by和tidy运行多个模型并将结果提取到数据帧

我想group_by %>% do(tidy(*))用来运行几个线性回归模型,并将模型结果提取到数据框.每个模型的数据框应包括以下内容:结果变量,暴露变量,样本大小,β系数,SE和p值.

library(tidyverse)
data("mtcars")
outcomes <- c("wt, mpg", "hp", "disp")
exposures <- c("gear", "vs", "am")
covariates <- c("drat", "qsec")
Run Code Online (Sandbox Code Playgroud)

模型应该针对所有协变量调整每次曝光的每个结果,例如

lm(wt ~ factor(gear)+drat+qsec, mtcars, na.action = na.omit)
lm(wt ~ factor(vs)+drat+qsec, mtcars, na.action = na.omit)
etc...
Run Code Online (Sandbox Code Playgroud)

最终的代码可能看起来像这样?

models <- (mtcars %>%
gather(x_var, x_value, -c(y_var, y_i, cv1:cv3)) %>%
group_by(y_var, x_var) %>%
do(broom::tidy(lm(y_i ~ x_value + cv1 + cv2 + cv3, data = .))))
Run Code Online (Sandbox Code Playgroud)

r data-manipulation linear-regression

8
推荐指数
1
解决办法
157
查看次数